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  fb9821f70dd959c377458ac15a0f9a8e35321c73 (commit)
       via  4cc5c46ba26682dba9c800fe0963be2fab5a5734 (commit)
      from  50812834abca50370338b8a86bdcf956406ad370 (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=fb9821f70dd959c377458ac15a0f9a8e35321c73
commit fb9821f70dd959c377458ac15a0f9a8e35321c73
Merge: 5081283 4cc5c46
Author:     Bill Hoffman <bill.hoff...@kitware.com>
AuthorDate: Fri Sep 20 17:53:21 2013 -0400
Commit:     CMake Topic Stage <kwro...@kitware.com>
CommitDate: Fri Sep 20 17:53:21 2013 -0400

    Merge topic 'add_cache_options_to_ccmake' into next
    
    4cc5c46 Teach ccmake to understand cache option strings.


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=4cc5c46ba26682dba9c800fe0963be2fab5a5734
commit 4cc5c46ba26682dba9c800fe0963be2fab5a5734
Author:     Bill Hoffman <bill.hoff...@kitware.com>
AuthorDate: Fri Sep 20 17:47:38 2013 -0400
Commit:     Bill Hoffman <bill.hoff...@kitware.com>
CommitDate: Fri Sep 20 17:47:38 2013 -0400

    Teach ccmake to understand cache option strings.
    
    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..be7d413
--- /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;
+  unsigned int CurrentOption;
+};
+
+#endif // __cmCursesOptionsWidget_h

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

Summary of changes:
 Source/CursesDialog/CMakeLists.txt                 |    1 +
 .../CursesDialog/cmCursesCacheEntryComposite.cxx   |   25 ++++-
 Source/CursesDialog/cmCursesOptionsWidget.cxx      |  106 ++++++++++++++++++++
 ...CursesDummyWidget.h => cmCursesOptionsWidget.h} |   23 +++--
 4 files changed, 142 insertions(+), 13 deletions(-)
 create mode 100644 Source/CursesDialog/cmCursesOptionsWidget.cxx
 copy Source/CursesDialog/{cmCursesDummyWidget.h => cmCursesOptionsWidget.h} 
(63%)


hooks/post-receive
-- 
CMake
_______________________________________________
Cmake-commits mailing list
Cmake-commits@cmake.org
http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-commits

Reply via email to