From fee748d4b5931e0d6c97b0689e0a0884beb03504 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Fri, 26 Jul 2013 21:09:23 +0200 Subject: [PATCH] added creator bar UI and cancel button --- apps/opencs/CMakeLists.txt | 4 +-- apps/opencs/view/world/creator.hpp | 8 ++++++ apps/opencs/view/world/genericcreator.cpp | 29 ++++++++++++++++++- apps/opencs/view/world/genericcreator.hpp | 6 ++++ apps/opencs/view/world/tablebottombox.cpp | 35 ++++++++++++++++------- apps/opencs/view/world/tablebottombox.hpp | 10 +++++++ 6 files changed, 79 insertions(+), 13 deletions(-) diff --git a/apps/opencs/CMakeLists.txt b/apps/opencs/CMakeLists.txt index 6102671ff..bca37755c 100644 --- a/apps/opencs/CMakeLists.txt +++ b/apps/opencs/CMakeLists.txt @@ -57,13 +57,13 @@ opencs_hdrs_noqt (view/doc opencs_units (view/world - table tablesubview scriptsubview util regionmapsubview tablebottombox + table tablesubview scriptsubview util regionmapsubview tablebottombox creator genericcreator ) opencs_units_noqt (view/world dialoguesubview subviews enumdelegate vartypedelegate recordstatusdelegate refidtypedelegate datadisplaydelegate - scripthighlighter creator genericcreator + scripthighlighter ) diff --git a/apps/opencs/view/world/creator.hpp b/apps/opencs/view/world/creator.hpp index 54342ccdc..f5485534c 100644 --- a/apps/opencs/view/world/creator.hpp +++ b/apps/opencs/view/world/creator.hpp @@ -8,9 +8,17 @@ namespace CSVWorld /// \brief Record creator UI base class class Creator : public QWidget { + Q_OBJECT + public: virtual ~Creator(); + + virtual void reset() = 0; + + signals: + + void done(); }; /// \brief Base class for Creator factory diff --git a/apps/opencs/view/world/genericcreator.cpp b/apps/opencs/view/world/genericcreator.cpp index 4685df339..6dbd84711 100644 --- a/apps/opencs/view/world/genericcreator.cpp +++ b/apps/opencs/view/world/genericcreator.cpp @@ -1,2 +1,29 @@ -#include "genericcreator.hpp" \ No newline at end of file +#include "genericcreator.hpp" + +#include +#include +#include + +CSVWorld::GenericCreator::GenericCreator() +{ + QHBoxLayout *layout = new QHBoxLayout; + + QLineEdit *name = new QLineEdit; + layout->addWidget (name, 1); + + QPushButton *createButton = new QPushButton ("Create"); + layout->addWidget (createButton); + + QPushButton *cancelButton = new QPushButton ("Cancel"); + layout->addWidget (cancelButton); + + connect (cancelButton, SIGNAL (clicked (bool)), this, SIGNAL (done())); + + setLayout (layout); +} + +void CSVWorld::GenericCreator::reset() +{ + +} \ No newline at end of file diff --git a/apps/opencs/view/world/genericcreator.hpp b/apps/opencs/view/world/genericcreator.hpp index 28024041f..7ab125dfc 100644 --- a/apps/opencs/view/world/genericcreator.hpp +++ b/apps/opencs/view/world/genericcreator.hpp @@ -7,7 +7,13 @@ namespace CSVWorld { class GenericCreator : public Creator { + Q_OBJECT + public: + + GenericCreator(); + + virtual void reset(); }; } diff --git a/apps/opencs/view/world/tablebottombox.cpp b/apps/opencs/view/world/tablebottombox.cpp index a48325575..d84e66390 100644 --- a/apps/opencs/view/world/tablebottombox.cpp +++ b/apps/opencs/view/world/tablebottombox.cpp @@ -40,28 +40,30 @@ void CSVWorld::TableBottomBox::updateStatus() } CSVWorld::TableBottomBox::TableBottomBox (const CreatorFactoryBase& creatorFactory, QWidget *parent) -: QWidget (parent), mShowStatusBar (false) +: QWidget (parent), mShowStatusBar (false), mCreating (false) { for (int i=0; i<4; ++i) mStatusCount[i] = 0; setVisible (false); - QStackedLayout *layout = new QStackedLayout; + mLayout = new QStackedLayout; mStatus = new QLabel; - QStatusBar *statusBar = new QStatusBar; + mStatusBar = new QStatusBar; - statusBar->addWidget (mStatus); + mStatusBar->addWidget (mStatus); - layout->addWidget (statusBar); + mLayout->addWidget (mStatusBar); - setLayout (layout); + setLayout (mLayout); mCreator = creatorFactory.makeCreator(); - layout->addWidget (mCreator); + mLayout->addWidget (mCreator); + + connect (mCreator, SIGNAL (done()), this, SLOT (createRequestDone())); } CSVWorld::TableBottomBox::~TableBottomBox() @@ -73,7 +75,7 @@ void CSVWorld::TableBottomBox::setStatusBar (bool show) { if (show!=mShowStatusBar) { - setVisible (show); + setVisible (show || mCreating); mShowStatusBar = show; @@ -87,6 +89,18 @@ bool CSVWorld::TableBottomBox::canCreateAndDelete() const return mCreator; } +void CSVWorld::TableBottomBox::createRequestDone() +{ + if (!mShowStatusBar) + setVisible (false); + else + updateStatus(); + + mLayout->setCurrentWidget (mStatusBar); + + mCreating = false; +} + void CSVWorld::TableBottomBox::selectionSizeChanged (int size) { if (mStatusCount[3]!=size) @@ -122,8 +136,9 @@ void CSVWorld::TableBottomBox::tableSizeChanged (int size, int deleted, int modi updateStatus(); } -#include void CSVWorld::TableBottomBox::createRequest() { - std::cout<<"create"<setCurrentWidget (mCreator); + setVisible (true); + mCreating = true; } \ No newline at end of file diff --git a/apps/opencs/view/world/tablebottombox.hpp b/apps/opencs/view/world/tablebottombox.hpp index dd00ea27c..8f2ceda11 100644 --- a/apps/opencs/view/world/tablebottombox.hpp +++ b/apps/opencs/view/world/tablebottombox.hpp @@ -4,6 +4,8 @@ #include class QLabel; +class QStackedLayout; +class QStatusBar; namespace CSVWorld { @@ -16,8 +18,11 @@ namespace CSVWorld bool mShowStatusBar; QLabel *mStatus; + QStatusBar *mStatusBar; int mStatusCount[4]; Creator *mCreator; + bool mCreating; + QStackedLayout *mLayout; private: @@ -40,6 +45,11 @@ namespace CSVWorld /// /// \note The BotomBox does not partake in the deletion of records. + private slots: + + void createRequestDone(); + ///< \note This slot being called does not imply success. + public slots: void selectionSizeChanged (int size);