| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507 | 
							
- #include "CMakeSetupGUIImplementation.h"
 
- #include "FL/fl_file_chooser.H"
 
- #include "FL/filename.H"
 
- #include "FL/fl_ask.H"
 
- #include "cstring"
 
- #include "../cmCacheManager.h"
 
- #include "../cmMakefile.h"
 
- #include <iostream>
 
- #include "FLTKPropertyList.h"
 
- #include "FL/fl_draw.H"
 
- #include "../cmake.h"
 
- /**
 
-  * Constructor
 
-  */
 
- CMakeSetupGUIImplementation
 
- ::CMakeSetupGUIImplementation():m_CacheEntriesList( this )
 
- {
 
-   m_BuildPathChanged = false;
 
- }
 
- /**
 
-  * Destructor
 
-  */
 
- CMakeSetupGUIImplementation
 
- ::~CMakeSetupGUIImplementation()
 
- {
 
- }
 
- /**
 
-  * Show the graphic interface
 
-  */
 
- void
 
- CMakeSetupGUIImplementation
 
- ::Show( void )
 
- {
 
-   dialogWindow->show();
 
- }
 
- /**
 
-  * Hide the graphic interface
 
-  */
 
- void
 
- CMakeSetupGUIImplementation
 
- ::Close( void )
 
- {
 
-   dialogWindow->hide();
 
- }
 
- /**
 
-  * Browse for the path to the sources
 
-  */
 
- void
 
- CMakeSetupGUIImplementation
 
- ::BrowseForSourcePath( void )
 
- {
 
-   const char * path = 
 
-                   fl_file_chooser(
 
-                     "Path to Sources",
 
-                     "",
 
-                     sourcePathTextInput->value() );
 
-                     
 
-   if( !path )
 
-   {
 
-     return;
 
-   }
 
-   
 
-   SetSourcePath( path );
 
- }
 
- /**
 
-  * Browse for the path to the binaries
 
-  */
 
- void
 
- CMakeSetupGUIImplementation
 
- ::BrowseForBinaryPath( void )
 
- {
 
-   const char * path = 
 
-                   fl_file_chooser(
 
-                     "Path to Binaries",
 
-                     "",
 
-                     binaryPathTextInput->value() );
 
-                     
 
-   if( !path )
 
-   {
 
-     return;
 
-   }
 
-   SetBinaryPath( path );
 
- }
 
- /**
 
-  * Set path to executable. Used to get the path to CMake
 
-  */
 
- void
 
- CMakeSetupGUIImplementation
 
- ::SetPathToExecutable( const char * path )
 
- {
 
-   m_PathToExecutable = path;
 
-   
 
-   char expandedPath[1024];
 
-   filename_expand( expandedPath, path );
 
-   
 
-   char absolutePath[1024];
 
-   filename_absolute( absolutePath, expandedPath );
 
-   char * p = absolutePath + strlen( absolutePath );
 
-   while( *p != '/'  && *p != '\\' ) 
 
-   {
 
-     p--;
 
-   }
 
-   p--;
 
-   while( *p != '/'  && *p != '\\' ) 
 
-   {
 
-     p--;
 
-   }
 
-   *p = '\0';
 
-   
 
-   m_PathToExecutable = absolutePath;
 
- #if defined(_WIN32)
 
-   m_PathToExecutable += "/Debug/CMake.exe";
 
- #else
 
-   m_PathToExecutable += "/cmake";
 
- #endif
 
- }
 
- /**
 
-  * Set the source path
 
-  */
 
- bool
 
- CMakeSetupGUIImplementation
 
- ::SetSourcePath( const char * path )
 
- {
 
-   if( !path || strlen(path)==0 )
 
-   {
 
-     fl_alert("Please select the path to the sources");
 
-     return false; 
 
-   }
 
-   std::string expandedAbsolutePath = ExpandPathAndMakeItAbsolute( path );
 
-   
 
-   sourcePathTextInput->value( expandedAbsolutePath.c_str() );
 
-     
 
-   if( VerifySourcePath( expandedAbsolutePath ) )
 
-   {
 
-     m_WhereSource = expandedAbsolutePath;
 
-     return true;
 
-   }
 
-   return false;
 
- }
 
- /**
 
-  * Expand environment variables in the path and make it absolute
 
-  */
 
- std::string
 
- CMakeSetupGUIImplementation
 
- ::ExpandPathAndMakeItAbsolute( const std::string & inputPath ) const
 
- {
 
-   char expandedPath[3000];
 
-   filename_expand( expandedPath, inputPath.c_str() );
 
-   char absolutePath[3000];
 
-   filename_absolute( absolutePath, expandedPath );
 
-   
 
-   std::string expandedAbsolutePath = absolutePath;
 
-   return expandedAbsolutePath;
 
-     
 
- }
 
- /**
 
-  * Set the binary path
 
-  */
 
- bool
 
- CMakeSetupGUIImplementation
 
- ::SetBinaryPath( const char * path )
 
- {
 
-   if( !path || strlen(path)==0 )
 
-   {
 
-     fl_alert("Please select the path to the binaries");
 
-     return false;
 
-   }
 
-   std::string expandedAbsolutePath = ExpandPathAndMakeItAbsolute( path );
 
-   
 
-   binaryPathTextInput->value( expandedAbsolutePath.c_str() );
 
-   if( !VerifyBinaryPath( expandedAbsolutePath.c_str() ) )
 
-   {
 
-     return false;
 
-   }
 
-   if( m_WhereBuild != expandedAbsolutePath )
 
-   {
 
-     m_BuildPathChanged = true;
 
-     m_WhereBuild = expandedAbsolutePath;
 
-   }
 
-   
 
-   LoadCacheFromDiskToGUI();
 
-   return true;
 
- }
 
- /**
 
-  * Verify the path to binaries
 
-  */
 
- bool
 
- CMakeSetupGUIImplementation
 
- ::VerifyBinaryPath( const std::string & path ) const
 
- {
 
-   bool pathIsOK = false;
 
-   if( filename_isdir( path.c_str() ) )
 
-   {
 
-     pathIsOK = true;
 
-   }
 
-   else
 
-   {
 
-     int userWantsToCreateDirectory = 
 
-       fl_ask("The directory \n %s \n Doesn't exist. Do you want to create it ?",
 
-               path.c_str() );
 
-     
 
-     if( userWantsToCreateDirectory  )
 
-     {
 
-       std::string command = "mkdir ";
 
-       command += path;
 
-       system( command.c_str() );
 
-       pathIsOK = true;
 
-     }
 
-     else
 
-     {
 
-       pathIsOK = false; 
 
-     }
 
-   }
 
-   return pathIsOK;
 
- }
 
- /**
 
-  * Verify the path to sources
 
-  */
 
- bool
 
- CMakeSetupGUIImplementation
 
- ::VerifySourcePath( const std::string & path ) const
 
- {
 
-   if( !filename_isdir( path.c_str() ) )
 
-   {
 
-     fl_alert("The Source directory \n %s \n Doesn't exist or is not a directory", path.c_str() );
 
-     return false; 
 
-   }
 
-   return true;
 
- }
 
- /**
 
-  * Build the project files
 
-  */
 
- void
 
- CMakeSetupGUIImplementation
 
- ::BuildProjectFiles( void )
 
- {
 
-   // Take and verify the source path from the GUI
 
-   if( !SetSourcePath( sourcePathTextInput->value() ) )
 
-   { 
 
-     return;
 
-   }
 
-   
 
-   // Take and verify the binary path from the GUI
 
-   if( !SetBinaryPath( binaryPathTextInput->value() ) )
 
-   {
 
-     return;
 
-   }
 
-   
 
-   // set the wait cursor
 
-   fl_cursor(FL_CURSOR_WAIT,FL_BLACK,FL_WHITE);
 
-   // save the current GUI values to the cache
 
-   this->SaveCacheFromGUI();
 
-   // Make sure we are working from the cache on disk
 
-   this->LoadCacheFromDiskToGUI();
 
-   // create a cmake object
 
-   cmake make;
 
-   // create the arguments for the cmake object
 
-   std::vector<std::string> args;
 
-   args.push_back( m_PathToExecutable.c_str() );
 
-   std::string arg;
 
-   arg = "-H";
 
-   arg += m_WhereSource;
 
-   args.push_back(arg);
 
-   arg = "-B";
 
-   arg += m_WhereBuild;
 
-   args.push_back(arg);
 
-   // run the generate process
 
-   if(make.Generate(args) != 0)
 
-     {
 
-     cmSystemTools::Error(
 
-       "Error in generation process, project files may be invalid");
 
-     }
 
-   // update the GUI with any new values in the caused by the
 
-   // generation process
 
-   this->LoadCacheFromDiskToGUI();
 
-   // path is up-to-date now
 
-   m_BuildPathChanged = false;
 
-   // put the cursor back
 
-   fl_cursor(FL_CURSOR_DEFAULT,FL_BLACK,FL_WHITE);
 
-   fl_message("Done !");
 
- }
 
- /**
 
-  * Load Cache from disk to GUI
 
-  */
 
- void
 
- CMakeSetupGUIImplementation
 
- ::LoadCacheFromDiskToGUI( void )
 
- {
 
-   
 
-     
 
-   if( m_WhereBuild != "" )
 
-     {
 
-     cmCacheManager::GetInstance()->LoadCache( m_WhereBuild.c_str() );
 
-     this->FillCacheGUIFromCacheManager();
 
-   }
 
- }
 
-    
 
- /**
 
-  * Save Cache from disk to GUI
 
-  */
 
- void
 
- CMakeSetupGUIImplementation
 
- ::SaveCacheFromGUI( void )
 
- {
 
-   this->FillCacheManagerFromCacheGUI();
 
-   if( m_WhereBuild != "" )
 
-   {
 
-     cmCacheManager::GetInstance()->SaveCache( 
 
-                                   m_WhereBuild.c_str() );
 
-   }
 
- }
 
- /**
 
-  * Fill Cache GUI from cache manager
 
-  */
 
- void
 
- CMakeSetupGUIImplementation
 
- ::FillCacheGUIFromCacheManager( void )
 
- {
 
-   // Prepare to add rows to the scroll
 
-   propertyListPack->begin();
 
-   const cmCacheManager::CacheEntryMap &cache =
 
-     cmCacheManager::GetInstance()->GetCacheMap();
 
-   for(cmCacheManager::CacheEntryMap::const_iterator i = cache.begin();
 
-       i != cache.end(); ++i)
 
-     {
 
-     const char* key = i->first.c_str();
 
-     const cmCacheManager::CacheEntry& value = i->second;
 
-     
 
-     switch(value.m_Type )
 
-       {
 
-       case cmCacheManager::BOOL:
 
-         if(cmCacheManager::GetInstance()->IsOn(key))
 
-           {
 
-           m_CacheEntriesList.AddProperty(key,
 
-                                          "ON",
 
-                                          value.m_HelpString.c_str(),
 
-                                          fltk::PropertyList::CHECKBOX,"");
 
-           }
 
-         else
 
-           {
 
-           m_CacheEntriesList.AddProperty(key,
 
-                                          "OFF",
 
-                                          value.m_HelpString.c_str(),
 
-                                          fltk::PropertyList::CHECKBOX,"");
 
-           }
 
-         break;
 
-       case cmCacheManager::PATH:
 
-         m_CacheEntriesList.AddProperty(key, 
 
-                                        value.m_Value.c_str(),
 
-                                        value.m_HelpString.c_str(),
 
-                                        fltk::PropertyList::PATH,"");
 
-         break;
 
-       case cmCacheManager::FILEPATH:
 
-         m_CacheEntriesList.AddProperty(key, 
 
-                                        value.m_Value.c_str(),
 
-                                        value.m_HelpString.c_str(),
 
-                                        fltk::PropertyList::FILE,"");
 
-         break;
 
-       case cmCacheManager::STRING:
 
-         m_CacheEntriesList.AddProperty(key,
 
-                                        value.m_Value.c_str(),
 
-                                        value.m_HelpString.c_str(),
 
-                                        fltk::PropertyList::EDIT,"");
 
-         break;
 
-       case cmCacheManager::INTERNAL:
 
-         break;
 
-       }
 
-     }
 
-   propertyListPack->end();
 
-   propertyListPack->init_sizes();
 
-   cacheValuesScroll->position( 0, 0 );
 
-   this->UpdateData(false);
 
- }
 
- /**
 
-  * UpdateData
 
-  */
 
- void
 
- CMakeSetupGUIImplementation
 
- ::UpdateData( bool option )
 
- {
 
-   dialogWindow->redraw();
 
-   Fl::check();
 
- }
 
- /**
 
-  * Fill cache manager from Cache GUI 
 
-  */
 
- void
 
- CMakeSetupGUIImplementation
 
- ::FillCacheManagerFromCacheGUI( void )
 
- {
 
-   cmCacheManager::GetInstance()->GetCacheMap();
 
-   std::set<fltk::PropertyItem*> items = m_CacheEntriesList.GetItems();
 
-   for(std::set<fltk::PropertyItem*>::iterator i = items.begin();
 
-       i != items.end(); ++i)
 
-     {
 
-       fltk::PropertyItem* item = *i; 
 
-       cmCacheManager::CacheEntry *entry = 
 
-         cmCacheManager::GetInstance()->GetCacheEntry(
 
-           (const char*)item->m_propName.c_str() );
 
-       if (entry)
 
-         {
 
-         entry->m_Value = item->m_curValue;
 
-         }
 
-     }
 
- }
 
 
  |