3 |
import gobject |
import gobject |
4 |
import gtk |
import gtk |
5 |
import gnome |
import gnome |
|
import gtkhtml2 |
|
6 |
import gnome.ui |
import gnome.ui |
|
import pango |
|
7 |
|
|
8 |
import straw |
import straw |
9 |
|
|
10 |
class PreferencesDialog: |
class PreferencesDialog: |
|
COLUMN_TITLE = 0 |
|
|
COLUMN_LOC = 1 |
|
|
COLUMN_USER = 2 |
|
|
COLUMN_PASSWORD = 3 |
|
|
COLUMN_EDITABLE = 4 |
|
|
COLUMN_ID = 5 |
|
11 |
SEC_PER_MINUTE = 60 |
SEC_PER_MINUTE = 60 |
12 |
|
|
13 |
def __init__(self, xml): |
def __init__(self, xml): |
14 |
straw.config.signal_connect(straw.FeedsChangedSignal, |
poll_frequency = int(straw.config.poll_frequency/self.SEC_PER_MINUTE) |
15 |
self.feeds_changed) |
items_stored = int(straw.config.number_of_items_stored) |
16 |
self._window = xml.get_widget('preferences_dialog') |
self._window = xml.get_widget('preferences_dialog') |
17 |
self._window.set_transient_for(straw.main_window.get_window()) |
self._window.set_transient_for(straw.main_window.get_window()) |
18 |
model = self.create_model() |
xml.get_widget('poll_frequency_spin').set_value(poll_frequency) |
19 |
self.display_feeds(model, straw.config.feeds) |
xml.get_widget('number_of_items_spin').set_value(items_stored) |
|
treeview = xml.get_widget('feeds_configuration_treeview') |
|
|
treeview.set_model(model) |
|
|
treeview.set_rules_hint(gtk.TRUE) |
|
|
treeview.set_search_column(0) |
|
|
treesel = treeview.get_selection() |
|
|
treesel.set_mode(gtk.SELECTION_MULTIPLE) |
|
|
self._treeview = treeview |
|
|
self.create_columns(treeview) |
|
|
xml.get_widget('poll_frequency_spin').set_value( |
|
|
straw.config.poll_frequency/self.SEC_PER_MINUTE) |
|
|
xml.get_widget('number_of_items_spin').set_value( |
|
|
straw.config.number_of_items_stored) |
|
20 |
xml.get_widget(['item_order_oldest', |
xml.get_widget(['item_order_oldest', |
21 |
'item_order_newest'][straw.config.item_order]).set_active(1) |
'item_order_newest'][straw.config.item_order]).set_active(1) |
22 |
|
|
27 |
xml.signal_autoconnect(nameFuncMap) |
xml.signal_autoconnect(nameFuncMap) |
28 |
return |
return |
29 |
|
|
|
def feeds_changed(self, signal): |
|
|
self.display_feeds(self._treeview.get_model(), straw.config.feeds) |
|
|
|
|
|
def display_feeds(self, model, feeds): |
|
|
fc = 0 |
|
|
mlines = len(model) |
|
|
while fc < mlines and fc < len(feeds): |
|
|
feed = feeds[fc] |
|
|
if model[fc][self.COLUMN_ID] != feed.id: |
|
|
iter = model.get_iter((fc,)) |
|
|
model.set(iter, self.COLUMN_TITLE, feed.title, |
|
|
self.COLUMN_LOC, feed.access_info[0], |
|
|
self.COLUMN_USER, feed.access_info[1], |
|
|
self.COLUMN_PASSWORD, feed.access_info[2], |
|
|
self.COLUMN_EDITABLE, gtk.TRUE, |
|
|
self.COLUMN_ID, feed.id) |
|
|
fc += 1 |
|
|
if fc < mlines: |
|
|
treeiter = model.get_iter((fc,)) |
|
|
while treeiter: |
|
|
next_iter = model.iter_next(treeiter) |
|
|
model.remove(treeiter) |
|
|
treeiter = next_iter |
|
|
else: |
|
|
while fc < len(feeds): |
|
|
feed = feeds[fc] |
|
|
iter = model.append() |
|
|
model.set(iter, self.COLUMN_TITLE, feed.title, |
|
|
self.COLUMN_LOC, feed.access_info[0], |
|
|
self.COLUMN_USER, feed.access_info[1], |
|
|
self.COLUMN_PASSWORD, feed.access_info[2], |
|
|
self.COLUMN_EDITABLE, gtk.TRUE, |
|
|
self.COLUMN_ID, feed.id) |
|
|
fc += 1 |
|
|
return |
|
|
|
|
30 |
def show(self, *args): |
def show(self, *args): |
31 |
self._window.present() |
self._window.present() |
32 |
return |
return |
34 |
def hide(self, *args): |
def hide(self, *args): |
35 |
self._window.hide() |
self._window.hide() |
36 |
|
|
37 |
def on_preferences_dialog_delete_event(self, *args): |
def on_prefs_dialog_delete_event(self, *args): |
38 |
self.hide() |
self.hide() |
39 |
return gtk.TRUE |
return gtk.TRUE |
40 |
|
|
42 |
self.hide() |
self.hide() |
43 |
return |
return |
44 |
|
|
|
def on_new_feed_button_clicked(self, button): |
|
|
self.add_feed(self._treeview.get_model()) |
|
|
return |
|
|
|
|
|
def _get_selected(self): |
|
|
selected = [] |
|
|
def foreach_selected(model, path, iter, *data): |
|
|
selected.append(path[0]) |
|
|
selection = self._treeview.get_selection() |
|
|
selection.selected_foreach(foreach_selected) |
|
|
return selected |
|
|
|
|
|
def on_delete_feed_button_clicked(self, *args): |
|
|
model = self._treeview.get_model() |
|
|
selected = self._get_selected() |
|
|
selected.sort() |
|
|
i = 0 |
|
|
for s in selected: |
|
|
s -= i |
|
|
i += 1 |
|
|
iter = model.get_iter(s) |
|
|
model.remove(iter) |
|
|
del straw.config.feeds[s] |
|
|
|
|
|
def on_move_feed_up_button_clicked(self, *args): |
|
|
selected = self._get_selected() |
|
|
selection = self._treeview.get_selection() |
|
|
if len(selected) and selected[0] > 0: |
|
|
straw.config.feeds.reorder(selected, -1) |
|
|
selection.unselect_all() |
|
|
for p in selected: |
|
|
selection.select_path(p-1) |
|
|
return |
|
|
|
|
|
def on_move_feed_down_button_clicked(self, *args): |
|
|
selected = self._get_selected() |
|
|
selection = self._treeview.get_selection() |
|
|
if len(selected) and selected[-1] < len(straw.config.feeds) - 1: |
|
|
straw.config.feeds.reorder(selected, 1) |
|
|
selection.unselect_all() |
|
|
for p in selected: |
|
|
selection.select_path(p+1) |
|
|
return |
|
|
|
|
|
def on_sort_feeds_button_clicked(self, *args): |
|
|
selected = self._get_selected() |
|
|
straw.config.feeds.sort(selected) |
|
|
|
|
45 |
def on_poll_frequency_spin_focus_out_event(self, spin, data): |
def on_poll_frequency_spin_focus_out_event(self, spin, data): |
46 |
straw.config.poll_frequency = int(spin.get_value() * self.SEC_PER_MINUTE) |
straw.config.poll_frequency = int(spin.get_value() * self.SEC_PER_MINUTE) |
47 |
|
|
54 |
def on_item_order_oldest_toggled(self, radio): |
def on_item_order_oldest_toggled(self, radio): |
55 |
pass |
pass |
56 |
|
|
|
def add_feed(self, model): |
|
|
iter = model.append() |
|
|
s = straw.Feed("New name") |
|
|
straw.config.feeds.append(s) |
|
|
return |
|
|
|
|
|
def cell_edited(self, cell, path_string, text, (model, column)): |
|
|
iter = model.get_iter_from_string(path_string) |
|
|
if not iter: |
|
|
return |
|
|
path = model.get_path(iter) |
|
|
model.set(iter, column, text) |
|
|
|
|
|
url, user, pw = straw.config.feeds[path[0]].access_info |
|
|
|
|
|
if column == self.COLUMN_TITLE: |
|
|
straw.config.feeds[path[0]].title = text |
|
|
elif column == self.COLUMN_LOC: |
|
|
straw.config.feeds[path[0]].access_info = (text, user, pw) |
|
|
elif column == self.COLUMN_USER: |
|
|
straw.config.feeds[path[0]].access_info = (url, text, pw) |
|
|
elif column == self.COLUMN_PASSWORD: |
|
|
straw.config.feeds[path[0]].access_info = (url, user, text) |
|
|
return |
|
|
|
|
|
def create_model(self): |
|
|
store = gtk.ListStore( |
|
|
gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING, |
|
|
gobject.TYPE_STRING, gobject.TYPE_BOOLEAN, gobject.TYPE_INT) |
|
|
return store |
|
|
|
|
|
def create_columns(self, treeview): |
|
|
model = treeview.get_model() |
|
|
|
|
|
# all columns are editable text fields |
|
|
renderer = gtk.CellRendererText() |
|
|
renderer.connect('edited', self.cell_edited, (model, 0)) |
|
|
column = gtk.TreeViewColumn(_('Title'), renderer, |
|
|
text=self.COLUMN_TITLE, |
|
|
editable=self.COLUMN_EDITABLE) |
|
|
column.set_clickable(gtk.TRUE) |
|
|
treeview.append_column(column) |
|
|
|
|
|
renderer = gtk.CellRendererText() |
|
|
renderer.connect('edited', self.cell_edited, (model, 1)) |
|
|
column = gtk.TreeViewColumn(_('Location'), renderer, |
|
|
text=self.COLUMN_LOC, |
|
|
editable=self.COLUMN_EDITABLE) |
|
|
treeview.append_column(column) |
|
|
|
|
|
renderer = gtk.CellRendererText() |
|
|
renderer.connect('edited', self.cell_edited, (model, 2)) |
|
|
column = gtk.TreeViewColumn(_('Username'), renderer, |
|
|
text=self.COLUMN_USER, |
|
|
editable=self.COLUMN_EDITABLE) |
|
|
treeview.append_column(column) |
|
|
|
|
|
renderer = gtk.CellRendererText() |
|
|
renderer.connect('edited', self.cell_edited, (model, 3)) |
|
|
column = gtk.TreeViewColumn(_('Password'), renderer, |
|
|
text=self.COLUMN_PASSWORD, |
|
|
editable=self.COLUMN_EDITABLE) |
|
|
treeview.append_column(column) |
|
|
return |
|