diff --git a/pygtktalog.py b/pygtktalog.py index 0f18dcf..fdbe9bf 100644 --- a/pygtktalog.py +++ b/pygtktalog.py @@ -81,7 +81,7 @@ def check_requirements(): print "You'll need pyExcelerator, if you want to export DB to XLS format.\nhttp://sourceforge.net/projects/pyexcelerator" sys.exit(1) - if conf.confd['pil']: + if conf.confd['thumbs']: try: import Image, ImageEnhance except: diff --git a/resources/glade/config.glade b/resources/glade/config.glade index 938fa34..e763ee7 100644 --- a/resources/glade/config.glade +++ b/resources/glade/config.glade @@ -514,6 +514,152 @@ 2 + + + 1 + + + True + 5 + 0 + + + True + True + 5 + 12 + + + True + 5 + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Images extensions +Movies extesions + + + + False + False + 3 + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 1 + 2 + 3 + + + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + + + 1 + 2 + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Extension: + GTK_JUSTIFY_RIGHT + ext_add + + + GTK_FILL + + + + + False + 1 + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 3 + GTK_BUTTONBOX_END + + + True + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Add + 0 + + + + + True + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Delete + 0 + + + 1 + + + + + False + 2 + + + + + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + + + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + True + True + + + + + 3 + + + + + + + + + True + <b>Files extensions</b> + True + + + label_item + + + + + + + 3 + + diff --git a/src/ctrls/c_config.py b/src/ctrls/c_config.py index e5b705d..61ce782 100644 --- a/src/ctrls/c_config.py +++ b/src/ctrls/c_config.py @@ -26,8 +26,13 @@ from gtkmvc import Controller import gtk class ConfigController(Controller): - category_dict = {'Disk options':'disk_group','General':'general_group','Scan options':'scan_group'} - category_order = ['General','Disk options','Scan options'] + category_dict = { + 'Disk options':'disk_group', + 'General':'general_group', + 'Scan options':'scan_group', + 'Files extensions':'ft_group', + } + category_order = ['General', 'Disk options', 'Scan options', 'Files extensions'] def __init__(self, model): Controller.__init__(self, model) @@ -47,13 +52,21 @@ class ConfigController(Controller): self.view['ch_wrnmount'].set_active(self.model.confd['mntwarn']) self.view['ch_wrndel'].set_active(self.model.confd['delwarn']) self.view['ch_warnnew'].set_active(self.model.confd['confirmabandon']) - self.view['ch_thumb'].set_active(self.model.confd['pil']) + self.view['ch_thumb'].set_active(self.model.confd['thumbs']) self.view['ch_exif'].set_active(self.model.confd['exif']) self.view['ch_gthumb'].set_active(self.model.confd['gthumb']) self.view['ch_compress'].set_active(self.model.confd['compress']) + self.view['ch_retrive'].set_active(self.model.confd['retrive']) + + self.__toggle_scan_group() # initialize tree view self.__setup_category_tree() + + # initialize models for files extensions + self.view['ext_choose'].set_model(self.model.ext_list) + self.view['ext_choose'].set_active(0) + self.view['config'].show(); return # Podłącz sygnały: @@ -63,14 +76,14 @@ class ConfigController(Controller): def on_category_tree_cursor_changed(self, tree): """change view to selected row corresponding to group of properties""" model = tree.get_model() - selected = model.get_value(model.get_iter(tree.get_cursor()[0]),0) + selected = model.get_value(model.get_iter(tree.get_cursor()[0]), 0) iterator = tree.get_model().get_iter_first(); while iterator != None: - if model.get_value(iterator,0) == selected: - self.view[self.category_dict[model.get_value(iterator,0)]].show() + if model.get_value(iterator, 0) == selected: + self.view[self.category_dict[model.get_value(iterator, 0)]].show() self.view['desc'].set_markup("%s" % selected) else: - self.view[self.category_dict[model.get_value(iterator,0)]].hide() + self.view[self.category_dict[model.get_value(iterator, 0)]].hide() iterator = tree.get_model().iter_next(iterator); return @@ -90,10 +103,11 @@ class ConfigController(Controller): self.model.confd['mntwarn'] = self.view['ch_wrnmount'].get_active() self.model.confd['delwarn'] = self.view['ch_wrndel'].get_active() self.model.confd['confirmabandon'] = self.view['ch_warnnew'].get_active() - self.model.confd['pil'] = self.view['ch_thumb'].get_active() + self.model.confd['thumbs'] = self.view['ch_thumb'].get_active() self.model.confd['exif'] = self.view['ch_exif'].get_active() self.model.confd['gthumb'] = self.view['ch_gthumb'].get_active() self.model.confd['compress'] = self.view['ch_compress'].get_active() + self.model.confd['retrive'] = self.view['ch_retrive'].get_active() self.model.save() self.view['config'].destroy() return @@ -107,16 +121,38 @@ class ConfigController(Controller): return def on_ch_retrive_toggled(self, widget): + self.__toggle_scan_group() + return + + def on_ext_choose_changed(self, widget): + self.__setup_extension_tree() return ############################ # private controller methods + def __setup_extension_tree(self): + if self.view['ext_choose'].get_active() == 0: + self.view['extension_tree'].set_model(self.model.images_tree) + else: + self.view['extension_tree'].set_model(self.model.movies_tree) + + for i in self.view['extension_tree'].get_columns(): + self.view['extension_tree'].remove_column(i) + cell = gtk.CellRendererText() + column = gtk.TreeViewColumn("Extensions", cell, text=0) + column.set_resizable(True) + self.view['extension_tree'].append_column(column) + + def __toggle_scan_group(self): + for i in ('ch_thumb','ch_exif','ch_gthumb'): + self.view[i].set_sensitive(self.view['ch_retrive'].get_active()) + return def __setup_category_tree(self): category_tree = self.view['category_tree'] category_tree.set_model(self.model.category_tree) self.model.category_tree.clear() - for i in ['General','Disk options','Scan options']: + for i in self.category_order: myiter = self.model.category_tree.insert_before(None,None) self.model.category_tree.set_value(myiter,0,i) @@ -171,4 +207,4 @@ class ConfigController(Controller): dialog.destroy() pass # end of class - + diff --git a/src/models/m_config.py b/src/models/m_config.py index fa0721a..e7218f3 100644 --- a/src/models/m_config.py +++ b/src/models/m_config.py @@ -56,6 +56,8 @@ class ConfigModel(Model): __properties__ = {} + extensions_list = ['Images extensions', 'Movies extesions'] + confd = { 'savewin' : True, 'savepan' : True, @@ -67,7 +69,7 @@ class ConfigModel(Model): 'cd' : '/cdrom', 'ejectapp' : 'eject -r', 'eject' : True, - 'pil': False, + 'thumbs': False, 'gthumb':False, 'exif':False, 'confirmquit':True, @@ -77,6 +79,10 @@ class ConfigModel(Model): 'showstatusbar':True, 'delwarn':True, 'compress':True, + 'compress':True, + 'retrive':False, + 'mov_ext':['mkv', 'avi', 'ogg', 'mpg', 'wmv', 'mp4', 'mpeg'], + 'img_ext':['jpg','jpeg','png','gif','bmp','tga','tif','tiff','ilbm','iff','pcx'], } dictconf = { @@ -90,7 +96,7 @@ class ConfigModel(Model): "cd drive":"cd", "eject command":"ejectapp", "eject":"eject", - "image support":"pil", + "image support":"thumbs", 'confirm quit':'confirmquit', 'warn mount/umount errors':'mntwarn', 'warn on delete':'delwarn', @@ -98,11 +104,14 @@ class ConfigModel(Model): 'show toolbar':'showtoolbar', 'show statusbar and progress bar':'showstatusbar', 'compress collection':'compress', + 'retrive extra informatin':'retrive', + 'scan exif data':'exif', + 'include gthumb image description':'gthumb', } dbool = ( 'exportxls', - 'pil', + 'thumbs', 'savewin', 'savepan', 'eject', @@ -116,6 +125,7 @@ class ConfigModel(Model): 'showstatusbar', 'delwarn', 'compress', + 'retrive', ) recent = [] @@ -131,6 +141,21 @@ class ConfigModel(Model): def __init__(self): Model.__init__(self) self.category_tree = gtk.ListStore(gobject.TYPE_STRING) + self.images_tree = gtk.ListStore(gobject.TYPE_STRING) + self.confd['img_ext'].sort() + for i in self.confd['img_ext']: + myiter = self.images_tree.insert_before(None,None) + self.images_tree.set_value(myiter,0,i) + self.movies_tree = gtk.ListStore(gobject.TYPE_STRING) + self.confd['mov_ext'].sort() + for i in self.confd['mov_ext']: + myiter = self.movies_tree.insert_before(None,None) + self.movies_tree.set_value(myiter,0,i) + + self.ext_list = gtk.ListStore(gobject.TYPE_STRING) + for i in self.extensions_list: + myiter = self.ext_list.insert_before(None,None) + self.ext_list.set_value(myiter,0,i) return def save(self): @@ -140,20 +165,38 @@ class ConfigModel(Model): if __debug__: print "m_config.py: save() Saving preferences to %s/.pygtktalog" % self.path newIni = Ini() + + # main section newIni.add_section("pyGTKtalog conf") for opt in self.dictconf: newIni.add_key(opt,self.confd[self.dictconf[opt]]) + + # recent section newIni.add_section("pyGTKtalog recent") count = 1 max_count = self.RECENT_MAX + 1 - for opt in self.recent: if count < max_count: newIni.add_key(count, opt) else: break count+=1 + + # extensions sections + newIni.add_section("images extensions") + count = 1 + for i in self.confd['img_ext']: + newIni.add_key(count, i) + count+=1 + + newIni.add_section("movies extensions") + count = 1 + for i in self.confd['mov_ext']: + newIni.add_key(count, i) + count+=1 + + # write config try: f = open("%s/.pygtktalog" % self.path,"w") success = True @@ -187,7 +230,6 @@ class ConfigModel(Model): print "m_config.py: load() failed to parse option:", opt pass elif sec == 'pyGTKtalog recent': - for opt in parser.options(sec): try: r[int(opt)] = parser.get(sec,opt) @@ -195,6 +237,26 @@ class ConfigModel(Model): if __debug__: print "m_config.py: load() failed to parse option:", opt pass + elif sec == 'images extensions': + self.confd['img_ext'] = [] + for opt in parser.options(sec): + try: + self.confd['img_ext'].append(parser.get(sec,opt)) + except: + if __debug__: + print "m_config.py: load() failed to parse option:", opt + pass + + elif sec == 'movies extensions': + self.confd['mov_ext'] = [] + for opt in parser.options(sec): + try: + self.confd['mov_ext'].append(parser.get(sec,opt)) + except: + if __debug__: + print "m_config.py: load() failed to parse option:", opt + pass + for i in range(1, self.RECENT_MAX + 1): if r.has_key(i): self.recent.append(r[i]) diff --git a/src/models/m_main.py b/src/models/m_main.py index f2492d5..2448926 100644 --- a/src/models/m_main.py +++ b/src/models/m_main.py @@ -510,6 +510,8 @@ class MainModel(ModelMT): st_size = 0 ### TODO: scan files + if self.config.confd['retrive']: + pass #if i.split('.').[-1].lower() in mov_ext: # # video only # info = filetypeHelper.guess_video(os.path.join(root,i))