ENH: Save and Load of recent Source and Binary directories added.

This commit is contained in:
Luis Ibanez 2001-07-19 14:31:24 -04:00
parent 0136329482
commit 2f76c425ef
6 changed files with 349 additions and 10 deletions

View File

@ -2,6 +2,14 @@
#include "CMakeSetupGUI.h"
inline void CMakeSetupGUI::cb_dialogWindow_i(Fl_Window*, void*) {
recentSourceDirectoriesBrowser->hide();
recentBinaryDirectoriesBrowser->hide();
}
void CMakeSetupGUI::cb_dialogWindow(Fl_Window* o, void* v) {
((CMakeSetupGUI*)(o->user_data()))->cb_dialogWindow_i(o,v);
}
inline void CMakeSetupGUI::cb_sourcePathTextInput_i(Fl_Input*, void*) {
SetSourcePath( sourcePathTextInput->value() );
}
@ -44,18 +52,46 @@ void CMakeSetupGUI::cb_Build(Fl_Button* o, void* v) {
((CMakeSetupGUI*)(o->parent()->user_data()))->cb_Build_i(o,v);
}
inline void CMakeSetupGUI::cb_2_i(Fl_Button*, void*) {
ShowRecentSourceDirectories();
}
void CMakeSetupGUI::cb_2(Fl_Button* o, void* v) {
((CMakeSetupGUI*)(o->parent()->user_data()))->cb_2_i(o,v);
}
inline void CMakeSetupGUI::cb_21_i(Fl_Button*, void*) {
ShowRecentBinaryDirectories();
}
void CMakeSetupGUI::cb_21(Fl_Button* o, void* v) {
((CMakeSetupGUI*)(o->parent()->user_data()))->cb_21_i(o,v);
}
inline void CMakeSetupGUI::cb_recentSourceDirectoriesBrowser_i(Fl_Browser*, void*) {
SelectOneRecentSourceDirectory();
}
void CMakeSetupGUI::cb_recentSourceDirectoriesBrowser(Fl_Browser* o, void* v) {
((CMakeSetupGUI*)(o->parent()->user_data()))->cb_recentSourceDirectoriesBrowser_i(o,v);
}
inline void CMakeSetupGUI::cb_recentBinaryDirectoriesBrowser_i(Fl_Browser*, void*) {
SelectOneRecentBinaryDirectory();
}
void CMakeSetupGUI::cb_recentBinaryDirectoriesBrowser(Fl_Browser* o, void* v) {
((CMakeSetupGUI*)(o->parent()->user_data()))->cb_recentBinaryDirectoriesBrowser_i(o,v);
}
CMakeSetupGUI::CMakeSetupGUI() {
Fl_Window* w;
{ Fl_Window* o = dialogWindow = new Fl_Window(563, 363, "CMakeSetupDialog");
w = o;
o->user_data((void*)(this));
o->callback((Fl_Callback*)cb_dialogWindow, (void*)(this));
{ Fl_Input* o = sourcePathTextInput = new Fl_Input(219, 15, 200, 20, "Where is the source code: ");
o->labelsize(11);
o->textsize(11);
o->callback((Fl_Callback*)cb_sourcePathTextInput);
o->when(FL_WHEN_ENTER_KEY);
}
{ Fl_Button* o = new Fl_Button(426, 14, 65, 22, "Browse...");
{ Fl_Button* o = new Fl_Button(453, 14, 65, 22, "Browse...");
o->shortcut(0x80073);
o->labelsize(11);
o->callback((Fl_Callback*)cb_Browse);
@ -66,7 +102,7 @@ CMakeSetupGUI::CMakeSetupGUI() {
o->callback((Fl_Callback*)cb_binaryPathTextInput);
o->when(FL_WHEN_ENTER_KEY);
}
{ Fl_Button* o = new Fl_Button(426, 50, 65, 22, "Browse...");
{ Fl_Button* o = new Fl_Button(453, 49, 65, 22, "Browse...");
o->shortcut(0x80062);
o->labelsize(11);
o->callback((Fl_Callback*)cb_Browse1);
@ -104,6 +140,26 @@ CMakeSetupGUI::CMakeSetupGUI() {
{ Fl_Box* o = new Fl_Box(141, 305, 275, 25, "Right click on cache entries for additional options");
o->labelsize(11);
}
{ Fl_Button* o = new Fl_Button(420, 15, 22, 21, "@#2>");
o->labeltype(FL_SYMBOL_LABEL);
o->callback((Fl_Callback*)cb_2);
}
{ Fl_Button* o = new Fl_Button(420, 50, 22, 21, "@#2>");
o->labeltype(FL_SYMBOL_LABEL);
o->callback((Fl_Callback*)cb_21);
}
{ Fl_Browser* o = recentSourceDirectoriesBrowser = new Fl_Browser(15, 35, 535, 115);
o->type(2);
o->box(FL_BORDER_BOX);
o->callback((Fl_Callback*)cb_recentSourceDirectoriesBrowser);
o->hide();
}
{ Fl_Browser* o = recentBinaryDirectoriesBrowser = new Fl_Browser(15, 70, 535, 115);
o->type(2);
o->box(FL_BORDER_BOX);
o->callback((Fl_Callback*)cb_recentBinaryDirectoriesBrowser);
o->hide();
}
o->end();
}
}
@ -131,3 +187,15 @@ bool CMakeSetupGUI::SetBinaryPath(const char *) {
bool CMakeSetupGUI::SetSourcePath(const char *) {
}
void CMakeSetupGUI::ShowRecentBinaryDirectories(void) {
}
void CMakeSetupGUI::ShowRecentSourceDirectories(void) {
}
void CMakeSetupGUI::SelectOneRecentBinaryDirectory(void) {
}
void CMakeSetupGUI::SelectOneRecentSourceDirectory(void) {
}

View File

@ -7,11 +7,13 @@ gridy 5
snap 3
class CMakeSetupGUI {open
} {
Function {CMakeSetupGUI()} {open selected
Function {CMakeSetupGUI()} {open
} {
Fl_Window dialogWindow {
label CMakeSetupDialog
xywh {190 106 563 363} resizable visible
callback {recentSourceDirectoriesBrowser->hide();
recentBinaryDirectoriesBrowser->hide();} open selected
xywh {645 144 563 363} resizable visible
} {
Fl_Input sourcePathTextInput {
label {Where is the source code: }
@ -21,7 +23,7 @@ class CMakeSetupGUI {open
Fl_Button {} {
label {Browse...}
callback {BrowseForSourcePath();}
xywh {426 14 65 22} shortcut 0x80073 labelsize 11
xywh {453 14 65 22} shortcut 0x80073 labelsize 11
}
Fl_Input binaryPathTextInput {
label {Where do you want to build the binaries: }
@ -31,11 +33,11 @@ class CMakeSetupGUI {open
Fl_Button {} {
label {Browse...}
callback {BrowseForBinaryPath();}
xywh {426 50 65 22} shortcut 0x80062 labelsize 11
xywh {453 49 65 22} shortcut 0x80062 labelsize 11
}
Fl_Button {} {
label Close
callback {Close()}
callback {Close();}
xywh {345 331 77 23} shortcut 0x80071 labelsize 11
}
Fl_Button {} {
@ -43,7 +45,7 @@ class CMakeSetupGUI {open
callback {BuildProjectFiles();}
xywh {123 332 101 23} shortcut 0x8006d labelsize 11
}
Fl_Group {} {open
Fl_Group {} {
xywh {25 80 515 222} box ENGRAVED_BOX labelsize 11 align 0 resizable
} {
Fl_Scroll cacheValuesScroll {
@ -59,6 +61,24 @@ class CMakeSetupGUI {open
label {Right click on cache entries for additional options}
xywh {141 305 275 25} labelsize 11
}
Fl_Button {} {
label {@\#2>}
callback {ShowRecentSourceDirectories();}
xywh {420 15 22 21} labeltype SYMBOL_LABEL
}
Fl_Button {} {
label {@\#2>}
callback {ShowRecentBinaryDirectories();}
xywh {420 50 22 21} labeltype SYMBOL_LABEL
}
Fl_Browser recentSourceDirectoriesBrowser {
callback {SelectOneRecentSourceDirectory();}
xywh {15 35 535 115} type Hold box BORDER_BOX hide
}
Fl_Browser recentBinaryDirectoriesBrowser {
callback {SelectOneRecentBinaryDirectory();}
xywh {15 70 535 115} type Hold box BORDER_BOX hide
}
}
}
Function {~CMakeSetupGUI()} {} {}
@ -76,4 +96,12 @@ class CMakeSetupGUI {open
} {}
Function {SetSourcePath(const char *)} {return_type {virtual bool}
} {}
Function {ShowRecentBinaryDirectories(void)} {return_type {virtual void}
} {}
Function {ShowRecentSourceDirectories(void)} {return_type {virtual void}
} {}
Function {SelectOneRecentBinaryDirectory(void)} {return_type {virtual void}
} {}
Function {SelectOneRecentSourceDirectory(void)} {return_type {virtual void}
} {}
}

View File

@ -10,11 +10,16 @@
#include <FL/Fl_Scroll.H>
#include <FL/Fl_Pack.H>
#include <FL/Fl_Box.H>
#include <FL/Fl_Browser.H>
class CMakeSetupGUI {
public:
CMakeSetupGUI();
Fl_Window *dialogWindow;
private:
inline void cb_dialogWindow_i(Fl_Window*, void*);
static void cb_dialogWindow(Fl_Window*, void*);
public:
Fl_Input *sourcePathTextInput;
private:
inline void cb_sourcePathTextInput_i(Fl_Input*, void*);
@ -35,6 +40,22 @@ private:
public:
Fl_Scroll *cacheValuesScroll;
Fl_Pack *propertyListPack;
private:
inline void cb_2_i(Fl_Button*, void*);
static void cb_2(Fl_Button*, void*);
inline void cb_21_i(Fl_Button*, void*);
static void cb_21(Fl_Button*, void*);
public:
Fl_Browser *recentSourceDirectoriesBrowser;
private:
inline void cb_recentSourceDirectoriesBrowser_i(Fl_Browser*, void*);
static void cb_recentSourceDirectoriesBrowser(Fl_Browser*, void*);
public:
Fl_Browser *recentBinaryDirectoriesBrowser;
private:
inline void cb_recentBinaryDirectoriesBrowser_i(Fl_Browser*, void*);
static void cb_recentBinaryDirectoriesBrowser(Fl_Browser*, void*);
public:
~CMakeSetupGUI();
virtual void Close(void);
virtual void BuildProjectFiles(void);
@ -43,5 +64,9 @@ public:
virtual void Show(void);
virtual bool SetBinaryPath(const char *);
virtual bool SetSourcePath(const char *);
virtual void ShowRecentBinaryDirectories(void);
virtual void ShowRecentSourceDirectories(void);
virtual void SelectOneRecentBinaryDirectory(void);
virtual void SelectOneRecentSourceDirectory(void);
};
#endif

View File

@ -55,6 +55,7 @@ void
CMakeSetupGUIImplementation
::Close( void )
{
SaveRecentDirectories();
dialogWindow->hide();
}
@ -120,7 +121,6 @@ void
CMakeSetupGUIImplementation
::SetPathToExecutable( const char * path )
{
m_PathToExecutable = path;
char expandedPath[1024];
filename_expand( expandedPath, path );
@ -333,6 +333,9 @@ CMakeSetupGUIImplementation
// Make sure we are working from the cache on disk
this->LoadCacheFromDiskToGUI();
UpdateListOfRecentDirectories();
SaveRecentDirectories();
// create a cmake object
cmake make;
// create the arguments for the cmake object
@ -358,6 +361,7 @@ CMakeSetupGUIImplementation
// 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 !");
@ -515,3 +519,204 @@ CMakeSetupGUIImplementation
}
/**
* Load Recent Directories
*/
void
CMakeSetupGUIImplementation
::LoadRecentDirectories( void )
{
std::string home = getenv("HOME");
std::string filename = home + "/.cmakerc";
std::ifstream input;
input.open(filename.c_str());
if( input.fail() )
{
// probably the file doesn't exist
return;
}
m_RecentBinaryDirectories.clear();
m_RecentSourceDirectories.clear();
std::string key;
std::string onedirectory;
while( !input.eof() )
{
input >> key;
if( input.eof() ) break;
if( key == "MostRecentSource" )
{
input >> onedirectory;
m_WhereSource = onedirectory;
sourcePathTextInput->value( m_WhereSource.c_str() );
} else
if( key == "MostRecentBinary" )
{
input >> onedirectory;
m_WhereBuild = onedirectory;
binaryPathTextInput->value( m_WhereBuild.c_str() );
} else
if( key == "Binary" )
{
input >> onedirectory;
// insert is only done if the directory doesn't exist
m_RecentBinaryDirectories.insert( onedirectory );
recentBinaryDirectoriesBrowser->add(
(onedirectory.c_str()),
(void*)(onedirectory.c_str()) );
} else
if( key == "Source" )
{
input >> onedirectory;
// insert is only done if the directory doesn't exist
m_RecentSourceDirectories.insert( onedirectory );
recentSourceDirectoriesBrowser->add(
(onedirectory.c_str()),
(void*)(onedirectory.c_str()) );
}
}
input.close();
}
/**
* Save Recent Directories
*/
void
CMakeSetupGUIImplementation
::SaveRecentDirectories( void )
{
std::string home = getenv("HOME");
if( home.empty() )
{
return;
}
std::string filename = home + "/.cmakerc";
std::ofstream output;
output.open(filename.c_str());
output << "MostRecentBinary " << m_WhereBuild << std::endl;
output << "MostRecentSource " << m_WhereSource << std::endl;
// Save Recent binary directories
std::set< std::string >::iterator bindir =
m_RecentBinaryDirectories.begin();
while( bindir != m_RecentBinaryDirectories.end() )
{
output << "Binary " << *bindir << std::endl;
bindir++;
}
// Save Recent source directories
std::set< std::string >::iterator srcdir =
m_RecentSourceDirectories.begin();
while( srcdir != m_RecentSourceDirectories.end() )
{
output << "Source " << *srcdir << std::endl;
srcdir++;
}
}
/**
* Show Recent Binary Directories
*/
void
CMakeSetupGUIImplementation
::ShowRecentBinaryDirectories( void )
{
recentBinaryDirectoriesBrowser->Fl_Widget::show();
}
/**
* Show Recent Source Directories
*/
void
CMakeSetupGUIImplementation
::ShowRecentSourceDirectories( void )
{
recentSourceDirectoriesBrowser->Fl_Widget::show();
}
/**
* Select one Recent Binary Directory
*/
void
CMakeSetupGUIImplementation
::SelectOneRecentBinaryDirectory( void )
{
const int selected = recentBinaryDirectoriesBrowser->value();
if( selected == 0 )
{
return;
}
m_WhereBuild = static_cast<char *>(
recentBinaryDirectoriesBrowser->data( selected ));
binaryPathTextInput->value( m_WhereBuild.c_str() );
recentBinaryDirectoriesBrowser->Fl_Widget::hide();
}
/**
* Select one Recent Source Directory
*/
void
CMakeSetupGUIImplementation
::SelectOneRecentSourceDirectory( void )
{
const int selected = recentSourceDirectoriesBrowser->value();
if( selected == 0 )
{
return;
}
m_WhereSource = static_cast< char * >(
recentSourceDirectoriesBrowser->data( selected ));
sourcePathTextInput->value( m_WhereSource.c_str() );
recentSourceDirectoriesBrowser->Fl_Widget::hide();
}
/**
* Update List of Recent Directories
*/
void
CMakeSetupGUIImplementation
::UpdateListOfRecentDirectories( void )
{
// Update Recent binary directories
// insert is only done if the directory doesn't exist
m_RecentBinaryDirectories.insert( m_WhereBuild );
// Update Recent source directories
// insert is only done if the directory doesn't exist
m_RecentSourceDirectories.insert( m_WhereSource );
}

View File

@ -4,6 +4,7 @@
#include "CMakeSetupGUI.h"
#include "FLTKPropertyList.h"
#include <set>
/**
@ -33,6 +34,13 @@ public:
virtual void FillCacheGUIFromCacheManager( void );
virtual void FillCacheManagerFromCacheGUI( void );
virtual void SetPathToExecutable( const char * path );
virtual void LoadRecentDirectories(void);
virtual void SaveRecentDirectories(void);
virtual void ShowRecentBinaryDirectories(void);
virtual void ShowRecentSourceDirectories(void);
virtual void SelectOneRecentSourceDirectory(void);
virtual void SelectOneRecentBinaryDirectory(void);
virtual void UpdateListOfRecentDirectories(void);
private:
virtual bool VerifyBinaryPath( const std::string & path ) const;
@ -45,6 +53,10 @@ private:
std::string m_WhereSource;
std::string m_PathToExecutable;
bool m_BuildPathChanged;
std::set< std::string > m_RecentBinaryDirectories;
std::set< std::string > m_RecentSourceDirectories;
};

View File

@ -13,6 +13,7 @@ int main(int argc, char * argv[] )
gui->SetPathToExecutable( argv[0] );
gui->Show();
gui->LoadRecentDirectories();
gui->LoadCacheFromDiskToGUI();
Fl::run();