Ken Martin 23 лет назад
Родитель
Сommit
2c7e9b3b59

+ 1 - 1
Source/CursesDialog/ccmake.cxx

@@ -133,7 +133,7 @@ int main(int argc, char** argv)
   cmCursesForm::CurrentForm = myform;
 
   myform->InitializeUI();
-  if (myform->RunCMake(false) == 0 )
+  if (myform->Configure() == 0 )
     {
     myform->Render(1, 1, x, y);
     myform->HandleInput();

+ 2 - 2
Source/CursesDialog/cmCursesLongMessageForm.cxx

@@ -79,8 +79,8 @@ void cmCursesLongMessageForm::UpdateStatusBar()
 
   char version[cmCursesMainForm::MAX_WIDTH];
   char vertmp[128];
-  sprintf(vertmp,"CMake Version %d.%d - %s", cmMakefile::GetMajorVersion(),
-	  cmMakefile::GetMinorVersion(),cmMakefile::GetReleaseVersion());
+  sprintf(vertmp,"CMake Version %d.%d - %s", cmake::GetMajorVersion(),
+	  cmake::GetMinorVersion(),cmake::GetReleaseVersion());
   int sideSpace = (width-strlen(vertmp));
   for(int i=0; i<sideSpace; i++) { version[i] = ' '; }
   sprintf(version+sideSpace, "%s", vertmp);

+ 95 - 27
Source/CursesDialog/cmCursesMainForm.cxx

@@ -47,6 +47,12 @@ cmCursesMainForm::cmCursesMainForm(std::vector<std::string> const& args,
   m_HelpMessage.push_back("");
   m_HelpMessage.push_back(s_ConstHelpMessage);
   m_CMakeInstance = new cmake;
+
+  // create the arguments for the cmake object
+  std::string whereCMake = cmSystemTools::GetProgramPath(m_Args[0].c_str());
+  whereCMake += "/cmake";
+  m_Args[0] = whereCMake;
+  m_CMakeInstance->SetArgs(m_Args);
 }
 
 cmCursesMainForm::~cmCursesMainForm()
@@ -362,11 +368,15 @@ void cmCursesMainForm::PrintKeys()
     cw = reinterpret_cast<cmCursesWidget*>(field_userptr(currentField));
     }
 
-  if (cw && cw->PrintKeys())
+  if (cw)
     {
+    cw->PrintKeys();
     }
-  else
-    {
+  
+//    {
+//    }
+//  else
+//    {
     char firstLine[512], secondLine[512], thirdLine[512];
     if (m_OkToGenerate)
       {
@@ -374,7 +384,7 @@ void cmCursesMainForm::PrintKeys()
       }
     else
       {
-      sprintf(firstLine,  "Press [c] to configure");
+      sprintf(firstLine,  "Press [c] to configure                                   ");
       }
     if (m_AdvancedMode)
       {
@@ -404,7 +414,7 @@ void cmCursesMainForm::PrintKeys()
       curses_move(0,65-strlen(firstLine)-1);
       printw(firstLine);
       }
-    }
+//    }
 
   pos_form_cursor(m_Form);
   
@@ -504,8 +514,8 @@ void cmCursesMainForm::UpdateStatusBar()
   // We want to display this on the right
   char version[cmCursesMainForm::MAX_WIDTH];
   char vertmp[128];
-  sprintf(vertmp,"CMake Version %d.%d - %s", cmMakefile::GetMajorVersion(),
-	  cmMakefile::GetMinorVersion(),cmMakefile::GetReleaseVersion());
+  sprintf(vertmp,"CMake Version %d.%d - %s", cmake::GetMajorVersion(),
+	  cmake::GetMinorVersion(),cmake::GetReleaseVersion());
   int sideSpace = (width-strlen(vertmp));
   for(i=0; i<sideSpace; i++) { version[i] = ' '; }
   sprintf(version+sideSpace, "%s", vertmp);
@@ -521,7 +531,7 @@ void cmCursesMainForm::UpdateStatusBar()
   pos_form_cursor(m_Form);
 }
 
-int cmCursesMainForm::RunCMake(bool generateMakefiles)
+int cmCursesMainForm::Configure()
 {
 
   int x,y;
@@ -532,33 +542,21 @@ int cmCursesMainForm::RunCMake(bool generateMakefiles)
   touchwin(stdscr);
   refresh();
   endwin();
-  std::cerr << "Running CMake, please wait...\n\r";
+  std::cerr << "Configuring, please wait...\n\r";
 
-  // free the old cmake and create a new one here
-  if (this->m_CMakeInstance)
-    {
-    delete this->m_CMakeInstance;
-    this->m_CMakeInstance = 0;
-    }
-  this->m_CMakeInstance = new cmake;
 
   // always save the current gui values to disk
   this->FillCacheManagerFromUI();
   this->m_CMakeInstance->GetCacheManager()->SaveCache(
     cmSystemTools::GetCurrentWorkingDirectory().c_str());
 
-  // create the arguments for the cmake object
-  std::string whereCMake = cmSystemTools::GetProgramPath(m_Args[0].c_str());
-  whereCMake += "/cmake";
-
-  m_Args[0] = whereCMake;
-
+  
   // Get rid of previous errors
   m_Errors = std::vector<std::string>();
 
   // run the generate process
   m_OkToGenerate = true;
-  int retVal = this->m_CMakeInstance->Generate(m_Args, generateMakefiles);
+  int retVal = this->m_CMakeInstance->Configure(m_Args[0].c_str(), &m_Args);
 
   initscr(); /* Initialization */ 
   noecho(); /* Echo off */ 
@@ -591,7 +589,6 @@ int cmCursesMainForm::RunCMake(bool generateMakefiles)
     CurrentForm = this;
     this->Render(1,1,x,y);
     }
-
    
   this->InitializeUI();
   this->Render(1, 1, x, y);
@@ -599,6 +596,64 @@ int cmCursesMainForm::RunCMake(bool generateMakefiles)
   return 0;
 }
 
+int cmCursesMainForm::Generate()
+{
+  m_CMakeInstance->Generate();
+  
+  int x,y;
+  getmaxyx(stdscr, y, x);
+
+  curses_clear();
+  curses_move(1,1);
+  touchwin(stdscr);
+  refresh();
+  endwin();
+  std::cerr << "Generating, please wait...\n\r";
+
+  // Get rid of previous errors
+  m_Errors = std::vector<std::string>();
+
+  // run the generate process
+  int retVal = this->m_CMakeInstance->Generate();
+
+  initscr(); /* Initialization */ 
+  noecho(); /* Echo off */ 
+  cbreak(); /* nl- or cr not needed */ 
+  keypad(stdscr,TRUE); /* Use key symbols as 
+			  KEY_DOWN*/ 
+
+  if( retVal != 0 || !m_Errors.empty())
+    {
+    // see if there was an error
+    if(cmSystemTools::GetErrorOccuredFlag())
+      {
+      m_OkToGenerate = false;
+      }
+    // reset error condition
+    cmSystemTools::ResetErrorOccuredFlag();
+    int x,y;
+    getmaxyx(stdscr, y, x);
+    cmCursesLongMessageForm* msgs = new cmCursesLongMessageForm(m_Errors,
+								"Errors which during last pass.");
+    CurrentForm = msgs;
+    msgs->Render(1,1,x,y);
+    msgs->HandleInput();
+    // If they typed the wrong source directory, we report
+    // an error and exit
+    if ( retVal == -2 )
+      {
+      return retVal;
+      }
+    CurrentForm = this;
+    this->Render(1,1,x,y);
+    }
+  
+  this->InitializeUI();
+  this->Render(1, 1, x, y);
+  
+  return 0;
+}
+
 void cmCursesMainForm::AddError(const char* message, const char*)
 {
   m_Errors.push_back(message);
@@ -693,7 +748,19 @@ void cmCursesMainForm::HandleInput()
       currentField));
 
     // Ask the current widget if it wants to handle input
-    if (!currentWidget || !currentWidget->HandleInput(key, this, stdscr))
+    bool widgetHandled;
+    
+    if (currentWidget)
+      {
+      widgetHandled = currentWidget->HandleInput(key, this, stdscr);
+      if (widgetHandled)
+        {
+        m_OkToGenerate = false;
+        this->UpdateStatusBar();
+        this->PrintKeys();
+        }
+      }
+    if (!currentWidget || !widgetHandled)
       {
       // If the current widget does not want to handle input, 
       // we handle it.
@@ -762,7 +829,7 @@ void cmCursesMainForm::HandleInput()
       // configure
       else if ( key == 'c' )
 	{
-	this->RunCMake(false);
+	this->Configure();
 	}
       // display help
       else if ( key == 'h' )
@@ -834,13 +901,14 @@ void cmCursesMainForm::HandleInput()
 	{
 	if ( m_OkToGenerate )
 	  {
-	  this->RunCMake(true);
+	  this->Generate();
 	  break;
 	  }
 	}
       // delete cache entry
       else if ( key == 'd' )
 	{
+        m_OkToGenerate = false;
 	FIELD* cur = current_field(m_Form);
 	int index = field_index(cur);
 

+ 7 - 2
Source/CursesDialog/cmCursesMainForm.h

@@ -84,9 +84,14 @@ public:
   virtual void AddError(const char* message, const char* title);
 
   /**
-   * Used to run cmake.
+   * Used to do a configure.
    */
-  int RunCMake(bool generateMakefiles);
+  int Configure();
+
+  /**
+   * Used to generate 
+   */
+  int Generate();
 
   /**
    * Used by main program