Przeglądaj źródła

ENH: Add shortcut to start search/filter.
A bit of cleanup.
Disable tab navigation in cache variable list.
Enable home/end keys.

BUG: Ensure currently edited values are saved before doing configure.

Clinton Stimpson 17 lat temu
rodzic
commit
df3169273a

+ 0 - 2
Source/QtDialog/CMakeSetup.cxx

@@ -23,7 +23,6 @@
 
 #include "CMakeSetupDialog.h"
 #include "cmDocumentation.h"
-#include "cmSystemTools.h"
 #include "cmake.h"
 #include "cmVersion.h"
 #include <cmsys/CommandLineArguments.hxx>
@@ -73,7 +72,6 @@ int main(int argc, char** argv)
 #if defined(Q_OS_MAC)
   cmExecDir.cd("../../../");
 #endif
-  cmSystemTools::FindExecutableDirectory(cmExecDir.filePath("cmake").toAscii().data());
 
   // pick up translation files if they exists in the data directory
   QDir translationsDir = cmExecDir;

+ 14 - 0
Source/QtDialog/CMakeSetupDialog.cxx

@@ -32,6 +32,7 @@
 #include <QDragEnterEvent>
 #include <QMimeData>
 #include <QUrl>
+#include <QShortcut>
 
 #include "QCMake.h"
 #include "QCMakeCacheView.h"
@@ -96,6 +97,7 @@ CMakeSetupDialog::CMakeSetupDialog()
   this->GenerateAction = ToolsMenu->addAction(tr("&Generate"));
   QObject::connect(this->GenerateAction, SIGNAL(triggered(bool)), 
                    this, SLOT(doGenerate()));
+  
 
   QMenu* HelpMenu = this->menuBar()->addMenu(tr("&Help"));
   QAction* a = HelpMenu->addAction(tr("About"));
@@ -105,6 +107,10 @@ CMakeSetupDialog::CMakeSetupDialog()
   QObject::connect(a, SIGNAL(triggered(bool)),
                    this, SLOT(doHelp()));
   
+  QShortcut* filterShortcut = new QShortcut(QKeySequence::Find, this);
+  QObject::connect(filterShortcut, SIGNAL(activated()), 
+                   this, SLOT(startSearch()));
+  
   this->setAcceptDrops(true);
   
   // get the saved binary directories
@@ -266,6 +272,7 @@ void CMakeSetupDialog::doConfigure()
   this->enterState(Configuring);
 
   this->Output->clear();
+  this->CacheValues->selectionModel()->clear();
   QMetaObject::invokeMethod(this->CMakeThread->cmakeInstance(),
     "setProperties", Qt::QueuedConnection, 
     Q_ARG(QCMakeCachePropertyList,
@@ -829,3 +836,10 @@ void CMakeSetupDialog::addCacheEntry()
     }
 }
 
+void CMakeSetupDialog::startSearch()
+{
+  this->Search->setFocus(Qt::OtherFocusReason);
+  this->Search->selectAll();
+}
+
+

+ 1 - 0
Source/QtDialog/CMakeSetupDialog.h

@@ -71,6 +71,7 @@ protected slots:
   void removeSelectedCacheEntries();
   void selectionChanged();
   void addCacheEntry();
+  void startSearch();
 
 protected:
 

+ 14 - 10
Source/QtDialog/QCMake.cxx

@@ -31,22 +31,27 @@ QCMake::QCMake(QObject* p)
   qRegisterMetaType<QCMakeCacheProperty>();
   qRegisterMetaType<QCMakeCachePropertyList>();
   
-  QDir appDir(QCoreApplication::applicationDirPath());
-#if defined(Q_OS_WIN)
-  this->CMakeExecutable = appDir.filePath("cmake.exe");
-#elif defined(Q_OS_MAC)
-  appDir.cd("../../../");  // path to cmake in build directory (need to fix for deployment)
-  this->CMakeExecutable = appDir.filePath("cmake");
-#else
-  this->CMakeExecutable = appDir.filePath("cmake");
+  QDir execDir(QCoreApplication::applicationDirPath());
+  
+  QString cmakeGUICommand = QString("cmake-gui")+cmSystemTools::GetExecutableExtension();
+  cmakeGUICommand = execDir.filePath(cmakeGUICommand);
+
+#if defined(Q_OS_MAC)
+  execDir.cd("../../../");  // path to cmake in build directory (need to fix for deployment)
 #endif
-  // TODO: check for existence?
+  
+  QString cmakeCommand = QString("cmake")+cmSystemTools::GetExecutableExtension();
+  cmakeCommand = execDir.filePath(cmakeCommand);
+
 
   cmSystemTools::DisableRunCommandOutput();
   cmSystemTools::SetRunCommandHideConsole(true);
   cmSystemTools::SetErrorCallback(QCMake::errorCallback, this);
+  cmSystemTools::FindExecutableDirectory(cmakeCommand.toAscii().data());
 
   this->CMakeInstance = new cmake;
+  this->CMakeInstance->SetCMakeCommand(cmakeCommand.toAscii().data());
+  //this->CMakeInstance->SetCMakeEditCommand(cmakeGUICommand.toAscii().data());
   this->CMakeInstance->SetCMakeEditCommand("cmake-gui");
   this->CMakeInstance->SetProgressCallback(QCMake::progressCallback, this);
 
@@ -131,7 +136,6 @@ void QCMake::configure()
   this->CMakeInstance->SetStartOutputDirectory(this->BinaryDirectory.toAscii().data());
   this->CMakeInstance->SetGlobalGenerator(
     this->CMakeInstance->CreateGlobalGenerator(this->Generator.toAscii().data()));
-  this->CMakeInstance->SetCMakeCommand(this->CMakeExecutable.toAscii().data());
   this->CMakeInstance->LoadCache();
   this->CMakeInstance->PreLoadCMakeFiles();
 

+ 8 - 24
Source/QtDialog/QCMakeCacheView.cxx

@@ -75,6 +75,9 @@ QCMakeCacheView::QCMakeCacheView(QWidget* p)
                         QAbstractItemView::EditKeyPressed |
                         QAbstractItemView::AnyKeyPressed);
 
+  // tab, backtab doesn't step through items
+  this->setTabKeyNavigation(false);
+
   // set up headers and sizes
   int h = 0;
   QFontMetrics met(this->font());
@@ -105,33 +108,14 @@ QCMakeCacheModel* QCMakeCacheView::cacheModel() const
 QModelIndex QCMakeCacheView::moveCursor(CursorAction act, 
   Qt::KeyboardModifiers mod)
 {
-  // tab through values only (not names)
-  QModelIndex current = this->currentIndex();
-  if(act == MoveNext)
+  // want home/end to go to begin/end of rows, not columns
+  if(act == MoveHome)
     {
-    if(!current.isValid())
-      {
-      return this->model()->index(0, 1);
-      }
-    else if(current.column() == 0)
-      {
-      return this->model()->index(current.row(), 1);
-      }
-    else
-      {
-      return this->model()->index(current.row()+1, 1);
-      }
+    return this->model()->index(0, 1);
     }
-  else if(act == MovePrevious)
+  else if(act == MoveEnd)
     {
-    if(!current.isValid())
-      {
-      return this->model()->index(0, 1);
-      }
-    else
-      {
-      return this->model()->index(current.row()-1, 1);
-      }
+    return this->model()->index(this->model()->rowCount()-1, 1);
     }
   return QTableView::moveCursor(act, mod);
 }