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))