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:
8
#define GPUMP_APP_GET_PRIVATE(obj)\
9
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), GPUMP_TYPE_APP, GPumpAppPrivate))
11
G_DEFINE_TYPE (GPumpApp, gpump_app, GTK_TYPE_APPLICATION)
13
struct GPumpAppPrivate {
15
GSettings * ui_settings;
16
GSettings * login_settings;
20
GtkWidget * header_bar;
21
GtkWidget * layout; /* GtkBox */
22
GtkWidget * scroll_view; /* GtkScrolledWindow */
23
GtkWidget * post_list_box; /* GtkListBox */
24
GtkWidget * btn_gear; /* GtkMenuButton */
25
GtkWidget * btn_new_post;
26
GtkWidget * btn_refresh;
29
GtkWidget * gear_menu; /* GtkMenu */
32
GtkListStore * post_list_store;
36
GPUPM_APP_MAIN_LIST_COL = 0,
37
GPUMP_APP_MAIN_LIST_NUM_COL
42
/* * Callback and private function declarations *******************************/
43
void gpump_app_class_init (GPumpAppClass * klass);
44
void gpump_app_activate (GApplication * application);
45
void gpump_app_init (GPumpApp * self);
47
void _prepere_window (GPumpApp * self);
48
void _prepere_gear_menu (GPumpApp * self);
49
void _prepere_new_post_button (GPumpApp * self);
50
void _prepere_refresh_button (GPumpApp * self);
52
/* * Class functions **********************************************************/
53
GPumpApp * gpump_app_new (void) {
54
GPumpApp * self = g_object_new (GPUMP_TYPE_APP,
55
"application-id", "org.gego.gpump",
56
"flags",G_APPLICATION_FLAGS_NONE,
61
void gpump_app_init (GPumpApp * self) {
63
self->priv = GPUMP_APP_GET_PRIVATE (self);
67
void gpump_app_class_init (GPumpAppClass * klass) {
68
g_print("GPumpApp class init.\n");
70
// GObject * object_class = G_OBJECT_CLASS (klass);
71
GApplicationClass * application_class = G_APPLICATION_CLASS (klass);
73
application_class->activate = gpump_app_activate;
75
g_type_class_add_private (klass, sizeof(GPumpAppPrivate));
77
g_print ("GPumpApp class init done.\n");
81
void gpump_app_activate (GApplication * application) {
82
g_print ("GPumpApp activate.\n");
86
_prepere_window (GPUMP_APP (application));
87
_prepere_gear_menu (GPUMP_APP (application));
88
_prepere_new_post_button (GPUMP_APP (application));
89
_prepere_refresh_button (GPUMP_APP (application));
92
gtk_widget_show_all (GTK_WIDGET(GPUMP_APP(application)->priv->window));
94
g_print ("done GPumpApp activate.\n");
97
void _prepere_gear_menu (GPumpApp * self) {
98
GPumpAppPrivate * priv = self->priv;
100
/* create the menu model */
101
GMenu * menu_model = g_menu_new ();
102
g_menu_append (menu_model, "Profiles", NULL);
103
g_menu_append (menu_model, "Settings", NULL);
105
priv->gear_menu = gtk_menu_new_from_model (G_MENU_MODEL (menu_model));
106
g_object_unref (menu_model);
108
/* create and attatch the gear menu button */
109
priv->btn_gear = gtk_menu_button_new ();
110
gtk_menu_button_set_popup (GTK_MENU_BUTTON(priv->btn_gear),
111
GTK_WIDGET(priv->gear_menu));
112
gtk_header_bar_pack_end (GTK_HEADER_BAR(priv->header_bar), priv->btn_gear);
115
GtkWidget * gear_icon = gtk_image_new_from_icon_name(
116
"emblem-system-symbolic", GTK_ICON_SIZE_LARGE_TOOLBAR);
117
gtk_button_set_image (GTK_BUTTON (priv->btn_gear), gear_icon);
119
gtk_widget_set_tooltip_text (GTK_WIDGET (priv->btn_gear), "GPupm gear menu");
122
void _prepere_new_post_button (GPumpApp * self) {
123
GPumpAppPrivate * priv = self->priv;
125
GtkWidget * share_icon = gtk_image_new_from_icon_name ("text-editor-symbolic",
126
GTK_ICON_SIZE_LARGE_TOOLBAR);
127
priv->btn_new_post = gtk_button_new ();
128
gtk_button_set_image (GTK_BUTTON (priv->btn_new_post), share_icon);
130
gtk_header_bar_pack_start (GTK_HEADER_BAR (priv->header_bar),
132
gtk_widget_set_tooltip_text (GTK_WIDGET (priv->btn_new_post),
136
void _prepere_window (GPumpApp * self) {
137
GPumpAppPrivate * priv = self->priv;
138
GtkWidget * window = priv->window =
139
gtk_application_window_new (GTK_APPLICATION (self));
140
GtkWidget * header_bar = priv->header_bar = gtk_header_bar_new ();
141
GtkWidget * layout = priv->layout =
142
gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3);
144
gtk_header_bar_set_title (GTK_HEADER_BAR (header_bar), "GPump");
145
gtk_header_bar_set_show_close_button (GTK_HEADER_BAR (header_bar), TRUE);
147
GtkWidget * scroll = priv->post_list_box =
148
gtk_scrolled_window_new (NULL, NULL);
150
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll),
151
GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
153
GtkWidget * post_list_box = priv->post_list_box =
157
gtk_container_add (GTK_CONTAINER(scroll), post_list_box);
159
gtk_window_set_titlebar (GTK_WINDOW (window), header_bar);
160
gtk_widget_set_size_request (window, 500,500);
162
gtk_box_pack_start (GTK_BOX (layout), scroll, TRUE, TRUE, 1);
164
gtk_container_add (GTK_CONTAINER (window), layout);
167
void _prepere_refresh_button (GPumpApp * self) {
168
GPumpAppPrivate * priv = self->priv;
169
GtkWidget * refresh_icon = gtk_image_new_from_icon_name
170
("emblem-synchronizing-symbolic", GTK_ICON_SIZE_LARGE_TOOLBAR);
171
priv->btn_refresh = gtk_button_new ();
172
gtk_button_set_image (GTK_BUTTON (priv->btn_refresh), refresh_icon);
173
gtk_header_bar_pack_start (GTK_HEADER_BAR(priv->header_bar), priv->btn_refresh);
174
gtk_widget_set_tooltip_text (GTK_WIDGET (priv->btn_refresh),
175
"Refresh the stream");
178
/* * Callback implemenations **************************************************/