2019-04-08 19:37:31 -05:00
typedef struct uiUnixControl uiUnixControl ;
struct uiUnixControl {
uiControl c ;
uiControl * parent ;
gboolean addedBefore ;
gboolean explicitlyHidden ;
void ( * SetContainer ) ( uiUnixControl * , GtkContainer * , gboolean ) ;
} ;
# define uiUnixControl(this) ((uiUnixControl *) (this))
// TODO document
2019-04-08 19:55:06 -05:00
uiprivExtern void uiUnixControlSetContainer ( uiUnixControl * , GtkContainer * , gboolean ) ;
2019-04-08 19:37:31 -05:00
# define uiUnixControlDefaultDestroy(type) \
static void type # # Destroy ( uiControl * c ) \
{ \
/* TODO is this safe on floating refs? */ \
g_object_unref ( type ( c ) - > widget ) ; \
uiFreeControl ( c ) ; \
}
# define uiUnixControlDefaultHandle(type) \
static uintptr_t type # # Handle ( uiControl * c ) \
{ \
return ( uintptr_t ) ( type ( c ) - > widget ) ; \
}
# define uiUnixControlDefaultParent(type) \
static uiControl * type # # Parent ( uiControl * c ) \
{ \
return uiUnixControl ( c ) - > parent ; \
}
# define uiUnixControlDefaultSetParent(type) \
static void type # # SetParent ( uiControl * c , uiControl * parent ) \
{ \
uiControlVerifySetParent ( c , parent ) ; \
uiUnixControl ( c ) - > parent = parent ; \
}
# define uiUnixControlDefaultToplevel(type) \
static int type # # Toplevel ( uiControl * c ) \
{ \
return 0 ; \
}
# define uiUnixControlDefaultVisible(type) \
static int type # # Visible ( uiControl * c ) \
{ \
return gtk_widget_get_visible ( type ( c ) - > widget ) ; \
}
# define uiUnixControlDefaultShow(type) \
static void type # # Show ( uiControl * c ) \
{ \
/*TODO part of massive hack about hidden before*/ uiUnixControl ( c ) - > explicitlyHidden = FALSE ; \
gtk_widget_show ( type ( c ) - > widget ) ; \
}
# define uiUnixControlDefaultHide(type) \
static void type # # Hide ( uiControl * c ) \
{ \
/*TODO part of massive hack about hidden before*/ uiUnixControl ( c ) - > explicitlyHidden = TRUE ; \
gtk_widget_hide ( type ( c ) - > widget ) ; \
}
# define uiUnixControlDefaultEnabled(type) \
static int type # # Enabled ( uiControl * c ) \
{ \
return gtk_widget_get_sensitive ( type ( c ) - > widget ) ; \
}
# define uiUnixControlDefaultEnable(type) \
static void type # # Enable ( uiControl * c ) \
{ \
gtk_widget_set_sensitive ( type ( c ) - > widget , TRUE ) ; \
}
# define uiUnixControlDefaultDisable(type) \
static void type # # Disable ( uiControl * c ) \
{ \
gtk_widget_set_sensitive ( type ( c ) - > widget , FALSE ) ; \
}
// TODO this whole addedBefore stuff is a MASSIVE HACK.
# define uiUnixControlDefaultSetContainer(type) \
static void type # # SetContainer ( uiUnixControl * c , GtkContainer * container , gboolean remove ) \
{ \
if ( ! uiUnixControl ( c ) - > addedBefore ) { \
g_object_ref_sink ( type ( c ) - > widget ) ; /* our own reference, which we release in Destroy() */ \
/* massive hack notes: without any of this, nothing gets shown when we show a window; without the if, all things get shown even if some were explicitly hidden (TODO why don't we just show everything except windows on create? */ \
/*TODO*/ if ( ! uiUnixControl ( c ) - > explicitlyHidden ) gtk_widget_show ( type ( c ) - > widget ) ; \
uiUnixControl ( c ) - > addedBefore = TRUE ; \
} \
if ( remove ) \
gtk_container_remove ( container , type ( c ) - > widget ) ; \
else \
gtk_container_add ( container , type ( c ) - > widget ) ; \
}
# define uiUnixControlAllDefaultsExceptDestroy(type) \
uiUnixControlDefaultHandle ( type ) \
uiUnixControlDefaultParent ( type ) \
uiUnixControlDefaultSetParent ( type ) \
uiUnixControlDefaultToplevel ( type ) \
uiUnixControlDefaultVisible ( type ) \
uiUnixControlDefaultShow ( type ) \
uiUnixControlDefaultHide ( type ) \
uiUnixControlDefaultEnabled ( type ) \
uiUnixControlDefaultEnable ( type ) \
uiUnixControlDefaultDisable ( type ) \
uiUnixControlDefaultSetContainer ( type )
# define uiUnixControlAllDefaults(type) \
uiUnixControlDefaultDestroy ( type ) \
uiUnixControlAllDefaultsExceptDestroy ( type )
// TODO document
# define uiUnixNewControl(type, var) \
var = type ( uiUnixAllocControl ( sizeof ( type ) , type # # Signature , # type ) ) ; \
uiControl ( var ) - > Destroy = type # # Destroy ; \
uiControl ( var ) - > Handle = type # # Handle ; \
uiControl ( var ) - > Parent = type # # Parent ; \
uiControl ( var ) - > SetParent = type # # SetParent ; \
uiControl ( var ) - > Toplevel = type # # Toplevel ; \
uiControl ( var ) - > Visible = type # # Visible ; \
uiControl ( var ) - > Show = type # # Show ; \
uiControl ( var ) - > Hide = type # # Hide ; \
uiControl ( var ) - > Enabled = type # # Enabled ; \
uiControl ( var ) - > Enable = type # # Enable ; \
uiControl ( var ) - > Disable = type # # Disable ; \
uiUnixControl ( var ) - > SetContainer = type # # SetContainer ;
// TODO document
2019-04-08 19:55:06 -05:00
uiprivExtern uiUnixControl * uiUnixAllocControl ( size_t n , uint32_t typesig , const char * typenamestr ) ;
2019-04-08 19:37:31 -05:00
// uiUnixStrdupText() takes the given string and produces a copy of it suitable for being freed by uiFreeText().
2019-04-08 19:55:06 -05:00
uiprivExtern char * uiUnixStrdupText ( const char * ) ;