From 284c73a95ce2d799ba5075cccac2e948817a6968 Mon Sep 17 00:00:00 2001
From: mfranz <mfranz>
Date: Wed, 1 Nov 2006 22:10:22 +0000
Subject: [PATCH] remove old property dialog

---
 src/GUI/Makefile.am     |   1 -
 src/GUI/README          |   1 -
 src/GUI/gui.h           |   1 -
 src/GUI/gui_funcs.cxx   |   2 -
 src/GUI/menubar.cxx     |   9 -
 src/GUI/prop_picker.cxx | 592 ----------------------------------------
 6 files changed, 606 deletions(-)
 delete mode 100755 src/GUI/prop_picker.cxx

diff --git a/src/GUI/Makefile.am b/src/GUI/Makefile.am
index 4f2a55dd3..c086fcf21 100644
--- a/src/GUI/Makefile.am
+++ b/src/GUI/Makefile.am
@@ -9,7 +9,6 @@ libGUI_a_SOURCES = \
 	gui_local.cxx gui_local.hxx \
 	mouse.cxx fonts.cxx \
 	preset_dlg.cxx preset_dlg.hxx \
-	prop_picker.cxx prop_picker.hxx \
 	sgVec3Slider.cxx sgVec3Slider.hxx \
 	trackball.c trackball.h \
 	puList.cxx puList.hxx \
diff --git a/src/GUI/README b/src/GUI/README
index 43b5d629f..1d2d338fe 100644
--- a/src/GUI/README
+++ b/src/GUI/README
@@ -14,7 +14,6 @@ menubar.[ch]xx          XML-configurable menu bar.
 mouse.cxx               Old GUI mouse support (deprecated).
 new_gui.[ch]xx          Top-level for the GUI subsystem.
 preset_dlg.[ch]xx       Internal functions for presets (deprecated).
-prop_picker.[ch]xx      Built-in property-tree dialog.
 sgVec3Slider.[ch]xx     Built-in dialog for adjusting the view.
 trackball.[ch]          Old mouse view support (deprecated).
 
diff --git a/src/GUI/gui.h b/src/GUI/gui.h
index f4535d510..b7a32af7d 100644
--- a/src/GUI/gui.h
+++ b/src/GUI/gui.h
@@ -67,7 +67,6 @@ extern void printScreen(puObject *);
 extern void guiTogglePanel(puObject *);
 extern void PilotOffsetAdjust(puObject *);
 extern void fgHUDalphaAdjust(puObject *);
-extern void prop_pickerView(puObject *);
 extern void NewAirport(puObject *);
 #ifdef FG_NETWORK_OLK
 extern void net_display_toggle(puObject *);
diff --git a/src/GUI/gui_funcs.cxx b/src/GUI/gui_funcs.cxx
index 03b042aae..3a338a77d 100644
--- a/src/GUI/gui_funcs.cxx
+++ b/src/GUI/gui_funcs.cxx
@@ -88,7 +88,6 @@
 #include "gui.h"
 #include "gui_local.hxx"
 #include "preset_dlg.hxx"
-#include "prop_picker.hxx"
 #include "sgVec3Slider.hxx"
 
 SG_USING_STD(string);
@@ -124,7 +123,6 @@ const __fg_gui_fn_t __fg_gui_fn[] = {
 
         //View
         {"guiTogglePanel", guiTogglePanel},
-        {"prop_pickerView", prop_pickerView},
 
         // Environment
         {"fgPresetAirport", fgPresetAirport},
diff --git a/src/GUI/menubar.cxx b/src/GUI/menubar.cxx
index f8ef4db71..9cacef59c 100644
--- a/src/GUI/menubar.cxx
+++ b/src/GUI/menubar.cxx
@@ -54,14 +54,6 @@ do_print_dialog (const SGPropertyNode * arg)
 }
 #endif
 
-extern void prop_pickerView (puObject *);
-static bool
-do_properties_dialog (const SGPropertyNode * arg)
-{
-    prop_pickerView(0);
-    return true;
-}
-
 extern void helpCb (puObject *);
 static bool
 do_help_dialog (const SGPropertyNode * arg)
@@ -81,7 +73,6 @@ static struct {
 #if defined( WIN32 ) && !defined( __CYGWIN__) && !defined(__MINGW32__)
     { "old-print-dialog", do_print_dialog },
 #endif
-    { "old-properties-dialog", do_properties_dialog },
     { "old-help-dialog", do_help_dialog },
     { 0, 0 }
 };
diff --git a/src/GUI/prop_picker.cxx b/src/GUI/prop_picker.cxx
deleted file mode 100755
index 5fb5a747a..000000000
--- a/src/GUI/prop_picker.cxx
+++ /dev/null
@@ -1,592 +0,0 @@
-/*
-
-     Adapted by Jim Wilson, beginning Sept 2001 (FG v 0.79)
-
-****     Insert FlightGear GPL here.
-
-     Based on puFilePicker from:
-
-     ********
-     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.
-
-     For further information visit http://plib.sourceforge.net
-
-     $Id$
-     ********
-*/
-
-
-#ifdef HAVE_CONFIG_H
-#  include <config.h>
-#endif
-
-#include <simgear/compiler.h>
-#include <simgear/props/props.hxx>
-
-#include STL_STRING
-SG_USING_STD(string);
-
-#include <Main/fg_os.hxx>
-#include <Main/globals.hxx>
-#include "new_gui.hxx"
-#include "prop_picker.hxx"
-
-
-static puObject *PP_widget = 0;
-
-#define PROPPICK_X 100
-#define PROPPICK_Y 200
-#define PROPPICK_W 500
-#define PROPPICK_H 300
-
-static puObject *PE_widget = 0;
-
-
-
-// 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 );
-}
-
-
-
-
-// ============================================================================
-
-void prop_pickerInit()
-{
-    if (!PP_widget) {
-        fgPropPicker *PP = new fgPropPicker ( PROPPICK_X, PROPPICK_Y, PROPPICK_W, PROPPICK_H,
-                1, globals->get_props(), "FG Properties");
-        PP_widget = PP;
-    }
-}
-
-
-void prop_pickerRefresh()
-{
-    if (!PP_widget)
-        prop_pickerInit();
-
-    fgPropPicker *me = (fgPropPicker *)PP_widget -> getUserData();
-    me -> find_props( true );
-    me -> clrValue();
-}
-
-
-void prop_editOpen( SGPropertyNode *node )
-{
-    assert(node);
-    if (!PE_widget)
-        PE_widget = new fgPropEdit(node);
-
-    fgPropEdit *me = (fgPropEdit *)PE_widget -> getUserData();
-    me -> namestring = node->getDisplayName();
-    me -> propname -> setLabel (me->namestring.c_str());
-    me -> propinput -> setValue (node->getStringValue());
-    me -> propinput -> acceptInput ();
-    me -> setEditNode(node);
-    FG_PUSH_PUI_DIALOG( me );
-}
-
-
-static string getValueTypeString( const SGPropertyNode_ptr node ) {
-    string result;
-
-    if ( node == NULL )
-        return "unknown";
-
-    SGPropertyNode::Type type = node->getType();
-    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";
-
-    return result;
-}
-
-
-// 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;
-
-    // Compare name first, and then index.
-    int diff = strcmp(pNode1->getName(), pNode2->getName());
-    if (diff)
-        return diff;
-
-    return pNode1->getIndex() - pNode2->getIndex();
-}
-
-
-
-
-// property picker class ======================================================
-
-void fgPropPicker::fgPropPickerHandleSlider ( puObject * slider )
-{
-    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 );
-    }
-}
-
-
-void fgPropPicker::fgPropPickerHandleArrow ( puObject *arrow )
-{
-    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;
-
-    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;
-
-        slider -> setValue ( 1.0f - (float)index / scroll_range );
-        list_box -> setTopItem ( index );
-    }
-}
-
-
-void fgPropPicker::handle_select ( puObject* list_box )
-{
-    fgPropPicker* prop_picker = (fgPropPicker*) list_box -> getUserData ();
-    int selected;
-    list_box -> getValue ( &selected );
-
-    if ( selected >= 0 && selected < prop_picker -> num_files ) {
-        const 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. */
-
-                SGPropertyNode *parent = prop_picker->getCurrent()->getParent();
-                if (parent) {
-                    prop_picker->setCurrent(parent);
-                    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() ) {
-            prop_picker->setCurrent(child);
-            prop_picker -> find_props ();
-            return;
-        }
-
-        // it is a regular property
-        if (child->getType() == SGPropertyNode::BOOL && (fgGetKeyModifiers() & KEYMOD_CTRL)) {
-            child->setBoolValue(!child->getBoolValue());
-            prop_pickerRefresh();
-        } else
-            prop_editOpen(child);
-
-    } 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 ();
-
-    // 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];
-
-        for (int C=0; C<num_children; ++C) {
-            if (children[C]->nChildren() == 0)
-                children[C]->removeChangeListener(this);
-        }
-
-        delete[] files;
-        delete[] children;
-    }
-}
-
-/*
-
-fgPropPicker::~fgPropPicker ()
-{
-  delete_arrays();
-
-  if ( this == puActiveWidget () )
-    puDeactivateWidget ();
-}
-
-*/
-
-
-fgPropPicker::fgPropPicker ( int x, int y, int w, int h, int arrows,
-                             SGPropertyNode *start, const char *title ) :
-    fgPopup ( x,y ),
-    curr(start),
-    flags(fgGetNode("/sim/gui/dialogs/property-browser/show-flags", true)),
-    _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"));
-
-    files = NULL;
-    num_files = 0;
-
-    if ( arrows > 2 )
-        arrows = 2;
-    if ( arrows < 0 )
-        arrows = 0;
-    arrow_count = arrows;
-
-    frame = new puFrame ( 0, 0, w, h );
-
-    setUserData( this );
-
-    proppath = new puText (10, h-30);
-    proppath -> setLabel (curr->getPath(true));
-    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());
-
-    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 );
-
-    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 );
-
-        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 );
-    }
-
-    // after picker is built, load the list box with data...
-    find_props ();
-
-    // printf("after Props files[1]=%s\n",files[1]);
-    // printf("num items %i", list_box -> getNumItems ());
-
-    slider -> setUserData ( list_box );
-    slider -> setCallback ( fgPropPickerHandleSlider );
-
-    FG_FINALIZE_PUI_DIALOG( this );
-}
-
-
-// Replace list with children of current
-void fgPropPicker::find_props ( bool restore_pos )
-{
-    int pi;
-    int i;
-
-    delete_arrays();
-    num_files = (int)curr->nChildren();
-
-    // instantiate string objects and add [.] and [..] for subdirs
-    if (!curr->getParent()) {
-        files = new char* [ num_files+1 ];
-        pi = 0;
-        dotFiles = false;
-
-    } else {
-        // add two for the .. and .
-        num_files += 2;
-        // make room for .. and .
-        files = new char* [ num_files+1 ];
-
-        stdString line = ".";
-        files [ 0 ] = new char[line.size() + 1];
-        strcpy ( files [ 0 ], line.c_str() );
-
-        line = "..";
-        files [ 1 ] = new char[line.size() + 1];
-        strcpy ( files [ 1 ], line.c_str() );
-
-        pi = 2;
-        dotFiles = true;
-    }
-
-    num_children = curr->nChildren();
-    children = new SGPropertyNode_ptr[num_children];
-    for (i = 0; i < num_children; i++)
-        children[i] = curr->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];
-
-        if ( child->nChildren() > 0 ) {
-            stdString name = stdString(child->getDisplayName(true)) + '/';
-            files[ pi ] = new char[ name.size() + 1 ];
-            strcpy ( files [ pi ], name.c_str() );
-
-        } else {
-            files[pi] = NULL; // ensure it's NULL before setting intial value
-            updateTextForEntry(i);
-            child->addChangeListener(this);
-        }
-
-        ++pi;
-    }
-
-    files [ num_files ] = NULL;
-
-    proppath -> setLabel(curr->getPath(true));
-
-    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();
-    }
-}
-
-
-void fgPropPicker::updateTextForEntry(int index)
-{
-    assert((index >= 0) && (index < num_children));
-    SGPropertyNode_ptr node = children[index];
-
-    stdString name = node->getDisplayName(true);
-    stdString type = getValueTypeString(node);
-    stdString value = node->getStringValue();
-
-    stdString line = name + " = '" + value + "' (" + type;
-
-    if (flags->getBoolValue()) {
-        stdString ext;
-        if (!node->getAttribute(SGPropertyNode::READ))
-            ext += 'r';
-        if (!node->getAttribute(SGPropertyNode::WRITE))
-            ext += 'w';
-        if (node->getAttribute(SGPropertyNode::TRACE_READ))
-            ext += 'R';
-        if (node->getAttribute(SGPropertyNode::TRACE_WRITE))
-            ext += 'W';
-        if (node->getAttribute(SGPropertyNode::ARCHIVE))
-            ext += 'A';
-        if (node->getAttribute(SGPropertyNode::USERARCHIVE))
-            ext += 'U';
-        if (node->isTied())
-            ext += 'T';
-        if (ext.size())
-            line += ", " + ext;
-    }
-
-    line += ')';
-
-    // truncate entries to plib pui limit
-    if (line.length() >= PUSTRING_MAX)
-        line[PUSTRING_MAX-1] = '\0';
-
-    if (dotFiles)
-        index += 2;
-
-    // don't leak everywhere if we're updating
-    delete[] files[index];
-
-    files[index] = new char[ line.size() + 1 ];
-    strcpy ( files [ index ], line.c_str() );
-}
-
-
-void fgPropPicker::valueChanged(SGPropertyNode *nd)
-{
-    for (int i = 0; i < num_children; i++)
-        if (children[i] == nd) {
-            updateTextForEntry(i);
-            return;
-        }
-}
-
-
-
-
-// property editor class ======================================================
-
-void fgPropEdit::fgPropEditHandleCancel ( puObject* b )
-{
-    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 ();
-    char* tvalue;
-
-    prop_edit -> propinput -> getValue( &tvalue );
-    prop_edit->getEditNode()->setStringValue(tvalue);
-
-    // update the picker display so it shows new value
-    prop_pickerRefresh();
-
-    FG_POP_PUI_DIALOG( prop_edit );
-}
-
-
-fgPropEdit::fgPropEdit ( SGPropertyNode *n ) :
-    fgPopup ( 0, 0 ),
-    node(n),
-    _gui((NewGUI *)globals->get_subsystem("gui"))
-{
-    assert(n);
-
-    puFont LegendFont, LabelFont;
-    puGetDefaultFonts ( &LegendFont, &LabelFont );
-    FGColor txtcol(_gui->getColor("label"));
-    txtcol.merge(_gui->getColor("text"));
-    txtcol.merge(_gui->getColor("text-label"));
-
-    // 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);
-
-    setUserData( this );
-
-    namestring = node->getDisplayName();
-    propname = new puText (fx+10, fy+90);
-    propname -> setLabel(namestring.c_str());
-    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 (node->getStringValue());
-    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);
-
-    FG_FINALIZE_PUI_DIALOG( this );
-}
-
-