1
0
mirror of https://github.com/gryf/pygtktalog.git synced 2025-12-17 11:30:19 +01:00

* Added another section in config class for managing files extensions.

This commit is contained in:
2008-03-24 12:09:29 +00:00
parent bc4f329d15
commit 922ec99990
5 changed files with 262 additions and 16 deletions

View File

@@ -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:

View File

@@ -514,6 +514,152 @@
<property name="position">2</property>
</packing>
</child>
<child>
<widget class="GtkVBox" id="ft_group">
<property name="border_width">1</property>
<child>
<widget class="GtkFrame" id="frame7">
<property name="visible">True</property>
<property name="border_width">5</property>
<property name="label_xalign">0</property>
<child>
<widget class="GtkAlignment" id="alignment7">
<property name="visible">True</property>
<property name="has_focus">True</property>
<property name="border_width">5</property>
<property name="left_padding">12</property>
<child>
<widget class="GtkVBox" id="ext_ed">
<property name="visible">True</property>
<property name="border_width">5</property>
<child>
<widget class="GtkComboBox" id="ext_choose">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="items" translatable="yes">Images extensions
Movies extesions</property>
<signal name="changed" handler="on_ext_choose_changed"/>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="padding">3</property>
</packing>
</child>
<child>
<widget class="GtkTable" id="table3">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="n_rows">1</property>
<property name="n_columns">2</property>
<property name="row_spacing">3</property>
<child>
<widget class="GtkEntry" id="ext_add">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label12">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Extension:</property>
<property name="justify">GTK_JUSTIFY_RIGHT</property>
<property name="mnemonic_widget">ext_add</property>
</widget>
<packing>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
<widget class="GtkHButtonBox" id="hbuttonbox1">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="border_width">3</property>
<property name="layout_style">GTK_BUTTONBOX_END</property>
<child>
<widget class="GtkButton" id="button1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Add</property>
<property name="response_id">0</property>
</widget>
</child>
<child>
<widget class="GtkButton" id="button2">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Delete</property>
<property name="response_id">0</property>
</widget>
<packing>
<property name="position">1</property>
</packing>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="position">2</property>
</packing>
</child>
<child>
<widget class="GtkScrolledWindow" id="scrolledwindow3">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
<property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
<property name="shadow_type">GTK_SHADOW_IN</property>
<child>
<widget class="GtkTreeView" id="extension_tree">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="headers_clickable">True</property>
<property name="rules_hint">True</property>
</widget>
</child>
</widget>
<packing>
<property name="position">3</property>
</packing>
</child>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkLabel" id="label3">
<property name="visible">True</property>
<property name="label" translatable="yes">&lt;b&gt;Files extensions&lt;/b&gt;</property>
<property name="use_markup">True</property>
</widget>
<packing>
<property name="type">label_item</property>
</packing>
</child>
</widget>
</child>
</widget>
<packing>
<property name="position">3</property>
</packing>
</child>
</widget>
</child>
</widget>

View File

@@ -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("<b>%s</b>" % 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)

View File

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

View File

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