/* ColorCode, a free MasterMind clone with built in solver * Copyright (C) 2009 Dirk Laebisch * http://www.laebisch.com/ * * ColorCode 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. * * ColorCode 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 ColorCode. If not, see . */ #ifndef PEGROW_H #define PEGROW_H #include #include #include #include #include #include #include #include "colorcode.h" class ColorPeg; class PegRow : public QObject, public QGraphicsItem { Q_OBJECT Q_INTERFACES(QGraphicsItem) public: PegRow(QObject* parent = 0); ~PegRow(); int GetIx() const; bool IsActive() const; int GetPegCnt() const; ColorPeg** GetPegs(); std::vector GetSolution() const; void SetIx(const int ix); void SetPegCnt(const int pegcnt); void SetGameMode(const int gamemode); void SetActive(const bool b); bool SnapCP(ColorPeg* cp); void ForceSnap(ColorPeg* cp, int posix); void RemovePeg(ColorPeg* cp); void CloseRow(); void OpenRow(); void ClearRow(); void Reset(const int pegcnt, const int gamemode); void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget); QRectF boundingRect() const; QPainterPath shape() const; signals: void RowSolutionSignal(int ix); void RemovePegSignal(ColorPeg* cp); protected: std::vector mSolution; QColor mPend; QColor mPenl; QColor mGrad0; QColor mGrad1; bool mIsActive; bool mSolved; int mIx; int mPegCnt; int mGameMode; int mXOffs; virtual void SetXOffs(); void CheckSolution(); ColorPeg** mColorPegs; QRectF outlineRect() const; }; #endif // PEGROW_H