| 1 | /*! | 
|---|
| 2 |  * @file gui_gtk.h | 
|---|
| 3 |  * Contains all th different Widgets. | 
|---|
| 4 |  */ | 
|---|
| 5 | #ifndef _GUI_GTK_H | 
|---|
| 6 | #define _GUI_GTK_H | 
|---|
| 7 |  | 
|---|
| 8 | #if HAVE_CONFIG_H | 
|---|
| 9 | #include <config.h> | 
|---|
| 10 | #endif | 
|---|
| 11 |  | 
|---|
| 12 | #include "debug.h" | 
|---|
| 13 | #include "globals.h" | 
|---|
| 14 |  | 
|---|
| 15 | #ifdef HAVE_GTK2 | 
|---|
| 16 | #include <gtk/gtkmain.h> | 
|---|
| 17 | #include <gtk/gtkwindow.h> | 
|---|
| 18 | #include <gtk/gtkframe.h> | 
|---|
| 19 | #include <gtk/gtkhbox.h> | 
|---|
| 20 | #include <gtk/gtkvbox.h> | 
|---|
| 21 | #include <gtk/gtkbutton.h> | 
|---|
| 22 | #include <gtk/gtkcheckbutton.h> | 
|---|
| 23 | #include <gtk/gtkhscale.h> | 
|---|
| 24 | #include <gtk/gtkoptionmenu.h> | 
|---|
| 25 | #include <gtk/gtkmenu.h> | 
|---|
| 26 | #include <gtk/gtkmenuitem.h> | 
|---|
| 27 | #include <gtk/gtklabel.h> | 
|---|
| 28 | #include <gtk/gtkimage.h> | 
|---|
| 29 | #include <gtk/gtkeventbox.h> | 
|---|
| 30 | #include <gtk/gtkprogressbar.h> | 
|---|
| 31 | #include <gtk/gtkfilesel.h> | 
|---|
| 32 | #endif /* HAVE_GTK2 */ | 
|---|
| 33 |  | 
|---|
| 34 | // enumerator for different GuiOption-Types | 
|---|
| 35 | enum GUI_OPTION | 
|---|
| 36 | { | 
|---|
| 37 |   GUI_BOX = -2, | 
|---|
| 38 |   GUI_CONTAINER = -1, | 
|---|
| 39 |   GUI_NOTHING = 0, | 
|---|
| 40 |   GUI_BOOL = 1, | 
|---|
| 41 |   GUI_INT = 2, | 
|---|
| 42 |   GUI_FLOAT = 3, | 
|---|
| 43 |   GUI_CHAR = 4, | 
|---|
| 44 |   GUI_CHAR_ARRAY = 5 | 
|---|
| 45 | }; | 
|---|
| 46 |  | 
|---|
| 47 | extern char* executable; | 
|---|
| 48 |  | 
|---|
| 49 | bool initGUI(int argc, char* argv[]); | 
|---|
| 50 | bool mainloopGUI(); | 
|---|
| 51 |  | 
|---|
| 52 | //! This is the topmost object that can be displayed all others are derived from it. | 
|---|
| 53 | class Widget | 
|---|
| 54 | { | 
|---|
| 55 |  private: | 
|---|
| 56 |  | 
|---|
| 57 |  public: | 
|---|
| 58 |   Widget(); | 
|---|
| 59 |   virtual ~Widget(); | 
|---|
| 60 |  | 
|---|
| 61 |   void show(); | 
|---|
| 62 |   void hide(); | 
|---|
| 63 |   void setSize(int width, int height); | 
|---|
| 64 |  | 
|---|
| 65 |   virtual void setTitle(const char* title);  //!< An abstract Function, that sets the title of Widgets. | 
|---|
| 66 |   virtual const char* getTitle() const { return this->title; }; | 
|---|
| 67 |  | 
|---|
| 68 |   Widget* findWidgetByName(char* name, unsigned int depth); | 
|---|
| 69 |   void walkThrough(void(*function)(Widget*), unsigned int depth); | 
|---|
| 70 |   void walkThrough(void(*function)(Widget*, void*), void* data, unsigned int depth); | 
|---|
| 71 |    static void listOptionsAndGroups(Widget* widget); | 
|---|
| 72 |    static void listOptions(Widget* widget); | 
|---|
| 73 |    static void listOptions(Widget* widget, void* data); | 
|---|
| 74 |    Widget* findOptionByNumber(int* number, unsigned int depth); | 
|---|
| 75 |    static void listGroups(Widget* widget); | 
|---|
| 76 |    static void listGroups(Widget* widget, void* data); | 
|---|
| 77 |    static void printHelp(Widget* widget); | 
|---|
| 78 |    Widget* findGroupByNumber(int* number, unsigned int depth); | 
|---|
| 79 |    static void setOptions(Widget* widget); | 
|---|
| 80 |    static void redrawOptions(Widget* widget); | 
|---|
| 81 |    static void flagCheck(Widget* widget, void* flagName); | 
|---|
| 82 |  | 
|---|
| 83 | #ifdef HAVE_GTK2 | 
|---|
| 84 |   // Connection - Functions | 
|---|
| 85 |   gulong connectSignal(char* event, gint(*signal)(GtkWidget*, GdkEvent*, void* )); | 
|---|
| 86 |   gulong connectSignal(char* event, gint(*signal)(GtkWidget*, Widget* )); | 
|---|
| 87 |   gulong connectSignal(char* event, void* extObj, gint(*signal)(GtkWidget*, GdkEvent*, void* )); | 
|---|
| 88 |   gulong connectSignal(char* event, void* extObj, gint(*signal)(GtkWidget*, void* )); | 
|---|
| 89 |   gulong connectSignal(char* event, void* extObj, gint(*signal)(GtkWidget*, GdkEventKey*, void* )); | 
|---|
| 90 |   void disconnectSignal(gulong signalID); | 
|---|
| 91 |   // Signals | 
|---|
| 92 |   static gint doNothingSignal(GtkWidget* widget, GdkEvent* event, void* nothing); | 
|---|
| 93 | #else /* HAVE_GTK2 */ | 
|---|
| 94 |   // Connection - Functions | 
|---|
| 95 |   unsigned long connectSignal(char* event, int(*signal)(void*, void*, void* )){}; | 
|---|
| 96 |   unsigned long connectSignal(char* event, int(*signal)(void*, Widget* )){}; | 
|---|
| 97 |   unsigned long connectSignal(char* event, void* extObj, int(*signal)(void*, void*, void* )){}; | 
|---|
| 98 |   unsigned long connectSignal(char* event, void* extObj, int(*signal)(void*, void* )){}; | 
|---|
| 99 |   void disconnectSignal(unsigned long signalID); | 
|---|
| 100 |   // Signals | 
|---|
| 101 |   static int doNothingSignal(void* widget, void* event, void* nothing); | 
|---|
| 102 | #endif /* HAVE_GTK2 */ | 
|---|
| 103 |  | 
|---|
| 104 |  | 
|---|
| 105 |   Widget* next;                     //!< next always points to the next Widget in the list. Every Widget has a next one, or has NULL as next | 
|---|
| 106 | #ifdef HAVE_GTK2 | 
|---|
| 107 |   GtkWidget* widget;                //!< widget is the gtk_widget that the specific Object Contains. | 
|---|
| 108 | #else /* HAVE_GTK2 */ | 
|---|
| 109 |   void* widget; | 
|---|
| 110 | #endif /* HAVE_GTK2 */ | 
|---|
| 111 |  | 
|---|
| 112 |   GUI_OPTION optionType;            //!< The Type of the Widget. | 
|---|
| 113 |   char* title;                      //!< The name of the Widget. Some do display it, Options need it to save; | 
|---|
| 114 | }; | 
|---|
| 115 |  | 
|---|
| 116 | //! This is a Packer Object, which has the ability to Pack other Widgets into itself. | 
|---|
| 117 | class Packer : public Widget | 
|---|
| 118 | { | 
|---|
| 119 |  public: | 
|---|
| 120 |   Packer(); | 
|---|
| 121 |   virtual ~Packer(); | 
|---|
| 122 |  | 
|---|
| 123 |   Widget* down;                      //!< this points to the Widget below this. | 
|---|
| 124 |   char* groupName;                   //!< For each Packer you can specify a Groupname under which the lowerWidgets will be saved. | 
|---|
| 125 |  | 
|---|
| 126 |   void setGroupName(const char* name); | 
|---|
| 127 |   /** @returns the GroupName if existent NULL otherwise */ | 
|---|
| 128 |   inline const char* getGroupName() const {return this->groupName;} | 
|---|
| 129 |  | 
|---|
| 130 |  | 
|---|
| 131 |   virtual void fill(Widget* lowerWidget) = 0; //!< An abstract function, that fills Packers. | 
|---|
| 132 | }; | 
|---|
| 133 |  | 
|---|
| 134 | //! This is a Container Class, it can contain one sub-Widget: down. | 
|---|
| 135 | /** | 
|---|
| 136 |  * A Container is a Widget that can hold a subWidget in addition to a next-Widget. | 
|---|
| 137 |  * The Container can by itself not be displayed created or used. | 
|---|
| 138 |  * The derived classes of Container can be displayed | 
|---|
| 139 | */ | 
|---|
| 140 | class Container : public Packer | 
|---|
| 141 | { | 
|---|
| 142 |  private: | 
|---|
| 143 |   int borderwidth;          //!< The width of The Container Boarder. | 
|---|
| 144 |   int policy;               //!< The Update Policy of a Container. | 
|---|
| 145 |  | 
|---|
| 146 |  public: | 
|---|
| 147 |   Container(); | 
|---|
| 148 |   virtual ~Container(); | 
|---|
| 149 |  | 
|---|
| 150 |   void setBorderWidth(int borderwidth); | 
|---|
| 151 |   void fill(Widget* lowerWidget); | 
|---|
| 152 | }; | 
|---|
| 153 |  | 
|---|
| 154 | //! Window is the class that creates new Windows, and handels them | 
|---|
| 155 | /** | 
|---|
| 156 |  * A Window is a class derived from Container that contains a window-widget. | 
|---|
| 157 |  * It has the ability to hold one sub-object | 
|---|
| 158 |  */ | 
|---|
| 159 | class Window : public Container | 
|---|
| 160 | { | 
|---|
| 161 |  private: | 
|---|
| 162 |   bool isOpen;                      //!< A bool Variable that checks if a Window is already open. | 
|---|
| 163 |  public: | 
|---|
| 164 |   static Window* mainWindow;        //!< Pointer to the First Window that was opened. By default this should be the GUI's main-Window. | 
|---|
| 165 |   static void addWindow(Window* windowToAdd); | 
|---|
| 166 |  | 
|---|
| 167 |   Window(const char* windowName = NULL); | 
|---|
| 168 |   virtual ~Window(); | 
|---|
| 169 |  | 
|---|
| 170 |   virtual void setTitle(const char* title); | 
|---|
| 171 |   void showall(); | 
|---|
| 172 |   void open(); | 
|---|
| 173 |   void close(); | 
|---|
| 174 |  | 
|---|
| 175 | #ifdef HAVE_GTK2 | 
|---|
| 176 |   // Signals | 
|---|
| 177 |   static gint windowOpen(GtkWidget* widget, GdkEvent* event, void* window); | 
|---|
| 178 |   static gint windowClose(GtkWidget* widget, GdkEvent* event, void* window); | 
|---|
| 179 | #else /* HAVE_GTK2 */ | 
|---|
| 180 |   int Window::windowOpen(void* widget, void* event, void* window); | 
|---|
| 181 |   int Window::windowClose(void* widget, void* event, void* window); | 
|---|
| 182 | #endif /* HAVE_GTK2 */ | 
|---|
| 183 | }; | 
|---|
| 184 |  | 
|---|
| 185 | //! Frame is the class that handles frames | 
|---|
| 186 | /** | 
|---|
| 187 |  * A Frame is an object, that has a border and if you like a name on it. | 
|---|
| 188 |  * It can contain a Widget, which means that you can insert anything you like inside of a frame | 
|---|
| 189 |  */ | 
|---|
| 190 | class Frame :public Container | 
|---|
| 191 | { | 
|---|
| 192 |  public: | 
|---|
| 193 |   Frame(const char* frameName = NULL); | 
|---|
| 194 |   virtual ~Frame(); | 
|---|
| 195 |  | 
|---|
| 196 |   virtual void setTitle(const char* title); | 
|---|
| 197 | }; | 
|---|
| 198 |  | 
|---|
| 199 | //! EventBox is a Container that can Handle all Events happening inside of it. | 
|---|
| 200 | /** | 
|---|
| 201 |  * Example: if you have a picture, and you want it to catch mouse-clicks, you have to pack it inside a EventBox | 
|---|
| 202 |  */ | 
|---|
| 203 | class EventBox : public Container | 
|---|
| 204 | { | 
|---|
| 205 |  public: | 
|---|
| 206 |   EventBox(const char* eventBoxName = NULL); | 
|---|
| 207 |   virtual ~EventBox(); | 
|---|
| 208 | }; | 
|---|
| 209 |  | 
|---|
| 210 | //! A Box can contain multiple Widgets | 
|---|
| 211 | /** | 
|---|
| 212 |    A Box can Contain multiple Widgets, that are ordered either horizontally or vertically | 
|---|
| 213 |    I defined the standartbox to be horizontally. | 
|---|
| 214 |    A Box is always filled left->right(horizontally) or up->down(vertically) | 
|---|
| 215 | */ | 
|---|
| 216 | class Box : public Packer | 
|---|
| 217 | { | 
|---|
| 218 |  public: | 
|---|
| 219 |   Box(char boxtype = 'h'); | 
|---|
| 220 |   virtual ~Box(); | 
|---|
| 221 |  | 
|---|
| 222 |   virtual void fill(Widget* lowerWidget); | 
|---|
| 223 | }; | 
|---|
| 224 |  | 
|---|
| 225 | //! An Option is a Widget that contains something that may change its state. | 
|---|
| 226 | /** | 
|---|
| 227 |  * Options are the essence of a GUI, they: Configure, Start, Quit, Execute, and make it worth something | 
|---|
| 228 |  */ | 
|---|
| 229 | class Option : public Widget | 
|---|
| 230 | { | 
|---|
| 231 |  protected: | 
|---|
| 232 |   bool saveable;              //!< Options can be Saved. | 
|---|
| 233 |  | 
|---|
| 234 |  public: | 
|---|
| 235 |   Option(); | 
|---|
| 236 |   virtual ~Option(); | 
|---|
| 237 |  | 
|---|
| 238 |   int value;                  //!< every option has a value either true or false(0,1) or something else like 25 for 25% of the volume | 
|---|
| 239 |   char* flagName;             //!< options have a flag name that will be appendet if you start the Program from the GUI. | 
|---|
| 240 |   char* flagNameShort;        //!< like flag_name but shorter | 
|---|
| 241 |   int defaultValue;           //!< A default value is good, for hiding a option if it is not needed.(hidden if value == default_value) | 
|---|
| 242 |  | 
|---|
| 243 |   char* shortDescription;      //!< A Text that describes this option in short | 
|---|
| 244 |   char* longDescription;      //!< A Longer Text describing this option in a full way | 
|---|
| 245 |  | 
|---|
| 246 |   void saveability(bool isSaveable = true); | 
|---|
| 247 |   virtual char* save(); | 
|---|
| 248 |   virtual void load(const char* loadString); | 
|---|
| 249 |  | 
|---|
| 250 |   bool isSaveable(); | 
|---|
| 251 |   void setDefaultValue(int defaultValue); | 
|---|
| 252 |   void setFlagName(const char* flagname, int defaultvalue); | 
|---|
| 253 |   void setFlagName(const char* flagname, const char* flagnameshort, int defaultvalue); | 
|---|
| 254 |   void setDescription(const char* shortDescription, const char* longDescription = NULL); | 
|---|
| 255 |  | 
|---|
| 256 |   virtual void redraw() = 0;       //!< A Option must be able to redraw itself. | 
|---|
| 257 |   virtual void changeOption() = 0; //!< What to do, if an Option is Changed. eacht option decides for itself. | 
|---|
| 258 | #ifdef HAVE_GTK2 | 
|---|
| 259 |     // Signals | 
|---|
| 260 |   static gint OptionChange(GtkWidget* widget, Widget* option); //!< Signal for Options that change. | 
|---|
| 261 | #endif /* HAVE_GTK2 */ | 
|---|
| 262 | }; | 
|---|
| 263 |  | 
|---|
| 264 | //! Buttons can be pressed, and released. | 
|---|
| 265 | /** | 
|---|
| 266 |  * Buttons are mainly there for executing some action like Starting the Programm, or Quiting it. | 
|---|
| 267 |  */ | 
|---|
| 268 | class Button : public Option | 
|---|
| 269 | { | 
|---|
| 270 |  public: | 
|---|
| 271 |   Button(const char* buttonName = NULL); | 
|---|
| 272 |   virtual ~Button(); | 
|---|
| 273 |  | 
|---|
| 274 |   virtual void setTitle(const char* title); | 
|---|
| 275 |   virtual void redraw(); | 
|---|
| 276 |   virtual void changeOption(); | 
|---|
| 277 | }; | 
|---|
| 278 |  | 
|---|
| 279 | //! CheckButtons are a key in configuring bool Variables | 
|---|
| 280 | /** CheckButtons can configure bool Variables like wireframe on/off, enable_sound etc. | 
|---|
| 281 |  */ | 
|---|
| 282 | class CheckButton : public Option | 
|---|
| 283 | { | 
|---|
| 284 |  public: | 
|---|
| 285 |   CheckButton(const char* buttonName = NULL); | 
|---|
| 286 |   virtual ~CheckButton(); | 
|---|
| 287 |  | 
|---|
| 288 |   bool isActive(); | 
|---|
| 289 |  | 
|---|
| 290 |   virtual void setTitle(const char* title); | 
|---|
| 291 |   virtual void redraw(); | 
|---|
| 292 |   virtual void changeOption(); | 
|---|
| 293 | }; | 
|---|
| 294 |  | 
|---|
| 295 | //! Sliders are Options that can be modified in their value | 
|---|
| 296 | /** | 
|---|
| 297 |  * good for volume, brightness, etc. | 
|---|
| 298 |  */ | 
|---|
| 299 | class Slider : public Option | 
|---|
| 300 | { | 
|---|
| 301 |  private: | 
|---|
| 302 |   float start;                            //!< The beginning of the Slider-range. | 
|---|
| 303 |   float end;                              //!< The end of the Slider-range. | 
|---|
| 304 |   float fValue;                           //!< a value for the slider | 
|---|
| 305 |  public: | 
|---|
| 306 |   Slider(const char* slidername, float start, float end); | 
|---|
| 307 |   virtual ~Slider(); | 
|---|
| 308 |  | 
|---|
| 309 |   void setExactness(int exactness); | 
|---|
| 310 |   void setValue(float value); | 
|---|
| 311 |   virtual void redraw(); | 
|---|
| 312 |   virtual void changeOption(); | 
|---|
| 313 |  | 
|---|
| 314 |   virtual char* save(); | 
|---|
| 315 |   virtual void load(const char* loadString); | 
|---|
| 316 | }; | 
|---|
| 317 |  | 
|---|
| 318 | //! A Menu is an Option that has a dropdown menu, where you can chose between different Items | 
|---|
| 319 | class Menu : public Option | 
|---|
| 320 | { | 
|---|
| 321 |  private: | 
|---|
| 322 | #ifdef HAVE_GTK2 | 
|---|
| 323 |   GtkWidget* menu;                      //!< The menu That will hold the Options. | 
|---|
| 324 | #endif /* HAVE_GTK2 */ | 
|---|
| 325 |  | 
|---|
| 326 |   //! A struct to handle the MenuItems | 
|---|
| 327 |   struct MenuItem | 
|---|
| 328 |   { | 
|---|
| 329 |     char* name;                         //!< The name of this entry. | 
|---|
| 330 |     int itemNumber;                     //!< The n'th entry of this menu; | 
|---|
| 331 | #ifdef HAVE_GTK2 | 
|---|
| 332 |     GtkWidget* item;                    //!< One Item From a Menu. | 
|---|
| 333 | #endif /* HAVE_GTK2 */ | 
|---|
| 334 |  | 
|---|
| 335 |     MenuItem* next;                     //!< Pointer to the next MenuItem. | 
|---|
| 336 |   }; | 
|---|
| 337 |   MenuItem* firstItem;                  //!< Pointer to the first Item. | 
|---|
| 338 |   MenuItem* currItem;                   //!< Pointer to the current Item. | 
|---|
| 339 |  | 
|---|
| 340 |  public: | 
|---|
| 341 |   Menu(const char* menuName); | 
|---|
| 342 |   Menu(char* menuname, ...); | 
|---|
| 343 |   virtual ~Menu(); | 
|---|
| 344 |   void init(); | 
|---|
| 345 |  | 
|---|
| 346 |   virtual char* save(); | 
|---|
| 347 |   virtual void load(const char* loadString); | 
|---|
| 348 |  | 
|---|
| 349 |   void addItem(char* itemName); | 
|---|
| 350 |   virtual void redraw(); | 
|---|
| 351 |   virtual void changeOption(); | 
|---|
| 352 | }; | 
|---|
| 353 |  | 
|---|
| 354 | //! A OptionLabel is a simple Label, that holds a char*, and will be updated, if changed. | 
|---|
| 355 | class OptionLabel : public Option | 
|---|
| 356 | { | 
|---|
| 357 |  public: | 
|---|
| 358 |   OptionLabel(const char* label, const char* value); | 
|---|
| 359 |   virtual ~OptionLabel(); | 
|---|
| 360 |  | 
|---|
| 361 |   void setValue(const char* newValue); | 
|---|
| 362 |  | 
|---|
| 363 |   virtual char* save(); | 
|---|
| 364 |   virtual void load(const char* loadString); | 
|---|
| 365 |  | 
|---|
| 366 |   virtual void redraw(); | 
|---|
| 367 |   virtual void changeOption(); | 
|---|
| 368 |  | 
|---|
| 369 |   char* cValue;                          //!< The Value the Label will have. @todo make private | 
|---|
| 370 | }; | 
|---|
| 371 |  | 
|---|
| 372 | //! A EntryField is a TextEntry field, for putting some text into. | 
|---|
| 373 | class EntryField : public Option | 
|---|
| 374 | { | 
|---|
| 375 |  public: | 
|---|
| 376 |   EntryField(const char* name = NULL); | 
|---|
| 377 |   virtual ~EntryField(); | 
|---|
| 378 |  | 
|---|
| 379 |   void setValue(const char* newValue); | 
|---|
| 380 |   virtual char* save(); | 
|---|
| 381 |   virtual void load(const char* loadString); | 
|---|
| 382 |  | 
|---|
| 383 |   virtual void redraw(); | 
|---|
| 384 |   virtual void changeOption(); | 
|---|
| 385 | }; | 
|---|
| 386 |  | 
|---|
| 387 | //! A label is a Widget, that displays a text | 
|---|
| 388 | class Label : public Widget | 
|---|
| 389 | { | 
|---|
| 390 |  public: | 
|---|
| 391 |   Label(const char* text = NULL); | 
|---|
| 392 |   virtual ~Label(); | 
|---|
| 393 |  | 
|---|
| 394 |   virtual void setTitle(const char* text); | 
|---|
| 395 |   void ereaseText(); | 
|---|
| 396 |   void appendText(char* textToAppend); | 
|---|
| 397 |   void appendInt(int intToAppend); | 
|---|
| 398 |   const char* getText(); | 
|---|
| 399 | }; | 
|---|
| 400 |  | 
|---|
| 401 | //! A ProgressBar is a Widget, that can display a Progress | 
|---|
| 402 | class ProgressBar : public Widget | 
|---|
| 403 | { | 
|---|
| 404 |  public: | 
|---|
| 405 |   ProgressBar(const char* label = NULL); | 
|---|
| 406 |   virtual ~ProgressBar(); | 
|---|
| 407 |  | 
|---|
| 408 |   void setProgress(double progress); | 
|---|
| 409 |   void setTotalSize(double totalSize); | 
|---|
| 410 |   double getProgress(); | 
|---|
| 411 |  | 
|---|
| 412 |  private: | 
|---|
| 413 |   double totalSize;         //!< The total Size of a download Bar | 
|---|
| 414 |   double progress;          //!< The progress of a Bar. | 
|---|
| 415 | #ifdef HAVE_GTK2 | 
|---|
| 416 |   GtkAdjustment* adjustment; | 
|---|
| 417 | #endif /* HAVE_GTK2 */ | 
|---|
| 418 | }; | 
|---|
| 419 |  | 
|---|
| 420 | //! Image is the keeper of one Image | 
|---|
| 421 | /** | 
|---|
| 422 |  * Images are mighty cool. | 
|---|
| 423 |  * Images can help you lighten up the Programming process, and will give everyone a better impression of the Software. | 
|---|
| 424 |  */ | 
|---|
| 425 | class Image : public Widget | 
|---|
| 426 | { | 
|---|
| 427 |  public: | 
|---|
| 428 |   Image(const char* imgaeName); | 
|---|
| 429 |   Image(char** imageData); | 
|---|
| 430 |   virtual ~Image(); | 
|---|
| 431 |   void init(const char* name); | 
|---|
| 432 | }; | 
|---|
| 433 |  | 
|---|
| 434 | //! A FileDialog is a window with wich one can select a File | 
|---|
| 435 | class FileDialog : public Widget | 
|---|
| 436 | { | 
|---|
| 437 |  private: | 
|---|
| 438 |   OptionLabel* changeOption; | 
|---|
| 439 |   Button* openUpButton; | 
|---|
| 440 |   bool isOpen; | 
|---|
| 441 |   bool (*okFunc)(const char* , void*); | 
|---|
| 442 |   void* okObject; | 
|---|
| 443 |  | 
|---|
| 444 |  public: | 
|---|
| 445 |   FileDialog(const char* fileDialogName); | 
|---|
| 446 |   virtual ~FileDialog(); | 
|---|
| 447 |  | 
|---|
| 448 |   void setChangeOption(OptionLabel* changeOption); | 
|---|
| 449 |   void setOKFunc(void* okObject, bool(*function)(const char* , void*)); | 
|---|
| 450 |   void setOpenUpButton(Button* openUpButton); | 
|---|
| 451 |   void setDefaultFileName(const char* defaultFileName); | 
|---|
| 452 |   void setMask(const char* mask); | 
|---|
| 453 |   void disableFileOpts(); | 
|---|
| 454 |  | 
|---|
| 455 |   void okEvent(); | 
|---|
| 456 |   void open(); | 
|---|
| 457 |   void close(); | 
|---|
| 458 |  | 
|---|
| 459 | #ifdef HAVE_GTK2 | 
|---|
| 460 |   static gint dialogOK(GtkWidget* widget, GdkEvent* event, void* dialog); | 
|---|
| 461 |   static gint dialogOpen(GtkWidget* widget, GdkEvent* event, void* dialog); | 
|---|
| 462 |   static gint dialogClose(GtkWidget* widget, GdkEvent* event, void* dialog); | 
|---|
| 463 | #else /* HAVE_GTK2 */ | 
|---|
| 464 |   static int dialogOK(void* widget, void* event, void* dialog); | 
|---|
| 465 |   static int dialogOpen(void* widget, void* event, void* dialog); | 
|---|
| 466 |   static int dialogClose(void* widget, void* event, void* dialog); | 
|---|
| 467 | #endif /* HAVE_GTK2 */ | 
|---|
| 468 | }; | 
|---|
| 469 |  | 
|---|
| 470 | #endif /* _GUI_GTK_H */ | 
|---|