4 |
import gtk |
import gtk |
5 |
import gnome |
import gnome |
6 |
import gnome.ui |
import gnome.ui |
7 |
|
import pango |
8 |
|
|
9 |
import straw |
import straw |
10 |
|
|
11 |
class PreferencesDialog: |
class PreferencesDialog: |
12 |
SEC_PER_MINUTE = 60 |
SEC_PER_MINUTE = 60 |
13 |
|
COLUMN_TITLE = 0 |
14 |
|
#COLUMN_LOC = 1 |
15 |
|
#COLUMN_USER = 2 |
16 |
|
#COLUMN_PASSWORD = 3 |
17 |
|
COLUMN_EDITABLE = 4 |
18 |
|
COLUMN_ID = 5 |
19 |
|
|
20 |
|
|
21 |
def __init__(self, xml): |
def __init__(self, xml): |
22 |
poll_frequency = int(straw.config.poll_frequency/self.SEC_PER_MINUTE) |
straw.config.signal_connect(straw.FeedsChangedSignal,self.feeds_changed) |
|
items_stored = int(straw.config.number_of_items_stored) |
|
23 |
self._window = xml.get_widget('preferences_dialog') |
self._window = xml.get_widget('preferences_dialog') |
24 |
self._window.set_transient_for(straw.main_window.get_window()) |
self._window.set_transient_for(straw.main_window.get_window()) |
25 |
|
|
26 |
|
model = self.create_model() |
27 |
|
self.display_feeds(model, straw.config.feeds) |
28 |
|
treeview = xml.get_widget('feeds_configuration_treeview') |
29 |
|
treeview.set_model(model) |
30 |
|
treeview.set_rules_hint(gtk.TRUE) |
31 |
|
treeview.set_search_column(0) |
32 |
|
treesel = treeview.get_selection() |
33 |
|
treesel.set_mode(gtk.SELECTION_MULTIPLE) |
34 |
|
self._treeview = treeview |
35 |
|
self.create_columns(treeview) |
36 |
|
|
37 |
|
poll_frequency = int(straw.config.poll_frequency/self.SEC_PER_MINUTE) |
38 |
|
items_stored = int(straw.config.number_of_items_stored) |
39 |
|
|
40 |
xml.get_widget('poll_frequency_spin').set_value(poll_frequency) |
xml.get_widget('poll_frequency_spin').set_value(poll_frequency) |
41 |
xml.get_widget('number_of_items_spin').set_value(items_stored) |
xml.get_widget('number_of_items_spin').set_value(items_stored) |
42 |
xml.get_widget(['item_order_oldest', |
xml.get_widget(['item_order_oldest', |
56 |
def hide(self, *args): |
def hide(self, *args): |
57 |
self._window.hide() |
self._window.hide() |
58 |
|
|
59 |
def on_prefs_dialog_delete_event(self, *args): |
def on_preferences_dialog_delete_event(self, *args): |
60 |
self.hide() |
self.hide() |
61 |
return gtk.TRUE |
return gtk.TRUE |
62 |
|
|
76 |
def on_item_order_oldest_toggled(self, radio): |
def on_item_order_oldest_toggled(self, radio): |
77 |
pass |
pass |
78 |
|
|
79 |
|
def feeds_changed(self, signal): |
80 |
|
self.display_feeds(self._treeview.get_model(), straw.config.feeds) |
81 |
|
|
82 |
|
def display_feeds(self, model, feeds): |
83 |
|
fc = 0 |
84 |
|
mlines = len(model) |
85 |
|
while fc < mlines and fc < len(feeds): |
86 |
|
feed = feeds[fc] |
87 |
|
if model[fc][self.COLUMN_ID] != feed.id: |
88 |
|
iter = model.get_iter((fc,)) |
89 |
|
model.set(iter, self.COLUMN_TITLE, feed.title, |
90 |
|
#self.COLUMN_LOC, feed.access_info[0], |
91 |
|
#self.COLUMN_USER, feed.access_info[1], |
92 |
|
#self.COLUMN_PASSWORD, feed.access_info[2], |
93 |
|
self.COLUMN_EDITABLE, gtk.TRUE, |
94 |
|
self.COLUMN_ID, feed.id) |
95 |
|
fc += 1 |
96 |
|
if fc < mlines: |
97 |
|
treeiter = model.get_iter((fc,)) |
98 |
|
while treeiter: |
99 |
|
next_iter = model.iter_next(treeiter) |
100 |
|
model.remove(treeiter) |
101 |
|
treeiter = next_iter |
102 |
|
else: |
103 |
|
while fc < len(feeds): |
104 |
|
feed = feeds[fc] |
105 |
|
iter = model.append() |
106 |
|
model.set(iter, self.COLUMN_TITLE, feed.title, |
107 |
|
#self.COLUMN_LOC, feed.access_info[0], |
108 |
|
#self.COLUMN_USER, feed.access_info[1], |
109 |
|
#self.COLUMN_PASSWORD, feed.access_info[2], |
110 |
|
self.COLUMN_EDITABLE, gtk.TRUE, |
111 |
|
self.COLUMN_ID, feed.id) |
112 |
|
fc += 1 |
113 |
|
return |
114 |
|
|
115 |
|
def on_add_feed_button_clicked(self, button): |
116 |
|
self.add_feed(self._treeview.get_model()) |
117 |
|
return |
118 |
|
|
119 |
|
def _get_selected(self): |
120 |
|
selected = [] |
121 |
|
def foreach_selected(model, path, iter, *data): |
122 |
|
selected.append(path[0]) |
123 |
|
selection = self._treeview.get_selection() |
124 |
|
selection.selected_foreach(foreach_selected) |
125 |
|
return selected |
126 |
|
|
127 |
|
def on_delete_feed_button_clicked(self, *args): |
128 |
|
model = self._treeview.get_model() |
129 |
|
selected = self._get_selected() |
130 |
|
selected.sort() |
131 |
|
i = 0 |
132 |
|
for s in selected: |
133 |
|
s -= i |
134 |
|
i += 1 |
135 |
|
iter = model.get_iter(s) |
136 |
|
model.remove(iter) |
137 |
|
del straw.config.feeds[s] |
138 |
|
|
139 |
|
def on_move_feed_up_button_clicked(self, *args): |
140 |
|
selected = self._get_selected() |
141 |
|
selection = self._treeview.get_selection() |
142 |
|
if len(selected) and selected[0] > 0: |
143 |
|
straw.config.feeds.reorder(selected, -1) |
144 |
|
selection.unselect_all() |
145 |
|
for p in selected: |
146 |
|
selection.select_path(p-1) |
147 |
|
return |
148 |
|
|
149 |
|
def on_move_feed_down_button_clicked(self, *args): |
150 |
|
selected = self._get_selected() |
151 |
|
selection = self._treeview.get_selection() |
152 |
|
if len(selected) and selected[-1] < len(straw.config.feeds) - 1: |
153 |
|
straw.config.feeds.reorder(selected, 1) |
154 |
|
selection.unselect_all() |
155 |
|
for p in selected: |
156 |
|
selection.select_path(p+1) |
157 |
|
return |
158 |
|
|
159 |
|
def on_sort_feeds_ascending_button_clicked(self, *args): |
160 |
|
selected = self._get_selected() |
161 |
|
straw.config.feeds.sort(selected) |
162 |
|
|
163 |
|
def add_feed(self, model): |
164 |
|
iter = model.append() |
165 |
|
s = straw.Feed("New name") |
166 |
|
straw.config.feeds.append(s) |
167 |
|
return |
168 |
|
|
169 |
|
def cell_edited(self, cell, path_string, text, (model, column)): |
170 |
|
iter = model.get_iter_from_string(path_string) |
171 |
|
if not iter: |
172 |
|
return |
173 |
|
path = model.get_path(iter) |
174 |
|
model.set(iter, column, text) |
175 |
|
|
176 |
|
url, user, pw = straw.config.feeds[path[0]].access_info |
177 |
|
|
178 |
|
if column == self.COLUMN_TITLE: |
179 |
|
straw.config.feeds[path[0]].title = text |
180 |
|
#elif column == self.COLUMN_LOC: |
181 |
|
# straw.config.feeds[path[0]].access_info = (text, user, pw) |
182 |
|
#elif column == self.COLUMN_USER: |
183 |
|
# straw.config.feeds[path[0]].access_info = (url, text, pw) |
184 |
|
#elif column == self.COLUMN_PASSWORD: |
185 |
|
# straw.config.feeds[path[0]].access_info = (url, user, text) |
186 |
|
return |
187 |
|
|
188 |
|
def create_model(self): |
189 |
|
store = gtk.ListStore( |
190 |
|
gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING, |
191 |
|
gobject.TYPE_STRING, gobject.TYPE_BOOLEAN, gobject.TYPE_INT) |
192 |
|
return store |
193 |
|
|
194 |
|
def create_columns(self, treeview): |
195 |
|
model = treeview.get_model() |
196 |
|
|
197 |
|
# all columns are editable text fields |
198 |
|
renderer = gtk.CellRendererText() |
199 |
|
renderer.connect('edited', self.cell_edited, (model, 0)) |
200 |
|
column = gtk.TreeViewColumn(_('Title'), renderer, |
201 |
|
text=self.COLUMN_TITLE, |
202 |
|
editable=self.COLUMN_EDITABLE) |
203 |
|
column.set_resizable(gtk.TRUE) |
204 |
|
column.set_reorderable(gtk.TRUE) |
205 |
|
#column.set_sort_column_id(0) |
206 |
|
#column.set_sort_order('ascending') |
207 |
|
#column.set_sort_indicator(gtk.TRUE) |
208 |
|
treeview.append_column(column) |
209 |
|
|
210 |
|
#renderer = gtk.CellRendererText() |
211 |
|
#renderer.connect('edited', self.cell_edited, (model, 1)) |
212 |
|
#column = gtk.TreeViewColumn(_('Location'), renderer, |
213 |
|
# text=self.COLUMN_LOC, |
214 |
|
# editable=self.COLUMN_EDITABLE) |
215 |
|
#treeview.append_column(column) |
216 |
|
|
217 |
|
#renderer = gtk.CellRendererText() |
218 |
|
#renderer.connect('edited', self.cell_edited, (model, 2)) |
219 |
|
#column = gtk.TreeViewColumn(_('Username'), renderer, |
220 |
|
# text=self.COLUMN_USER, |
221 |
|
# editable=self.COLUMN_EDITABLE) |
222 |
|
#treeview.append_column(column) |
223 |
|
|
224 |
|
#renderer = gtk.CellRendererText() |
225 |
|
#renderer.connect('edited', self.cell_edited, (model, 3)) |
226 |
|
#column = gtk.TreeViewColumn(_('Password'), renderer, |
227 |
|
# text=self.COLUMN_PASSWORD, |
228 |
|
# editable=self.COLUMN_EDITABLE) |
229 |
|
#treeview.append_column(column) |
230 |
|
|
231 |
|
return |