ENH: cpp renamed cxx. Copy of data to and from the GUI is working
This commit is contained in:
parent
ad0019a740
commit
b0befbde1a
|
@ -0,0 +1,133 @@
|
||||||
|
// generated by Fast Light User Interface Designer (fluid) version 1.0009
|
||||||
|
|
||||||
|
#include "CMakeSetupGUI.h"
|
||||||
|
|
||||||
|
inline void CMakeSetupGUI::cb_sourcePathTextInput_i(Fl_Input*, void*) {
|
||||||
|
SetSourcePath( sourcePathTextInput->value() );
|
||||||
|
}
|
||||||
|
void CMakeSetupGUI::cb_sourcePathTextInput(Fl_Input* o, void* v) {
|
||||||
|
((CMakeSetupGUI*)(o->parent()->user_data()))->cb_sourcePathTextInput_i(o,v);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void CMakeSetupGUI::cb_Browse_i(Fl_Button*, void*) {
|
||||||
|
BrowseForSourcePath();
|
||||||
|
}
|
||||||
|
void CMakeSetupGUI::cb_Browse(Fl_Button* o, void* v) {
|
||||||
|
((CMakeSetupGUI*)(o->parent()->user_data()))->cb_Browse_i(o,v);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void CMakeSetupGUI::cb_binaryPathTextInput_i(Fl_Input*, void*) {
|
||||||
|
SetBinaryPath( binaryPathTextInput->value() );
|
||||||
|
}
|
||||||
|
void CMakeSetupGUI::cb_binaryPathTextInput(Fl_Input* o, void* v) {
|
||||||
|
((CMakeSetupGUI*)(o->parent()->user_data()))->cb_binaryPathTextInput_i(o,v);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void CMakeSetupGUI::cb_Browse1_i(Fl_Button*, void*) {
|
||||||
|
BrowseForBinaryPath();
|
||||||
|
}
|
||||||
|
void CMakeSetupGUI::cb_Browse1(Fl_Button* o, void* v) {
|
||||||
|
((CMakeSetupGUI*)(o->parent()->user_data()))->cb_Browse1_i(o,v);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void CMakeSetupGUI::cb_Close_i(Fl_Button*, void*) {
|
||||||
|
Close();
|
||||||
|
}
|
||||||
|
void CMakeSetupGUI::cb_Close(Fl_Button* o, void* v) {
|
||||||
|
((CMakeSetupGUI*)(o->parent()->user_data()))->cb_Close_i(o,v);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void CMakeSetupGUI::cb_Build_i(Fl_Button*, void*) {
|
||||||
|
BuildProjectFiles();
|
||||||
|
}
|
||||||
|
void CMakeSetupGUI::cb_Build(Fl_Button* o, void* v) {
|
||||||
|
((CMakeSetupGUI*)(o->parent()->user_data()))->cb_Build_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));
|
||||||
|
{ 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...");
|
||||||
|
o->shortcut(0x80073);
|
||||||
|
o->labelsize(11);
|
||||||
|
o->callback((Fl_Callback*)cb_Browse);
|
||||||
|
}
|
||||||
|
{ Fl_Input* o = binaryPathTextInput = new Fl_Input(219, 50, 200, 20, "Where do you want to build the binaries: ");
|
||||||
|
o->labelsize(11);
|
||||||
|
o->textsize(11);
|
||||||
|
o->callback((Fl_Callback*)cb_binaryPathTextInput);
|
||||||
|
o->when(FL_WHEN_ENTER_KEY);
|
||||||
|
}
|
||||||
|
{ Fl_Button* o = new Fl_Button(426, 50, 65, 22, "Browse...");
|
||||||
|
o->shortcut(0x80062);
|
||||||
|
o->labelsize(11);
|
||||||
|
o->callback((Fl_Callback*)cb_Browse1);
|
||||||
|
}
|
||||||
|
{ Fl_Button* o = new Fl_Button(345, 331, 77, 23, "Close");
|
||||||
|
o->shortcut(0x80071);
|
||||||
|
o->labelsize(11);
|
||||||
|
o->callback((Fl_Callback*)cb_Close);
|
||||||
|
}
|
||||||
|
{ Fl_Button* o = new Fl_Button(123, 332, 101, 23, "Build Project Files");
|
||||||
|
o->shortcut(0x8006d);
|
||||||
|
o->labelsize(11);
|
||||||
|
o->callback((Fl_Callback*)cb_Build);
|
||||||
|
}
|
||||||
|
{ Fl_Group* o = new Fl_Group(25, 80, 515, 222);
|
||||||
|
o->box(FL_ENGRAVED_BOX);
|
||||||
|
o->labelsize(11);
|
||||||
|
o->align(FL_ALIGN_CENTER);
|
||||||
|
{ Fl_Scroll* o = cacheValuesScroll = new Fl_Scroll(40, 98, 485, 190, "Cache Values");
|
||||||
|
o->type(7);
|
||||||
|
o->box(FL_DOWN_FRAME);
|
||||||
|
o->labelsize(11);
|
||||||
|
o->align(FL_ALIGN_TOP_LEFT);
|
||||||
|
o->when(FL_WHEN_CHANGED);
|
||||||
|
{ Fl_Pack* o = propertyListPack = new Fl_Pack(40, 99, 485, 185);
|
||||||
|
o->end();
|
||||||
|
Fl_Group::current()->resizable(o);
|
||||||
|
}
|
||||||
|
o->end();
|
||||||
|
Fl_Group::current()->resizable(o);
|
||||||
|
}
|
||||||
|
o->end();
|
||||||
|
Fl_Group::current()->resizable(o);
|
||||||
|
}
|
||||||
|
{ Fl_Box* o = new Fl_Box(141, 305, 275, 25, "Right click on cache entries for additional options");
|
||||||
|
o->labelsize(11);
|
||||||
|
}
|
||||||
|
o->end();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CMakeSetupGUI::~CMakeSetupGUI() {
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMakeSetupGUI::Close(void) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMakeSetupGUI::BuildProjectFiles(void) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMakeSetupGUI::BrowseForSourcePath(void) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMakeSetupGUI::BrowseForBinaryPath(void) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMakeSetupGUI::Show(void) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMakeSetupGUI::SetBinaryPath(const char *) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMakeSetupGUI::SetSourcePath(const char *) {
|
||||||
|
}
|
|
@ -0,0 +1,343 @@
|
||||||
|
|
||||||
|
#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>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*/
|
||||||
|
CMakeSetupGUIImplementation
|
||||||
|
::CMakeSetupGUIImplementation()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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 the source path
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
CMakeSetupGUIImplementation
|
||||||
|
::SetSourcePath( const char * path )
|
||||||
|
{
|
||||||
|
if( VerifySourcePath( path ) )
|
||||||
|
{
|
||||||
|
m_WhereSource = path;
|
||||||
|
sourcePathTextInput->value( path );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the binary path
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
CMakeSetupGUIImplementation
|
||||||
|
::SetBinaryPath( const char * path )
|
||||||
|
{
|
||||||
|
|
||||||
|
if( VerifyBinaryPath( path ) )
|
||||||
|
{
|
||||||
|
m_WhereBuild = path;
|
||||||
|
binaryPathTextInput->value( path );
|
||||||
|
}
|
||||||
|
|
||||||
|
LoadCacheFromDiskToGUI();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verify the path to binaries
|
||||||
|
*/
|
||||||
|
bool
|
||||||
|
CMakeSetupGUIImplementation
|
||||||
|
::VerifyBinaryPath( const char * path )
|
||||||
|
{
|
||||||
|
|
||||||
|
if( !path || strlen(path)==0 )
|
||||||
|
{
|
||||||
|
fl_alert("Please select the path to the binaries");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if( !filename_isdir( path ) )
|
||||||
|
{
|
||||||
|
fl_alert("%s \n Doesn't exist or is not a directory",path);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verify the path to sources
|
||||||
|
*/
|
||||||
|
bool
|
||||||
|
CMakeSetupGUIImplementation
|
||||||
|
::VerifySourcePath( const char * path )
|
||||||
|
{
|
||||||
|
|
||||||
|
if( !path || strlen(path)==0 )
|
||||||
|
{
|
||||||
|
fl_alert("Please select the path to the sources");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if( !filename_isdir( path ) )
|
||||||
|
{
|
||||||
|
fl_alert("%s \n Doesn't exist or is not a directory",path);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build the project files
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
CMakeSetupGUIImplementation
|
||||||
|
::BuildProjectFiles( void )
|
||||||
|
{
|
||||||
|
|
||||||
|
// Verify that source path is a valid directory
|
||||||
|
if( !VerifySourcePath( sourcePathTextInput->value() ) )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verify that binary path is a valid directory
|
||||||
|
if( !VerifyBinaryPath( binaryPathTextInput->value() ) )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
SaveCacheFromGUI();
|
||||||
|
|
||||||
|
fl_message("Building project files ... please wait");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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 )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
|
||||||
|
#include "CMakeSetupGUIImplementation.h"
|
||||||
|
#include "FL/Fl.h"
|
||||||
|
#include "FL/fl_ask.H"
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
|
||||||
|
fl_message_font(FL_HELVETICA,11);
|
||||||
|
|
||||||
|
CMakeSetupGUIImplementation * gui
|
||||||
|
= new CMakeSetupGUIImplementation;
|
||||||
|
|
||||||
|
gui->Show();
|
||||||
|
gui->LoadCacheFromDiskToGUI();
|
||||||
|
|
||||||
|
Fl::run();
|
||||||
|
|
||||||
|
delete gui;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,209 @@
|
||||||
|
#include "FLTKPropertyItemRow.h"
|
||||||
|
#include <Fl/Fl_Button.H>
|
||||||
|
#include <Fl/Fl_Input.H>
|
||||||
|
#include <Fl/Fl_Tile.H>
|
||||||
|
#include <Fl/fl_ask.H>
|
||||||
|
#include <Fl/fl_file_chooser.H>
|
||||||
|
|
||||||
|
namespace fltk {
|
||||||
|
|
||||||
|
PropertyItemRow::PropertyItemRow( PropertyItem * pItem )
|
||||||
|
{
|
||||||
|
|
||||||
|
m_PropertyItem = pItem;
|
||||||
|
m_ItemValue = new ItemValue;
|
||||||
|
|
||||||
|
const unsigned int nameWidth = 200;
|
||||||
|
const unsigned int textWidth = 1400;
|
||||||
|
const unsigned int checkWidth = textWidth;
|
||||||
|
const unsigned int browseWidth = 20;
|
||||||
|
const unsigned int firstColumn = 0;
|
||||||
|
|
||||||
|
const unsigned int secondColumn = nameWidth;
|
||||||
|
|
||||||
|
const unsigned int rowHeight = 20;
|
||||||
|
const unsigned int rowSpacing = 20;
|
||||||
|
|
||||||
|
Fl_Tile * group = new Fl_Tile(0,0,nameWidth+textWidth,rowHeight,"");
|
||||||
|
|
||||||
|
group->parent()->size( nameWidth + textWidth , 100 );
|
||||||
|
|
||||||
|
Fl_Button * name = new
|
||||||
|
Fl_Button( firstColumn, 0, nameWidth, rowHeight,
|
||||||
|
pItem->m_propName.c_str() );
|
||||||
|
name->align( FL_ALIGN_CLIP | FL_ALIGN_LEFT | FL_ALIGN_INSIDE );
|
||||||
|
name->labelsize(11);
|
||||||
|
name->box( FL_DOWN_BOX );
|
||||||
|
name->callback( NameClickCallback, (void *)pItem );
|
||||||
|
|
||||||
|
switch( pItem->m_nItemType )
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
{
|
||||||
|
|
||||||
|
name->size( secondColumn, rowHeight );
|
||||||
|
|
||||||
|
Fl_Input * input = new
|
||||||
|
Fl_Input( secondColumn, 0, textWidth ,rowHeight ,"");
|
||||||
|
input->value( pItem->m_curValue.c_str() );
|
||||||
|
input->textsize(11);
|
||||||
|
input->callback( InputTextCallback, (void *)pItem );
|
||||||
|
input->when( FL_WHEN_CHANGED );
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 3:
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 4:
|
||||||
|
{
|
||||||
|
|
||||||
|
name->size( secondColumn, rowHeight );
|
||||||
|
Fl_Button * browseButton = new
|
||||||
|
Fl_Button( secondColumn, 0, browseWidth ,rowHeight ,"...");
|
||||||
|
browseButton->labelsize(11);
|
||||||
|
|
||||||
|
Fl_Input * input = new
|
||||||
|
Fl_Input( secondColumn+browseWidth, 0, textWidth ,rowHeight ,"");
|
||||||
|
input->value( pItem->m_curValue.c_str() );
|
||||||
|
input->textsize(11);
|
||||||
|
|
||||||
|
m_ItemValue->m_InputText = input;
|
||||||
|
m_ItemValue->m_PropertyItem = pItem;
|
||||||
|
|
||||||
|
browseButton->callback( BrowsePathCallback, (void *)m_ItemValue );
|
||||||
|
input->callback( InputTextCallback, pItem );
|
||||||
|
input->when( FL_WHEN_CHANGED );
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 5:
|
||||||
|
{
|
||||||
|
Fl_Button * button = new
|
||||||
|
Fl_Button( secondColumn, 0, checkWidth ,rowHeight ,"");
|
||||||
|
button->align( FL_ALIGN_INSIDE | FL_ALIGN_LEFT );
|
||||||
|
button->callback( CheckButtonCallback, (void *)pItem );
|
||||||
|
|
||||||
|
if( pItem->m_curValue == "ON" )
|
||||||
|
{
|
||||||
|
button->label(" ON ");
|
||||||
|
button->value(1);
|
||||||
|
}
|
||||||
|
else if( pItem->m_curValue == "OFF" )
|
||||||
|
{
|
||||||
|
button->label(" OFF ");
|
||||||
|
button->value(0);
|
||||||
|
}
|
||||||
|
button->type( FL_TOGGLE_BUTTON );
|
||||||
|
button->labelsize(11);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 6:
|
||||||
|
{
|
||||||
|
|
||||||
|
name->size( secondColumn, rowHeight );
|
||||||
|
Fl_Button * browseButton = new
|
||||||
|
Fl_Button( secondColumn, 0, browseWidth ,rowHeight ,"...");
|
||||||
|
browseButton->labelsize(11);
|
||||||
|
|
||||||
|
Fl_Input * input = new
|
||||||
|
Fl_Input( secondColumn+browseWidth, 0, textWidth ,rowHeight ,"");
|
||||||
|
input->value( pItem->m_curValue.c_str() );
|
||||||
|
input->textsize(11);
|
||||||
|
|
||||||
|
m_ItemValue->m_InputText = input;
|
||||||
|
m_ItemValue->m_PropertyItem = pItem;
|
||||||
|
|
||||||
|
browseButton->callback( BrowsePathCallback, (void *)m_ItemValue );
|
||||||
|
input->callback( InputTextCallback, pItem );
|
||||||
|
input->when( FL_WHEN_CHANGED );
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
fl_alert("Unkown item type %d",pItem->m_nItemType);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
group->end();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
PropertyItemRow::~PropertyItemRow( )
|
||||||
|
{
|
||||||
|
delete m_ItemValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
PropertyItemRow::
|
||||||
|
CheckButtonCallback( Fl_Widget * widget, void * data)
|
||||||
|
{
|
||||||
|
Fl_Button * button = (Fl_Button *)widget;
|
||||||
|
PropertyItem * pItem = (PropertyItem *)data;
|
||||||
|
|
||||||
|
int value = button->value();
|
||||||
|
|
||||||
|
if( value )
|
||||||
|
{
|
||||||
|
button->label(" ON ");
|
||||||
|
pItem->m_curValue = "ON";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
button->label(" OFF ");
|
||||||
|
pItem->m_curValue = "OFF";
|
||||||
|
}
|
||||||
|
button->redraw();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
PropertyItemRow::
|
||||||
|
NameClickCallback( Fl_Widget * widget, void * data)
|
||||||
|
{
|
||||||
|
PropertyItem * pItem = (PropertyItem *)data;
|
||||||
|
fl_message( pItem->m_HelpString.c_str() );
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
PropertyItemRow::
|
||||||
|
InputTextCallback( Fl_Widget * widget, void * data)
|
||||||
|
{
|
||||||
|
Fl_Input * input = (Fl_Input *)widget;
|
||||||
|
PropertyItem * item = (PropertyItem *)data;
|
||||||
|
|
||||||
|
item->m_curValue = input->value();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
PropertyItemRow::
|
||||||
|
BrowsePathCallback( Fl_Widget * widget, void * data)
|
||||||
|
{
|
||||||
|
ItemValue * itemValue = (ItemValue *)data;
|
||||||
|
Fl_Input * inputText = itemValue->m_InputText;
|
||||||
|
PropertyItem * propertyItem = itemValue->m_PropertyItem;
|
||||||
|
|
||||||
|
const char * newpath =
|
||||||
|
fl_file_chooser("Select a path","*", inputText->value() );
|
||||||
|
|
||||||
|
if( newpath )
|
||||||
|
{
|
||||||
|
propertyItem->m_curValue = newpath;
|
||||||
|
inputText->value( newpath );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} // end namespace fltk
|
|
@ -0,0 +1,201 @@
|
||||||
|
// FLTKPropertyList.cxx : implementation file
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "FLTKPropertyList.h"
|
||||||
|
#include "../cmCacheManager.h"
|
||||||
|
#include "FLTKPropertyItemRow.h"
|
||||||
|
#include "Fl/filename.H"
|
||||||
|
#include "Fl/fl_file_chooser.H"
|
||||||
|
#include "Fl/Fl_Color_Chooser.H"
|
||||||
|
#include "Fl/fl_ask.H"
|
||||||
|
#include "Fl/Fl_Button.H"
|
||||||
|
#include <cstdio>
|
||||||
|
|
||||||
|
namespace fltk {
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// PropertyList
|
||||||
|
|
||||||
|
PropertyList::PropertyList()
|
||||||
|
{
|
||||||
|
m_Dirty = false;
|
||||||
|
m_curSel = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
PropertyList::~PropertyList()
|
||||||
|
{
|
||||||
|
for(std::set<PropertyItem*>::iterator i = m_PropertyItems.begin();
|
||||||
|
i != m_PropertyItems.end(); ++i)
|
||||||
|
{
|
||||||
|
delete *i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int PropertyList::AddItem(string txt)
|
||||||
|
{
|
||||||
|
int nIndex =0;// = AddString(txt);
|
||||||
|
return nIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
int PropertyList::AddPropItem(PropertyItem* pItem)
|
||||||
|
{
|
||||||
|
|
||||||
|
int nIndex =0; //= AddString(_T(""));
|
||||||
|
// SetItemDataPtr(nIndex,pItem);
|
||||||
|
|
||||||
|
new PropertyItemRow( pItem ); // GUI of the property row
|
||||||
|
|
||||||
|
m_PropertyItems.insert(pItem);
|
||||||
|
|
||||||
|
return nIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
int PropertyList::AddProperty(const char* name,
|
||||||
|
const char* value,
|
||||||
|
const char* helpString,
|
||||||
|
int type,
|
||||||
|
const char* comboItems)
|
||||||
|
{
|
||||||
|
|
||||||
|
PropertyItem* pItem = 0;
|
||||||
|
for(int i =0; i < this->GetCount(); ++i)
|
||||||
|
{
|
||||||
|
PropertyItem* item = this->GetItem(i);
|
||||||
|
if(item->m_propName == name)
|
||||||
|
{
|
||||||
|
pItem = item;
|
||||||
|
if(pItem->m_curValue != value)
|
||||||
|
{
|
||||||
|
pItem->m_curValue = value;
|
||||||
|
pItem->m_HelpString = helpString;
|
||||||
|
m_Dirty = true;
|
||||||
|
Invalidate();
|
||||||
|
}
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// if it is not found, then create a new one
|
||||||
|
if(!pItem)
|
||||||
|
{
|
||||||
|
pItem = new PropertyItem(name, value, helpString, type, comboItems);
|
||||||
|
}
|
||||||
|
return this->AddPropItem(pItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void PropertyList::OnButton()
|
||||||
|
{
|
||||||
|
PropertyItem* pItem = (PropertyItem*) GetItemDataPtr(m_curSel);
|
||||||
|
|
||||||
|
//display the appropriate common dialog depending on what type
|
||||||
|
//of chooser is associated with the property
|
||||||
|
if (pItem->m_nItemType == PropertyList::COLOR)
|
||||||
|
{
|
||||||
|
unsigned char red = 0;
|
||||||
|
unsigned char blue = 0;
|
||||||
|
unsigned char green = 0;
|
||||||
|
fl_color_chooser("Please pick a color",red,green,blue);
|
||||||
|
char buffer[300];
|
||||||
|
sprintf(buffer,"RGB(%d,%d,%d)",red,green,blue);
|
||||||
|
pItem->m_curValue = buffer;
|
||||||
|
m_Dirty = true;
|
||||||
|
Invalidate();
|
||||||
|
}
|
||||||
|
else if (pItem->m_nItemType == PropertyList::FILE)
|
||||||
|
{
|
||||||
|
string currPath = pItem->m_curValue;
|
||||||
|
|
||||||
|
const char * SelectedFile
|
||||||
|
= fl_file_chooser("Choose a file",
|
||||||
|
"*",currPath.c_str() );
|
||||||
|
|
||||||
|
if( SelectedFile )
|
||||||
|
{
|
||||||
|
pItem->m_curValue = SelectedFile;
|
||||||
|
m_Dirty = true;
|
||||||
|
Invalidate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (pItem->m_nItemType == PropertyList::PATH)
|
||||||
|
{
|
||||||
|
string currPath = pItem->m_curValue;
|
||||||
|
string initialDir = currPath;
|
||||||
|
|
||||||
|
const char * SelectedFile
|
||||||
|
= fl_file_chooser("Choose a directory",
|
||||||
|
"*/",initialDir.c_str() );
|
||||||
|
|
||||||
|
if( SelectedFile && filename_isdir( SelectedFile ) )
|
||||||
|
{
|
||||||
|
pItem->m_curValue = SelectedFile;
|
||||||
|
m_Dirty = true;
|
||||||
|
Invalidate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (pItem->m_nItemType == PropertyList::FONT)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void PropertyList::OnHelp()
|
||||||
|
{
|
||||||
|
if(m_curSel == -1 || this->GetCount() <= 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
PropertyItem* pItem = (PropertyItem*) GetItemDataPtr(m_curSel);
|
||||||
|
fl_message(pItem->m_HelpString.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PropertyList::RemoveAll()
|
||||||
|
{
|
||||||
|
int c = this->GetCount();
|
||||||
|
for(int i =0; i < c; ++i)
|
||||||
|
{
|
||||||
|
PropertyItem* pItem = (PropertyItem*) GetItemDataPtr(0);
|
||||||
|
cmCacheManager::GetInstance()->RemoveCacheEntry(pItem->m_propName.c_str());
|
||||||
|
m_PropertyItems.erase(pItem);
|
||||||
|
delete pItem;
|
||||||
|
// this->DeleteString(0);
|
||||||
|
}
|
||||||
|
Invalidate();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
PropertyItem * PropertyList::GetItemDataPtr(int index)
|
||||||
|
{
|
||||||
|
std::set<PropertyItem*>::iterator it = m_PropertyItems.begin();
|
||||||
|
for(int i=0; it != m_PropertyItems.end() && i<index; i++)
|
||||||
|
{
|
||||||
|
++it;
|
||||||
|
}
|
||||||
|
return *it;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
PropertyItem * PropertyList::GetItem(int index)
|
||||||
|
{
|
||||||
|
std::set<PropertyItem*>::iterator it = m_PropertyItems.begin();
|
||||||
|
for(int i=0; it != m_PropertyItems.end() && i<index; i++)
|
||||||
|
{
|
||||||
|
++it;
|
||||||
|
}
|
||||||
|
return *it;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} // end fltk namespace
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue