/************************************************************************ ** ** @file vbank.h ** @author Roman Telezhynskyi ** @date 11 1, 2015 ** ** @brief ** @copyright ** This source code is part of the Valentina 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 #include #include #include #include "../vmisc/typedef.h" #include "vlayoutpiece.h" #include "vlayoutdef.h" // An annoying char define, from the Windows team in // #define small char // http://stuartjames.info/Journal/c--visual-studio-2012-vs2012--win8--converting-projects-up-some-conflicts-i-found.aspx #if defined (Q_OS_WIN) && defined (Q_CC_MSVC) #pragma push_macro("small") #undef small #endif Q_DECLARE_LOGGING_CATEGORY(lBank) class VBank { Q_DECLARE_TR_FUNCTIONS(VBank) // NOLINT public: VBank(); auto GetLayoutWidth() const -> qreal; void SetLayoutWidth(qreal value); auto GetManualPriority() const -> bool; void SetManualPriority(bool value); auto IsNestQuantity() const -> bool; void SetNestQuantity(bool value); void SetDetails(const QVector &details); auto GetNext() -> int; auto GetDetail(int i) const -> VLayoutPiece; void Arranged(int i); void NotArranged(int i); auto PrepareUnsorted() -> bool; auto PrepareDetails() -> bool; void Reset(); void SetCaseType(Cases caseType); auto AllDetailsCount() const -> vsizetype; auto LeftToArrange() const -> vsizetype; auto FailedToArrange() const -> vsizetype; auto GetBiggestDiagonal() const -> qreal; auto IsRotationNeeded() const -> bool; private: Q_DISABLE_COPY_MOVE(VBank) // NOLINT QVector details{}; QMap> unsorted{}; QMap> big{}; QMap> middle{}; QMap> small{}; QMap> desc{}; QVector groups{}; QVector arranged{}; qreal layoutWidth{0}; Cases caseType{Cases::CaseDesc}; bool prepare{false}; qreal diagonal{0}; bool m_nestQuantity{false}; bool m_manualPriority{false}; void PrepareGroup(); void PrepareThreeGroups(uint priority); void PrepareTwoGroups(uint priority); void PrepareDescGroup(uint priority); auto GetNextThreeGroups(uint priority) const -> int; auto GetNextTwoGroups(uint priority) const -> int; auto GetNextDescGroup(uint priority) const -> int; void SqMaxMin(qint64 &sMax, qint64 &sMin, uint priority) const; auto ArrangedDetail(QMap> &container, int i) -> bool; auto ArrangedDetail(QMap> &container, int i) -> bool; }; #if defined (Q_OS_WIN) && defined (Q_CC_MSVC) #pragma pop_macro("small") #endif #endif // VBANK_H