/* 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. GtkRadiant is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GtkRadiant 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 General Public License for more details. You should have received a copy of the GNU General Public License along with GtkRadiant; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #if !defined( INCLUDED_DIALOG_H ) #define INCLUDED_DIALOG_H #include #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 ){ 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 { 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 eIDOK eIDCANCEL buttons */ 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: 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