--- queensgui/src/board.cpp 2007/07/19 23:36:33 3 +++ queensgui/src/board.cpp 2007/07/19 23:44:01 4 @@ -27,28 +27,34 @@ Board::Board(QWidget *parent, const char *name) : QWidget(parent, name) { - m_hasData = false; + m_sol = NULL; } Board::~Board() { + if (m_sol != NULL) + delete m_sol; } -void Board::setMatrix(Solution sol) +void Board::setMatrix(Solution* sol) { - m_hasData = true; - m_sol = sol; + if (sol != NULL) + m_sol = sol->copy(); + this->repaint(true); } void Board::setMatrix(IntSolution sol) { +#warning need a closer look +/* m_hasData = true; m_sol = Solution(); for (int i=0;irepaint(true); +*/ } @@ -60,12 +66,12 @@ p.drawLine(i*30, 0, i*30, m_size*30); } - if (m_hasData) { + if (m_sol != NULL) { QBrush brush( black); p.setBrush( brush ); for (int i=0; igetMatrix(i,j)) p.drawPie( (i*30)+10, (j*30)+10, 10, 10 ,0, 16*360); } } @@ -92,7 +98,7 @@ starty = stopy = y; startx = stopx = x; - // første skrå linie + // f�rste skr� linie while (startx > 0 && starty > 0) { startx--; starty--; @@ -104,7 +110,7 @@ } p.drawLine(QPoint( (startx*30)+5, (starty*30)+5), QPoint( (stopx*30)+25, (stopy*30)+25)); - //næste skrå linie + //n�ste skr� linie startx = stopx = x; starty = stopy = y; while (startx > 0 && starty < (m_size-1) ) { @@ -122,7 +128,11 @@ void Board::setSize( int size ) { - m_hasData = false; + if (m_sol != NULL) + { + delete m_sol; + m_sol = NULL; + } m_size = size; this->setMaximumSize( (size * 30)+1, (size * 30)+1 ); this->setMinimumSize( size * 30, size * 30); @@ -130,6 +140,9 @@ void Board::contextMenuEvent( QContextMenuEvent *event) { + if (m_sol == NULL) + return; + QPopupMenu *contextMenu = new QPopupMenu( this ); contextMenu->setCheckable( false ); contextMenu->insertItem("Rotate left", this, SLOT( rotateLeft() ) ); @@ -143,28 +156,28 @@ void Board::rotateLeft() { - m_sol.rotate90(); + m_sol->rotate90(); repaint( true ); } void Board::rotateRight() { - m_sol.rotate90(); - m_sol.rotate90(); - m_sol.rotate90(); + m_sol->rotate90(); + m_sol->rotate90(); + m_sol->rotate90(); repaint( true ); } void Board::mirrorV() { - m_sol.mirror(); + m_sol->mirror(); repaint( true ); } void Board::mirrorH() { - m_sol.mirror(); - m_sol.rotate90(); - m_sol.rotate90(); + m_sol->mirror(); + m_sol->rotate90(); + m_sol->rotate90(); repaint( true ); }