/gpump/trunk

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/gpump/trunk

« back to all changes in this revision

Viewing changes to src/GPumpApp.c

  • Committer: Gustav Hatvigsson
  • Date: 2014-04-07 16:36:15 UTC
  • Revision ID: gustav.hartvigsson@gmail.com-20140407163615-kj6i1tzonrgxfvho
* changed order of functions to be easier to find.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* c-basic-offset: 2; tab-width: 2; indent-tabs-mode: nil
 
2
 * vi: set shiftwidth=2 tabstop=2 expandtab:
 
3
 * :indentSize=2:tabSize=2:noTabs=true:
 
4
 */
 
5
 
 
6
#include "GPumpApp.h"
 
7
#include "GPumpSettings.h"
 
8
 
 
9
#define GPUMP_APP_GET_PRIVATE(obj)\
 
10
  (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GPUMP_TYPE_APP, GPumpAppPrivate))
 
11
 
 
12
G_DEFINE_TYPE (GPumpApp, gpump_app, GTK_TYPE_APPLICATION)
 
13
 
 
14
struct GPumpAppPrivate {
 
15
  
 
16
  GSettings * ui_settings;
 
17
  GSettings * login_settings;
 
18
  
 
19
  /* Widgets */
 
20
  GtkWidget * window;
 
21
  GtkWidget * header_bar;
 
22
  GtkWidget * layout; /* GtkBox */
 
23
  GtkWidget * scroll_view; /* GtkScrolledWindow */
 
24
  GtkWidget * post_list_box; /* GtkListBox */
 
25
  GtkWidget * btn_gear; /* GtkMenuButton */
 
26
  GtkWidget * btn_new_post;
 
27
  GtkWidget * btn_refresh;
 
28
  
 
29
  GPumpSettings * gpump_settings; /* GPumpSettings */
 
30
  
 
31
  /* gear menu */
 
32
  GtkWidget * gear_menu; /* GtkMenu */
 
33
  
 
34
  /* List store */
 
35
  GtkListStore * post_list_store;
 
36
};
 
37
 
 
38
typedef enum {
 
39
  GPUPM_APP_MAIN_LIST_COL = 0,
 
40
  GPUMP_APP_MAIN_LIST_NUM_COL
 
41
} GPumpAppCols;
 
42
 
 
43
 
 
44
 
 
45
/* * Callback and private function declarations *******************************/
 
46
void gpump_app_class_init (GPumpAppClass * klass);
 
47
void gpump_app_activate (GApplication * application);
 
48
void gpump_app_init (GPumpApp * self);
 
49
 
 
50
void _prepere_window (GPumpApp * self);
 
51
void _prepere_gear_menu (GPumpApp * self);
 
52
void _prepere_new_post_button (GPumpApp * self);
 
53
void _prepere_refresh_button (GPumpApp * self);
 
54
 
 
55
void _cb_show_settings (GtkWidget * widget, gpointer user_data);
 
56
 
 
57
/* * Class functions **********************************************************/
 
58
GPumpApp * gpump_app_new (void) {
 
59
  GPumpApp * self = g_object_new (GPUMP_TYPE_APP,
 
60
                       "application-id", "org.gego.gpump",
 
61
                       "flags",G_APPLICATION_FLAGS_NONE,
 
62
                       NULL);
 
63
  return self;
 
64
}
 
65
 
 
66
void gpump_app_init (GPumpApp * self) {
 
67
  g_print ("init\n");
 
68
  self->priv = GPUMP_APP_GET_PRIVATE (self);
 
69
  
 
70
}
 
71
 
 
72
void gpump_app_class_init (GPumpAppClass * klass) {
 
73
  g_print("GPumpApp class init.\n");
 
74
  
 
75
  // GObject * object_class = G_OBJECT_CLASS (klass);
 
76
  GApplicationClass * application_class = G_APPLICATION_CLASS (klass);
 
77
  
 
78
  application_class->activate = gpump_app_activate;
 
79
  
 
80
  g_type_class_add_private (klass, sizeof(GPumpAppPrivate));
 
81
  
 
82
  g_print ("GPumpApp class init done.\n");
 
83
}
 
84
 
 
85
 
 
86
void gpump_app_activate (GApplication * application) {
 
87
  g_print ("GPumpApp activate.\n");
 
88
 
 
89
  GPUMP_APP(application)->priv->gpump_settings = gpump_settings_new (
 
90
    GPUMP_APP(application)->priv->window);
 
91
  
 
92
  /* Prepere stuff */
 
93
  _prepere_window (GPUMP_APP (application));
 
94
  _prepere_gear_menu (GPUMP_APP (application));
 
95
  _prepere_new_post_button (GPUMP_APP (application));
 
96
  _prepere_refresh_button (GPUMP_APP (application));
 
97
  
 
98
  /* Show it! */
 
99
  gtk_widget_show_all (GTK_WIDGET(GPUMP_APP(application)->priv->window));
 
100
  
 
101
  g_print ("done GPumpApp activate.\n");
 
102
}
 
103
 
 
104
void _prepere_window (GPumpApp * self) {
 
105
  GPumpAppPrivate * priv = self->priv;
 
106
  GtkWidget * window = priv->window =
 
107
    gtk_application_window_new (GTK_APPLICATION (self));
 
108
  GtkWidget * header_bar = priv->header_bar = gtk_header_bar_new ();
 
109
  GtkWidget * layout = priv->layout =
 
110
    gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3);
 
111
  
 
112
  gtk_header_bar_set_title (GTK_HEADER_BAR (header_bar), "GPump");
 
113
  gtk_header_bar_set_show_close_button (GTK_HEADER_BAR (header_bar), TRUE);
 
114
  
 
115
  GtkWidget * scroll = priv->post_list_box =
 
116
    gtk_scrolled_window_new (NULL, NULL);
 
117
  
 
118
  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll),
 
119
    GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
 
120
  
 
121
  GtkWidget * post_list_box = priv->post_list_box =
 
122
    gtk_list_box_new ();
 
123
 
 
124
  
 
125
  gtk_container_add (GTK_CONTAINER(scroll), post_list_box);
 
126
  
 
127
  gtk_window_set_titlebar (GTK_WINDOW (window), header_bar);
 
128
  gtk_window_set_default_size (GTK_WINDOW(window), 500,500);
 
129
  
 
130
  gtk_box_pack_start (GTK_BOX (layout), scroll, TRUE, TRUE, 1);
 
131
  
 
132
  gtk_container_add (GTK_CONTAINER (window), layout);
 
133
}
 
134
 
 
135
void _prepere_gear_menu (GPumpApp * self) {
 
136
  GPumpAppPrivate * priv = self->priv;
 
137
  
 
138
  /* Create menu and menu items. */
 
139
  priv->gear_menu = gtk_menu_new();
 
140
  GtkWidget * mi_settings = gtk_menu_item_new_with_label (_("Settings"));
 
141
  GtkWidget * mi_profiles = gtk_menu_item_new_with_label (_("Profiles"));
 
142
  
 
143
  
 
144
  /* Add items to menu. */
 
145
  gtk_container_add (GTK_CONTAINER (priv->gear_menu), mi_settings);
 
146
  gtk_container_add (GTK_CONTAINER (priv->gear_menu), mi_profiles);
 
147
  
 
148
  /* I have no idea why we need to run these, it seems trange, this
 
149
   * should be handled by the caller of gtk_
 
150
   */
 
151
  gtk_widget_show (GTK_WIDGET(mi_settings));
 
152
  gtk_widget_show (GTK_WIDGET(mi_profiles));
 
153
  
 
154
  /* Hook up signals. */
 
155
  g_signal_connect (G_OBJECT (mi_settings), "activate",
 
156
                    G_CALLBACK (_cb_show_settings), self);
 
157
  g_signal_connect (G_OBJECT (mi_profiles), "activate",
 
158
                    NULL, self);
 
159
  
 
160
  
 
161
  /* create and attatch the gear menu button */
 
162
  priv->btn_gear = gtk_menu_button_new ();
 
163
  gtk_menu_button_set_popup (GTK_MENU_BUTTON (priv->btn_gear),
 
164
    GTK_WIDGET(priv->gear_menu));
 
165
  gtk_header_bar_pack_end (GTK_HEADER_BAR (priv->header_bar), priv->btn_gear);
 
166
  
 
167
  /* Setting icon */
 
168
  GtkWidget * gear_icon = gtk_image_new_from_icon_name(
 
169
    "emblem-system-symbolic", GTK_ICON_SIZE_LARGE_TOOLBAR);
 
170
  gtk_button_set_image (GTK_BUTTON (priv->btn_gear), gear_icon);
 
171
  
 
172
  gtk_widget_set_tooltip_text (GTK_WIDGET (priv->btn_gear), _("GPump gear menu"));
 
173
}
 
174
 
 
175
void _prepere_new_post_button (GPumpApp * self) {
 
176
  GPumpAppPrivate * priv = self->priv;
 
177
  
 
178
  GtkWidget * share_icon = gtk_image_new_from_icon_name ("text-editor-symbolic",
 
179
    GTK_ICON_SIZE_LARGE_TOOLBAR);
 
180
  priv->btn_new_post = gtk_button_new ();
 
181
  gtk_button_set_image (GTK_BUTTON (priv->btn_new_post), share_icon);
 
182
  
 
183
  gtk_header_bar_pack_start (GTK_HEADER_BAR (priv->header_bar),
 
184
    priv->btn_new_post);
 
185
  gtk_widget_set_tooltip_text (GTK_WIDGET (priv->btn_new_post),
 
186
    _("Create new post"));
 
187
}
 
188
 
 
189
void _prepere_refresh_button (GPumpApp * self) {
 
190
  GPumpAppPrivate * priv = self->priv;
 
191
  GtkWidget * refresh_icon = gtk_image_new_from_icon_name
 
192
    ("emblem-synchronizing-symbolic", GTK_ICON_SIZE_LARGE_TOOLBAR);
 
193
  priv->btn_refresh = gtk_button_new ();
 
194
  gtk_button_set_image (GTK_BUTTON (priv->btn_refresh), refresh_icon);
 
195
  gtk_header_bar_pack_start (GTK_HEADER_BAR(priv->header_bar),
 
196
    priv->btn_refresh);
 
197
  gtk_widget_set_tooltip_text (GTK_WIDGET (priv->btn_refresh),
 
198
    _("Refresh the stream"));
 
199
}
 
200
 
 
201
/* * Callback implemenations **************************************************/
 
202
void _cb_show_settings (GtkWidget * widget, gpointer user_data) {
 
203
  GPumpApp * self = GPUMP_APP (user_data);
 
204
  gpump_settings_show (self->priv->gpump_settings);
 
205
}
 
206