5
5
* in the file lgpl-3.0.txt in the root of this project.
9
const Gettext = imports.gettext;
8
10
const Gio = imports.gi.Gio;
9
11
const GLib = imports.gi.GLib;
12
const GObject = imports.gi.GObject;
10
13
const Gtk = imports.gi.Gtk;
14
const _ = imports.gettext.gettext;
11
15
const Lang = imports.lang;
12
const _ = imports.gettext.gettext;
15
17
const SettingsData = imports.settings_data;
18
/* const Style = imports.style; */
19
const PreferencesUI = imports.preferences_ui;
20
const UserMenu = imports.user_menu;
21
const UserButton = imports.user_button;
24
* This class is the main application class, it creates the main wiev
25
* and basically is what runs the program.
17
27
const Application = new Lang.Class ({
18
28
Name: "Application",
19
29
Extends: Gtk.Application,
21
31
_init: function () {
32
this.settings = SettingsData.get_settings ();
34
Gettext.bindtextdomain ("gpump", "./locale/"); //FIXME
35
Gettext.textdomain ("gpump");
36
GLib.set_prgname ("gpump");
23
39
application_id: "org.gego.gpump",
24
40
flags: Gio.ApplicationFlags.FLAGS_NONE,
25
register_session: true
41
register_session: true,
27
GLib.set_application_name (_("GPump"));
43
GLib.set_application_name (_("GPump"));
29
this.settings = SettingsData.get_settings ();
32
47
vfunc_activate: function () {
63
83
this.window.set_titlebar ((this.headerbar = new Gtk.HeaderBar({
64
84
title: GLib.get_application_name (),
65
subtitle: _('A Pump.io client'),
85
subtitle: _("A Pump.io client"),
66
86
show_close_button: true
89
if (!(this.settings.get_setting ("ui.x").data < 0 &&
90
this.settings.get_setting ("ui.y").data < 0)){
91
this.window.move (this.settings.get_setting ("ui.x").data,
92
this.settings.get_setting ("ui.y").data);
95
var gtk_settings = Gtk.Settings.get_default ();
96
if ( this.settings.get_setting ("main.use_dark").data ) {
97
gtk_settings["gtk_application_prefer_dark_theme"] = true;
99
gtk_settings["gtk_application_prefer_dark_theme"] = false;
69
102
print ("derp!\n");
71
this.window.add (( this.scroll_view = new Gtk.ScrolledWindow () ));
72
this.scroll_view.add ((this.list_box = new Gtk.ListBox ()));
106
this.window.add ((this.layout = new Gtk.Box ({
107
orientation: Gtk.Orientation.VERTICAL
110
/* * Building the stack switched views */
112
/* Hack to centre the damn switcher */
113
this.layout.pack_start ((this.switcher_box = new Gtk.Box ({
114
orientation: Gtk.Orientation.HORIZONTAL
115
})), false, false, 0);
117
this.switcher_box.set_center_widget (
118
(this.stack_switcher = new Gtk.StackSwitcher ())
122
this.layout.pack_end ((this.stack = new Gtk.Stack ({
124
transition_duration: 250,
125
transition_type: Gtk.StackTransitionType.CROSSFADE
129
this.stack.add_titled ((new Gtk.ScrolledWindow ({
130
child: (this.main_list_box = new Gtk.ListBox()),
132
})), "main", _("Main"));
135
/* 'mean while' view */
136
this.stack.add_titled ((new Gtk.ScrolledWindow ({
137
child: (this.mw_list_box = new Gtk.ListBox()),
139
})), "meanwhile", _("Meanwhile"));
141
/* * Hook up the stack and the stack switcher */
142
this.stack_switcher.set_stack (this.stack);
144
/* * Hide the window so, so we can show it later */
74
145
this.window.connect ('delete_event',
75
Lang.bind (this.window,
76
this.window.hide_on_delete));
146
Lang.bind (this, function () {
147
print ("balls to it!");
148
this._save_settings ();
150
/* To Prevent the widow from rely being destroyed? */
78
154
this.add_window (this.window);
82
158
* This function is used to create the application menu.
84
_prepareAppMenu: function () {
160
_prepare_app_menu: function () {
85
161
let menu = new Gio.Menu ();
86
162
let section = new Gio.Menu ();
88
section.append ("Preferences", "app.preferences");
164
section.append (_("Preferences"), "app.preferences");
89
165
menu.append_section (null, section);
91
167
section = new Gio.Menu ();
96
172
this.set_app_menu (menu);
174
let about_action = new Gio.SimpleAction ({name: "about"});
175
about_action.connect ('activate', Lang.bind (this, function () {
176
let about_dialog = new Gtk.AboutDialog ({use_header_bar: true,
177
transient_for: this.window,
179
version: "pre-alpha ~BZR~",
180
program_name: GLib.get_application_name (),
181
copyright: "Gustav \'Gego/XAREN\' Hartvigsson, 2014",
182
license_type: Gtk.License.LGPL_3_0});
184
about_dialog.authors =
185
["Gustav Hartvigsson <gustav.hartvigsson@gmail.com>"];
186
about_dialog.connect ("response", function () {
187
about_dialog.destroy ();
191
this.add_action (about_action);
98
193
let quit_action = new Gio.SimpleAction ({name: "quit"});
99
194
quit_action.connect ('activate', Lang.bind (this, function () {
195
this._save_settings ();
102
198
this.add_action (quit_action);
200
let preferences_action = new Gio.SimpleAction ({name: "preferences"});
201
preferences_action.connect ('activate', Lang.bind (this, function (){
202
let pref_dialog = new PreferencesUI.PreferencesUI ({
203
transient_for: this.window
207
this.add_action (preferences_action);
107
211
* This function is used to prepare the hearderbar by adding buttons and
108
212
* assigning callback functions to them.
110
_prepareHeaderBar: function () {
214
_prepare_header_bar: function () {
111
216
this.headerbar.pack_start ((this.new_post_btn = new Gtk.Button ({
112
217
image: (new Gtk.Image ({icon_name: 'text-editor-symbolic'})),
113
tooltip_text: _('Create new post')
218
tooltip_text: _("Create new post"),
221
this.new_post_btn.get_style_context ().add_class ("image-button");
116
223
this.headerbar.pack_start ((this.refresh_btn = new Gtk.Button({
117
224
image: (new Gtk.Image ({icon_name: 'emblem-synchronizing-symbolic'})),
118
tooltip_text: _('Refresh the stream')
121
this.headerbar.pack_end ((this.user_menu_btn = new Gtk.Button ({
122
image: (new Gtk.Image ({icon_name: 'emblem-system-symbolic'})),
123
tooltip_text: _('Switch and manage users')
225
tooltip_text: _("Refresh the stream"),
228
this.refresh_btn.get_style_context ().add_class ("image-button");
230
this.headerbar.pack_end ((this.user_menu_btn = new UserButton.UserButton ({
231
image: (new Gtk.Image ({icon_name: 'mail-send-symbolic'})),
232
tooltip_text: _("Switch and manage users"),
233
popover: (this.user_menu = new UserMenu.UserMenu ()),
238
_save_settings: function () {
239
let allocation = this.window.get_allocation ();
240
this.settings.set_setting ("ui.h", allocation.height);
241
this.settings.set_setting ("ui.w", allocation.width);
243
let win_pos = this.window.get_position ();
244
this.settings.set_setting ("ui.x", win_pos[0]);
245
this.settings.set_setting ("ui.y", win_pos[1]);
246
this.settings.commit_to_file ();