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:
7
#include "GPumpSettings.h"
9
#define GPUMP_APP_GET_PRIVATE(obj)\
10
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), GPUMP_TYPE_APP, GPumpAppPrivate))
12
G_DEFINE_TYPE (GPumpApp, gpump_app, GTK_TYPE_APPLICATION)
14
struct GPumpAppPrivate {
16
GSettings * ui_settings;
17
GSettings * login_settings;
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;
29
GPumpSettings * gpump_settings; /* GPumpSettings */
32
GtkWidget * gear_menu; /* GtkMenu */
35
GtkListStore * post_list_store;
39
GPUPM_APP_MAIN_LIST_COL = 0,
40
GPUMP_APP_MAIN_LIST_NUM_COL
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);
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);
55
void _cb_show_settings (GtkWidget * widget, gpointer user_data);
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,
66
void gpump_app_init (GPumpApp * self) {
68
self->priv = GPUMP_APP_GET_PRIVATE (self);
72
void gpump_app_class_init (GPumpAppClass * klass) {
73
g_print("GPumpApp class init.\n");
75
// GObject * object_class = G_OBJECT_CLASS (klass);
76
GApplicationClass * application_class = G_APPLICATION_CLASS (klass);
78
application_class->activate = gpump_app_activate;
80
g_type_class_add_private (klass, sizeof(GPumpAppPrivate));
82
g_print ("GPumpApp class init done.\n");
86
void gpump_app_activate (GApplication * application) {
87
g_print ("GPumpApp activate.\n");
89
GPUMP_APP(application)->priv->gpump_settings = gpump_settings_new (
90
GPUMP_APP(application)->priv->window);
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));
99
gtk_widget_show_all (GTK_WIDGET(GPUMP_APP(application)->priv->window));
101
g_print ("done GPumpApp activate.\n");
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);
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);
115
GtkWidget * scroll = priv->post_list_box =
116
gtk_scrolled_window_new (NULL, NULL);
118
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll),
119
GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
121
GtkWidget * post_list_box = priv->post_list_box =
125
gtk_container_add (GTK_CONTAINER(scroll), post_list_box);
127
gtk_window_set_titlebar (GTK_WINDOW (window), header_bar);
128
gtk_window_set_default_size (GTK_WINDOW(window), 500,500);
130
gtk_box_pack_start (GTK_BOX (layout), scroll, TRUE, TRUE, 1);
132
gtk_container_add (GTK_CONTAINER (window), layout);
135
void _prepere_gear_menu (GPumpApp * self) {
136
GPumpAppPrivate * priv = self->priv;
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"));
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);
148
/* I have no idea why we need to run these, it seems trange, this
149
* should be handled by the caller of gtk_
151
gtk_widget_show (GTK_WIDGET(mi_settings));
152
gtk_widget_show (GTK_WIDGET(mi_profiles));
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",
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);
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);
172
gtk_widget_set_tooltip_text (GTK_WIDGET (priv->btn_gear), _("GPump gear menu"));
175
void _prepere_new_post_button (GPumpApp * self) {
176
GPumpAppPrivate * priv = self->priv;
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);
183
gtk_header_bar_pack_start (GTK_HEADER_BAR (priv->header_bar),
185
gtk_widget_set_tooltip_text (GTK_WIDGET (priv->btn_new_post),
186
_("Create new post"));
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),
197
gtk_widget_set_tooltip_text (GTK_WIDGET (priv->btn_refresh),
198
_("Refresh the stream"));
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);