From: benoit.pin Date: Mon, 31 Jan 2011 13:54:24 +0000 (+0000) Subject: Tri des chansons, soit par ordre alphabétique, soit par taille du clavier. X-Git-Url: https://scm.cri.mines-paristech.fr/git/minwii.git/commitdiff_plain/d16b6e481bb75314ed3e4f7ae24ba6bde0378d2e?ds=sidebyside Tri des chansons, soit par ordre alphabétique, soit par taille du clavier. git-svn-id: https://svn.cri.ensmp.fr/svn/minwii/trunk@329 fe552daf-6dbe-4428-90eb-1537e0879342 --- diff --git a/src/minwii/widgets/songfilebrowser.py b/src/minwii/widgets/songfilebrowser.py index 119a2f1..f976ce6 100755 --- a/src/minwii/widgets/songfilebrowser.py +++ b/src/minwii/widgets/songfilebrowser.py @@ -42,10 +42,13 @@ class FileOpenDialog(FileDialog): 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) @@ -230,8 +233,60 @@ class FileOpenDialog(FileDialog): # 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_() + +# 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) : + us = s.decode('utf-8', 'ignore') + ret = [] + for uc in us : + ret.append(_recurseDecomposition(uc)) + return u''.join(ret) \ No newline at end of file