// $Id: SctSetSumFuncDlg.hpp,v 1.5 2011/05/10 19:24:39 philw Exp $ // // This module: // class SctSetSumFuncDlg : public QDialog // class SctSetSumFuncDlg::RowItem : public QObject // // See also data model module: // class SctSumFuncAssignSpec // class SctSumFuncAssignSpec::Item // // Dialog to edit a SctSumFuncAssignSpec instance, which represents the // inputs to the operation to reassign of Aggregation Summary Functions // to all of the Slots in an SCT. This dialog also includes an operation // to perform that assignment. // // Operation Buttons: // "Restore RiverWare Default" // "Cancel Changes: // "Apply to SCT" // "Close" // //-- #ifndef SctSetSumFuncDlgINCLUDED #define SctSetSumFuncDlgINCLUDED #ifndef SctSumFuncAssignSpecINCLUDED #include "SctSumFuncAssignSpec.hpp" #endif #ifndef GusListenerINCLUDED #include "GusListener.hpp" #endif #ifndef cwReturnStatusINCLUDED #include "cwReturnStatus.hpp" #endif #ifndef RootINCLUDED #include "Root.hpp" #endif #ifndef SlotColRefINCLUDED #include "SlotColRef.hpp" #endif #ifndef CallbackINCLUDED #include "Callback.hpp" #endif #include #include class Ui_SctSetSumFuncWidgets; class QAbstractButton; class QButtonGroup; class QComboBox; class QGridLayout; class QGroupBox; class QHideEvent; class QLabel; class QLineEdit; class QMenu; class QPushButton; class QRadioButton; class QRegExpValidator; class QShowEvent; class QSpacerItem; class QTimer; class RootSelection; class GusSelector; class Supply; class SctDialog; // ****************************************** // *** class SctSetSumFuncDlg : QDialog *** // ****************************************** class SctSetSumFuncDlg : public QDialog { Q_OBJECT private: SctDialog* _sctDlg; SctSumFuncAssignSpec _origSpec; Ui_SctSetSumFuncWidgets& _ui; QGridLayout* _itemWidgetsGrid; QLabel* _colLabel_unitType; QLabel* _colLabel_slotName; QLabel* _colLabel_sumFunc; QLabel* _colLabel_slotCount; QSpacerItem* _colSpacer1; QSpacerItem* _colSpacer2; QSpacerItem* _colSpacer3; class RowItem; // Declared below QList _itemWidgetRows; bool _processingUserEdit_inProgress; bool _settingGui_inProgress; QRegExpValidator* _slotNameValidator; QTimer* _adjustSizeTimer; public: // constructor SctSetSumFuncDlg (SctDialog* sctDlg, const SctSumFuncAssignSpec& origSpec); virtual ~SctSetSumFuncDlg(); void recomputeSlotCounts(); private: void buildGridHeader(); void initWidgets(); void initConnections(); void updateSensitivity(); SctSumFuncAssignSpec guiSpec() const; void setGuiSpec (const SctSumFuncAssignSpec&); void restoreOrigSpec(); void processUserEdit(); // Returns the change in the number of rows int rebuildItemRows (const QList&); QList readItemRows() const; void appendItemWidgetRow(); void deleteLastItemWidgetRow(); int rowIndexOfWidget (const QObject*) const; // [0..]; (-1)-not found. void enableInsertButtons (bool ena); void enableDeleteButtons (bool ena); void schedAdjustSize(); void cancelAdjustSize(); protected: // Virtual from QWidget virtual void showEvent (QShowEvent*); virtual void hideEvent (QHideEvent*); private slots: void doAdjustSize(); void rowItem_valueChanged (RowItem*, int rowInx); void rowItem_insertAboveRequest (RowItem*, int rowInx); void rowItem_removeRequest (RowItem*, int rowInx); void restoreDefaultsButton_clicked(); void cancelChangesButton_clicked(); void applyButton_clicked(); void closeButton_clicked(); signals: void sumFuncSpecApplied (const SctSumFuncAssignSpec&); }; //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // ***************************************** // *** class SctSetSumFuncDlg::RowItem *** // ***************************************** class SctSetSumFuncDlg::RowItem : public QObject, public GusListener { Q_OBJECT // friend class SctSetSumFuncDlg; private: SctSetSumFuncDlg* _dlg; QGridLayout* _gridLayout; static int _instCnt; int _instNum; int _rowIndex; // [0..] SctSumFuncAssignSpec::Item _data; static RootSelection* _slotNamePickerRootSel; GusSelector* _slotNamePickerSelector; QButtonGroup* _enaFiltersButGroup; // QRadioButton* _enaUnitTypeRadioBut; // Unit Type: QRadioButton QComboBox* _unitTypeCombo; // Unit Type: QComboBox QRadioButton* _enaSlotNameRadioBut; // Slot Name: QRadioButton QLineEdit* _slotNameLineEdit; // Slot Name: QLineEdit QPushButton* _gusSelectNameBut; // Slot Name: QPushButton (for GUS) QComboBox* _sumFuncCombo; // Summary Function: QComboBox QPushButton* _insertHereBut; // (+) Insert Row: QPushButton QPushButton* _deleteHereBut; // (-) Delete Row: QPushButton QLabel* _slotCntLabel; // Slots (count): QLabel bool _settingWidgets_inProgress; public: RowItem (SctSetSumFuncDlg* dlg, QGridLayout* gridLayout, int rowInx); // [0..] virtual ~RowItem(); private: void deleteWidgets(); void rebuildUnitTypeCombo (bool withTheAnyItem); void updateUnitTypeCombo(); void updateSlotNameEdit(); public: void setRowItemData (const SctSumFuncAssignSpec::Item&); const SctSumFuncAssignSpec::Item& rowItemDataRef() const { return _data; } void updateSensitivity(); bool containsQObject (const QObject*) const; void enableInsertButton (bool ena); void enableDeleteButton (bool ena); // Slot Filtering; Deferred to the SctSumFuncAssignSpec::Item field. int slotCount() const { return _data.slotCount(); } void clearSlotCount() { _data.clearSlotCount(); } bool matchesSlot (const SlotColRef&) const; bool countSlotMatch (const SlotColRef&); // if match, increments slotCount void updateSlotCountLabel(); static QString unitTypeStr (unit_type); private: // GUS (Grand Unified Selector) void showGusSlotSelector(); void closeGusSlotSelector(); void gusProcessSelectedSlot (GusSelector*); virtual void gusOk (GusSelector*, GusClientData*); virtual void gusApply (GusSelector*, GusClientData*); virtual void gusCancel (GusSelector*, GusClientData*); private slots: void childDestroyed (QObject*); void enaFiltersButGroup_buttonClicked (QAbstractButton*); void unitTypeCombo_activated (int index); void slotNameLineEdit_textEdited (const QString&); void gusSelectNameBut_clicked(); void sumFuncCombo_activated (int index); void insertHereBut_clicked(); void deleteHereBut_clicked(); signals: void valueChanged (RowItem*, int rowInx); void insertAboveRequest (RowItem*, int rowInx); void removeRequest (RowItem*, int rowInx); }; #endif //--- (end SctSetSumFuncDlg.hpp) ---