mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-10-31 20:26:43 +00:00 
			
		
		
		
	refactored dialogue subview button bar into a new class
This commit is contained in:
		
							parent
							
								
									502cc852da
								
							
						
					
					
						commit
						49dc30683f
					
				
					 4 changed files with 165 additions and 63 deletions
				
			
		|  | @ -64,7 +64,7 @@ opencs_units (view/world | |||
|     table tablesubview scriptsubview util regionmapsubview tablebottombox creator genericcreator | ||||
|     cellcreator referenceablecreator referencecreator scenesubview | ||||
|     infocreator scriptedit dialoguesubview previewsubview regionmap dragrecordtable nestedtable | ||||
|     dialoguespinbox | ||||
|     dialoguespinbox recordbuttonbar | ||||
|     ) | ||||
| 
 | ||||
| opencs_units_noqt (view/world | ||||
|  |  | |||
|  | @ -40,6 +40,7 @@ | |||
| #include "util.hpp" | ||||
| #include "tablebottombox.hpp" | ||||
| #include "nestedtable.hpp" | ||||
| #include "recordbuttonbar.hpp" | ||||
| /*
 | ||||
| ==============================NotEditableSubDelegate========================================== | ||||
| */ | ||||
|  | @ -712,69 +713,16 @@ CSVWorld::DialogueSubView::DialogueSubView (const CSMWorld::UniversalId& id, | |||
|     connect(mBottom, SIGNAL(requestFocus(const std::string&)), this, SLOT(requestFocus(const std::string&))); | ||||
| 
 | ||||
|     // buttons
 | ||||
|     QHBoxLayout *buttonsLayout = new QHBoxLayout; | ||||
|     QToolButton* prevButton = new QToolButton (this); | ||||
|     prevButton->setIcon(QIcon(":/go-previous.png")); | ||||
|     prevButton->setToolTip ("Switch to previous record"); | ||||
|     QToolButton* nextButton = new QToolButton (this); | ||||
|     nextButton->setIcon(QIcon(":/go-next.png")); | ||||
|     nextButton->setToolTip ("Switch to next record"); | ||||
|     buttonsLayout->addWidget(prevButton, 0); | ||||
|     buttonsLayout->addWidget(nextButton, 1); | ||||
|     buttonsLayout->addStretch(2); | ||||
|     RecordButtonBar *buttons = new RecordButtonBar (getTable(), mBottom, | ||||
|         &getCommandDispatcher(), this); | ||||
|          | ||||
|     getMainLayout().addWidget (buttons); | ||||
| 
 | ||||
|     QToolButton* cloneButton = new QToolButton (this); | ||||
|     cloneButton->setIcon(QIcon(":/edit-clone.png")); | ||||
|     cloneButton->setToolTip ("Clone record"); | ||||
|     QToolButton* addButton = new QToolButton (this); | ||||
|     addButton->setIcon(QIcon(":/add.png")); | ||||
|     addButton->setToolTip ("Add new record"); | ||||
|     QToolButton* deleteButton = new QToolButton (this); | ||||
|     deleteButton->setIcon(QIcon(":/edit-delete.png")); | ||||
|     deleteButton->setToolTip ("Delete record"); | ||||
|     QToolButton* revertButton = new QToolButton (this); | ||||
|     revertButton->setIcon(QIcon(":/edit-undo.png")); | ||||
|     revertButton->setToolTip ("Revert record"); | ||||
| 
 | ||||
|     if (getTable().getFeatures() & CSMWorld::IdTable::Feature_Preview) | ||||
|     { | ||||
|         QToolButton* previewButton = new QToolButton (this); | ||||
|         previewButton->setIcon(QIcon(":/edit-preview.png")); | ||||
|         previewButton->setToolTip ("Open a preview of this record"); | ||||
|         buttonsLayout->addWidget(previewButton); | ||||
|         connect(previewButton, SIGNAL(clicked()), this, SLOT(showPreview())); | ||||
|     } | ||||
| 
 | ||||
|     if (getTable().getFeatures() & CSMWorld::IdTable::Feature_View) | ||||
|     { | ||||
|         QToolButton* viewButton = new QToolButton (this); | ||||
|         viewButton->setIcon(QIcon(":/cell.png")); | ||||
|         viewButton->setToolTip ("Open a scene view of the cell this record is located in"); | ||||
|         buttonsLayout->addWidget(viewButton); | ||||
|         connect(viewButton, SIGNAL(clicked()), this, SLOT(viewRecord())); | ||||
|     } | ||||
| 
 | ||||
|     buttonsLayout->addWidget(cloneButton); | ||||
|     buttonsLayout->addWidget(addButton); | ||||
|     buttonsLayout->addWidget(deleteButton); | ||||
|     buttonsLayout->addWidget(revertButton); | ||||
| 
 | ||||
|     connect(nextButton, SIGNAL(clicked()), this, SLOT(nextId())); | ||||
|     connect(prevButton, SIGNAL(clicked()), this, SLOT(prevId())); | ||||
|     connect(cloneButton, SIGNAL(clicked()), this, SLOT(cloneRequest())); | ||||
|     connect(revertButton, SIGNAL(clicked()), &getCommandDispatcher(), SLOT(executeRevert())); | ||||
|     connect(deleteButton, SIGNAL(clicked()), &getCommandDispatcher(), SLOT(executeDelete())); | ||||
| 
 | ||||
|     connect(addButton, SIGNAL(clicked()), mBottom, SLOT(createRequest())); | ||||
| 
 | ||||
|     if(!mBottom->canCreateAndDelete()) | ||||
|     { | ||||
|         cloneButton->setDisabled (true); | ||||
|         addButton->setDisabled (true); | ||||
|         deleteButton->setDisabled (true); | ||||
|     } | ||||
| 
 | ||||
|     getMainLayout().addLayout (buttonsLayout);     | ||||
|     connect (buttons, SIGNAL(nextId()), this, SLOT(nextId())); | ||||
|     connect (buttons, SIGNAL (prevId()), this, SLOT(prevId())); | ||||
|     connect (buttons, SIGNAL (cloneRequest()), this, SLOT(cloneRequest())); | ||||
|     connect (buttons, SIGNAL (showPreview()), this, SLOT(showPreview())); | ||||
|     connect (buttons, SIGNAL (viewRecord()), this, SLOT(viewRecord())); | ||||
| } | ||||
| 
 | ||||
| void CSVWorld::DialogueSubView::cloneRequest() | ||||
|  |  | |||
							
								
								
									
										100
									
								
								apps/opencs/view/world/recordbuttonbar.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								apps/opencs/view/world/recordbuttonbar.cpp
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,100 @@ | |||
| 
 | ||||
| #include "recordbuttonbar.hpp" | ||||
| 
 | ||||
| #include <QHBoxLayout> | ||||
| #include <QToolButton> | ||||
| 
 | ||||
| #include "../../model/world/idtable.hpp" | ||||
| #include "../../model/world/commanddispatcher.hpp" | ||||
| 
 | ||||
| #include "../world/tablebottombox.hpp" | ||||
| 
 | ||||
| CSVWorld::RecordButtonBar::RecordButtonBar (CSMWorld::IdTable& table, TableBottomBox *bottomBox, | ||||
|     CSMWorld::CommandDispatcher *commandDispatcher, QWidget *parent) | ||||
| : QWidget (parent), mTable (table), mBottom (bottomBox), mCommandDispatcher (commandDispatcher) | ||||
| { | ||||
|     QHBoxLayout *buttonsLayout = new QHBoxLayout; | ||||
|     buttonsLayout->setContentsMargins (0, 0, 0, 0); | ||||
| 
 | ||||
|     // left section
 | ||||
|     QToolButton* prevButton = new QToolButton (this); | ||||
|     prevButton->setIcon(QIcon(":/go-previous.png")); | ||||
|     prevButton->setToolTip ("Switch to previous record"); | ||||
|     buttonsLayout->addWidget (prevButton, 0); | ||||
|      | ||||
|     QToolButton* nextButton = new QToolButton (this); | ||||
|     nextButton->setIcon(QIcon(":/go-next.png")); | ||||
|     nextButton->setToolTip ("Switch to next record"); | ||||
|     buttonsLayout->addWidget (nextButton, 1); | ||||
|      | ||||
|     buttonsLayout->addStretch(2); | ||||
| 
 | ||||
|     // optional buttons of the right section
 | ||||
|     if (mTable.getFeatures() & CSMWorld::IdTable::Feature_Preview) | ||||
|     { | ||||
|         QToolButton* previewButton = new QToolButton (this); | ||||
|         previewButton->setIcon(QIcon(":/edit-preview.png")); | ||||
|         previewButton->setToolTip ("Open a preview of this record"); | ||||
|         buttonsLayout->addWidget(previewButton); | ||||
|         connect (previewButton, SIGNAL(clicked()), this, SIGNAL (showPreview())); | ||||
|     } | ||||
| 
 | ||||
|     if (mTable.getFeatures() & CSMWorld::IdTable::Feature_View) | ||||
|     { | ||||
|         QToolButton* viewButton = new QToolButton (this); | ||||
|         viewButton->setIcon(QIcon(":/cell.png")); | ||||
|         viewButton->setToolTip ("Open a scene view of the cell this record is located in"); | ||||
|         buttonsLayout->addWidget(viewButton); | ||||
|         connect (viewButton, SIGNAL(clicked()), this, SIGNAL (viewRecord())); | ||||
|     } | ||||
| 
 | ||||
|     // right section
 | ||||
|     QToolButton* cloneButton = new QToolButton (this); | ||||
|     cloneButton->setIcon(QIcon(":/edit-clone.png")); | ||||
|     cloneButton->setToolTip ("Clone record"); | ||||
|     buttonsLayout->addWidget(cloneButton); | ||||
|      | ||||
|     QToolButton* addButton = new QToolButton (this); | ||||
|     addButton->setIcon(QIcon(":/add.png")); | ||||
|     addButton->setToolTip ("Add new record"); | ||||
|     buttonsLayout->addWidget(addButton); | ||||
|      | ||||
|     QToolButton* deleteButton = new QToolButton (this); | ||||
|     deleteButton->setIcon(QIcon(":/edit-delete.png")); | ||||
|     deleteButton->setToolTip ("Delete record"); | ||||
|     buttonsLayout->addWidget(deleteButton); | ||||
|      | ||||
|     QToolButton* revertButton = new QToolButton (this); | ||||
|     revertButton->setIcon(QIcon(":/edit-undo.png")); | ||||
|     revertButton->setToolTip ("Revert record"); | ||||
|     buttonsLayout->addWidget(revertButton); | ||||
|      | ||||
|     setLayout (buttonsLayout); | ||||
| 
 | ||||
|     // disabling and connections
 | ||||
|     if(!mBottom || !mBottom->canCreateAndDelete()) | ||||
|     { | ||||
|         cloneButton->setDisabled (true); | ||||
|         addButton->setDisabled (true); | ||||
|         deleteButton->setDisabled (true); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         connect (addButton, SIGNAL (clicked()), mBottom, SLOT (createRequest())); | ||||
|         connect (cloneButton, SIGNAL (clicked()), this, SIGNAL (cloneRequest())); | ||||
|     } | ||||
| 
 | ||||
|     connect (nextButton, SIGNAL (clicked()), this, SIGNAL (nextId())); | ||||
|     connect (prevButton, SIGNAL (clicked()), this, SIGNAL (prevId())); | ||||
| 
 | ||||
|     if (!mCommandDispatcher) | ||||
|     { | ||||
|         revertButton->setDisabled (true); | ||||
|         deleteButton->setDisabled (true); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         connect (revertButton, SIGNAL (clicked()), mCommandDispatcher, SLOT (executeRevert())); | ||||
|         connect (deleteButton, SIGNAL (clicked()), mCommandDispatcher, SLOT (executeDelete())); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										54
									
								
								apps/opencs/view/world/recordbuttonbar.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								apps/opencs/view/world/recordbuttonbar.hpp
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,54 @@ | |||
| #ifndef CSV_WORLD_RECORDBUTTONBAR_H | ||||
| #define CSV_WORLD_RECORDBUTTONBAR_H | ||||
| 
 | ||||
| #include <QWidget> | ||||
| 
 | ||||
| namespace CSMWorld | ||||
| { | ||||
|     class IdTable; | ||||
|     class CommandDispatcher; | ||||
| } | ||||
| 
 | ||||
| namespace CSVWorld | ||||
| { | ||||
|     class TableBottomBox; | ||||
| 
 | ||||
|     /// \brief Button bar for use in dialogue-type subviews
 | ||||
|     ///
 | ||||
|     /// Contains the following buttons:
 | ||||
|     /// - next/prev
 | ||||
|     /// - clone
 | ||||
|     /// - add
 | ||||
|     /// - delete
 | ||||
|     /// - revert
 | ||||
|     /// - preview (optional)
 | ||||
|     /// - view (optional)
 | ||||
|     class RecordButtonBar : public QWidget | ||||
|     { | ||||
|             Q_OBJECT | ||||
| 
 | ||||
|             CSMWorld::IdTable& mTable; | ||||
|             TableBottomBox *mBottom; | ||||
|             CSMWorld::CommandDispatcher *mCommandDispatcher; | ||||
| 
 | ||||
|         public: | ||||
| 
 | ||||
|             RecordButtonBar (CSMWorld::IdTable& table, TableBottomBox *bottomBox = 0, | ||||
|                 CSMWorld::CommandDispatcher *commandDispatcher = 0, QWidget *parent = 0); | ||||
| 
 | ||||
|         signals: | ||||
| 
 | ||||
|             void showPreview(); | ||||
| 
 | ||||
|             void viewRecord(); | ||||
| 
 | ||||
|             void nextId(); | ||||
| 
 | ||||
|             void prevId(); | ||||
| 
 | ||||
|             void cloneRequest(); | ||||
| 
 | ||||
|     }; | ||||
| } | ||||
| 
 | ||||
| #endif | ||||
		Loading…
	
		Reference in a new issue