Browse Source

ENH: add callback for message display

Bill Hoffman 24 years ago
parent
commit
539318f587

+ 11 - 1
Source/FLTKDialog/CMakeSetupGUIImplementation.cxx

@@ -12,7 +12,15 @@
 #include "../cmake.h"
 #include "../cmMakefileGenerator.h"
 
-
+void FLTKMessageCallback(const char* message, const char* title, bool& nomore)
+{
+  int ok = 
+    fl_ask(message, "Press cancel to suppress any further messages.");
+  if(!ok)
+  {
+    nomore = true;
+  }
+}
 
 /**
  * Constructor
@@ -20,6 +28,7 @@
 CMakeSetupGUIImplementation
 ::CMakeSetupGUIImplementation():m_CacheEntriesList( this )
 {
+  cmSystemTools::SetErrorCallback(FLTKMessageCallback);
   m_BuildPathChanged = false;
 }
 
@@ -359,6 +368,7 @@ CMakeSetupGUIImplementation
   arg += m_WhereBuild;
   args.push_back(arg);
   arg = "-G";
+  m_GeneratorChoiceString = "Unix Makefiles";
   arg += m_GeneratorChoiceString;
   args.push_back(arg);
   // run the generate process

+ 8 - 1
Source/cmCacheManager.cxx

@@ -438,7 +438,14 @@ void cmCacheManager::OutputHelpString(std::ofstream& fout,
 
 void cmCacheManager::RemoveCacheEntry(const char* key)
 {
-  m_Cache.erase(key);
+  if(m_Cache.count(key))
+  {  
+    m_Cache.erase(key);
+  }
+  else
+  {
+    std::cerr << "Failed to remove entry" << std::endl;
+  }
 }
 
 

+ 14 - 1
Source/cmSystemTools.cxx

@@ -93,6 +93,8 @@ inline int Chdir(const char* dir)
 
 bool cmSystemTools::s_ErrorOccured = false;
 
+void (*cmSystemTools::s_ErrorCallback)(const char*, const char*, bool&);
+
 // adds the elements of the env variable path to the arg passed in
 void cmSystemTools::GetPath(std::vector<std::string>& path)
 {
@@ -689,14 +691,25 @@ void cmSystemTools::Error(const char* m1, const char* m2,
   cmSystemTools::Message(message.c_str(),"Error");
 }
 
+
+void cmSystemTools::SetErrorCallback(ErrorCallback f)
+{
+  s_ErrorCallback = f;
+}
+
 void cmSystemTools::Message(const char* m1, const char *title)
 {
-#if defined(_WIN32) && !defined(__CYGWIN__)
   static bool disableMessages = false;
   if(disableMessages)
     {
     return;
     }
+  if(s_ErrorCallback)
+    {
+    (*s_ErrorCallback)(m1, title, disableMessages);
+    return;
+    }
+#if defined(_WIN32) && !defined(__CYGWIN__)
   std::string message = m1;
   message += "\n\n(Press  Cancel to suppress any further messages.)";
   if(::MessageBox(0, message.c_str(), title, 

+ 11 - 1
Source/cmSystemTools.h

@@ -156,7 +156,16 @@ public:
    *  on the current platform ("" for unix, ".exe" for Windows).
    */
   static const char* GetExecutableExtension();
-  
+
+  typedef  void (*ErrorCallback)(const char*, const char*, bool&);
+  /**
+   *  Set the function used by GUI's to display error messages
+   *  Function gets passed: message as a const char*, 
+   *  title as a const char*, and a reference to bool that when
+   *  set to false, will disable furthur messages (cancel).
+   */
+  static void SetErrorCallback(ErrorCallback f);
+
   /**
    * Display an error message.
    */
@@ -273,6 +282,7 @@ public:
     
 private:
   static bool s_ErrorOccured;
+  static ErrorCallback s_ErrorCallback;
 };