/************************************************************************ ** ** @file vbank.h ** @author Roman Telezhynskyi ** @date 11 1, 2015 ** ** @brief ** @copyright ** This source code is part of the Valentine project, a pattern making ** program, whose allow create and modeling patterns of clothing. ** Copyright (C) 2013-2015 Valentina project ** All Rights Reserved. ** ** Valentina is free software: you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** ** Valentina is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Valentina. If not, see . ** *************************************************************************/ #ifndef VBANK_H #define VBANK_H #include #include #include class QPointF; class VLayoutDetail; enum class Cases : char { CaseThreeGroup, CaseTwoGroup, CaseDesc}; class VBank { public: VBank(); qreal GetLayoutWidth() const; void SetLayoutWidth(const qreal &value); void SetDetails(const QVector &details); int GetTiket(); VLayoutDetail GetDetail(int i) const; void Arranged(int i); void NotArranged(int i); bool Prepare(); void Reset(); void SetCaseType(Cases caseType); int AllDetailsCount() const; int LeftArrange() const; int ArrangedCount() const; QRectF GetBiggestBoundingRect() const; private: Q_DISABLE_COPY(VBank) QVector details; QHash unsorted; QHash big; QHash middle; QHash small; qreal layoutWidth; Cases caseType; bool prepare; QRectF boundingRect; void PrepareGroup(); void PrepareThreeGroups(); void PrepareTwoGroups(); void PrepareDescGroup(); int GetNextThreeGroups() const; int GetNextTwoGroups() const; int GetNextDescGroup() const; void SqMaxMin(qint64 &sMax, qint64 &sMin) const; void BiggestBoundingRect(); }; #endif // VBANK_H