new architecture

This commit is contained in:
Ken Martin 2002-09-06 13:00:12 -04:00
parent b0fa5117bf
commit 2c7e9b3b59
4 changed files with 105 additions and 32 deletions

View File

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

View File

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

View File

@ -47,6 +47,12 @@ cmCursesMainForm::cmCursesMainForm(std::vector<std::string> const& args,
m_HelpMessage.push_back(""); m_HelpMessage.push_back("");
m_HelpMessage.push_back(s_ConstHelpMessage); m_HelpMessage.push_back(s_ConstHelpMessage);
m_CMakeInstance = new cmake; 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() cmCursesMainForm::~cmCursesMainForm()
@ -362,11 +368,15 @@ void cmCursesMainForm::PrintKeys()
cw = reinterpret_cast<cmCursesWidget*>(field_userptr(currentField)); cw = reinterpret_cast<cmCursesWidget*>(field_userptr(currentField));
} }
if (cw && cw->PrintKeys()) if (cw)
{ {
cw->PrintKeys();
} }
else
{ // {
// }
// else
// {
char firstLine[512], secondLine[512], thirdLine[512]; char firstLine[512], secondLine[512], thirdLine[512];
if (m_OkToGenerate) if (m_OkToGenerate)
{ {
@ -374,7 +384,7 @@ void cmCursesMainForm::PrintKeys()
} }
else else
{ {
sprintf(firstLine, "Press [c] to configure"); sprintf(firstLine, "Press [c] to configure ");
} }
if (m_AdvancedMode) if (m_AdvancedMode)
{ {
@ -404,7 +414,7 @@ void cmCursesMainForm::PrintKeys()
curses_move(0,65-strlen(firstLine)-1); curses_move(0,65-strlen(firstLine)-1);
printw(firstLine); printw(firstLine);
} }
} // }
pos_form_cursor(m_Form); pos_form_cursor(m_Form);
@ -504,8 +514,8 @@ void cmCursesMainForm::UpdateStatusBar()
// We want to display this on the right // We want to display this on the right
char version[cmCursesMainForm::MAX_WIDTH]; char version[cmCursesMainForm::MAX_WIDTH];
char vertmp[128]; char vertmp[128];
sprintf(vertmp,"CMake Version %d.%d - %s", cmMakefile::GetMajorVersion(), sprintf(vertmp,"CMake Version %d.%d - %s", cmake::GetMajorVersion(),
cmMakefile::GetMinorVersion(),cmMakefile::GetReleaseVersion()); cmake::GetMinorVersion(),cmake::GetReleaseVersion());
int sideSpace = (width-strlen(vertmp)); int sideSpace = (width-strlen(vertmp));
for(i=0; i<sideSpace; i++) { version[i] = ' '; } for(i=0; i<sideSpace; i++) { version[i] = ' '; }
sprintf(version+sideSpace, "%s", vertmp); sprintf(version+sideSpace, "%s", vertmp);
@ -521,7 +531,7 @@ void cmCursesMainForm::UpdateStatusBar()
pos_form_cursor(m_Form); pos_form_cursor(m_Form);
} }
int cmCursesMainForm::RunCMake(bool generateMakefiles) int cmCursesMainForm::Configure()
{ {
int x,y; int x,y;
@ -532,33 +542,21 @@ int cmCursesMainForm::RunCMake(bool generateMakefiles)
touchwin(stdscr); touchwin(stdscr);
refresh(); refresh();
endwin(); 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 // always save the current gui values to disk
this->FillCacheManagerFromUI(); this->FillCacheManagerFromUI();
this->m_CMakeInstance->GetCacheManager()->SaveCache( this->m_CMakeInstance->GetCacheManager()->SaveCache(
cmSystemTools::GetCurrentWorkingDirectory().c_str()); 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 // Get rid of previous errors
m_Errors = std::vector<std::string>(); m_Errors = std::vector<std::string>();
// run the generate process // run the generate process
m_OkToGenerate = true; 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 */ initscr(); /* Initialization */
noecho(); /* Echo off */ noecho(); /* Echo off */
@ -591,7 +589,6 @@ int cmCursesMainForm::RunCMake(bool generateMakefiles)
CurrentForm = this; CurrentForm = this;
this->Render(1,1,x,y); this->Render(1,1,x,y);
} }
this->InitializeUI(); this->InitializeUI();
this->Render(1, 1, x, y); this->Render(1, 1, x, y);
@ -599,6 +596,64 @@ int cmCursesMainForm::RunCMake(bool generateMakefiles)
return 0; 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*) void cmCursesMainForm::AddError(const char* message, const char*)
{ {
m_Errors.push_back(message); m_Errors.push_back(message);
@ -693,7 +748,19 @@ void cmCursesMainForm::HandleInput()
currentField)); currentField));
// Ask the current widget if it wants to handle input // 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, // If the current widget does not want to handle input,
// we handle it. // we handle it.
@ -762,7 +829,7 @@ void cmCursesMainForm::HandleInput()
// configure // configure
else if ( key == 'c' ) else if ( key == 'c' )
{ {
this->RunCMake(false); this->Configure();
} }
// display help // display help
else if ( key == 'h' ) else if ( key == 'h' )
@ -834,13 +901,14 @@ void cmCursesMainForm::HandleInput()
{ {
if ( m_OkToGenerate ) if ( m_OkToGenerate )
{ {
this->RunCMake(true); this->Generate();
break; break;
} }
} }
// delete cache entry // delete cache entry
else if ( key == 'd' ) else if ( key == 'd' )
{ {
m_OkToGenerate = false;
FIELD* cur = current_field(m_Form); FIELD* cur = current_field(m_Form);
int index = field_index(cur); int index = field_index(cur);

View File

@ -84,9 +84,14 @@ public:
virtual void AddError(const char* message, const char* title); 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 * Used by main program