[Cmake-commits] CMake branch, next, updated. v2.8.11.2-4458-ge20427d

Brad King brad.king at kitware.com
Mon Oct 7 14:22:37 EDT 2013


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".

The branch, next has been updated
       via  e20427d460f44c403c14bd81b801d1eb285fcded (commit)
       via  fadffab53879fa67144db9f4899eca1dca506907 (commit)
      from  0c2fae3c8722770818a35f37d2fcdcab39dc8776 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=e20427d460f44c403c14bd81b801d1eb285fcded
commit e20427d460f44c403c14bd81b801d1eb285fcded
Merge: 0c2fae3 fadffab
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Mon Oct 7 14:22:35 2013 -0400
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Mon Oct 7 14:22:35 2013 -0400

    Merge topic 'add_cache_options_to_ccmake' into next
    
    fadffab ccmake: Teach dialog to support cache STRINGS property


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=fadffab53879fa67144db9f4899eca1dca506907
commit fadffab53879fa67144db9f4899eca1dca506907
Author:     Bill Hoffman <bill.hoffman at kitware.com>
AuthorDate: Fri Sep 20 17:47:38 2013 -0400
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Mon Oct 7 14:17:54 2013 -0400

    ccmake: Teach dialog to support cache STRINGS property
    
    This commit adds the ability to ccmake of cycling through cache options.
    This uses the STRINGS property of the cache entry. The enter key will cycle
    forward, and the right and left arrows will go up and down in the list.

diff --git a/Source/CursesDialog/CMakeLists.txt b/Source/CursesDialog/CMakeLists.txt
index 5efc2fb..548f5a5 100644
--- a/Source/CursesDialog/CMakeLists.txt
+++ b/Source/CursesDialog/CMakeLists.txt
@@ -11,6 +11,7 @@
 #=============================================================================
 
 set( CURSES_SRCS
+              CursesDialog/cmCursesOptionsWidget
               CursesDialog/cmCursesBoolWidget
               CursesDialog/cmCursesCacheEntryComposite
               CursesDialog/cmCursesDummyWidget
diff --git a/Source/CursesDialog/cmCursesCacheEntryComposite.cxx b/Source/CursesDialog/cmCursesCacheEntryComposite.cxx
index c58d037..249137f 100644
--- a/Source/CursesDialog/cmCursesCacheEntryComposite.cxx
+++ b/Source/CursesDialog/cmCursesCacheEntryComposite.cxx
@@ -10,6 +10,7 @@
   See the License for more information.
 ============================================================================*/
 #include "cmCursesCacheEntryComposite.h"
+#include "cmCursesOptionsWidget.h"
 #include "cmCursesStringWidget.h"
 #include "cmCursesLabelWidget.h"
 #include "cmCursesBoolWidget.h"
@@ -69,9 +70,27 @@ cmCursesCacheEntryComposite::cmCursesCacheEntryComposite(
         it.GetValue());
       break;
     case cmCacheManager::STRING:
-      this->Entry = new cmCursesStringWidget(this->EntryWidth, 1, 1, 1);
-      static_cast<cmCursesStringWidget*>(this->Entry)->SetString(
-        it.GetValue());
+      if(it.PropertyExists("STRINGS"))
+        {
+        cmCursesOptionsWidget* ow =
+          new cmCursesOptionsWidget(this->EntryWidth, 1, 1, 1);
+        this->Entry = ow;
+        std::vector<std::string> options;
+        cmSystemTools::ExpandListArgument(
+          std::string(it.GetProperty("STRINGS")), options);
+        for(std::vector<std::string>::iterator
+              si = options.begin(); si != options.end(); ++si)
+          {
+          ow->AddOption(*si);
+          }
+        ow->SetOption(it.GetValue());
+        }
+      else
+        {
+        this->Entry = new cmCursesStringWidget(this->EntryWidth, 1, 1, 1);
+        static_cast<cmCursesStringWidget*>(this->Entry)->SetString(
+          it.GetValue());
+        }
       break;
     case cmCacheManager::UNINITIALIZED:
       cmSystemTools::Error("Found an undefined variable: ", it.GetName());
diff --git a/Source/CursesDialog/cmCursesOptionsWidget.cxx b/Source/CursesDialog/cmCursesOptionsWidget.cxx
new file mode 100644
index 0000000..652b2df
--- /dev/null
+++ b/Source/CursesDialog/cmCursesOptionsWidget.cxx
@@ -0,0 +1,106 @@
+/*============================================================================
+  CMake - Cross Platform Makefile Generator
+  Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
+
+  Distributed under the OSI-approved BSD License (the "License");
+  see accompanying file Copyright.txt for details.
+
+  This software is distributed WITHOUT ANY WARRANTY; without even the
+  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+  See the License for more information.
+============================================================================*/
+#include "cmCursesOptionsWidget.h"
+#include "cmCursesMainForm.h"
+
+inline int ctrl(int z)
+{
+    return (z&037);
+}
+
+cmCursesOptionsWidget::cmCursesOptionsWidget(int width, int height,
+                                       int left, int top) :
+  cmCursesWidget(width, height, left, top)
+{
+  this->Type = cmCacheManager::BOOL; // this is a bit of a hack
+  // there is no option type, and string type causes ccmake to cast
+  // the widget into a string widget at some point.  BOOL is safe for
+  // now.
+  set_field_fore(this->Field,  A_NORMAL);
+  set_field_back(this->Field,  A_STANDOUT);
+  field_opts_off(this->Field,  O_STATIC);
+}
+
+bool cmCursesOptionsWidget::HandleInput(int& key, cmCursesMainForm*, WINDOW* w)
+{
+
+  // 10 == enter
+  if (key == 10 || key == KEY_ENTER)
+    {
+    this->NextOption();
+    touchwin(w);
+    wrefresh(w);
+    return true;
+    }
+  else if (key == KEY_LEFT || key == ctrl('b'))
+    {
+    touchwin(w);
+    wrefresh(w);
+    this->PreviousOption();
+    return true;
+    }
+  else if (key == KEY_RIGHT || key == ctrl('f'))
+    {
+    this->NextOption();
+    touchwin(w);
+    wrefresh(w);
+    return true;
+    }
+  else
+    {
+    return false;
+    }
+  return false;
+}
+
+void cmCursesOptionsWidget::AddOption(std::string const & option )
+{
+  this->Options.push_back(option);
+}
+
+void cmCursesOptionsWidget::NextOption()
+{
+  this->CurrentOption++;
+  if(this->CurrentOption > this->Options.size()-1)
+    {
+    this->CurrentOption = 0;
+    }
+  this->SetValue(this->Options[this->CurrentOption].c_str());
+}
+void cmCursesOptionsWidget::PreviousOption()
+{
+  if(this->CurrentOption == 0)
+    {
+    this->CurrentOption = this->Options.size()-1;
+    }
+  else
+    {
+    this->CurrentOption--;
+    }
+  this->SetValue(this->Options[this->CurrentOption].c_str());
+}
+
+void cmCursesOptionsWidget::SetOption(const char* value)
+{
+  this->CurrentOption = 0; // default to 0 index
+  this->SetValue(value);
+  int index = 0;
+  for(std::vector<std::string>::iterator i = this->Options.begin();
+      i != this->Options.end(); ++i)
+    {
+    if(*i == value)
+      {
+      this->CurrentOption = index;
+      }
+    index++;
+    }
+}
diff --git a/Source/CursesDialog/cmCursesOptionsWidget.h b/Source/CursesDialog/cmCursesOptionsWidget.h
new file mode 100644
index 0000000..b52ac9d
--- /dev/null
+++ b/Source/CursesDialog/cmCursesOptionsWidget.h
@@ -0,0 +1,39 @@
+/*============================================================================
+  CMake - Cross Platform Makefile Generator
+  Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
+
+  Distributed under the OSI-approved BSD License (the "License");
+  see accompanying file Copyright.txt for details.
+
+  This software is distributed WITHOUT ANY WARRANTY; without even the
+  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+  See the License for more information.
+============================================================================*/
+#ifndef __cmCursesOptionsWidget_h
+#define __cmCursesOptionsWidget_h
+
+#include "cmCursesWidget.h"
+class cmCursesMainForm;
+
+class cmCursesOptionsWidget : public cmCursesWidget
+{
+public:
+  cmCursesOptionsWidget(int width, int height, int left, int top);
+
+  // Description:
+  // Handle user input. Called by the container of this widget
+  // when this widget has focus. Returns true if the input was
+  // handled.
+  virtual bool HandleInput(int& key, cmCursesMainForm* fm, WINDOW* w);
+  void SetOption(const char*);
+  void AddOption(std::string const &);
+  void NextOption();
+  void PreviousOption();
+protected:
+  cmCursesOptionsWidget(const cmCursesOptionsWidget& from);
+  void operator=(const cmCursesOptionsWidget&);
+  std::vector<std::string> Options;
+  std::vector<std::string>::size_type CurrentOption;
+};
+
+#endif // __cmCursesOptionsWidget_h

-----------------------------------------------------------------------

Summary of changes:


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list