1
/* This file is part of GPump, a Pump.io client.
3
* GPump (THE SOFTWARE) is made available under the terms and conditions of the
4
* GNU Lesser General Public Licence 3.0. A copy of the licence can be read
5
* in the file lgpl-3.0.txt in the root of this project.
8
const cairo = imports.gi.cairo;
9
const Gio = imports.gi.Gio;
10
const GLib = imports.gi.GLib;
11
const GObject = imports.gi.GObject;
12
const Gtk = imports.gi.Gtk;
13
const Lang = imports.lang;
14
const _ = imports.gettext.gettext;
17
const SettingsData = imports.settings_data;
18
const PreferencesUI = imports.preferences_ui;
20
const Application = new Lang.Class ({
22
Extends: Gtk.Application,
25
this.settings = SettingsData.get_settings ();
28
application_id: "org.gego.gpump",
29
flags: Gio.ApplicationFlags.FLAGS_NONE,
30
register_session: true,
32
GLib.set_application_name (_("GPump"));
36
vfunc_activate: function () {
37
/* Guarantee that only one window is present at any time. */
38
let w_list = this.get_windows ();
44
this._prepare_window ();
45
this._prepare_app_menu ();
46
this._prepare_header_bar ();
49
this.window.show_all ();
53
* This function is used to prepare the window, it also initializes and adds
54
* the headerbar to it.
56
_prepare_window: function () {
57
this.window = new Gtk.ApplicationWindow ({
59
type: Gtk.WindowType.TOPLEVEL,
60
title: GLib.get_application_name (),
61
default_height: this.settings.get_setting ("ui.h").data,
62
default_width: this.settings.get_setting ("ui.w").data,
65
window_position: Gtk.WindowPosition.CENTER
68
this.window.set_titlebar ((this.headerbar = new Gtk.HeaderBar({
69
title: GLib.get_application_name (),
70
subtitle: _('A Pump.io client'),
71
show_close_button: true
74
if (!(this.settings.get_setting ("ui.x").data < 0 &&
75
this.settings.get_setting ("ui.y").data < 0)){
76
this.window.move (this.settings.get_setting ("ui.x").data, this.settings.get_setting ("ui.y").data);
81
this.window.add (( this.scroll_view = new Gtk.ScrolledWindow () ));
82
this.scroll_view.add ((this.list_box = new Gtk.ListBox ()));
84
this.window.connect ('delete_event',
85
Lang.bind (this.window,
86
this.window.hide_on_delete));
88
this.add_window (this.window);
92
* This function is used to create the application menu.
94
_prepare_app_menu: function () {
95
let menu = new Gio.Menu ();
96
let section = new Gio.Menu ();
98
section.append ("Preferences", "app.preferences");
99
menu.append_section (null, section);
101
section = new Gio.Menu ();
102
section.append (_("About"), "app.about");
103
section.append (_("Quit"), "app.quit");
104
menu.append_section (null, section);
106
this.set_app_menu (menu);
108
let about_action = new Gio.SimpleAction ({name: "about"});
109
about_action.connect ('activate', Lang.bind (this, function (){
110
let about_dialog = new Gtk.AboutDialog ({use_header_bar: true,
111
transient_for: this.window,
113
version: "pre-alpha ~BZR~",
114
program_name: GLib.get_application_name (),
115
copyright: "Gustav \'Gego\' Hartvigsson, 2014",
116
license_type: Gtk.License.LGPL_3_0});
118
about_dialog.authors = ["Gustav Hartvigsson <gustav.hartvigsson@gmail.com>"];
119
about_dialog.connect ("response", function () {
120
about_dialog.destroy ();
124
this.add_action (about_action);
126
let quit_action = new Gio.SimpleAction ({name: "quit"});
127
quit_action.connect ('activate', Lang.bind (this, function () {
128
let allocation = this.window.get_allocation ();
129
this.settings.set_setting ("ui.h", allocation.height);
130
this.settings.set_setting ("ui.w", allocation.width);
132
let win_pos = this.window.get_position ();
133
this.settings.set_setting ("ui.x", win_pos[0]);
134
this.settings.set_setting ("ui.y", win_pos[1]);
135
this.settings.commit_to_file ();
138
this.add_action (quit_action);
140
let preferences_action = new Gio.SimpleAction ({name: "preferences"});
141
preferences_action.connect ('activate', Lang.bind (this, function (){
142
let pref_dialog = new PreferencesUI.PreferencesUI ();
143
pref_dialog.set_transient_for (this.window);
146
this.add_action (preferences_action)
150
* This function is used to prepare the hearderbar by adding buttons and
151
* assigning callback functions to them.
153
_prepare_header_bar: function () {
154
this.headerbar.pack_start ((this.new_post_btn = new Gtk.Button ({
155
image: (new Gtk.Image ({icon_name: 'text-editor-symbolic'})),
156
tooltip_text: _('Create new post')
159
this.headerbar.pack_start ((this.refresh_btn = new Gtk.Button({
160
image: (new Gtk.Image ({icon_name: 'emblem-synchronizing-symbolic'})),
161
tooltip_text: _('Refresh the stream')
164
this.headerbar.pack_end ((this.user_menu_btn = new Gtk.Button ({
165
image: (new Gtk.Image ({icon_name: 'emblem-system-symbolic'})),
166
tooltip_text: _('Switch and manage users')