Advertisement
Guest User

gtk-display.c

a guest
Oct 1st, 2013
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.09 KB | None | 0 0
  1. #include "gtk-display.h"
  2.  
  3. /* Properties */
  4. enum {
  5.     PROP_0,
  6.     PROP_TEXT
  7. };
  8.  
  9.  
  10. struct _GtkDisplayPrivate {
  11.     gchar *text;
  12. };
  13.  
  14. static const char *default_text = "ohai";
  15.  
  16.  
  17. G_DEFINE_TYPE (GtkDisplay, gtk_display, GTK_TYPE_LABEL)
  18.  
  19. /* Prototypes. */
  20. static void gtk_display_set_property (GObject *object,
  21.     guint prop_id,
  22.     const GValue *value,
  23.     GParamSpec *pspec);
  24. static void gtk_display_get_property (GObject *object,
  25.     guint prop_id,
  26.     GValue *value,
  27.     GParamSpec *pspec);
  28. /* static GObject *gtk_display_constructor  (GType type,
  29.     guint n_construct_properties,
  30.     GObjectConstructParam *construct_param); */
  31. static void gtk_display_finalize (GObject *object);
  32. static void gtk_display_dispose (GObject *object);
  33. //static void   gtk_display_destroy (GtkObject *object);
  34.  
  35.  
  36. /* Private functions. */
  37.  
  38. //initialize the class itself
  39. static void
  40. gtk_display_class_init (GtkDisplayClass *klass) {
  41.     GObjectClass    *object_class;
  42.     GtkDisplayClass *gtkdisplay_class;
  43.     GtkWidgetClass *widget_class;
  44.     //GtkObjectClass *gtk_object_class;
  45.  
  46.     object_class = G_OBJECT_CLASS (klass);
  47.     gtkdisplay_class = GTK_DISPLAY_CLASS (klass);
  48.     widget_class = GTK_WIDGET_CLASS (klass);
  49.     //gtk_object_class = GTK_OBJECT_CLASS (klass);
  50.  
  51.     //object_class->constructor = gtk_display_constructor;
  52.     object_class->finalize = gtk_display_finalize;
  53.     object_class->dispose = gtk_display_dispose;
  54.     object_class->get_property = gtk_display_get_property;
  55.     object_class->set_property = gtk_display_set_property;
  56.  
  57.     //gtk_object_class->destroy = gtk_display_destroy;
  58.  
  59.     g_type_class_add_private(klass, sizeof(GtkDisplayPrivate));
  60.  
  61.     /**
  62.     * GtkDisplay:text:
  63.     *
  64.     * The text to display
  65.     */
  66.     g_object_class_install_property (object_class,
  67.         PROP_TEXT,
  68.         g_param_spec_string ("text",
  69.             ("Text"),
  70.             ("The text to display"),
  71.             default_text,
  72.             (GParamFlags)G_PARAM_READWRITE));
  73. }
  74.  
  75.  
  76. static void
  77. gtk_display_set_property (GObject *object,
  78.     guint prop_id,
  79.     const GValue *value,
  80.     GParamSpec *pspec)
  81. {
  82.     GtkDisplay *widget;
  83.     g_return_if_fail(GTK_IS_DISPLAY (object));
  84.     widget = GTK_DISPLAY(object);
  85.  
  86.     switch(prop_id) {
  87.         case PROP_TEXT:
  88.             g_free(widget->priv->text);
  89.             widget->priv->text = g_value_dup_string (value);
  90.             gtk_label_set_text(GTK_LABEL(widget), widget->priv->text);
  91.             break;
  92.  
  93.         default:
  94.             G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
  95.             break;
  96.     }
  97. }
  98.  
  99.  
  100. static void
  101. gtk_display_get_property (GObject *object,
  102.     guint prop_id,
  103.     GValue *value,
  104.     GParamSpec *pspec)
  105. {
  106.     GtkDisplay *widget;
  107.     g_return_if_fail(GTK_IS_DISPLAY (object));
  108.     widget = GTK_DISPLAY(object);
  109.  
  110.     switch (prop_id) {
  111.         case PROP_TEXT:
  112.             g_value_set_string (value, widget->priv->text);
  113.             break;
  114.  
  115.         default:
  116.             G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
  117.             break;
  118.     }
  119. }
  120.  
  121.  
  122. //called from constructor
  123. static void
  124. gtk_display_init (GtkDisplay *widget)
  125. {
  126.     printf("gtk_display_init %p\n", widget);
  127.     widget->priv = G_TYPE_INSTANCE_GET_PRIVATE (widget, GTK_TYPE_DISPLAY,
  128.         GtkDisplayPrivate);
  129.  
  130.     widget->priv->text = g_strdup(default_text);
  131.     gtk_label_set_text(GTK_LABEL(widget), widget->priv->text);
  132. }
  133.  
  134.  
  135. //responsible for creating the object (by calling the parent class constructor)
  136. //generally we don't need to implement this
  137. /*
  138. static GObject *
  139. gtk_display_constructor (GType type,
  140.     guint n_construct_properties,
  141.     GObjectConstructParam *construct_param)
  142. {
  143.     printf("gtk_display_constructor begin\n");
  144.     GObject *object;
  145.     GtkDisplay *widget;
  146.  
  147.     object = G_OBJECT_CLASS(gtk_display_parent_class)->constructor(type,
  148.         n_construct_properties,
  149.         construct_param);
  150.     widget = GTK_DISPLAY(object);
  151.     printf("gtk_display_constructor %p\n", widget);
  152.  
  153.     return object;
  154. } */
  155.  
  156.  
  157. //actually deallocate the object and anything it may have allocated
  158. static void
  159. gtk_display_finalize (GObject *object)
  160. {
  161.     printf("gtk_display_finalize %p\n", object);
  162.     GtkDisplay *widget;
  163.  
  164.     g_return_if_fail (object != NULL);
  165.     g_return_if_fail (GTK_IS_DISPLAY(object));
  166.  
  167.     widget = GTK_DISPLAY (object);
  168.     g_free(widget->priv->text);
  169.     widget->priv->text = NULL;
  170.  
  171.     G_OBJECT_CLASS (gtk_display_parent_class)->finalize (object);
  172. }
  173.  
  174.  
  175. //clear out any references and set the object to a state where using it won't
  176. //cause any crash
  177. static void
  178. gtk_display_dispose (GObject *object)
  179. {
  180.     printf("gtk_display_dispose %p\n", object);
  181.     GtkDisplay *widget = GTK_DISPLAY (object);
  182.     G_OBJECT_CLASS (gtk_display_parent_class)->dispose (object);
  183. }
  184.  
  185.  
  186. //called from GtkWidget::dispose() - we don't generally need to implement this
  187. /* static void
  188. gtk_display_destroy (GtkObject *object)
  189. {
  190.     printf("gtk_display_destroy %p\n", object);
  191.     GtkDisplay *widget = GTK_DISPLAY (object);
  192.  
  193.     g_free(widget->priv->text);
  194.     widget->priv->text = NULL;
  195.  
  196.     GTK_OBJECT_CLASS (gtk_display_parent_class)->destroy (object);
  197.     printf("gtk_display_destroy %p end\n", object);
  198. } */
  199.  
  200.  
  201. /* ----------------------------------------------------------------------
  202. * Public interface
  203. * ---------------------------------------------------------------------- */
  204.  
  205. /**
  206. * gtk_display_new:
  207. *
  208. * Creates a new #GtkDisplay.
  209. *
  210. * Return value: a new #GtkDisplay.
  211. **/
  212. GtkWidget *
  213. gtk_display_new (void)
  214. {
  215.     GtkWidget *widget;
  216.     widget = (GtkWidget*)g_object_new(GTK_TYPE_DISPLAY, NULL);
  217.     return widget;
  218. }
  219.  
  220.  
  221. /**
  222. * gtk_display_new_with_text:
  223. * @text: initial text to display.
  224. *
  225. * Creates a new #GtkDisplay displaying the text @text.
  226. *
  227. * Return value: a new #GtkDisplay.
  228. **/
  229. GtkWidget *
  230. gtk_display_new_with_text (gchar *text)
  231. {
  232.     GtkWidget *widget = gtk_display_new();
  233.     g_object_set(G_OBJECT(widget), "text", text, NULL);
  234.     return widget;
  235. }
  236.  
  237.  
  238. /**
  239. * gtk_display_get_text:
  240. * @widget: a #GtkDisplay.
  241. *
  242. * Returns the text displayed in the widget.
  243. *
  244. * Return value: The text of the widget. This string is owned by the widget
  245. * and must not be modified or freed.
  246. **/
  247. gchar *
  248. gtk_display_get_text (GtkDisplay *widget)
  249. {
  250.     return widget->priv->text;
  251. }
  252.  
  253.  
  254. /**
  255. * gtk_display_set_text:
  256. * @widget: a #GtkDisplay.
  257. * @text: text to display.
  258. **/
  259. void
  260. gtk_display_set_text (GtkDisplay *widget,
  261.                       gchar *text)
  262. {
  263.     g_object_set(G_OBJECT(widget), "text", text, NULL);
  264. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement