~dobey/rhetorical/trunk

« back to all changes in this revision

Viewing changes to src/calview.c

  • Committer: rodney.dawes at canonical
  • Date: 2008-10-24 02:42:27 UTC
  • Revision ID: rodney.dawes@canonical.com-20081024024227-635l0ef9cge686qu
2008-10-23  Rodney Dawes  <dobey.pwns@gmail.com>

        * *: Import rhetorical into bzr

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 *  Authors: Rodney Dawes <dobey.pwns@gmail.com>
 
3
 *
 
4
 *  Copyright 2008 Rodney Dawes
 
5
 *
 
6
 */
 
7
 
 
8
#ifdef _HAVE_CONFIG_H_
 
9
#include "config.h"
 
10
#endif
 
11
 
 
12
#include "calview.h"
 
13
 
 
14
#include <gtk/gtkbuildable.h>
 
15
 
 
16
struct _CalViewPrivate {
 
17
  CalViewModel * model;
 
18
 
 
19
  GtkWidget * area;
 
20
};
 
21
 
 
22
/* GObject Methods */
 
23
static void cal_view_finalize (GObject * object);
 
24
 
 
25
/* GtkObject Methods */
 
26
static void cal_view_destroy (GtkObject * object);
 
27
 
 
28
/* GtkWidget Methods */
 
29
static gboolean cal_view_expose (GtkWidget * widget,
 
30
                                 GdkEventExpose * event);
 
31
static void cal_view_style_set (GtkWidget * widget,
 
32
                                GtkStyle * old_style);
 
33
 
 
34
/* GtkBuildable Methods */
 
35
static void cal_view_buildable_init (GtkBuildableIface * iface);
 
36
static void cal_view_buildable_add_child (GtkBuildable * cal_view,
 
37
                                          GtkBuilder * builder,
 
38
                                          GObject * child,
 
39
                                          const gchar * type);
 
40
 
 
41
G_DEFINE_TYPE_WITH_CODE (CalView, cal_view, GTK_TYPE_DRAWING_AREA,
 
42
                         G_IMPLEMENT_INTERFACE (GTK_TYPE_BUILDABLE,
 
43
                                                cal_view_buildable_init))
 
44
 
 
45
static void cal_view_class_init (CalViewClass * klass) {
 
46
  GObjectClass * o_class;
 
47
  GtkObjectClass * obj_class;
 
48
  GtkWidgetClass * wid_class;
 
49
  GtkDrawingAreaClass * parent_class;
 
50
 
 
51
  o_class = (GObjectClass *) klass;
 
52
  obj_class = (GtkObjectClass *) klass;
 
53
  wid_class = (GtkWidgetClass *) klass;
 
54
  parent_class = (GtkDrawingAreaClass *) klass;
 
55
 
 
56
  /* GObject Methods */
 
57
  o_class->finalize = cal_view_finalize;
 
58
 
 
59
  /* GtkObject Methods */
 
60
  obj_class->destroy = cal_view_destroy;
 
61
 
 
62
  /* GtkWidget Methods */
 
63
  wid_class->expose_event = cal_view_expose;
 
64
  wid_class->style_set = cal_view_style_set;
 
65
}
 
66
 
 
67
static void cal_view_buildable_init (GtkBuildableIface * iface) {
 
68
  iface->add_child = cal_view_buildable_add_child;
 
69
}
 
70
 
 
71
static void cal_view_init (CalView * cal_view) {
 
72
  CalViewPrivate * priv;
 
73
 
 
74
  priv = g_new0 (CalViewPrivate, 1);
 
75
  cal_view->priv = priv;
 
76
 
 
77
  GTK_WIDGET_SET_FLAGS (cal_view, GTK_CAN_FOCUS);
 
78
}
 
79
 
 
80
static void cal_view_finalize (GObject * object) {
 
81
  CalView * view;
 
82
  CalViewPrivate * priv;
 
83
 
 
84
  view = CAL_VIEW (object);
 
85
  priv = view->priv;
 
86
 
 
87
  if (priv->model)
 
88
    g_object_unref (priv->model);
 
89
 
 
90
  g_free (priv);
 
91
 
 
92
  if (G_OBJECT_CLASS (cal_view_parent_class)->finalize)
 
93
    (* G_OBJECT_CLASS (cal_view_parent_class)->finalize) (object);
 
94
}
 
95
 
 
96
static void cal_view_buildable_add_child (GtkBuildable * cal_view,
 
97
                                          GtkBuilder * builder,
 
98
                                          GObject * child,
 
99
                                          const gchar * type) {
 
100
}
 
101
 
 
102
/* GtkObject Methods */
 
103
static void cal_view_destroy (GtkObject * object) {
 
104
  if (GTK_OBJECT_CLASS (cal_view_parent_class)->destroy)
 
105
    (* GTK_OBJECT_CLASS (cal_view_parent_class)->destroy) (object);
 
106
}
 
107
 
 
108
/* GtkWidget Methods */
 
109
static gboolean cal_view_expose (GtkWidget * widget,
 
110
                                 GdkEventExpose * event) {
 
111
  CalView * view;
 
112
  CalViewPrivate * priv;
 
113
 
 
114
  view = CAL_VIEW (widget);
 
115
  priv = view->priv;
 
116
 
 
117
  if (priv->model && CAL_IS_VIEW_MODEL (priv->model)) {
 
118
    CalViewModelClass * mclass = CAL_VIEW_MODEL_GET_CLASS (priv->model);
 
119
 
 
120
    if (mclass->expose_event)
 
121
      mclass->expose_event (priv->model, widget, event);
 
122
 
 
123
    return FALSE;
 
124
  }
 
125
 
 
126
  return TRUE;
 
127
}
 
128
 
 
129
static void cal_view_style_set (GtkWidget * widget,
 
130
                                GtkStyle * old_style) {
 
131
}
 
132
 
 
133
/* Creators */
 
134
GtkWidget * cal_view_new (void) {
 
135
  return GTK_WIDGET (g_object_new (CAL_TYPE_VIEW, NULL));
 
136
}
 
137
 
 
138
GtkWidget * cal_view_new_with_model (CalViewModel * model) {
 
139
  CalViewPrivate * priv;
 
140
  GtkWidget * calview;
 
141
 
 
142
  g_return_val_if_fail (model != NULL, NULL);
 
143
 
 
144
  calview = cal_view_new ();
 
145
  priv = CAL_VIEW (calview)->priv;
 
146
 
 
147
  priv->model = model;
 
148
 
 
149
  return calview;
 
150
}