diff options
author | Clinton Stimpson <clinton@elemtech.com> | 2007-11-10 16:36:09 (GMT) |
---|---|---|
committer | Clinton Stimpson <clinton@elemtech.com> | 2007-11-10 16:36:09 (GMT) |
commit | 5a539b731bbc5ee4afb01a34976988a394ee42b4 (patch) | |
tree | 9071c0f8d9075a8dfd4f4cc1370d79da2cf0b086 /Source/QtDialog | |
parent | 34c882a9f8b45350ba8d56d79a94e1602694ef8f (diff) | |
download | CMake-5a539b731bbc5ee4afb01a34976988a394ee42b4.zip CMake-5a539b731bbc5ee4afb01a34976988a394ee42b4.tar.gz CMake-5a539b731bbc5ee4afb01a34976988a394ee42b4.tar.bz2 |
ENH: Re-arrange UI a bit.
BUG: Properly update when values that changed since the last configure.
Diffstat (limited to 'Source/QtDialog')
-rw-r--r-- | Source/QtDialog/CMakeSetup.qrc | 1 | ||||
-rw-r--r-- | Source/QtDialog/CMakeSetupDialog.cxx | 40 | ||||
-rw-r--r-- | Source/QtDialog/CMakeSetupDialog.h | 2 | ||||
-rw-r--r-- | Source/QtDialog/CMakeSetupDialog.ui | 330 | ||||
-rw-r--r-- | Source/QtDialog/Delete16.png | bin | 0 -> 731 bytes | |||
-rw-r--r-- | Source/QtDialog/QCMakeCacheView.cxx | 99 | ||||
-rw-r--r-- | Source/QtDialog/QCMakeCacheView.h | 1 |
7 files changed, 227 insertions, 246 deletions
diff --git a/Source/QtDialog/CMakeSetup.qrc b/Source/QtDialog/CMakeSetup.qrc index 88d6340..a4031d3 100644 --- a/Source/QtDialog/CMakeSetup.qrc +++ b/Source/QtDialog/CMakeSetup.qrc @@ -1,5 +1,6 @@ <RCC> <qresource prefix="/Icons" > <file>CMakeSetup.png</file> + <file>Delete16.png</file> </qresource> </RCC> diff --git a/Source/QtDialog/CMakeSetupDialog.cxx b/Source/QtDialog/CMakeSetupDialog.cxx index 62f3c37..b3a093a 100644 --- a/Source/QtDialog/CMakeSetupDialog.cxx +++ b/Source/QtDialog/CMakeSetupDialog.cxx @@ -83,6 +83,8 @@ CMakeSetupDialog::CMakeSetupDialog() this->ProgressBar->reset(); this->InterruptButton->setIcon( this->style()->standardPixmap(QStyle::SP_DialogCancelButton)); + this->InterruptButton->setEnabled(false); + this->RemoveEntry->setEnabled(false); QMenu* FileMenu = this->menuBar()->addMenu(tr("&File")); this->ReloadCacheAction = FileMenu->addAction(tr("&Reload Cache")); @@ -190,13 +192,15 @@ void CMakeSetupDialog::initialize() this, SLOT(updateGeneratorLabel(QString))); this->updateGeneratorLabel(QString()); - QObject::connect(this->DeleteCacheButton, SIGNAL(clicked(bool)), - this, SLOT(doDeleteCache())); - QObject::connect(this->CacheValues->cacheModel(), SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(setCacheModified())); - + + QObject::connect(this->CacheValues->selectionModel(), + SIGNAL(selectionChanged(QItemSelection,QItemSelection)), + this, SLOT(selectionChanged())); + QObject::connect(this->RemoveEntry, SIGNAL(clicked(bool)), + this, SLOT(removeSelectedCacheEntries())); // get the saved binary directories QStringList buildPaths = this->loadBuildPaths(); @@ -457,9 +461,9 @@ void CMakeSetupDialog::setEnabledState(bool enabled) this->ConfigureButton->setEnabled(enabled); this->ReloadCacheAction->setEnabled(enabled); this->DeleteCacheAction->setEnabled(enabled); - this->DeleteCacheButton->setEnabled(enabled); this->ExitAction->setEnabled(enabled); this->ConfigureAction->setEnabled(enabled); + this->RemoveEntry->setEnabled(false); // let selection re-enable it // generate button/action are handled separately } @@ -671,4 +675,30 @@ void CMakeSetupDialog::setCacheModified() this->setGenerateEnabled(false); } +void CMakeSetupDialog::removeSelectedCacheEntries() +{ + QModelIndexList idxs = this->CacheValues->selectionModel()->selectedRows(); + QList<QPersistentModelIndex> pidxs; + foreach(QModelIndex i, idxs) + { + pidxs.append(i); + } + foreach(QPersistentModelIndex pi, pidxs) + { + this->CacheValues->model()->removeRow(pi.row()); + } +} + +void CMakeSetupDialog::selectionChanged() +{ + QModelIndexList idxs = this->CacheValues->selectionModel()->selectedRows(); + if(idxs.count() && !this->InterruptButton->isEnabled()) + { + this->RemoveEntry->setEnabled(true); + } + else + { + this->RemoveEntry->setEnabled(false); + } +} diff --git a/Source/QtDialog/CMakeSetupDialog.h b/Source/QtDialog/CMakeSetupDialog.h index 8f3c1b3..cf298f3 100644 --- a/Source/QtDialog/CMakeSetupDialog.h +++ b/Source/QtDialog/CMakeSetupDialog.h @@ -68,6 +68,8 @@ protected slots: void onBinaryDirectoryChanged(const QString& dir); void onSourceDirectoryChanged(const QString& dir); void setCacheModified(); + void removeSelectedCacheEntries(); + void selectionChanged(); protected: void closeEvent(QCloseEvent*); diff --git a/Source/QtDialog/CMakeSetupDialog.ui b/Source/QtDialog/CMakeSetupDialog.ui index ade3cbf..ca95ffe 100644 --- a/Source/QtDialog/CMakeSetupDialog.ui +++ b/Source/QtDialog/CMakeSetupDialog.ui @@ -5,8 +5,8 @@ <rect> <x>0</x> <y>0</y> - <width>705</width> - <height>495</height> + <width>707</width> + <height>582</height> </rect> </property> <layout class="QGridLayout" > @@ -59,93 +59,186 @@ </layout> </item> <item row="1" column="0" > - <layout class="QHBoxLayout" > - <item> - <widget class="QCheckBox" name="Advanced" > - <property name="text" > - <string>Show Advanced</string> - </property> - </widget> - </item> - <item> - <spacer> - <property name="orientation" > - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeType" > - <enum>QSizePolicy::Minimum</enum> - </property> - <property name="sizeHint" > - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QLabel" name="label_4" > - <property name="sizePolicy" > - <sizepolicy vsizetype="Preferred" hsizetype="Minimum" > - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text" > - <string>Search:</string> - </property> - </widget> - </item> - <item> - <widget class="QLineEdit" name="Search" > - <property name="sizePolicy" > - <sizepolicy vsizetype="Fixed" hsizetype="Expanding" > - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - </widget> - </item> - <item> - <spacer> - <property name="orientation" > - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeType" > - <enum>QSizePolicy::Minimum</enum> - </property> - <property name="sizeHint" > - <size> - <width>61</width> - <height>23</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QLabel" name="Generator" > - <property name="text" > - <string>Current Generator:</string> - </property> - </widget> - </item> - </layout> - </item> - <item row="2" column="0" > <widget class="QSplitter" name="Splitter" > <property name="orientation" > <enum>Qt::Vertical</enum> </property> - <widget class="QCMakeCacheView" name="CacheValues" > - <property name="alternatingRowColors" > - <bool>true</bool> - </property> - <property name="selectionMode" > - <enum>QAbstractItemView::ExtendedSelection</enum> + <widget class="QFrame" name="frame" > + <property name="frameShape" > + <enum>QFrame::NoFrame</enum> </property> - <property name="selectionBehavior" > - <enum>QAbstractItemView::SelectRows</enum> + <property name="frameShadow" > + <enum>QFrame::Raised</enum> </property> + <layout class="QGridLayout" > + <property name="leftMargin" > + <number>0</number> + </property> + <property name="topMargin" > + <number>0</number> + </property> + <property name="rightMargin" > + <number>0</number> + </property> + <property name="bottomMargin" > + <number>0</number> + </property> + <item row="0" column="0" colspan="6" > + <layout class="QHBoxLayout" > + <item> + <widget class="QLabel" name="label_4" > + <property name="sizePolicy" > + <sizepolicy vsizetype="Preferred" hsizetype="Minimum" > + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text" > + <string>Search:</string> + </property> + </widget> + </item> + <item> + <widget class="QLineEdit" name="Search" > + <property name="sizePolicy" > + <sizepolicy vsizetype="Fixed" hsizetype="Expanding" > + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="Advanced" > + <property name="text" > + <string>Show Advanced Entries</string> + </property> + </widget> + </item> + <item> + <spacer> + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeType" > + <enum>QSizePolicy::Minimum</enum> + </property> + <property name="sizeHint" > + <size> + <width>61</width> + <height>23</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QToolButton" name="RemoveEntry" > + <property name="toolTip" > + <string>Remove Selected Entries</string> + </property> + <property name="text" > + <string/> + </property> + <property name="icon" > + <iconset resource="CMakeSetup.qrc" >:/Icons/Delete16.png</iconset> + </property> + </widget> + </item> + </layout> + </item> + <item row="1" column="0" colspan="6" > + <widget class="QCMakeCacheView" name="CacheValues" > + <property name="alternatingRowColors" > + <bool>true</bool> + </property> + <property name="selectionMode" > + <enum>QAbstractItemView::ExtendedSelection</enum> + </property> + <property name="selectionBehavior" > + <enum>QAbstractItemView::SelectRows</enum> + </property> + </widget> + </item> + <item row="3" column="0" > + <widget class="QPushButton" name="ConfigureButton" > + <property name="text" > + <string>Configure</string> + </property> + </widget> + </item> + <item row="3" column="1" > + <widget class="QPushButton" name="GenerateButton" > + <property name="text" > + <string>Generate</string> + </property> + </widget> + </item> + <item row="3" column="2" > + <widget class="QLabel" name="Generator" > + <property name="text" > + <string>Current Generator:</string> + </property> + </widget> + </item> + <item row="3" column="3" > + <spacer> + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeType" > + <enum>QSizePolicy::Expanding</enum> + </property> + <property name="sizeHint" > + <size> + <width>121</width> + <height>27</height> + </size> + </property> + </spacer> + </item> + <item row="3" column="5" > + <widget class="QProgressBar" name="ProgressBar" > + <property name="minimum" > + <number>0</number> + </property> + <property name="maximum" > + <number>100</number> + </property> + <property name="value" > + <number>0</number> + </property> + <property name="textVisible" > + <bool>false</bool> + </property> + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + <property name="textDirection" > + <enum>QProgressBar::BottomToTop</enum> + </property> + </widget> + </item> + <item row="3" column="4" > + <widget class="QToolButton" name="InterruptButton" > + <property name="text" > + <string>...</string> + </property> + </widget> + </item> + <item row="2" column="0" colspan="6" > + <widget class="QLabel" name="label_3" > + <property name="text" > + <string>Press Configure to update and display new values in red, then press Generate to generate selected build files.</string> + </property> + <property name="alignment" > + <set>Qt::AlignCenter</set> + </property> + <property name="wordWrap" > + <bool>true</bool> + </property> + </widget> + </item> + </layout> </widget> <widget class="QTextEdit" name="Output" > <property name="lineWrapMode" > @@ -157,77 +250,6 @@ </widget> </widget> </item> - <item row="4" column="0" > - <layout class="QHBoxLayout" > - <item> - <widget class="QPushButton" name="ConfigureButton" > - <property name="text" > - <string>Configure</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="GenerateButton" > - <property name="text" > - <string>Generate</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="DeleteCacheButton" > - <property name="text" > - <string>Delete Cache</string> - </property> - </widget> - </item> - <item> - <spacer> - <property name="orientation" > - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" > - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QToolButton" name="InterruptButton" > - <property name="enabled" > - <bool>false</bool> - </property> - <property name="text" > - <string>...</string> - </property> - </widget> - </item> - <item> - <widget class="QProgressBar" name="ProgressBar" > - <property name="value" > - <number>0</number> - </property> - <property name="textVisible" > - <bool>true</bool> - </property> - </widget> - </item> - </layout> - </item> - <item row="3" column="0" > - <widget class="QLabel" name="label_3" > - <property name="text" > - <string>Right click on a cache value for additional options (delete, ignore, and help).<br>Press Configure to update and display new values in red, then press Generate to generate selected build files.</string> - </property> - <property name="alignment" > - <set>Qt::AlignCenter</set> - </property> - <property name="wordWrap" > - <bool>true</bool> - </property> - </widget> - </item> </layout> </widget> <customwidgets> diff --git a/Source/QtDialog/Delete16.png b/Source/QtDialog/Delete16.png Binary files differnew file mode 100644 index 0000000..16989fee --- /dev/null +++ b/Source/QtDialog/Delete16.png diff --git a/Source/QtDialog/QCMakeCacheView.cxx b/Source/QtDialog/QCMakeCacheView.cxx index 4bb160e..b1dbf6f 100644 --- a/Source/QtDialog/QCMakeCacheView.cxx +++ b/Source/QtDialog/QCMakeCacheView.cxx @@ -26,9 +26,6 @@ #include <QStyle> #include <QKeyEvent> #include <QMenu> -#include <QDialog> -#include <QLabel> -#include <QDialogButtonBox> #include <QDirModel> #include <QCompleter> @@ -79,82 +76,7 @@ QCMakeCacheModel* QCMakeCacheView::cacheModel() const { return this->CacheModel; } - -void QCMakeCacheView::contextMenuEvent(QContextMenuEvent* /*e*/) -{ - QList<QModelIndex> idxs = this->selectionModel()->selectedRows(); - - if(idxs.count()) - { - QMenu* menu = new QMenu(this); - QAction* deleteAction = NULL; - QAction* ignoreAction = NULL; - if(this->cacheModel()->editEnabled()) - { - QString t = idxs.count() > 1 ? tr("Delete Cache Entries") : - tr("Delete Cache Entry"); - deleteAction = menu->addAction(t); - t = idxs.count() > 1 ? tr("Ignore Cache Entries") : - tr("Ignore Cache Entry"); - ignoreAction = menu->addAction(t); - } - QAction* helpAction = menu->addAction(tr("Help For Cache Entry")); - QAction* which = menu->exec(QCursor::pos()); - if(!which) - { - return; - } - - if(which == helpAction) - { - QModelIndex idx = this->selectionModel()->currentIndex(); - idx = this->SearchFilter->mapToSource(idx); - idx = this->AdvancedFilter->mapToSource(idx); - idx = this->cacheModel()->index(idx.row(), 0); - QString msg = this->cacheModel()->data(idx, Qt::DisplayRole).toString() + - "\n\n" + - this->cacheModel()->data(idx, QCMakeCacheModel::HelpRole).toString(); - QDialog dialog; - dialog.setWindowTitle(tr("CMakeSetup Help")); - QVBoxLayout* l = new QVBoxLayout(&dialog); - QLabel* lab = new QLabel(&dialog); - l->addWidget(lab); - lab->setText(msg); - lab->setWordWrap(true); - QDialogButtonBox* btns = new QDialogButtonBox(QDialogButtonBox::Ok, - Qt::Horizontal, &dialog); - QObject::connect(btns, SIGNAL(accepted()), &dialog, SLOT(accept())); - l->addWidget(btns); - dialog.exec(); - } - else - { - QList<QPersistentModelIndex> pidxs; - foreach(QModelIndex i, idxs) - { - i = this->SearchFilter->mapToSource(i); - i = this->AdvancedFilter->mapToSource(i); - pidxs.append(i); - } - if(which == deleteAction) - { - foreach(QPersistentModelIndex j, pidxs) - { - this->cacheModel()->removeRows(j.row(), 1); - } - } - else if(which == ignoreAction) - { - foreach(QPersistentModelIndex j, pidxs) - { - j = this->cacheModel()->index(j.row(), 1); - this->cacheModel()->setData(j, "IGNORE", Qt::DisplayRole); - } - } - } - } -} - + QModelIndex QCMakeCacheView::moveCursor(CursorAction act, Qt::KeyboardModifiers mod) { @@ -228,17 +150,19 @@ void QCMakeCacheModel::clear() void QCMakeCacheModel::setProperties(const QCMakeCachePropertyList& props) { QSet<QCMakeCacheProperty> newProps = props.toSet(); + QSet<QCMakeCacheProperty> newProps2 = props.toSet(); QSet<QCMakeCacheProperty> oldProps = this->Properties.toSet(); oldProps.intersect(newProps); newProps.subtract(oldProps); + newProps2.subtract(newProps); this->NewCount = newProps.count(); this->Properties.clear(); this->Properties = newProps.toList(); qSort(this->Properties); - QCMakeCachePropertyList tmp = oldProps.toList(); + QCMakeCachePropertyList tmp = newProps2.toList(); qSort(tmp); this->Properties += tmp; @@ -384,17 +308,20 @@ QModelIndex QCMakeCacheModel::buddy ( const QModelIndex& idx ) const return idx; } -bool QCMakeCacheModel::removeRows(int row, int, const QModelIndex&) +bool QCMakeCacheModel::removeRows(int row, int num, const QModelIndex&) { - if(row < 0 || row >= this->Properties.count()) + if(row < 0 || row+num > this->Properties.count()) { return false; } - this->beginRemoveRows(QModelIndex(), row, row); - this->Properties.removeAt(row); - if(this->NewCount >= row+1) + this->beginRemoveRows(QModelIndex(), row, row+num-1); + for(int i=0; i<num; i++) { - this->NewCount--; + this->Properties.removeAt(row); + if(this->NewCount >= row+1) + { + this->NewCount--; + } } this->endRemoveRows(); return true; diff --git a/Source/QtDialog/QCMakeCacheView.h b/Source/QtDialog/QCMakeCacheView.h index 15c06d4..a6ddbf2 100644 --- a/Source/QtDialog/QCMakeCacheView.h +++ b/Source/QtDialog/QCMakeCacheView.h @@ -45,7 +45,6 @@ public slots: void setSearchFilter(const QString&); protected: - void contextMenuEvent(QContextMenuEvent* e); QModelIndex moveCursor(CursorAction, Qt::KeyboardModifiers); void showEvent(QShowEvent* e); bool Init; |