X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=libs%2Fgtkutil%2Fwidget.h;h=a81054d449927b0344259154cd294a4af7b6a283;hb=c001d05fb1dc902a725dbf50df82e88a1a526a21;hp=77938c64e3d7b8205a155f1849dac22aa2a8c735;hpb=cab6f1e40f69020aae8c59d45ab51a026ee3e6f6;p=xonotic%2Fnetradiant.git diff --git a/libs/gtkutil/widget.h b/libs/gtkutil/widget.h index 77938c64..a81054d4 100644 --- a/libs/gtkutil/widget.h +++ b/libs/gtkutil/widget.h @@ -23,144 +23,103 @@ #define INCLUDED_GTKUTIL_WIDGET_H #include -#include +#include +#include #include "generic/callback.h" #include "warnings.h" #include "debugging/debugging.h" -inline void widget_set_visible( ui::Widget widget, bool shown ){ - if ( shown ) { - widget.show(); - } - else - { - gtk_widget_hide( widget ); - } -} +void widget_set_visible(ui::Widget widget, bool shown); -inline bool widget_is_visible( ui::Widget widget ){ - return gtk_widget_get_visible( widget ) != FALSE; -} +bool widget_is_visible(ui::Widget widget); -inline void widget_toggle_visible( ui::Widget widget ){ - widget_set_visible( widget, !widget_is_visible( widget ) ); +inline void widget_toggle_visible(ui::Widget widget) +{ + widget_set_visible(widget, !widget_is_visible(widget)); } -class ToggleItem -{ -BoolExportCallback m_exportCallback; -typedef std::list ImportCallbacks; -ImportCallbacks m_importCallbacks; +class ToggleItem { + BoolExportCallback m_exportCallback; + typedef std::list ImportCallbacks; + ImportCallbacks m_importCallbacks; public: -ToggleItem( const BoolExportCallback& exportCallback ) : m_exportCallback( exportCallback ){ -} + ToggleItem(const BoolExportCallback &exportCallback) : m_exportCallback(exportCallback) + { + } + + void update() + { + for (ImportCallbacks::iterator i = m_importCallbacks.begin(); i != m_importCallbacks.end(); ++i) { + m_exportCallback(*i); + } + } + + void addCallback(const BoolImportCallback &callback) + { + m_importCallbacks.push_back(callback); + m_exportCallback(callback); + } + + typedef MemberCaller1 AddCallbackCaller; +}; -void update(){ - for ( ImportCallbacks::iterator i = m_importCallbacks.begin(); i != m_importCallbacks.end(); ++i ) - { - m_exportCallback( *i ); - } -} +class ToggleShown { + bool m_shownDeferred; -void addCallback( const BoolImportCallback& callback ){ - m_importCallbacks.push_back( callback ); - m_exportCallback( callback ); -} -typedef MemberCaller1 AddCallbackCaller; -}; + ToggleShown(const ToggleShown &other); // NOT COPYABLE + ToggleShown &operator=(const ToggleShown &other); // NOT ASSIGNABLE -class ToggleShown -{ -bool m_shownDeferred; + static gboolean notify_visible(ui::Widget widget, gpointer dummy, ToggleShown *self); -ToggleShown( const ToggleShown& other ); // NOT COPYABLE -ToggleShown& operator=( const ToggleShown& other ); // NOT ASSIGNABLE + static gboolean destroy(ui::Widget widget, ToggleShown *self); -static gboolean notify_visible( ui::Widget widget, gpointer dummy, ToggleShown* self ){ - self->update(); - return FALSE; -} -static gboolean destroy( ui::Widget widget, ToggleShown* self ){ - self->m_shownDeferred = gtk_widget_get_visible( self->m_widget ) != FALSE; - self->m_widget = ui::Widget(nullptr); - return FALSE; -} public: -ui::Widget m_widget; -ToggleItem m_item; + ui::Widget m_widget; + ToggleItem m_item; -ToggleShown( bool shown ) - : m_shownDeferred( shown ), m_widget( 0 ), m_item( ActiveCaller( *this ) ){ -} -void update(){ - m_item.update(); -} -bool active() const { - if ( !m_widget ) { - return m_shownDeferred; - } - else - { - return gtk_widget_get_visible( m_widget ) != FALSE; - } -} -void exportActive( const BoolImportCallback& importCallback ){ - importCallback( active() ); -} -typedef MemberCaller1 ActiveCaller; -void set( bool shown ){ - if ( !m_widget ) { - m_shownDeferred = shown; - } - else - { - widget_set_visible( m_widget, shown ); - } -} -void toggle(){ - widget_toggle_visible( m_widget ); -} -typedef MemberCaller ToggleCaller; -void connect( ui::Widget widget ){ - m_widget = widget; - widget_set_visible( m_widget, m_shownDeferred ); - g_signal_connect( G_OBJECT( m_widget ), "notify::visible", G_CALLBACK( notify_visible ), this ); - g_signal_connect( G_OBJECT( m_widget ), "destroy", G_CALLBACK( destroy ), this ); - update(); -} + ToggleShown(bool shown) + : m_shownDeferred(shown), m_widget(0), m_item(ActiveCaller(*this)) + { + } + + void update(); + + bool active() const; + + void exportActive(const BoolImportCallback &importCallback); + + typedef MemberCaller1 ActiveCaller; + + void set(bool shown); + + void toggle(); + + typedef MemberCaller ToggleCaller; + + void connect(ui::Widget widget); }; -inline void widget_queue_draw( GtkWidget& widget ){ - gtk_widget_queue_draw( &widget ); -} -typedef ReferenceCaller WidgetQueueDrawCaller; +void widget_queue_draw(ui::Widget &widget); +typedef ReferenceCaller WidgetQueueDrawCaller; -inline void widget_make_default( ui::Widget widget ){ - gtk_widget_set_can_default( widget, true ); - gtk_widget_grab_default( widget ); -} -class WidgetFocusPrinter -{ -const char* m_name; +void widget_make_default(ui::Widget widget); + +class WidgetFocusPrinter { + const char *m_name; + + static gboolean focus_in(ui::Widget widget, GdkEventFocus *event, WidgetFocusPrinter *self); + + static gboolean focus_out(ui::Widget widget, GdkEventFocus *event, WidgetFocusPrinter *self); -static gboolean focus_in( ui::Widget widget, GdkEventFocus *event, WidgetFocusPrinter* self ){ - globalOutputStream() << self->m_name << " takes focus\n"; - return FALSE; -} -static gboolean focus_out( ui::Widget widget, GdkEventFocus *event, WidgetFocusPrinter* self ){ - globalOutputStream() << self->m_name << " loses focus\n"; - return FALSE; -} public: -WidgetFocusPrinter( const char* name ) : m_name( name ){ -} -void connect( ui::Widget widget ){ - g_signal_connect( G_OBJECT( widget ), "focus_in_event", G_CALLBACK( focus_in ), this ); - g_signal_connect( G_OBJECT( widget ), "focus_out_event", G_CALLBACK( focus_out ), this ); -} + WidgetFocusPrinter(const char *name) : m_name(name) + { + } + + void connect(ui::Widget widget); }; #endif