44
44
from deluge .ui .client import client
45
45
from deluge .plugins .pluginbase import GtkPluginBase
46
46
import deluge .component as component
47
- #import deluge.common
48
47
from deluge .ui .gtkui import dialogs
49
48
#from pprint import pprint
50
49
@@ -153,6 +152,8 @@ def enable(self):
153
152
scrolled_window = self .glade .get_widget ("scrolledwindow1" )
154
153
self .store = self .create_model ()
155
154
self .tree_view = gtk .TreeView (self .store )
155
+ tree_selection = self .tree_view .get_selection ()
156
+ tree_selection .set_mode (gtk .SELECTION_MULTIPLE )
156
157
self .tree_view .connect ("cursor-changed" , self .on_listitem_activated )
157
158
self .tree_view .connect ("row-activated" , self .on_edit_button_clicked )
158
159
self .tree_view .set_rules_hint (True )
@@ -181,7 +182,7 @@ def on_show_prefs(self):
181
182
182
183
def cb_get_config (self , config ):
183
184
"callback for on show_prefs"
184
- self .trackers = config ["trackers" ]
185
+ self .trackers = list ( config ["trackers" ])
185
186
self .store .clear ()
186
187
for tracker in self .trackers :
187
188
self .store .append ([tracker ["url" ]])
@@ -200,8 +201,8 @@ def create_model(self):
200
201
return store
201
202
202
203
def on_listitem_activated (self , treeview ):
203
- tree , tree_id = self .tree_view .get_selection ().get_selected ()
204
- if tree_id :
204
+ tree , tree_paths = self .tree_view .get_selection ().get_selected_rows ()
205
+ if tree_paths :
205
206
self .glade .get_widget ("edit_button" ).set_sensitive (True )
206
207
self .glade .get_widget ("remove_button" ).set_sensitive (True )
207
208
self .glade .get_widget ("up_button" ).set_sensitive (True )
@@ -216,30 +217,43 @@ def on_add_button_clicked(self, widget):
216
217
self .opts_dialog .show ()
217
218
218
219
def on_remove_button_clicked (self , widget ):
219
- tree , tree_id = self .tree_view .get_selection ().get_selected ()
220
- index = self .tree_view .get_selection ().get_selected_rows ()[1 ][0 ][0 ]
221
- self .store .remove (tree_id )
222
- del self .trackers [index ]
220
+ tree , tree_paths = self .tree_view .get_selection ().get_selected_rows ()
221
+ to_remove = []
222
+ for tree_path in tree_paths :
223
+ tree_id = tree .get_iter (tree_path )
224
+ index = tree_path [0 ]
225
+ to_remove .append ((index , tree_id ))
226
+ for index , tree_id in sorted (to_remove , reverse = True ):
227
+ # we need to delete the indices in reverse order to avoid offsets
228
+ del self .trackers [index ]
229
+ self .store .remove (tree_id )
223
230
224
231
def on_edit_button_clicked (self , widget ):
225
- tree , tree_id = self .tree_view .get_selection ().get_selected ()
226
- index = self .tree_view .get_selection ().get_selected_rows ()[1 ][0 ][0 ]
227
- url = str (self .store .get_value (tree_id , 0 ))
228
- if url :
229
- self .opts_dialog .show ({
230
- "url" : url ,
231
- }, tree_id , index )
232
+ tree , tree_paths = self .tree_view .get_selection ().get_selected_rows ()
233
+ if tree_paths :
234
+ tree_path = tree_paths [0 ]
235
+ tree_id = tree .get_iter (tree_path )
236
+ index = tree_path [0 ]
237
+ url = str (self .store .get_value (tree_id , 0 ))
238
+ if url :
239
+ self .opts_dialog .show ({
240
+ "url" : url ,
241
+ }, tree_id , index )
232
242
233
243
def on_up_button_clicked (self , widget ):
234
- tree , tree_id = self .tree_view .get_selection ().get_selected ()
235
- if tree_id is not None :
244
+ tree , tree_paths = self .tree_view .get_selection ().get_selected_rows ()
245
+ if tree_paths :
246
+ tree_path = tree_paths [0 ]
247
+ tree_id = tree .get_iter (tree_path )
236
248
prev = iter_prev (tree_id , self .store )
237
249
if prev is not None :
238
250
self .store .swap (prev , tree_id )
239
251
240
252
def on_down_button_clicked (self , widget ):
241
- tree , tree_id = self .tree_view .get_selection ().get_selected ()
242
- if tree_id is not None :
253
+ tree , tree_paths = self .tree_view .get_selection ().get_selected_rows ()
254
+ if tree_paths :
255
+ tree_path = tree_paths [0 ]
256
+ tree_id = tree .get_iter (tree_path )
243
257
nexti = self .store .iter_next (tree_id )
244
258
if nexti is not None :
245
259
self .store .swap (tree_id , nexti )
0 commit comments