1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
/* Copyright 2016 Software Freedom Conservancy Inc.
*
* This software is licensed under the GNU LGPL (version 2.1 or later).
* See the COPYING file in this distribution.
*/
public class DirectWindow : AppWindow {
private DirectPhotoPage direct_photo_page;
public DirectWindow(File file) {
direct_photo_page = new DirectPhotoPage(file);
direct_photo_page.get_view().items_altered.connect(on_photo_changed);
direct_photo_page.get_view().items_state_changed.connect(on_photo_changed);
set_current_page(direct_photo_page);
update_title(file, false);
direct_photo_page.switched_to();
// simple layout: menu on top, photo in center, toolbar along bottom (mimicking the
// PhotoPage in the library, but without the sidebar)
Gtk.Box layout = new Gtk.Box(Gtk.Orientation.VERTICAL, 0);
layout.pack_start(direct_photo_page, true, true, 0);
layout.pack_end(direct_photo_page.get_toolbar(), false, false, 0);
Application.set_menubar (direct_photo_page.get_menubar ());
add(layout);
}
public static DirectWindow get_app() {
return (DirectWindow) instance;
}
public DirectPhotoPage get_direct_page() {
return (DirectPhotoPage) get_current_page();
}
public void update_title(File file, bool modified) {
title = "%s%s (%s) - %s".printf((modified) ? "*" : "", file.get_basename(),
get_display_pathname(file.get_parent()), Resources.APP_TITLE);
}
protected override void on_fullscreen() {
File file = get_direct_page().get_current_file();
go_fullscreen(new DirectFullscreenPhotoPage(file));
}
public override string get_app_role() {
return Resources.APP_DIRECT_ROLE;
}
private void on_photo_changed() {
Photo? photo = direct_photo_page.get_photo();
if (photo != null)
update_title(photo.get_file(), photo.has_alterations());
}
protected override void on_quit() {
if (!get_direct_page().check_quit())
return;
Config.Facade.get_instance().set_direct_window_state(maximized, dimensions);
base.on_quit();
}
public override bool delete_event(Gdk.EventAny event) {
if (!get_direct_page().check_quit())
return true;
return (base.delete_event != null) ? base.delete_event(event) : false;
}
public override bool button_press_event(Gdk.EventButton event) {
if (event.type == Gdk.EventType.2BUTTON_PRESS) {
on_fullscreen();
return true;
}
return false;
}
public override bool key_press_event(Gdk.EventKey event) {
// check for an escape
if (Gdk.keyval_name(event.keyval) == "Escape") {
on_quit();
return true;
}
// ...then let the base class take over
return (base.key_press_event != null) ? base.key_press_event(event) : false;
}
}
|