$URL$
"""
+import pygame
+from pygame.locals import K_RETURN
from pgu.gui import FileDialog
import pgu.gui.basic as basic
import pgu.gui.input as input
self.list = area.List(width=700, height=250)
self.input_dir = input.Input()
self.input_file = input.Input()
+ self._current_sort = 'alpha'
self._list_dir_()
self.button_ok = button.Button("Ouvrir")
+ self.button_sort_alpha = button.Button("A-Z")
+ self.button_sort_alpha.connect(CLICK, self._set_current_sort_, 'alpha')
+ self.button_sort_num = button.Button("0-9")
+ self.button_sort_num.connect(CLICK, self._set_current_sort_, 'num')
self.body.tr()
self.body.td(basic.Label("Dossier"), style=td_style, align=-1)
self.body.td(self.input_dir, style=td_style)
+ self.body.td(self.button_sort_alpha)
+ self.body.td(self.button_sort_num)
self.body.tr()
- self.body.td(self.list, colspan=3, style=td_style)
+ self.body.td(self.list, colspan=4, style=td_style)
self.list.connect(CHANGE, self._item_select_changed_, None)
+ #self.list.connect(CLICK, self._check_dbl_click_, None)
+ self._last_time_click = pygame.time.get_ticks()
self.button_ok.connect(CLICK, self._button_okay_clicked_, None)
self.body.tr()
self.body.td(basic.Label("Fichier"), style=td_style, align=-1)
self.body.td(self.input_file, style=td_style)
- self.body.td(self.button_ok, style=td_style)
+ self.body.td(self.button_ok, style=td_style, colspan=2)
self.value = None
Dialog.__init__(self, self.title, self.body)
# ok, the index is up to date !
index = indexedFiles.values()
- index.sort()
+
+ if self._current_sort == 'alpha' :
+ def s(a, b) :
+ da = desacc(a.split('\t')[2]).lower()
+ db = desacc(b.split('\t')[2]).lower()
+ return cmp(da, db)
+
+ elif self._current_sort == 'num' :
+ def s(a, b) :
+ da = int(a.split('\t')[3])
+ db = int(b.split('\t')[3])
+ return cmp(da, db)
+ else :
+ s = cmp
+ index.sort(s)
return index
-
\ No newline at end of file
+
+ def _set_current_sort_(self, arg) :
+ self._current_sort = arg
+ self.list.clear()
+ self._list_dir_()
+
+ def _check_dbl_click_(self, arg) :
+ if pygame.time.get_ticks() - self._last_time_click < 300 :
+ self._button_okay_clicked_(None)
+ else :
+ self._last_time_click = pygame.time.get_ticks()
+
+ def event(self, e) :
+ FileDialog.event(self, e)
+
+ if e.type == CLICK and \
+ e.button == 1 and \
+ self.list.rect.collidepoint(e.pos) :
+ self._check_dbl_click_(e)
+
+ if e.type == KEYDOWN and e.key == K_RETURN :
+ self._button_okay_clicked_(None)
+
+
+# utils
+from unicodedata import decomposition
+from string import printable
+_printable = dict([(c, True) for c in printable])
+isPrintable = _printable.has_key
+
+def _recurseDecomposition(uc):
+ deco = decomposition(uc).split()
+ fullDeco = []
+ if deco :
+ while (deco) :
+ code = deco.pop()
+ if code.startswith('<') :
+ continue
+ c = unichr(int(code, 16))
+ subDeco = decomposition(c).split()
+ if subDeco :
+ deco.extend(subDeco)
+ else :
+ fullDeco.append(c)
+ fullDeco.reverse()
+ else :
+ fullDeco.append(uc)
+
+ fullDeco = u''.join(filter(lambda c : isPrintable(c), fullDeco))
+ return fullDeco
+
+def desacc(s, encoding='iso-8859-1') :
+ us = s.decode(encoding, 'ignore')
+ ret = []
+ for uc in us :
+ ret.append(_recurseDecomposition(uc))
+ return u''.join(ret)
\ No newline at end of file