summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjvoisin2011-07-20 19:10:10 +0200
committerjvoisin2011-07-20 19:10:10 +0200
commitf7c8b6aa78c318b619c8e505dd5c041391ef216c (patch)
treeb8113b7280ce7ca81557f374e23e22262e208066
parentaff8bc18ec06ca574ec616027df2d88907cd9e38 (diff)
Cleanup
-rw-r--r--gui.py77
1 files changed, 41 insertions, 36 deletions
diff --git a/gui.py b/gui.py
index 538c444..c314d55 100644
--- a/gui.py
+++ b/gui.py
@@ -1,8 +1,7 @@
1#!/usr/bin/python2.7 1#!/usr/bin/env python
2 2
3from gi.repository import Gtk, GObject 3from gi.repository import Gtk, GObject, Gdk
4import os 4import os
5import cli
6import glob 5import glob
7import logging 6import logging
8from lib import mat 7from lib import mat
@@ -35,7 +34,7 @@ class ListStoreApp:
35 Main GUI class 34 Main GUI class
36 ''' 35 '''
37 def __init__(self): 36 def __init__(self):
38 self.files = [] 37 #preferences
39 self.backup = True 38 self.backup = True
40 self.force = False 39 self.force = False
41 self.ugly = False 40 self.ugly = False
@@ -55,13 +54,15 @@ class ListStoreApp:
55 vbox.pack_start(toolbar, False, True, 0) 54 vbox.pack_start(toolbar, False, True, 0)
56 vbox.pack_start(content, True, True, 0) 55 vbox.pack_start(content, True, True, 0)
57 56
58 self.model = Gtk.ListStore(cfile ,str, str, str) #name - type - cleaned 57 #parser.class - name - type - cleaned
58 self.liststore= Gtk.ListStore(cfile ,str, str, str)
59 59
60 treeview = Gtk.TreeView(model=self.model) 60 treeview = Gtk.TreeView(model=self.liststore)
61 treeview.set_search_column(1) #name column is searchable
62 treeview.set_rules_hint(True) #alternate colors for rows
63 treeview.set_rubber_banding(True) #mouse selection
64 treeview.drag_dest_set(Gtk.DestDefaults.ALL, None, Gdk.DragAction.COPY)
61 self.add_columns(treeview) 65 self.add_columns(treeview)
62 treeview.set_search_column(1)
63 treeview.set_rules_hint(True)
64 treeview.set_rubber_banding(True)
65 self.selection = treeview.get_selection() 66 self.selection = treeview.get_selection()
66 self.selection.set_mode(Gtk.SelectionMode.MULTIPLE) 67 self.selection.set_mode(Gtk.SelectionMode.MULTIPLE)
67 68
@@ -199,7 +200,6 @@ class ListStoreApp:
199 filter.set_name('All files') 200 filter.set_name('All files')
200 filter.add_pattern('*') 201 filter.add_pattern('*')
201 chooser.add_filter(filter) 202 chooser.add_filter(filter)
202
203 chooser.add_filter(self.create_filter()) 203 chooser.add_filter(self.create_filter())
204 204
205 response = chooser.run() 205 response = chooser.run()
@@ -207,8 +207,8 @@ class ListStoreApp:
207 if response is 0: #Gtk.STOCK_OK 207 if response is 0: #Gtk.STOCK_OK
208 filenames = chooser.get_filenames() 208 filenames = chooser.get_filenames()
209 chooser.destroy() 209 chooser.destroy()
210 for item in filenames: #directory 210 for item in filenames:
211 if os.path.isdir(item): 211 if os.path.isdir(item): #directory
212 for root, dirs, files in os.walk(item): 212 for root, dirs, files in os.walk(item):
213 for name in files: 213 for name in files:
214 self.populate(os.path.join(root, name)) 214 self.populate(os.path.join(root, name))
@@ -217,11 +217,12 @@ class ListStoreApp:
217 chooser.destroy() 217 chooser.destroy()
218 218
219 def populate(self, item): 219 def populate(self, item):
220 '''
221 Append selected files by add_file to the self.liststore
222 '''
220 cf = cfile(item, self.backup) 223 cf = cfile(item, self.backup)
221
222 if cf.file is not None: 224 if cf.file is not None:
223 self.files.append(cf) 225 self.liststore.append([cf, cf.file.filename, cf.file.mime,'unknow'])
224 self.model.append([cf, cf.file.filename, cf.file.mime, 'unknow'])
225 226
226 def about(self, button=None): 227 def about(self, button=None):
227 w = Gtk.AboutDialog() 228 w = Gtk.AboutDialog()
@@ -237,14 +238,17 @@ class ListStoreApp:
237 w.destroy() 238 w.destroy()
238 239
239 def preferences(self, button=None): 240 def preferences(self, button=None):
241 '''
242 Preferences popup
243 '''
240 dialog = Gtk.Dialog('Preferences', self.window, 0, (Gtk.STOCK_OK, 0)) 244 dialog = Gtk.Dialog('Preferences', self.window, 0, (Gtk.STOCK_OK, 0))
241 content_area = dialog.get_content_area() 245 content_area = dialog.get_content_area()
242 hbox = Gtk.HBox() 246 hbox = Gtk.HBox()
243 content_area.pack_start(hbox, False, False, 0) 247 content_area.pack_start(hbox, False, False, 0)
244 stock = Gtk.Image(stock=Gtk.STOCK_PREFERENCES, 248 icon = Gtk.Image(stock=Gtk.STOCK_PREFERENCES,
245 icon_size=Gtk.IconSize.DIALOG) 249 icon_size=Gtk.IconSize.DIALOG)#the little picture on the left
246 250
247 hbox.pack_start(stock, False, False, 0) 251 hbox.pack_start(icon, False, False, 0)
248 252
249 table = Gtk.Table(3, 2, False) 253 table = Gtk.Table(3, 2, False)
250 table.set_row_spacings(4) 254 table.set_row_spacings(4)
@@ -252,26 +256,27 @@ class ListStoreApp:
252 hbox.pack_start(table, True, True, 0) 256 hbox.pack_start(table, True, True, 0)
253 257
254 force = Gtk.CheckButton('Force Clean', False) 258 force = Gtk.CheckButton('Force Clean', False)
255 table.attach_defaults(force, 0, 1, 0, 1)
256 force.connect('toggled', self.invert, 'force') 259 force.connect('toggled', self.invert, 'force')
257 force.set_active(self.force) 260 force.set_active(self.force)
258 261
259 ugly = Gtk.CheckButton('Brute Clean', False) 262 ugly = Gtk.CheckButton('Brute Clean', False)
260 table.attach_defaults(ugly, 0, 1, 1, 2)
261 ugly.connect('toggled', self.invert, 'ugly') 263 ugly.connect('toggled', self.invert, 'ugly')
262 ugly.set_active(self.ugly) 264 ugly.set_active(self.ugly)
263 265
264 backup = Gtk.CheckButton('Backup', False) 266 backup = Gtk.CheckButton('Backup', False)
265 table.attach_defaults(backup, 0, 1, 2, 3)
266 backup.connect('toggled', self.invert, 'backup') 267 backup.connect('toggled', self.invert, 'backup')
267 backup.set_active(self.backup) 268 backup.set_active(self.backup)
268 269
270 table.attach_defaults(force, 0, 1, 0, 1)
271 table.attach_defaults(ugly, 0, 1, 1, 2)
272 table.attach_defaults(backup, 0, 1, 2, 3)
273
269 hbox.show_all() 274 hbox.show_all()
270 response = dialog.run() 275 response = dialog.run()
271 if response is 0: 276 if response is 0:#Gtk.STOCK_OK
272 dialog.destroy() 277 dialog.destroy()
273 278
274 def invert(self, button, name): #I think I can do better than that !(but not tonight) 279 def invert(self, button, name): #Still not better :/
275 if name is 'force': 280 if name is 'force':
276 self.force = not self.force 281 self.force = not self.force
277 elif name is 'ugly': 282 elif name is 'ugly':
@@ -280,31 +285,31 @@ class ListStoreApp:
280 self.backup = not self.backup 285 self.backup = not self.backup
281 286
282 def clear_model(self, button=None): 287 def clear_model(self, button=None):
283 self.model.clear() 288 self.liststore.clear()
284 289
285 def mat_check(self, button=None):#OMFG, I'm so ugly ! 290 def mat_check(self, button=None):
286 _, iter = self.selection.get_selected_rows() 291 _, iter = self.selection.get_selected_rows()
287 for i in iter: 292 for i in iter:
288 if self.model[i][0].file.is_clean(): 293 if self.liststore[i][0].file.is_clean():
289 string = 'clean' 294 string = 'clean'
290 else: 295 else:
291 string = 'dirty' 296 string = 'dirty'
292 logging.info('%s is %s' % (self.model[i][1], string)) 297 logging.info('%s is %s' % (self.liststore[i][1], string))
293 self.model[i][3] = string 298 self.liststore[i][3] = string
294 299
295 def mat_clean(self, button=None):#I am dirty too 300 def mat_clean(self, button=None):
296 _, iter = self.selection.get_selected_rows() 301 _, iter = self.selection.get_selected_rows()
297 for i in iter: 302 for i in iter:
298 logging.info('Cleaning %s' % self.model[i][1]) 303 logging.info('Cleaning %s' % self.liststore[i][1])
299 self.model[i][0].file.remove_all() 304 self.liststore[i][0].file.remove_all()
300 self.model[i][3] = 'clean' 305 self.liststore[i][3] = 'clean'
301 306
302 def mat_clean_dirty(self, button=None):#And me too ! 307 def mat_clean_dirty(self, button=None):
303 _, iter = self.selection.get_selected_rows() 308 _, iter = self.selection.get_selected_rows()
304 for i in iter: 309 for i in iter:
305 logging.info('Cleaning (lossy way) %s' % self.model[i][1]) 310 logging.info('Cleaning (lossy way) %s' % self.liststore[i][1])
306 self.model[i][0].file.remove_all_ugly() 311 self.liststore[i][0].file.remove_all_ugly()
307 self.model[i][3] = 'clean' 312 self.liststore[i][3] = 'clean'
308 313
309def main(): 314def main():
310 app = ListStoreApp() 315 app = ListStoreApp()