X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=radiant%2Fdialog.h;h=444fe516948fda7c8a41929d2990e0cbd21c07d8;hb=bfc8a12a6b315ae261101a34db8ba1b682c67bb7;hp=cd00eff146805cda44c3923805cf04742e621459;hpb=3e38eae7409f5ff79fb9e6b1b0329aeb3533403d;p=xonotic%2Fnetradiant.git diff --git a/radiant/dialog.h b/radiant/dialog.h index cd00eff1..444fe516 100644 --- a/radiant/dialog.h +++ b/radiant/dialog.h @@ -1,5 +1,5 @@ /* -Copyright (C) 1999-2007 id Software, Inc. and contributors. +Copyright (C) 1999-2006 Id Software, Inc. and contributors. For a list of contributors, see the accompanying CONTRIBUTORS file. This file is part of GtkRadiant. @@ -19,68 +19,190 @@ along with GtkRadiant; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#ifndef _DIALOG_H_ -#define _DIALOG_H_ +#if !defined(INCLUDED_DIALOG_H) +#define INCLUDED_DIALOG_H -#include -#include "str.h" -#include "gtkmisc.h" +#include -typedef enum +#include "gtkutil/dialog.h" +#include "generic/callback.h" +#include "string/string.h" + +template +class ReferenceCaller1; + +inline void BoolImport(bool& self, bool value) +{ + self = value; +} +typedef ReferenceCaller1 BoolImportCaller; + +inline void BoolExport(bool& self, const BoolImportCallback& importCallback) +{ + importCallback(self); +} +typedef ReferenceCaller1 BoolExportCaller; + + +inline void IntImport(int& self, int value) +{ + self = value; +} +typedef ReferenceCaller1 IntImportCaller; + +inline void IntExport(int& self, const IntImportCallback& importCallback) +{ + importCallback(self); +} +typedef ReferenceCaller1 IntExportCaller; + + +inline void SizeImport(std::size_t& self, std::size_t value) +{ + self = value; +} +typedef ReferenceCaller1 SizeImportCaller; + +inline void SizeExport(std::size_t& self, const SizeImportCallback& importCallback) +{ + importCallback(self); +} +typedef ReferenceCaller1 SizeExportCaller; + + +inline void FloatImport(float& self, float value) { - DLG_CHECK_BOOL, - DLG_RADIO_INT, - DLG_ENTRY_TEXT, - DLG_ENTRY_FLOAT, - DLG_ENTRY_INT, - DLG_SPIN_FLOAT, - DLG_SPIN_INT, - DLG_ADJ_INT, - DLG_COMBO_INT, - DLG_COMBO_BOX_INT, -} DLG_DATA_TYPE; + self = value; +} +typedef ReferenceCaller1 FloatImportCaller; + +inline void FloatExport(float& self, const FloatImportCallback& importCallback) +{ + importCallback(self); +} +typedef ReferenceCaller1 FloatExportCaller; + + +inline void StringImport(CopiedString& self, const char* value) +{ + self = value; +} +typedef ReferenceCaller1 StringImportCaller; +inline void StringExport(CopiedString& self, const StringImportCallback& importCallback) +{ + importCallback(self.c_str()); +} +typedef ReferenceCaller1 StringExportCaller; + + +struct DLG_DATA +{ + virtual void release() = 0; + virtual void importData() const = 0; + virtual void exportData() const = 0; +}; + +typedef struct _GtkWindow GtkWindow; +typedef struct _GtkToggleButton GtkToggleButton; +typedef struct _GtkRadioButton GtkRadioButton; +typedef struct _GtkSpinButton GtkSpinButton; +typedef struct _GtkComboBox GtkComboBox; +typedef struct _GtkEntry GtkEntry; +typedef struct _GtkAdjustment GtkAdjustment; + +template +class CallbackDialogData; + +typedef std::list DialogDataList; class Dialog { - public: - Dialog (); - virtual ~Dialog (); + GtkWindow* m_window; + DialogDataList m_data; +public: + ModalDialog m_modal; + GtkWindow* m_parent; + + Dialog(); + virtual ~Dialog(); /*! start modal dialog box - you need to use AddModalButton to select IDOK IDCANCEL buttons - */ - int DoModal (); - void EndModal (int code); - virtual void BuildDialog () = 0; - virtual void UpdateData (bool retrieve); - virtual void PreModal () { }; - virtual void PostModal (int code) { }; - virtual void ShowDlg (); - virtual void HideDlg (); - void Create (); - void Destroy (); - GtkWidget* GetDlgWidget (const char* name) - { return GTK_WIDGET (g_object_get_data (G_OBJECT (m_pWidget), name)); } - GtkWidget* GetWidget () - { return m_pWidget; } - - protected: - GtkWidget *m_pWidget; - int m_nLoop; - int m_nReturn; - - void AddDialogData (GtkWidget *widget, void *buf, DLG_DATA_TYPE type) - { AddDialogData (GTK_OBJECT (widget), buf, type); }; - void AddDialogData (GtkObject *object, void *buf, DLG_DATA_TYPE type); - /*! - used in overloaded BuildDialog implementations to configure modal behaviour easily + you need to use AddModalButton to select eIDOK eIDCANCEL buttons */ - void AddModalButton( GtkWidget *widget, int ret ); + EMessageBoxReturn DoModal(); + void EndModal (EMessageBoxReturn code); + virtual GtkWindow* BuildDialog() = 0; + virtual void exportData(); + virtual void importData(); + virtual void PreModal() { }; + virtual void PostModal (EMessageBoxReturn code) { }; + virtual void ShowDlg(); + virtual void HideDlg(); + void Create(); + void Destroy(); + GtkWindow* GetWidget() + { + return m_window; + } + const GtkWindow* GetWidget() const + { + return m_window; + } + + GtkWidget* addCheckBox(GtkWidget* vbox, const char* name, const char* flag, const BoolImportCallback& importCallback, const BoolExportCallback& exportCallback); + GtkWidget* addCheckBox(GtkWidget* vbox, const char* name, const char* flag, bool& data); + void addCombo(GtkWidget* vbox, const char* name, StringArrayRange values, const IntImportCallback& importCallback, const IntExportCallback& exportCallback); + void addCombo(GtkWidget* vbox, const char* name, int& data, StringArrayRange values); + void addSlider(GtkWidget* vbox, const char* name, int& data, gboolean draw_value, const char* low, const char* high, double value, double lower, double upper, double step_increment, double page_increment); + void addRadio(GtkWidget* vbox, const char* name, StringArrayRange names, const IntImportCallback& importCallback, const IntExportCallback& exportCallback); + void addRadio(GtkWidget* vbox, const char* name, int& data, StringArrayRange names); + void addRadioIcons(GtkWidget* vbox, const char* name, StringArrayRange icons, const IntImportCallback& importCallback, const IntExportCallback& exportCallback); + void addRadioIcons(GtkWidget* vbox, const char* name, int& data, StringArrayRange icons); + GtkWidget* addIntEntry(GtkWidget* vbox, const char* name, const IntImportCallback& importCallback, const IntExportCallback& exportCallback); + GtkWidget* addEntry(GtkWidget* vbox, const char* name, int& data) + { + return addIntEntry(vbox, name, IntImportCaller(data), IntExportCaller(data)); + } + GtkWidget* addSizeEntry(GtkWidget* vbox, const char* name, const SizeImportCallback& importCallback, const SizeExportCallback& exportCallback); + GtkWidget* addEntry(GtkWidget* vbox, const char* name, std::size_t& data) + { + return addSizeEntry(vbox, name, SizeImportCaller(data), SizeExportCaller(data)); + } + GtkWidget* addFloatEntry(GtkWidget* vbox, const char* name, const FloatImportCallback& importCallback, const FloatExportCallback& exportCallback); + GtkWidget* addEntry(GtkWidget* vbox, const char* name, float& data) + { + return addFloatEntry(vbox, name, FloatImportCaller(data), FloatExportCaller(data)); + } + GtkWidget* addPathEntry(GtkWidget* vbox, const char* name, bool browse_directory, const StringImportCallback& importCallback, const StringExportCallback& exportCallback); + GtkWidget* addPathEntry(GtkWidget* vbox, const char* name, CopiedString& data, bool directory); + GtkWidget* addSpinner(GtkWidget* vbox, const char* name, int& data, double value, double lower, double upper); + GtkWidget* addSpinner(GtkWidget* vbox, const char* name, double value, double lower, double upper, const IntImportCallback& importCallback, const IntExportCallback& exportCallback); + GtkWidget* addSpinner(GtkWidget* vbox, const char* name, double value, double lower, double upper, const FloatImportCallback& importCallback, const FloatExportCallback& exportCallback); + +protected: - private: - GSList* m_pDataList; - bool m_bNeedBuild; + void AddBoolToggleData(GtkToggleButton& object, const BoolImportCallback& importCallback, const BoolExportCallback& exportCallback); + void AddIntRadioData(GtkRadioButton& object, const IntImportCallback& importCallback, const IntExportCallback& exportCallback); + void AddTextEntryData(GtkEntry& object, const StringImportCallback& importCallback, const StringExportCallback& exportCallback); + void AddIntEntryData(GtkEntry& object, const IntImportCallback& importCallback, const IntExportCallback& exportCallback); + void AddSizeEntryData(GtkEntry& object, const SizeImportCallback& importCallback, const SizeExportCallback& exportCallback); + void AddFloatEntryData(GtkEntry& object, const FloatImportCallback& importCallback, const FloatExportCallback& exportCallback); + void AddFloatSpinnerData(GtkSpinButton& object, const FloatImportCallback& importCallback, const FloatExportCallback& exportCallback); + void AddIntSpinnerData(GtkSpinButton& object, const IntImportCallback& importCallback, const IntExportCallback& exportCallback); + void AddIntAdjustmentData(GtkAdjustment& object, const IntImportCallback& importCallback, const IntExportCallback& exportCallback); + void AddIntComboData(GtkComboBox& object, const IntImportCallback& importCallback, const IntExportCallback& exportCallback); + + void AddDialogData(GtkToggleButton& object, bool& data); + void AddDialogData(GtkRadioButton& object, int& data); + void AddDialogData(GtkEntry& object, CopiedString& data); + void AddDialogData(GtkEntry& object, int& data); + void AddDialogData(GtkEntry& object, std::size_t& data); + void AddDialogData(GtkEntry& object, float& data); + void AddDialogData(GtkSpinButton& object, float& data); + void AddDialogData(GtkSpinButton& object, int& data); + void AddDialogData(GtkAdjustment& object, int& data); + void AddDialogData(GtkComboBox& object, int& data); }; -#endif // _DIALOG_H_ +#endif