-
Notifications
You must be signed in to change notification settings - Fork 20
/
Copy pathdialogs.py
168 lines (151 loc) · 6.18 KB
/
dialogs.py
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
#!/usr/bin/env python2
# pPub by Thanasis Georgiou <sakisds@gmx.com>
# pPub is free software; you can redistribute it and/or modify it under the terms
# of the GNU General Public Licence as published by the Free Software Foundation.
# pPub is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE. See the GNU General Public Licence for more details.
# You should have received a copy of the GNU General Public Licence along with
# pPub; if not, write to the Free Software Foundation, Inc., 51 Franklin Street,
# Fifth Floor, Boston, MA 02110-1301, USA.
from gi.repository import Gdk, Gtk
class OpenDialog(Gtk.FileChooserDialog): #File>Open dialog
def __init__(self, title, none, action, buttons, activate, files):
super(OpenDialog, self).__init__(title, none, action, buttons)
#Prepare filters
if files == 0: #For open dialog only
filter_pub = Gtk.FileFilter()
filter_pub.set_name("EPub files")
filter_pub.add_pattern("*.epub")
self.add_filter(filter_pub)
#For all dialogs
filter_all = Gtk.FileFilter()
filter_all.set_name("All files")
filter_all.add_pattern("*")
self.add_filter(filter_all)
#Activation response
self.activate = activate
#Prepare dialog
self.set_default_response(Gtk.ResponseType.OK)
self.connect("file-activated", self.activate)
self.connect("response", self.respond)
def respond(self, widget, data=None): #Check response
if data == (-5):
self.activate(widget, data)
else:
self.destroy()
class JumpChapterDialog(Gtk.Dialog): #Chapters>Jump dialog
def __init__(self):
super(JumpChapterDialog, self).__init__()
#Set window properties
self.set_resizable(False)
#Create widgets
label = Gtk.Label("Enter chapter number:") #Label
self.entry = Gtk.Entry() #Textbox
#Actions
self.entry.connect("activate", self.on_dialog_enter) #Close on enter
#Add to container
self.vbox.pack_start(self.entry, True, True, 0)
self.vbox.pack_start(label, True, True, 0)
self.vbox.show_all()
#Add buttons
self.add_button(Gtk.STOCK_OK, 0)
self.add_button(Gtk.STOCK_CANCEL, 1)
self.set_default_response(0)
def get_text(self): #Returns text in entry box
return self.entry.get_text()
def run(self): #Shows dialog
answer = super(JumpChapterDialog, self).run()
if answer == 0:
if self.entry.get_text() != "":
return 0
else:
return 1
else:
return 1
def on_dialog_enter(self, widget, data=None): #Closes "jump to" dialog when enter is pressed
if self.entry.get_text() != "":
self.response(0)
else:
self.response(1)
class SpinnerDialog(Gtk.Dialog): #Convert book spinner
def __init__(self):
super(SpinnerDialog, self).__init__()
#Window options
self.set_resizable(False)
#Create container and objects
hbox = Gtk.HBox()
spinner = Gtk.Spinner()
label = Gtk.Label("Importing...")
#Start spinner and set size
spinner.start()
spinner.set_size_request(50,50)
#Add objects to containers
hbox.pack_start(spinner, True, True, 10)
hbox.pack_start(label, True, True, 10)
self.vbox.pack_start(hbox, True, True, 0)
self.vbox.show_all()
class DeleteBookmarksDialog(Gtk.Dialog):
def __init__(self, config, book_md5, action):
#Window properties
super(DeleteBookmarksDialog, self).__init__()
self.set_title("Bookmarks")
self.set_size_request(350, 250)
self.activation_action = action
#Variables
self.config = config
self.book_md5 = book_md5
#Create objects
label = Gtk.Label("Double click a bookmark to delete.") #Label
self.scr_window = Gtk.ScrolledWindow() #Scrollable Area
#Set properties of Scrollable Area
self.scr_window.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
self.scr_window.set_shadow_type(Gtk.ShadowType.ETCHED_IN)
#Add objects to container
self.vbox.pack_end(self.scr_window, True, True, 0)
self.vbox.pack_start(label, False, False, 0)
#Tree view
self.refresh_tree()
#Buttons
self.add_button(Gtk.STOCK_CLOSE, 0)
self.set_default_response(0)
#Show all these stuff
self.vbox.show_all()
def refresh_tree(self, widget=None, data=None, row=None): #Refresh bookmarks view
if widget != None:
self.scr_window.remove(self.tree)
store = self.create_model()
self.tree = Gtk.TreeView(model=store)
self.create_columns(self.tree)
self.tree.connect("row-activated", self.activation_action)
self.tree.connect("row-activated", self.refresh_tree)
self.tree.set_rules_hint(True)
#Re-add widget
self.scr_window.add(self.tree)
self.tree.show()
def create_model(self): #Load data
store = Gtk.ListStore(int, str)
#Parse bookmarks from config
count = int(self.config.get(self.book_md5, "count"))
i = 0
while i != count:
i += 1
store.append((i, "Chapter "+str(self.config.get(self.book_md5, str(i)+"-ch"))))
return store
def create_columns(self, tree_view): #Create columns for tree view
#Number column
renderer_text = Gtk.CellRendererText()
column = Gtk.TreeViewColumn("Number", renderer_text, text=0)
column.set_sort_column_id(0)
tree_view.append_column(column)
#Chapter column
renderer_text = Gtk.CellRendererText()
column = Gtk.TreeViewColumn("Chapter", renderer_text, text=1)
column.set_sort_column_id(1)
tree_view.append_column(column)
def run(self): #Show dialog
answer = super(DeleteBookmarksDialog, self).run()
if answer == 0 or answer == -4:
self.destroy()
else:
self.activation_action(self)