- unify several indentation and coding styles (and no, this is not my
preferred style, but the most sane of those used :-) - remove trailing spaces - cleanup (all of this will make further work on the files easier)
This commit is contained in:
parent
f5955a9cab
commit
53572823bc
2 changed files with 452 additions and 440 deletions
|
@ -9,17 +9,17 @@
|
|||
********
|
||||
PLIB - A Suite of Portable Game Libraries
|
||||
Copyright (C) 2001 Steve Baker
|
||||
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
@ -47,7 +47,8 @@
|
|||
|
||||
SG_USING_STD(string);
|
||||
|
||||
// A local alternative name, for use when a variable called "string" is in scope - e.g. in classes derived from puInput.
|
||||
// A local alternative name, for use when a variable called "string"
|
||||
// is in scope - e.g. in classes derived from puInput.
|
||||
typedef string stdString;
|
||||
|
||||
#define DOTDOTSLASH "../"
|
||||
|
@ -63,121 +64,138 @@ static puObject *PP_widget = 0;
|
|||
|
||||
static puObject *PE_widget = 0;
|
||||
|
||||
void prop_pickerInit()
|
||||
{
|
||||
if( PP_widget == 0 ) {
|
||||
fgPropPicker *PP = new fgPropPicker ( PROPPICK_X, PROPPICK_Y, PROPPICK_W, PROPPICK_H, 1, "/", "FG Properties");
|
||||
PP_widget = PP;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// entry point: called from src/GUI/menubar.cxx -- do_properties_dialog() =====
|
||||
|
||||
void prop_pickerView( puObject * )
|
||||
{
|
||||
if( PP_widget == 0 ) {
|
||||
prop_pickerInit();
|
||||
}
|
||||
fgPropPicker *me = (fgPropPicker *)PP_widget -> getUserData();
|
||||
// refresh
|
||||
me -> find_props();
|
||||
FG_PUSH_PUI_DIALOG( me );
|
||||
if( PP_widget == 0 )
|
||||
prop_pickerInit();
|
||||
|
||||
fgPropPicker *me = (fgPropPicker *)PP_widget -> getUserData();
|
||||
// refresh
|
||||
me -> find_props();
|
||||
FG_PUSH_PUI_DIALOG( me );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// ============================================================================
|
||||
|
||||
void prop_pickerInit()
|
||||
{
|
||||
if ( PP_widget == 0 ) {
|
||||
fgPropPicker *PP = new fgPropPicker ( PROPPICK_X, PROPPICK_Y, PROPPICK_W, PROPPICK_H,
|
||||
1, "/", "FG Properties");
|
||||
PP_widget = PP;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void prop_pickerRefresh()
|
||||
{
|
||||
if( PP_widget == 0 ) {
|
||||
prop_pickerInit();
|
||||
}
|
||||
fgPropPicker *me = (fgPropPicker *)PP_widget -> getUserData();
|
||||
me -> find_props( true );
|
||||
me -> clrValue();
|
||||
if( PP_widget == 0 )
|
||||
prop_pickerInit();
|
||||
|
||||
fgPropPicker *me = (fgPropPicker *)PP_widget -> getUserData();
|
||||
me -> find_props( true );
|
||||
me -> clrValue();
|
||||
}
|
||||
|
||||
|
||||
void prop_editOpen( const char * name, const char * value, char * proppath )
|
||||
{
|
||||
if( PE_widget == 0 )
|
||||
PE_widget = new fgPropEdit(name, value, proppath);
|
||||
if( PE_widget == 0 )
|
||||
PE_widget = new fgPropEdit(name, value, proppath);
|
||||
|
||||
fgPropEdit *me = (fgPropEdit *)PE_widget -> getUserData();
|
||||
me -> propname -> setLabel (name);
|
||||
me -> propinput -> setValue (value);
|
||||
strcpy(me -> propPath, proppath);
|
||||
me -> propinput -> acceptInput ();
|
||||
FG_PUSH_PUI_DIALOG( me );
|
||||
fgPropEdit *me = (fgPropEdit *)PE_widget -> getUserData();
|
||||
me -> propname -> setLabel (name);
|
||||
me -> propinput -> setValue (value);
|
||||
strcpy(me -> propPath, proppath);
|
||||
me -> propinput -> acceptInput ();
|
||||
FG_PUSH_PUI_DIALOG( me );
|
||||
}
|
||||
|
||||
// return a human readable form of the value "type"
|
||||
|
||||
static string getValueTypeString( const SGPropertyNode_ptr node ) {
|
||||
string result;
|
||||
|
||||
if ( node == NULL ) {
|
||||
return "unknown";
|
||||
}
|
||||
if ( node == NULL )
|
||||
return "unknown";
|
||||
|
||||
SGPropertyNode::Type type = node->getType();
|
||||
if ( type == SGPropertyNode::UNSPECIFIED ) {
|
||||
result = "unspecified";
|
||||
} else if ( type == SGPropertyNode::NONE ) {
|
||||
if ( type == SGPropertyNode::UNSPECIFIED )
|
||||
result = "unspecified";
|
||||
else if ( type == SGPropertyNode::NONE )
|
||||
result = "none";
|
||||
} else if ( type == SGPropertyNode::BOOL ) {
|
||||
result = "bool";
|
||||
} else if ( type == SGPropertyNode::INT ) {
|
||||
result = "int";
|
||||
} else if ( type == SGPropertyNode::LONG ) {
|
||||
result = "long";
|
||||
} else if ( type == SGPropertyNode::FLOAT ) {
|
||||
result = "float";
|
||||
} else if ( type == SGPropertyNode::DOUBLE ) {
|
||||
result = "double";
|
||||
} else if ( type == SGPropertyNode::STRING ) {
|
||||
result = "string";
|
||||
}
|
||||
else if ( type == SGPropertyNode::BOOL )
|
||||
result = "bool";
|
||||
else if ( type == SGPropertyNode::INT )
|
||||
result = "int";
|
||||
else if ( type == SGPropertyNode::LONG )
|
||||
result = "long";
|
||||
else if ( type == SGPropertyNode::FLOAT )
|
||||
result = "float";
|
||||
else if ( type == SGPropertyNode::DOUBLE )
|
||||
result = "double";
|
||||
else if ( type == SGPropertyNode::STRING )
|
||||
result = "string";
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// property picker class ======================================================
|
||||
|
||||
void fgPropPicker::fgPropPickerHandleSlider ( puObject * slider )
|
||||
{
|
||||
puListBox* list_box = (puListBox*) slider -> getUserData () ;
|
||||
puListBox* list_box = (puListBox*) slider -> getUserData ();
|
||||
|
||||
float val ;
|
||||
slider -> getValue ( &val ) ;
|
||||
val = 1.0f - val ;
|
||||
int scroll_range = list_box->getNumItems () - list_box->getNumVisible() ;
|
||||
if ( scroll_range > 0 )
|
||||
{
|
||||
int index = int ( scroll_range * val + 0.5 ) ;
|
||||
list_box -> setTopItem ( index ) ;
|
||||
}
|
||||
float val;
|
||||
slider -> getValue ( &val );
|
||||
val = 1.0f - val;
|
||||
int scroll_range = list_box->getNumItems () - list_box->getNumVisible();
|
||||
|
||||
if ( scroll_range > 0 ) {
|
||||
int index = int ( scroll_range * val + 0.5 );
|
||||
list_box -> setTopItem ( index );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void fgPropPicker::fgPropPickerHandleArrow ( puObject *arrow )
|
||||
{
|
||||
puSlider *slider = (puSlider *) arrow->getUserData () ;
|
||||
puListBox* list_box = (puListBox*) slider -> getUserData () ;
|
||||
puSlider *slider = (puSlider *) arrow->getUserData ();
|
||||
puListBox* list_box = (puListBox*) slider -> getUserData ();
|
||||
|
||||
int type = ((puArrowButton *)arrow)->getArrowType() ;
|
||||
int inc = ( type == PUARROW_DOWN ) ? 1 :
|
||||
( type == PUARROW_UP ) ? -1 :
|
||||
( type == PUARROW_FASTDOWN ) ? 10 :
|
||||
( type == PUARROW_FASTUP ) ? -10 : 0 ;
|
||||
int type = ((puArrowButton *)arrow)->getArrowType();
|
||||
int inc = ( type == PUARROW_DOWN ) ? 1 :
|
||||
( type == PUARROW_UP ) ? -1 :
|
||||
( type == PUARROW_FASTDOWN ) ? 10 :
|
||||
( type == PUARROW_FASTUP ) ? -10 : 0;
|
||||
|
||||
float val ;
|
||||
slider -> getValue ( &val ) ;
|
||||
val = 1.0f - val ;
|
||||
int scroll_range = list_box->getNumItems () - list_box->getNumVisible() ;
|
||||
if ( scroll_range > 0 )
|
||||
{
|
||||
int index = int ( scroll_range * val + 0.5 ) ;
|
||||
index += inc ;
|
||||
// if ( index > scroll_range ) index = scroll_range ;
|
||||
// Allow buttons to scroll further than the slider does
|
||||
if ( index > ( list_box->getNumItems () - 1 ) )
|
||||
index = ( list_box->getNumItems () - 1 ) ;
|
||||
if ( index < 0 ) index = 0 ;
|
||||
float val;
|
||||
slider -> getValue ( &val );
|
||||
val = 1.0f - val;
|
||||
int scroll_range = list_box->getNumItems () - list_box->getNumVisible();
|
||||
|
||||
slider -> setValue ( 1.0f - (float)index / scroll_range ) ;
|
||||
list_box -> setTopItem ( index ) ;
|
||||
}
|
||||
if ( scroll_range > 0 ) {
|
||||
int index = int ( scroll_range * val + 0.5 );
|
||||
index += inc;
|
||||
// if ( index > scroll_range ) index = scroll_range;
|
||||
// Allow buttons to scroll further than the slider does
|
||||
if ( index > ( list_box->getNumItems () - 1 ) )
|
||||
index = ( list_box->getNumItems () - 1 );
|
||||
if ( index < 0 )
|
||||
index = 0;
|
||||
|
||||
slider -> setValue ( 1.0f - (float)index / scroll_range );
|
||||
list_box -> setTopItem ( index );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -185,150 +203,137 @@ void fgPropPicker::chop_file ( char *fname )
|
|||
{
|
||||
/* removes everything back to the last '/' */
|
||||
|
||||
for ( int i = strlen(fname)-1 ; fname[i] != SLASH[0] && i >= 0 ; i-- )
|
||||
fname[i] = '\0' ;
|
||||
for ( int i = strlen(fname)-1; fname[i] != SLASH[0] && i >= 0; i-- )
|
||||
fname[i] = '\0';
|
||||
}
|
||||
|
||||
|
||||
void fgPropPicker::go_up_one_directory ( char *fname )
|
||||
{
|
||||
/* removes everything back to the last but one '/' */
|
||||
/* removes everything back to the last but one '/' */
|
||||
|
||||
chop_file ( fname ) ;
|
||||
chop_file ( fname );
|
||||
|
||||
if ( strlen ( fname ) == 0 )
|
||||
{
|
||||
/* Empty string! The only way to go up is to append a "../" */
|
||||
|
||||
strcpy ( fname, DOTDOTSLASH ) ;
|
||||
return ;
|
||||
}
|
||||
|
||||
/* If the last path element is a "../" then we'll have to add another "../" */
|
||||
|
||||
if ( strcmp ( & fname [ strlen(fname)-3 ], DOTDOTSLASH ) == 0 )
|
||||
{
|
||||
if ( strlen ( fname ) + 4 >= PUSTRING_MAX )
|
||||
{
|
||||
ulSetError ( UL_WARNING, "PUI: fgPropPicker - path is too long, max is %d.",
|
||||
PUSTRING_MAX ) ;
|
||||
return ;
|
||||
if ( strlen ( fname ) == 0 ) {
|
||||
/* Empty string! The only way to go up is to append a "../" */
|
||||
strcpy ( fname, DOTDOTSLASH );
|
||||
return;
|
||||
}
|
||||
|
||||
strcat ( fname, DOTDOTSLASH ) ;
|
||||
return ;
|
||||
}
|
||||
/* If the last path element is a "../" then we'll have to add another "../" */
|
||||
|
||||
/* Otherwise, just delete the last element of the path. */
|
||||
if ( strcmp ( & fname [ strlen(fname)-3 ], DOTDOTSLASH ) == 0 ) {
|
||||
if ( strlen ( fname ) + 4 >= PUSTRING_MAX ) {
|
||||
ulSetError ( UL_WARNING, "PUI: fgPropPicker - path is too long, max is %d.",
|
||||
PUSTRING_MAX );
|
||||
return;
|
||||
}
|
||||
|
||||
/* Remove the trailing slash - then remove the rest as if it was a file name */
|
||||
strcat ( fname, DOTDOTSLASH );
|
||||
return;
|
||||
}
|
||||
|
||||
fname [ strlen(fname)-1 ] = '\0' ;
|
||||
chop_file ( fname ) ;
|
||||
/* Otherwise, just delete the last element of the path. */
|
||||
/* Remove the trailing slash - then remove the rest as if it was a file name */
|
||||
|
||||
fname [ strlen(fname)-1 ] = '\0';
|
||||
chop_file ( fname );
|
||||
}
|
||||
|
||||
|
||||
void fgPropPicker::handle_select ( puObject* list_box )
|
||||
{
|
||||
fgPropPicker* prop_picker = (fgPropPicker*) list_box -> getUserData () ;
|
||||
int selected ;
|
||||
list_box -> getValue ( &selected ) ;
|
||||
fgPropPicker* prop_picker = (fgPropPicker*) list_box -> getUserData ();
|
||||
int selected;
|
||||
list_box -> getValue ( &selected );
|
||||
|
||||
if ( selected >= 0 && selected < prop_picker -> num_files )
|
||||
{
|
||||
char *dst = prop_picker -> startDir ;
|
||||
char *src = prop_picker -> files [ selected ] ;
|
||||
if ( selected >= 0 && selected < prop_picker -> num_files ) {
|
||||
char *dst = prop_picker -> startDir;
|
||||
char *src = prop_picker -> files [ selected ];
|
||||
|
||||
if (prop_picker->dotFiles && (selected < 2)) {
|
||||
if ( strcmp ( src, "." ) == 0 ) {
|
||||
/* Do nothing - but better refresh anyway. */
|
||||
|
||||
prop_picker -> find_props () ;
|
||||
return ;
|
||||
} else if ( strcmp ( src, ".." ) == 0 ) {
|
||||
/* Do back up one level - so refresh. */
|
||||
|
||||
go_up_one_directory ( dst ) ;
|
||||
prop_picker -> find_props () ;
|
||||
return ;
|
||||
if (prop_picker->dotFiles && (selected < 2)) {
|
||||
if ( strcmp ( src, "." ) == 0 ) {
|
||||
/* Do nothing - but better refresh anyway. */
|
||||
|
||||
prop_picker -> find_props ();
|
||||
return;
|
||||
} else if ( strcmp ( src, ".." ) == 0 ) {
|
||||
/* Do back up one level - so refresh. */
|
||||
|
||||
go_up_one_directory ( dst );
|
||||
prop_picker -> find_props ();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// we know we're dealing with a regular entry, so convert
|
||||
// it to an index into children[]
|
||||
if (prop_picker->dotFiles)
|
||||
selected -= 2;
|
||||
SGPropertyNode_ptr child = prop_picker->children[selected];
|
||||
assert(child != NULL);
|
||||
|
||||
// check if it's a directory (had children)
|
||||
if ( child->nChildren() ) {
|
||||
/* If this is a directory - then descend into it and refresh */
|
||||
|
||||
if ( strlen ( dst ) + strlen ( src ) + 2 >= PUSTRING_MAX ) {
|
||||
ulSetError ( UL_WARNING,
|
||||
"PUI: fgPropPicker - path is too long, max is %d.", PUSTRING_MAX );
|
||||
return;
|
||||
}
|
||||
|
||||
strcat ( dst, src ); /* add path to descend to */
|
||||
prop_picker -> find_props ();
|
||||
return;
|
||||
}
|
||||
|
||||
/* If this is a regular file - then just append it to the string */
|
||||
|
||||
if ( strlen ( dst ) + strlen ( src ) + 2 >= PUSTRING_MAX ) {
|
||||
ulSetError ( UL_WARNING,
|
||||
"PUI: fgPropPicker - path is too long, max is %d.", PUSTRING_MAX );
|
||||
return;
|
||||
}
|
||||
|
||||
if (child->getType() == SGPropertyNode::BOOL && (fgGetKeyModifiers() & KEYMOD_CTRL)) {
|
||||
child->setBoolValue(!child->getBoolValue());
|
||||
prop_pickerRefresh();
|
||||
} else
|
||||
prop_editOpen(child->getName(), child->getStringValue(), dst);
|
||||
|
||||
} else {
|
||||
// The user clicked on blank screen - maybe we should
|
||||
// refresh just in case some other process created the file.
|
||||
// Should be obsolete once we observe child add/remove on our top node
|
||||
prop_picker -> find_props ();
|
||||
}
|
||||
|
||||
// we know we're dealing with a regular entry, so convert
|
||||
// it to an index into children[]
|
||||
if (prop_picker->dotFiles) selected -= 2;
|
||||
SGPropertyNode_ptr child = prop_picker->children[selected];
|
||||
assert(child != NULL);
|
||||
|
||||
// check if it's a directory (had children)
|
||||
if ( child->nChildren() ) {
|
||||
/* If this is a directory - then descend into it and refresh */
|
||||
|
||||
if ( strlen ( dst ) + strlen ( src ) + 2 >= PUSTRING_MAX )
|
||||
{
|
||||
ulSetError ( UL_WARNING,
|
||||
"PUI: fgPropPicker - path is too long, max is %d.", PUSTRING_MAX ) ;
|
||||
return ;
|
||||
}
|
||||
|
||||
strcat ( dst, src ) ; /* add path to descend to */
|
||||
prop_picker -> find_props () ;
|
||||
return ;
|
||||
}
|
||||
|
||||
/* If this is a regular file - then just append it to the string */
|
||||
|
||||
if ( strlen ( dst ) + strlen ( src ) + 2 >= PUSTRING_MAX )
|
||||
{
|
||||
ulSetError ( UL_WARNING,
|
||||
"PUI: fgPropPicker - path is too long, max is %d.", PUSTRING_MAX ) ;
|
||||
return ;
|
||||
}
|
||||
|
||||
if (child->getType() == SGPropertyNode::BOOL && (fgGetKeyModifiers() & KEYMOD_CTRL)) {
|
||||
child->setBoolValue(!child->getBoolValue());
|
||||
prop_pickerRefresh();
|
||||
} else
|
||||
prop_editOpen(child->getName(), child->getStringValue(), dst);
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
The user clicked on blank screen - maybe we should
|
||||
refresh just in case some other process created the
|
||||
file.
|
||||
*/
|
||||
// should be obsolete once we observe child add/remove on our top node
|
||||
prop_picker -> find_props () ;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void fgPropPicker::fgPropPickerHandleOk ( puObject* b )
|
||||
{
|
||||
fgPropPicker* prop_picker = (fgPropPicker*) b -> getUserData () ;
|
||||
fgPropPicker* prop_picker = (fgPropPicker*) b -> getUserData ();
|
||||
|
||||
/* nothing to do, just hide */
|
||||
FG_POP_PUI_DIALOG( prop_picker );
|
||||
/* nothing to do, just hide */
|
||||
FG_POP_PUI_DIALOG( prop_picker );
|
||||
}
|
||||
|
||||
|
||||
void fgPropPicker::delete_arrays ()
|
||||
{
|
||||
if ( files )
|
||||
{
|
||||
for ( int i=0; i<num_files; i++ ) {
|
||||
delete[] files[i];
|
||||
}
|
||||
if ( files ) {
|
||||
for ( int i=0; i<num_files; i++ )
|
||||
delete[] files[i];
|
||||
|
||||
for (int C=0; C<num_children; ++C) {
|
||||
if (children[C]->nChildren() == 0)
|
||||
children[C]->removeChangeListener(this);
|
||||
for (int C=0; C<num_children; ++C) {
|
||||
if (children[C]->nChildren() == 0)
|
||||
children[C]->removeChangeListener(this);
|
||||
}
|
||||
|
||||
delete[] files;
|
||||
delete[] children;
|
||||
}
|
||||
|
||||
delete[] files;
|
||||
delete[] children;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -338,199 +343,202 @@ fgPropPicker::~fgPropPicker ()
|
|||
delete_arrays();
|
||||
|
||||
if ( this == puActiveWidget () )
|
||||
puDeactivateWidget () ;
|
||||
puDeactivateWidget ();
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
|
||||
fgPropPicker::fgPropPicker ( int x, int y, int w, int h, int arrows,
|
||||
const char *dir, const char *title ) :
|
||||
fgPopup ( x,y ),
|
||||
_gui((NewGUI *)globals->get_subsystem("gui"))
|
||||
const char *dir, const char *title ) :
|
||||
fgPopup ( x,y ),
|
||||
_gui((NewGUI *)globals->get_subsystem("gui"))
|
||||
{
|
||||
puFont LegendFont, LabelFont;
|
||||
puGetDefaultFonts ( &LegendFont, &LabelFont );
|
||||
FGColor txtcol(_gui->getColor("label"));
|
||||
txtcol.merge(_gui->getColor("text"));
|
||||
txtcol.merge(_gui->getColor("text-label"));
|
||||
puFont LegendFont, LabelFont;
|
||||
puGetDefaultFonts ( &LegendFont, &LabelFont );
|
||||
FGColor txtcol(_gui->getColor("label"));
|
||||
txtcol.merge(_gui->getColor("text"));
|
||||
txtcol.merge(_gui->getColor("text-label"));
|
||||
|
||||
files = NULL ;
|
||||
num_files = 0 ;
|
||||
files = NULL;
|
||||
num_files = 0;
|
||||
|
||||
strcpy ( startDir, dir ) ;
|
||||
// printf ( "StartDirLEN=%i", strlen(startDir));
|
||||
if ( arrows > 2 ) arrows = 2 ;
|
||||
if ( arrows < 0 ) arrows = 0 ;
|
||||
arrow_count = arrows ;
|
||||
strcpy ( startDir, dir );
|
||||
// printf ( "StartDirLEN=%i", strlen(startDir));
|
||||
if ( arrows > 2 )
|
||||
arrows = 2;
|
||||
if ( arrows < 0 )
|
||||
arrows = 0;
|
||||
arrow_count = arrows;
|
||||
|
||||
frame = new puFrame ( 0, 0, w, h );
|
||||
frame = new puFrame ( 0, 0, w, h );
|
||||
|
||||
setUserData( this );
|
||||
setUserData( this );
|
||||
|
||||
proppath = new puText (10, h-30);
|
||||
proppath -> setLabel (startDir);
|
||||
proppath -> setColor(PUCOL_LABEL, txtcol.red(), txtcol.green(),
|
||||
txtcol.blue(), txtcol.alpha());
|
||||
proppath = new puText (10, h-30);
|
||||
proppath -> setLabel (startDir);
|
||||
proppath -> setColor(PUCOL_LABEL, txtcol.red(), txtcol.green(),
|
||||
txtcol.blue(), txtcol.alpha());
|
||||
|
||||
slider = new puSlider (w-30,40+20*arrows,h-100-40*arrows,TRUE,20);
|
||||
slider->setValue(1.0f);
|
||||
|
||||
list_box = new puListBox ( 10, 40, w-40, h-60 ) ;
|
||||
list_box -> setLabel ( title );
|
||||
list_box -> setLabelPlace ( PUPLACE_ABOVE ) ;
|
||||
list_box -> setStyle ( -PUSTYLE_SMALL_SHADED ) ;
|
||||
list_box -> setUserData ( this ) ;
|
||||
list_box -> setCallback ( handle_select ) ;
|
||||
list_box -> setValue ( 0 ) ;
|
||||
list_box -> setColor(PUCOL_LABEL, txtcol.red(), txtcol.green(),
|
||||
txtcol.blue(), txtcol.alpha());
|
||||
slider = new puSlider (w-30,40+20*arrows,h-100-40*arrows,TRUE,20);
|
||||
slider->setValue(1.0f);
|
||||
|
||||
ok_button = new puOneShot ( 10, 10, (w<170)?(w/2-5):80, 30 ) ;
|
||||
ok_button -> setLegend ( "Ok" ) ;
|
||||
ok_button -> setUserData ( this ) ;
|
||||
ok_button -> setCallback ( fgPropPickerHandleOk ) ;
|
||||
list_box = new puListBox ( 10, 40, w-40, h-60 );
|
||||
list_box -> setLabel ( title );
|
||||
list_box -> setLabelPlace ( PUPLACE_ABOVE );
|
||||
list_box -> setStyle ( -PUSTYLE_SMALL_SHADED );
|
||||
list_box -> setUserData ( this );
|
||||
list_box -> setCallback ( handle_select );
|
||||
list_box -> setValue ( 0 );
|
||||
list_box -> setColor(PUCOL_LABEL, txtcol.red(), txtcol.green(),
|
||||
txtcol.blue(), txtcol.alpha());
|
||||
|
||||
if ( arrows > 0 )
|
||||
{
|
||||
down_arrow = new puArrowButton ( w-30, 20+20*arrows, w-10, 40+20*arrows, PUARROW_DOWN ) ;
|
||||
down_arrow->setUserData ( slider ) ;
|
||||
down_arrow->setCallback ( fgPropPickerHandleArrow ) ;
|
||||
ok_button = new puOneShot ( 10, 10, (w<170)?(w/2-5):80, 30 );
|
||||
ok_button -> setLegend ( "Ok" );
|
||||
ok_button -> setUserData ( this );
|
||||
ok_button -> setCallback ( fgPropPickerHandleOk );
|
||||
|
||||
up_arrow = new puArrowButton ( w-30, h-60-20*arrows, w-10, h-40-20*arrows, PUARROW_UP ) ;
|
||||
up_arrow->setUserData ( slider ) ;
|
||||
up_arrow->setCallback ( fgPropPickerHandleArrow ) ;
|
||||
}
|
||||
if ( arrows > 0 ) {
|
||||
down_arrow = new puArrowButton ( w-30, 20+20*arrows, w-10, 40+20*arrows, PUARROW_DOWN );
|
||||
down_arrow->setUserData ( slider );
|
||||
down_arrow->setCallback ( fgPropPickerHandleArrow );
|
||||
|
||||
// after picker is built, load the list box with data...
|
||||
find_props () ;
|
||||
up_arrow = new puArrowButton ( w-30, h-60-20*arrows, w-10, h-40-20*arrows, PUARROW_UP );
|
||||
up_arrow->setUserData ( slider );
|
||||
up_arrow->setCallback ( fgPropPickerHandleArrow );
|
||||
}
|
||||
|
||||
// printf("after Props files[1]=%s\n",files[1]);
|
||||
// printf("num items %i", list_box -> getNumItems ());
|
||||
// after picker is built, load the list box with data...
|
||||
find_props ();
|
||||
|
||||
slider -> setUserData ( list_box ) ;
|
||||
slider -> setCallback ( fgPropPickerHandleSlider ) ;
|
||||
// printf("after Props files[1]=%s\n",files[1]);
|
||||
// printf("num items %i", list_box -> getNumItems ());
|
||||
|
||||
FG_FINALIZE_PUI_DIALOG( this );
|
||||
slider -> setUserData ( list_box );
|
||||
slider -> setCallback ( fgPropPickerHandleSlider );
|
||||
|
||||
FG_FINALIZE_PUI_DIALOG( this );
|
||||
}
|
||||
|
||||
|
||||
// Like strcmp, but for sorting property nodes into a suitable display order.
|
||||
static int nodeNameCompare(const void *ppNode1, const void *ppNode2)
|
||||
{
|
||||
const SGPropertyNode_ptr pNode1 = *(const SGPropertyNode_ptr *)ppNode1;
|
||||
const SGPropertyNode_ptr pNode2 = *(const SGPropertyNode_ptr *)ppNode2;
|
||||
const SGPropertyNode_ptr pNode1 = *(const SGPropertyNode_ptr *)ppNode1;
|
||||
const SGPropertyNode_ptr pNode2 = *(const SGPropertyNode_ptr *)ppNode2;
|
||||
|
||||
// Compare name first, and then index.
|
||||
int diff = strcmp(pNode1->getName(), pNode2->getName());
|
||||
if (diff) return diff;
|
||||
return pNode1->getIndex() - pNode2->getIndex();
|
||||
// Compare name first, and then index.
|
||||
int diff = strcmp(pNode1->getName(), pNode2->getName());
|
||||
if (diff)
|
||||
return diff;
|
||||
|
||||
return pNode1->getIndex() - pNode2->getIndex();
|
||||
}
|
||||
|
||||
|
||||
// Replace the current list of properties with the children of node "startDir".
|
||||
void fgPropPicker::find_props ( bool restore_pos )
|
||||
{
|
||||
int pi;
|
||||
int i;
|
||||
int pi;
|
||||
int i;
|
||||
|
||||
delete_arrays();
|
||||
num_files = 0 ;
|
||||
delete_arrays();
|
||||
num_files = 0;
|
||||
|
||||
// printf("dir begin of find_props=%s\n",startDir);
|
||||
// printf("len of dir=%i",strlen(startDir));
|
||||
SGPropertyNode * node = globals->get_props()->getNode(startDir);
|
||||
// printf("dir begin of find_props=%s\n",startDir);
|
||||
// printf("len of dir=%i",strlen(startDir));
|
||||
SGPropertyNode * node = globals->get_props()->getNode(startDir);
|
||||
|
||||
num_files = (node) ? (int)node->nChildren() : 0;
|
||||
|
||||
// instantiate string objects and add [.] and [..] for subdirs
|
||||
if (strcmp(startDir,"/") == 0) {
|
||||
files = new char* [ num_files+1 ] ;
|
||||
pi = 0;
|
||||
dotFiles = false;
|
||||
} else {
|
||||
// add two for the .. and .
|
||||
num_files = num_files + 2;
|
||||
// make room for .. and .
|
||||
files = new char* [ num_files+1 ] ;
|
||||
num_files = node ? (int)node->nChildren() : 0;
|
||||
|
||||
stdString line = ".";
|
||||
files [ 0 ] = new char[line.size() + 1];
|
||||
strcpy ( files [ 0 ], line.c_str() );
|
||||
// instantiate string objects and add [.] and [..] for subdirs
|
||||
if (strcmp(startDir,"/") == 0) {
|
||||
files = new char* [ num_files+1 ];
|
||||
pi = 0;
|
||||
dotFiles = false;
|
||||
} else {
|
||||
// add two for the .. and .
|
||||
num_files = num_files + 2;
|
||||
// make room for .. and .
|
||||
files = new char* [ num_files+1 ];
|
||||
|
||||
line = "..";
|
||||
files [ 1 ] = new char[line.size() + 1];
|
||||
strcpy ( files [ 1 ], line.c_str() );
|
||||
stdString line = ".";
|
||||
files [ 0 ] = new char[line.size() + 1];
|
||||
strcpy ( files [ 0 ], line.c_str() );
|
||||
|
||||
pi = 2;
|
||||
dotFiles = true;
|
||||
};
|
||||
line = "..";
|
||||
files [ 1 ] = new char[line.size() + 1];
|
||||
strcpy ( files [ 1 ], line.c_str() );
|
||||
|
||||
|
||||
if (node) {
|
||||
// Get the list of children
|
||||
num_children = node->nChildren();
|
||||
children = new SGPropertyNode_ptr[num_children];
|
||||
for (i = 0; i < num_children; i++) {
|
||||
children[i] = node->getChild(i);
|
||||
pi = 2;
|
||||
dotFiles = true;
|
||||
}
|
||||
|
||||
// Sort the children into display order
|
||||
qsort(children, num_children, sizeof(children[0]), nodeNameCompare);
|
||||
|
||||
// Make lists of the children's names, values, etc.
|
||||
for (i = 0; i < num_children; i++) {
|
||||
SGPropertyNode * child = children[i];
|
||||
stdString name = child->getDisplayName(true);
|
||||
|
||||
if ( child->nChildren() > 0 ) {
|
||||
files[ pi ] = new char[ strlen(name.c_str())+2 ] ;
|
||||
strcpy ( files [ pi ], name.c_str() ) ;
|
||||
strcat ( files [ pi ], "/" ) ;
|
||||
} else {
|
||||
files[pi] = NULL; // ensure it's NULL before setting intial value
|
||||
updateTextForEntry(i);
|
||||
// observe it
|
||||
child->addChangeListener(this);
|
||||
if (node) {
|
||||
num_children = node->nChildren();
|
||||
children = new SGPropertyNode_ptr[num_children];
|
||||
for (i = 0; i < num_children; i++)
|
||||
children[i] = node->getChild(i);
|
||||
|
||||
qsort(children, num_children, sizeof(children[0]), nodeNameCompare);
|
||||
|
||||
// Make lists of the children's names, values, etc.
|
||||
for (i = 0; i < num_children; i++) {
|
||||
SGPropertyNode * child = children[i];
|
||||
stdString name = child->getDisplayName(true);
|
||||
|
||||
if ( child->nChildren() > 0 ) {
|
||||
files[ pi ] = new char[ strlen(name.c_str())+2 ];
|
||||
strcpy ( files [ pi ], name.c_str() );
|
||||
strcat ( files [ pi ], "/" );
|
||||
} else {
|
||||
files[pi] = NULL; // ensure it's NULL before setting intial value
|
||||
updateTextForEntry(i);
|
||||
// observe it
|
||||
child->addChangeListener(this);
|
||||
}
|
||||
|
||||
++pi;
|
||||
}
|
||||
|
||||
++pi;
|
||||
}
|
||||
}
|
||||
|
||||
files [ num_files ] = NULL ;
|
||||
files [ num_files ] = NULL;
|
||||
|
||||
proppath -> setLabel (startDir);
|
||||
proppath -> setLabel(startDir);
|
||||
|
||||
int top = list_box->getTopItem();
|
||||
list_box -> newList ( files ) ;
|
||||
if (restore_pos)
|
||||
list_box->setTopItem(top);
|
||||
int top = list_box->getTopItem();
|
||||
list_box -> newList ( files );
|
||||
if (restore_pos)
|
||||
list_box->setTopItem(top);
|
||||
|
||||
// adjust the size of the slider...
|
||||
if (num_files > list_box->getNumVisible()) {
|
||||
slider->setSliderFraction((float)list_box->getNumVisible() / num_files);
|
||||
if (!restore_pos)
|
||||
slider->setValue(1.0f);
|
||||
slider->reveal();
|
||||
up_arrow->reveal();
|
||||
down_arrow->reveal();
|
||||
} else {
|
||||
slider->hide();
|
||||
up_arrow->hide();
|
||||
down_arrow->hide();
|
||||
}
|
||||
// adjust the size of the slider...
|
||||
if (num_files > list_box->getNumVisible()) {
|
||||
slider->setSliderFraction((float)list_box->getNumVisible() / num_files);
|
||||
if (!restore_pos)
|
||||
slider->setValue(1.0f);
|
||||
|
||||
slider->reveal();
|
||||
up_arrow->reveal();
|
||||
down_arrow->reveal();
|
||||
|
||||
} else {
|
||||
slider->hide();
|
||||
up_arrow->hide();
|
||||
down_arrow->hide();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void fgPropPicker::updateTextForEntry(int index)
|
||||
{
|
||||
assert((index >= 0) && (index < num_children));
|
||||
SGPropertyNode_ptr node = children[index];
|
||||
|
||||
// take a copy of the value
|
||||
|
||||
// take a copy of the value
|
||||
stdString value = node->getStringValue();
|
||||
|
||||
stdString line = node->getDisplayName() + stdString(" = '")
|
||||
+ value + "' " + "(";
|
||||
stdString line = node->getDisplayName() + stdString(" = '") + value + "' " + "(";
|
||||
line += getValueTypeString( node );
|
||||
|
||||
if (fgGetBool("/sim/gui/dialogs/property-browser/show-flags", false)) {
|
||||
|
@ -555,15 +563,17 @@ void fgPropPicker::updateTextForEntry(int index)
|
|||
if (line.length() >= PUSTRING_MAX)
|
||||
line[PUSTRING_MAX-1] = '\0';
|
||||
|
||||
if (dotFiles) index +=2;
|
||||
|
||||
if (dotFiles)
|
||||
index +=2;
|
||||
|
||||
// don't leak everywhere if we're updating
|
||||
delete[] files[index];
|
||||
|
||||
files[index] = new char[ strlen(line.c_str())+2 ] ;
|
||||
strcpy ( files [ index ], line.c_str() ) ;
|
||||
|
||||
files[index] = new char[ strlen(line.c_str())+2 ];
|
||||
strcpy ( files [ index ], line.c_str() );
|
||||
}
|
||||
|
||||
|
||||
void fgPropPicker::valueChanged(SGPropertyNode *nd)
|
||||
{
|
||||
for (int C=0; C<num_children; ++C)
|
||||
|
@ -573,32 +583,39 @@ void fgPropPicker::valueChanged(SGPropertyNode *nd)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// property editor class ======================================================
|
||||
|
||||
void fgPropEdit::fgPropEditHandleCancel ( puObject* b )
|
||||
{
|
||||
fgPropEdit* prop_edit = (fgPropEdit*) b -> getUserData () ;
|
||||
prop_pickerRefresh();
|
||||
FG_POP_PUI_DIALOG( prop_edit );
|
||||
fgPropEdit* prop_edit = (fgPropEdit*) b -> getUserData ();
|
||||
prop_pickerRefresh();
|
||||
FG_POP_PUI_DIALOG( prop_edit );
|
||||
}
|
||||
|
||||
|
||||
void fgPropEdit::fgPropEditHandleOK ( puObject* b )
|
||||
{
|
||||
fgPropEdit* prop_edit = (fgPropEdit*) b -> getUserData () ;
|
||||
const char* tname;
|
||||
char* tvalue;
|
||||
fgPropEdit* prop_edit = (fgPropEdit*) b -> getUserData ();
|
||||
const char* tname;
|
||||
char* tvalue;
|
||||
|
||||
// use label text for property node to be updated
|
||||
tname = prop_edit -> propname -> getLabel();
|
||||
prop_edit -> propinput -> getValue( &tvalue );
|
||||
// use label text for property node to be updated
|
||||
tname = prop_edit -> propname -> getLabel();
|
||||
prop_edit -> propinput -> getValue( &tvalue );
|
||||
|
||||
SGPropertyNode * node = globals->get_props()->getNode(prop_edit -> propPath);
|
||||
node->getNode( prop_edit -> propname -> getLabel(), true)->setStringValue(tvalue);
|
||||
SGPropertyNode * node = globals->get_props()->getNode(prop_edit -> propPath);
|
||||
node->getNode( prop_edit -> propname -> getLabel(), true)->setStringValue(tvalue);
|
||||
|
||||
// update the picker display so it shows new value
|
||||
prop_pickerRefresh();
|
||||
// update the picker display so it shows new value
|
||||
prop_pickerRefresh();
|
||||
|
||||
FG_POP_PUI_DIALOG( prop_edit );
|
||||
FG_POP_PUI_DIALOG( prop_edit );
|
||||
}
|
||||
|
||||
|
||||
fgPropEdit::fgPropEdit ( const char *name, const char *value, char *proppath ) :
|
||||
fgPopup ( 0, 0 ),
|
||||
_gui((NewGUI *)globals->get_subsystem("gui"))
|
||||
|
@ -612,32 +629,33 @@ fgPropEdit::fgPropEdit ( const char *name, const char *value, char *proppath ) :
|
|||
// locate in relation to picker widget...
|
||||
int fx = PROPPICK_X;
|
||||
int fy = PROPPICK_Y + PROPPICK_H;
|
||||
frame = new puFrame (fx,fy, fx+500, fy+120);
|
||||
frame = new puFrame (fx,fy, fx+500, fy+120);
|
||||
|
||||
strcpy (propPath, proppath);
|
||||
|
||||
setUserData( this );
|
||||
|
||||
propname = new puText (fx+10, fy+90);
|
||||
propname -> setLabel (name);
|
||||
propname -> setColor(PUCOL_LABEL, txtcol.red(), txtcol.green(),
|
||||
txtcol.blue(), txtcol.alpha());
|
||||
|
||||
propinput = new puInput (fx+10, fy+50, fx+480, fy+80);
|
||||
propinput -> setValue (value);
|
||||
propinput -> acceptInput();
|
||||
|
||||
propname = new puText (fx+10, fy+90);
|
||||
propname -> setLabel(name);
|
||||
propname -> setColor(PUCOL_LABEL, txtcol.red(), txtcol.green(),
|
||||
txtcol.blue(), txtcol.alpha());
|
||||
|
||||
propinput = new puInput (fx+10, fy+50, fx+480, fy+80);
|
||||
propinput -> setValue (value);
|
||||
propinput -> acceptInput();
|
||||
|
||||
ok_button = new puOneShot (fx+10, fy+10, fx+80, fy+30);
|
||||
ok_button -> setUserData (this);
|
||||
ok_button -> setLegend (gui_msg_OK);
|
||||
ok_button -> setCallback (fgPropEditHandleOK);
|
||||
ok_button -> makeReturnDefault (TRUE);
|
||||
|
||||
cancel_button = new puOneShot (fx+100, fy+10, fx+180, fy+30);
|
||||
cancel_button -> setUserData (this);
|
||||
cancel_button -> setLegend (gui_msg_CANCEL);
|
||||
cancel_button -> setCallback (fgPropEditHandleCancel);
|
||||
|
||||
ok_button = new puOneShot (fx+10, fy+10, fx+80, fy+30);
|
||||
ok_button -> setUserData (this);
|
||||
ok_button -> setLegend (gui_msg_OK);
|
||||
ok_button -> setCallback (fgPropEditHandleOK);
|
||||
ok_button -> makeReturnDefault(TRUE);
|
||||
|
||||
cancel_button = new puOneShot (fx+100, fy+10, fx+180, fy+30);
|
||||
cancel_button -> setUserData (this);
|
||||
cancel_button -> setLegend (gui_msg_CANCEL);
|
||||
cancel_button -> setCallback (fgPropEditHandleCancel);
|
||||
|
||||
FG_FINALIZE_PUI_DIALOG( this );
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
/*
|
||||
prop_picker.hxx
|
||||
|
||||
*/
|
||||
#ifndef _PROP_PICKER_HXX
|
||||
#define _PROP_PICKER_HXX
|
||||
|
||||
#include <plib/pu.h>
|
||||
|
||||
|
@ -15,93 +13,89 @@ void prop_pickerView( puObject * );
|
|||
void prop_pickerRefresh();
|
||||
void prop_editOpen( const char * name, const char * value );
|
||||
|
||||
class fgPropPicker ;
|
||||
class fgPropEdit ;
|
||||
|
||||
class fgPropPicker :
|
||||
public fgPopup,
|
||||
public SGPropertyChangeListener
|
||||
{
|
||||
class fgPropPicker;
|
||||
class fgPropEdit;
|
||||
|
||||
static void handle_select ( puObject *b ) ;
|
||||
static void input_entered ( puObject *b ) ;
|
||||
static void fgPropPickerHandleSlider ( puObject * slider );
|
||||
static void fgPropPickerHandleArrow ( puObject *arrow );
|
||||
static void fgPropPickerHandleOk ( puObject* b );
|
||||
class fgPropPicker : public fgPopup, public SGPropertyChangeListener {
|
||||
|
||||
void delete_arrays () ;
|
||||
static void handle_select ( puObject *b );
|
||||
static void input_entered ( puObject *b );
|
||||
static void fgPropPickerHandleSlider ( puObject * slider );
|
||||
static void fgPropPickerHandleArrow ( puObject *arrow );
|
||||
static void fgPropPickerHandleOk ( puObject* b );
|
||||
|
||||
/** update the text string in the puList using the given node and
|
||||
updating the requested offset. The value of dotFiles is taken
|
||||
into account before the index is applied, i.e this should be
|
||||
an index into 'children' */
|
||||
void updateTextForEntry(int index);
|
||||
|
||||
char** files ;
|
||||
int num_files ;
|
||||
int arrow_count ;
|
||||
char startDir [ PUSTRING_MAX * 2 ] ;
|
||||
void delete_arrays ();
|
||||
|
||||
SGPropertyNode_ptr* children;
|
||||
int num_children;
|
||||
|
||||
/** set if we're display the . and .. entries at the start of the
|
||||
list */
|
||||
bool dotFiles;
|
||||
|
||||
/* puInput *input ; */
|
||||
// update the text string in the puList using the given node and
|
||||
// updating the requested offset. The value of dotFiles is taken
|
||||
// into account before the index is applied, i.e this should be
|
||||
// an index into 'children' */
|
||||
void updateTextForEntry(int index);
|
||||
|
||||
char** files;
|
||||
int num_files;
|
||||
int arrow_count;
|
||||
char startDir [ PUSTRING_MAX * 2 ];
|
||||
|
||||
SGPropertyNode_ptr* children;
|
||||
int num_children;
|
||||
|
||||
// set if we're display the . and .. entries at the start of the
|
||||
// list
|
||||
bool dotFiles;
|
||||
|
||||
protected:
|
||||
puFrame *frame;
|
||||
puListBox *list_box;
|
||||
puSlider *slider;
|
||||
puOneShot *cancel_button;
|
||||
puOneShot *ok_button;
|
||||
puArrowButton *down_arrow;
|
||||
puArrowButton *up_arrow;
|
||||
|
||||
puFrame *frame ;
|
||||
puListBox *list_box ;
|
||||
puSlider *slider ;
|
||||
puOneShot *cancel_button ;
|
||||
puOneShot *ok_button ;
|
||||
puArrowButton *down_arrow ;
|
||||
puArrowButton *up_arrow ;
|
||||
|
||||
NewGUI * _gui;
|
||||
NewGUI * _gui;
|
||||
|
||||
public:
|
||||
puText *proppath ;
|
||||
void find_props ( bool restore_slider_pos = false ) ;
|
||||
fgPropPicker ( int x, int y, int w, int h, int arrows,
|
||||
const char *dir, const char *title = "Pick a file" ) ;
|
||||
puText *proppath;
|
||||
void find_props ( bool restore_slider_pos = false );
|
||||
fgPropPicker ( int x, int y, int w, int h, int arrows,
|
||||
const char *dir, const char *title = "Pick a file" );
|
||||
|
||||
~fgPropPicker () {;}
|
||||
~fgPropPicker () {}
|
||||
|
||||
static void go_up_one_directory ( char *fname ) ;
|
||||
static void chop_file ( char *fname ) ;
|
||||
static void go_up_one_directory ( char *fname );
|
||||
static void chop_file ( char *fname );
|
||||
|
||||
// over-ride the method from SGPropertyNodeListener
|
||||
virtual void valueChanged (SGPropertyNode * node);
|
||||
} ;
|
||||
// over-ride the method from SGPropertyNodeListener
|
||||
virtual void valueChanged (SGPropertyNode * node);
|
||||
};
|
||||
|
||||
class fgPropEdit : public fgPopup
|
||||
{
|
||||
|
||||
static void fgPropEditHandleCancel ( puObject *b ) ;
|
||||
|
||||
class fgPropEdit : public fgPopup {
|
||||
|
||||
static void fgPropEditHandleCancel ( puObject *b );
|
||||
static void fgPropEditHandleOK ( puObject* b );
|
||||
|
||||
protected:
|
||||
|
||||
puFrame *frame ;
|
||||
puOneShot *cancel_button ;
|
||||
puOneShot *ok_button ;
|
||||
puFrame *frame;
|
||||
puOneShot *cancel_button;
|
||||
puOneShot *ok_button;
|
||||
|
||||
NewGUI * _gui;
|
||||
|
||||
public:
|
||||
puText *propname ;
|
||||
puInput *propinput ;
|
||||
char propPath [ PUSTRING_MAX * 2 ] ;
|
||||
puText *propname;
|
||||
puInput *propinput;
|
||||
char propPath [ PUSTRING_MAX * 2 ];
|
||||
|
||||
fgPropEdit ( const char *name, const char *value, char *proppath ) ;
|
||||
fgPropEdit ( const char *name, const char *value, char *proppath );
|
||||
|
||||
~fgPropEdit () {;}
|
||||
~fgPropEdit () {}
|
||||
|
||||
static void go_up_one_directory ( char *fname ) ;
|
||||
static void chop_file ( char *fname ) ;
|
||||
static void go_up_one_directory ( char *fname );
|
||||
static void chop_file ( char *fname );
|
||||
};
|
||||
|
||||
} ;
|
||||
#endif // _PROP_PICKER_HXX
|
||||
|
|
Loading…
Add table
Reference in a new issue