From atlantik-devel Tue Jul 23 23:39:43 2002 From: kde () office ! kde ! org Date: Tue, 23 Jul 2002 23:39:43 +0000 To: atlantik-devel Subject: [atlantik-cvs] CVS: kdegames/atlantik/libatlantikui board.cpp,1.91,1.92 board.h,1.56,1.57 display_wi X-MARC-Message: https://marc.info/?l=atlantik-devel&m=102746773516313 Update of /home/kde/kdegames/atlantik/libatlantikui In directory office:/tmp/cvs-serv22616/libatlantikui Modified Files: board.cpp board.h display_widget.cpp display_widget.h estatedetails.cpp estatedetails.h Log Message: less braindead display widgets Index: board.cpp =================================================================== RCS file: /home/kde/kdegames/atlantik/libatlantikui/board.cpp,v retrieving revision 1.91 retrieving revision 1.92 diff -u -d -r1.91 -r1.92 --- board.cpp 2002/07/22 22:07:30 1.91 +++ board.cpp 2002/07/23 23:39:41 1.92 @@ -40,6 +40,7 @@ m_maxEstates = maxEstates; m_mode = mode; m_animateTokens = false; + m_removeFirstOnPrepend = false; int sideLen = maxEstates/4; @@ -66,7 +67,7 @@ // spacer = new QWidget(this); // m_gridLayout->addWidget(spacer, sideLen, sideLen); // SE - m_center = 0; + m_displayQueue.setAutoDelete(true); displayDefault(); QColor color; @@ -175,7 +176,7 @@ // Designer has its own LMBClicked slot if (m_mode == Play) - connect(estateView, SIGNAL(LMBClicked(Estate *)), this, SLOT(displayEstateDetails(Estate *))); + connect(estateView, SIGNAL(LMBClicked(Estate *)), this, SLOT(prependEstateDetails(Estate *))); if (estateIdaddWidget(estateView, sideLen, sideLen-estateId); @@ -200,12 +201,9 @@ void AtlantikBoard::addAuctionWidget(Auction *auction) { - if (m_center != 0) - delete m_center; - - m_center = new AuctionWidget(m_atlanticCore, auction, this); - m_gridLayout->addMultiCellWidget(m_center, 1, m_gridLayout->numRows()-2, 1, m_gridLayout->numCols()-2); - m_center->show(); + AuctionWidget *auctionW = new AuctionWidget(m_atlanticCore, auction, this); + m_displayQueue.prepend(auctionW); + updateCenter(); connect(auction, SIGNAL(completed()), this, SLOT(displayDefault())); } @@ -399,50 +397,100 @@ void AtlantikBoard::displayDefault() { - if (m_center != 0) - delete m_center; - - m_center = new QWidget(this); - m_gridLayout->addMultiCellWidget(m_center, 1, m_gridLayout->numRows()-2, 1, m_gridLayout->numCols()-2); - m_center->show(); + switch(m_displayQueue.count()) + { + case 0: + m_displayQueue.prepend(new QWidget(this)); + break; + case 1: + m_displayQueue.removeFirst(); + m_displayQueue.prepend(new QWidget(this)); + break; + default: + m_displayQueue.removeFirst(); + break; + } + updateCenter(); } void AtlantikBoard::displayText(QString caption, QString body) { - if (m_center != 0) - delete m_center; - - BoardDisplay *display = new BoardDisplay(caption, body, this); - m_center = display; - m_gridLayout->addMultiCellWidget(m_center, 1, m_gridLayout->numRows()-2, 1, m_gridLayout->numCols()-2); - m_center->show(); + BoardDisplay *bDisplay = new BoardDisplay(caption, body, this); - connect(display, SIGNAL(buttonCommand(QString)), this, SIGNAL(buttonCommand(QString))); + if (m_removeFirstOnPrepend) + m_displayQueue.removeFirst(); + m_removeFirstOnPrepend = false; + m_displayQueue.prepend(bDisplay); + updateCenter(); -// QTimer::singleShot(3000, this, SLOT(displayDefault())); + connect(bDisplay, SIGNAL(buttonCommand(QString)), this, SIGNAL(buttonCommand(QString))); + connect(bDisplay, SIGNAL(buttonClose()), this, SLOT(displayDefault())); } void AtlantikBoard::displayButton(QString command, QString caption, bool enabled) { - if (BoardDisplay *display = dynamic_cast(m_center)) + if (BoardDisplay *display = dynamic_cast(m_displayQueue.getFirst())) display->addButton(command, caption, enabled); - else if (EstateDetails *display = dynamic_cast(m_center)) + else if (EstateDetails *display = dynamic_cast(m_displayQueue.getFirst())) display->addButton(command, caption, enabled); } -void AtlantikBoard::displayEstateDetails(Estate *estate) +void AtlantikBoard::addCloseButton() +{ + if (BoardDisplay *display = dynamic_cast(m_displayQueue.getFirst())) + display->addCloseButton(); + else if (EstateDetails *display = dynamic_cast(m_displayQueue.getFirst())) + display->addCloseButton(); +} + +void AtlantikBoard::insertEstateDetails(Estate *estate) { if (!estate) return; - // TODO: store m_center, it might be an auction or something else we'd like to restore - if (m_center != 0) - delete m_center; + if (m_removeFirstOnPrepend) + m_displayQueue.removeFirst(); + m_removeFirstOnPrepend = false; - EstateDetails *display = new EstateDetails(estate, this); - m_center = display; - m_gridLayout->addMultiCellWidget(display, 1, m_gridLayout->numRows()-2, 1, m_gridLayout->numCols()-2); - display->show(); + EstateDetails *eDetails = new EstateDetails(estate, this); + connect(eDetails, SIGNAL(buttonCommand(QString)), this, SIGNAL(buttonCommand(QString))); + connect(eDetails, SIGNAL(buttonClose()), this, SLOT(displayDefault())); - connect(display, SIGNAL(buttonCommand(QString)), this, SIGNAL(buttonCommand(QString))); + // Don't overwrite possible chance cards or previous estates + int uid = 0; + if (BoardDisplay *display = dynamic_cast(m_displayQueue.getFirst())) + uid = 1; + else if (EstateDetails *display = dynamic_cast(m_displayQueue.getFirst())) + uid = 1; + + m_displayQueue.insert(uid, eDetails); + + if (uid == 0) + updateCenter(); +} + +void AtlantikBoard::prependEstateDetails(Estate *estate) +{ + if (!estate) + return; + + EstateDetails *eDetails = new EstateDetails(estate, this); + eDetails->addCloseButton(); + + if (m_removeFirstOnPrepend) + m_displayQueue.removeFirst(); + m_removeFirstOnPrepend = true; + m_displayQueue.prepend(eDetails); + updateCenter(); + + connect(eDetails, SIGNAL(buttonCommand(QString)), this, SIGNAL(buttonCommand(QString))); + connect(eDetails, SIGNAL(buttonClose()), this, SLOT(displayDefault())); + +} + +void AtlantikBoard::updateCenter() +{ + QWidget *center = m_displayQueue.getFirst(); + m_gridLayout->addMultiCellWidget(center, 1, m_gridLayout->numRows()-2, 1, m_gridLayout->numCols()-2); + center->show(); } Index: board.h =================================================================== RCS file: /home/kde/kdegames/atlantik/libatlantikui/board.h,v retrieving revision 1.56 retrieving revision 1.57 diff -u -d -r1.56 -r1.57 --- board.h 2002/07/17 22:39:21 1.56 +++ board.h 2002/07/23 23:39:41 1.57 @@ -45,7 +45,6 @@ void addAuctionWidget(Auction *auction); void addToken(Player *player, EstateView *location = 0); void indicateUnownedChanged(); - QWidget *centerWidget() { return m_center; }; QPtrList estateViews(); public slots: @@ -57,7 +56,9 @@ void displayDefault(); void displayText(QString caption, QString body); void displayButton(QString command, QString caption, bool enabled); - void displayEstateDetails(Estate *); + void prependEstateDetails(Estate *); + void insertEstateDetails(Estate *); + void addCloseButton(); signals: void tokenConfirmation(Estate *estate); @@ -65,15 +66,15 @@ protected: void resizeEvent(QResizeEvent *); - QWidget *m_center; private: - AtlanticCore *m_atlanticCore; - DisplayMode m_mode; - EstateView *getEstateView(Estate *estate); void moveToken(Token *, int destination); + void updateCenter(); + AtlanticCore *m_atlanticCore; + DisplayMode m_mode; + QWidget *spacer; QGridLayout *m_gridLayout; Token *move_token; @@ -85,6 +86,8 @@ QPtrList m_estateViews; QMap tokenMap; + QPtrList m_displayQueue; + bool m_removeFirstOnPrepend; }; #endif Index: display_widget.cpp =================================================================== RCS file: /home/kde/kdegames/atlantik/libatlantikui/display_widget.cpp,v retrieving revision 1.13 retrieving revision 1.14 diff -u -d -r1.13 -r1.14 --- display_widget.cpp 2002/07/23 10:45:46 1.13 +++ display_widget.cpp 2002/07/23 23:39:41 1.14 @@ -48,6 +48,15 @@ connect(button, SIGNAL(pressed()), this, SLOT(buttonPressed())); } +void BoardDisplay::addCloseButton() +{ + KPushButton *button = new KPushButton("Close", this); + m_buttonBox->addWidget(button); + button->show(); + + connect(button, SIGNAL(pressed()), this, SIGNAL(buttonClose())); +} + void BoardDisplay::buttonPressed() { QObject *o = QObject::sender(); Index: display_widget.h =================================================================== RCS file: /home/kde/kdegames/atlantik/libatlantikui/display_widget.h,v retrieving revision 1.12 retrieving revision 1.13 diff -u -d -r1.12 -r1.13 --- display_widget.h 2002/07/23 10:45:46 1.12 +++ display_widget.h 2002/07/23 23:39:41 1.13 @@ -33,6 +33,7 @@ BoardDisplay(const QString &caption, const QString &body, QWidget *parent, const char *name=0); void addButton(const QString &command, const QString &caption, bool enabled); + void addCloseButton(); private slots: void buttonPressed(); @@ -40,6 +41,7 @@ signals: void buttonCommand(QString); + void buttonClose(); private: QHBoxLayout *m_buttonBox; Index: estatedetails.cpp =================================================================== RCS file: /home/kde/kdegames/atlantik/libatlantikui/estatedetails.cpp,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- estatedetails.cpp 2002/07/17 22:39:21 1.6 +++ estatedetails.cpp 2002/07/23 23:39:41 1.7 @@ -209,6 +209,14 @@ connect(button, SIGNAL(pressed()), this, SLOT(buttonPressed())); } +void EstateDetails::addCloseButton() +{ + KPushButton *button = new KPushButton("Close", this); + m_buttonBox->addWidget(button); + button->show(); + + connect(button, SIGNAL(pressed()), this, SIGNAL(buttonClose())); +} void EstateDetails::buttonPressed() { Index: estatedetails.h =================================================================== RCS file: /home/kde/kdegames/atlantik/libatlantikui/estatedetails.h,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- estatedetails.h 2002/07/17 22:39:22 1.4 +++ estatedetails.h 2002/07/23 23:39:41 1.5 @@ -38,6 +38,7 @@ Estate *estate() { return m_estate; } void addButton(const QString command, const QString caption, bool enabled); + void addCloseButton(); protected: void paintEvent(QPaintEvent *); @@ -48,6 +49,7 @@ signals: void buttonCommand(QString); + void buttonClose(); private: Estate *m_estate; _______________________________________________ atlantik-cvs mailing list atlantik-cvs@mail.kde.org http://mail.kde.org/mailman/listinfo/atlantik-cvs