X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FGUI%2Fproperty_list.hxx;h=046c09435b3872c4d7d9871b7d04c48a5fd75032;hb=c5366cceb6d345d3526ab013b04eb815fe0a6845;hp=b044361b1abd049ce7566596330c81414e84273c;hpb=9c9876670045520a911304e7c45a2f3bdc997bc6;p=flightgear.git diff --git a/src/GUI/property_list.hxx b/src/GUI/property_list.hxx index b044361b1..046c09435 100644 --- a/src/GUI/property_list.hxx +++ b/src/GUI/property_list.hxx @@ -23,14 +23,14 @@ #ifndef _PROPERTY_LIST_HXX #define _PROPERTY_LIST_HXX +#include -#include +#include #include #include "dialog.hxx" -#include "puList.hxx" -class PropertyList : public puList, public SGPropertyChangeListener, public GUI_ID { +class PropertyList : public puaList, public SGPropertyChangeListener, public GUI_ID { public: PropertyList(int minx, int miny, int maxx, int maxy, SGPropertyNode *); ~PropertyList(); @@ -39,36 +39,56 @@ public: void setCurrent(SGPropertyNode *p); SGPropertyNode *getCurrent() const { return _curr; } void publish(SGPropertyNode *p) { _return = p; invokeCallback(); } - void toggleFlags() { _flags->setBoolValue(!_flags->getBoolValue()); } + void toggleVerbosity() { _verbose = !_verbose; } // overridden plib pui methods - virtual char *getListStringValue() { return (char *)(_return ? _return->getPath(true) : ""); } - //virtual char *getStringValue(void) { return (char *)(_return ? _return->getPath(true) : ""); } + virtual char *getStringValue(void) + { + _return_path.clear(); + if (_return) + _return_path = _return->getPath(true); + return const_cast(_return_path.c_str()); + } + //virtual char *getListStringValue() { return (char *)(_return ? _return->getPath(true) : ""); } virtual void setValue(const char *); // listener method virtual void valueChanged(SGPropertyNode *node); private: + struct NodeData { + NodeData() : listener(0) {} + ~NodeData() { + if (listener) + node->removeChangeListener(listener); + } + void setListener(SGPropertyChangeListener *l) { + node->addChangeListener(listener = l); + } + SGPropertyNode_ptr node; + SGPropertyChangeListener *listener; + char **text; + }; + // 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); + // updating the requested offset. + void updateTextForEntry(NodeData&); void delete_arrays(); static void handle_select(puObject *b); + static int nodeNameCompare(const void *, const void *); SGPropertyNode_ptr _curr; - SGPropertyNode_ptr _flags; SGPropertyNode_ptr _return; char **_entries; int _num_entries; - SGPropertyNode_ptr *_children; + NodeData *_children; int _num_children; - bool dotFiles; // . and .. pseudo-dirs currently shown? + bool _dot_files; // . and .. pseudo-dirs currently shown? + bool _verbose; // show SGPropertyNode flags + std::string _return_path; };