diff options
| author | jvoisin | 2011-07-20 19:10:10 +0200 |
|---|---|---|
| committer | jvoisin | 2011-07-20 19:10:10 +0200 |
| commit | f7c8b6aa78c318b619c8e505dd5c041391ef216c (patch) | |
| tree | b8113b7280ce7ca81557f374e23e22262e208066 /gui.py | |
| parent | aff8bc18ec06ca574ec616027df2d88907cd9e38 (diff) | |
Cleanup
Diffstat (limited to 'gui.py')
| -rw-r--r-- | gui.py | 77 |
1 files changed, 41 insertions, 36 deletions
| @@ -1,8 +1,7 @@ | |||
| 1 | #!/usr/bin/python2.7 | 1 | #!/usr/bin/env python |
| 2 | 2 | ||
| 3 | from gi.repository import Gtk, GObject | 3 | from gi.repository import Gtk, GObject, Gdk |
| 4 | import os | 4 | import os |
| 5 | import cli | ||
| 6 | import glob | 5 | import glob |
| 7 | import logging | 6 | import logging |
| 8 | from lib import mat | 7 | from 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 | ||
| 309 | def main(): | 314 | def main(): |
| 310 | app = ListStoreApp() | 315 | app = ListStoreApp() |
