diff pyntnclick/widgets/filechooser.py @ 854:79b5c1be9a5e default tip

Remove pyntnclick, it's its own library, now
author Stefano Rivera <stefano@rivera.za.net>
date Sat, 21 Jun 2014 22:06:09 +0200
parents f95830b58336
children
line wrap: on
line diff
--- a/pyntnclick/widgets/filechooser.py	Sat Jun 21 22:04:35 2014 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,164 +0,0 @@
-# Display a paged lsit of files and directories
-# Allow moving up and down directory trees
-
-import os
-
-from pyntnclick.widgets.base import Box
-from pyntnclick.widgets.text import TextButton, LabelWidget
-
-
-class FileChooser(Box):
-
-    def __init__(self, pos, gd, size, curdir, ok_callback,
-            page_length=12, padding=2):
-        super(FileChooser, self).__init__(pos, gd, size)
-        self.page_length = page_length
-        self.page = 0
-        self.ok_callback = ok_callback
-        self.curdir = os.path.realpath(os.path.normpath(curdir))
-        self.selected = None
-        self.padding = padding
-        self.dirs = []
-        self.files = []
-        self.modal = True
-        self.prev_but = None
-        self.next_but = None
-
-    def get_lists(self):
-        self.dirs = []
-        self.files = []
-        for entry in sorted(os.listdir(self.curdir)):
-            path = os.path.join(self.curdir, entry)
-            if os.path.isdir(path):
-                self.dirs.append(entry)
-            else:
-                self.files.append(entry)
-
-    def prepare(self):
-        super(FileChooser, self).prepare()
-        self.refresh()
-
-    def refresh(self):
-        self.page = 0
-        self.selected = None
-        self.get_lists()
-        self.fill_page()
-
-    def _dir_button(self, entry):
-        widget = TextButton((0, 0), self.gd, entry + '/',
-                fontname=self.gd.constants.bold_font,
-                fontsize=10)
-        widget.do_prepare()
-        widget.add_callback('clicked', self.change_dir, entry)
-        return widget
-
-    def _file_button(self, entry):
-        if entry == self.selected:
-            # highlight
-            widget = TextButton((0, 0), self.gd, entry,
-                    fontsize=10, border=2, color='yellow')
-        else:
-            widget = TextButton((0, 0), self.gd, entry, border=0,
-                    fontsize=10)
-        widget.do_prepare()
-        widget.add_callback('clicked', self.change_selection, entry)
-        return widget
-
-    def fill_page(self):
-        for widget in self.children[:]:
-            self.remove(widget)
-        start_page = self.page * self.page_length
-        end_page = start_page + self.page_length
-        entries = self.dirs + self.files
-        top = self.rect.top + self.padding
-        left = self.rect.left + self.padding
-        # Add current directory at the top
-        widget = LabelWidget((left, top), self.gd, self.curdir[-30:],
-                             color='black')
-        widget.do_prepare()
-        self.add(widget)
-        upbut = TextButton((left + 2 * self.padding + widget.rect.width, top),
-                self.gd, u'\N{LEFTWARDS ARROW WITH HOOK}Back one level')
-        upbut.do_prepare()
-        upbut.add_callback('clicked', self.change_dir, os.pardir)
-        self.add(upbut)
-        top += max(widget.rect.height, upbut.rect.height) + 4 * self.padding
-        page_top = top
-        page_left = left
-        top += self.padding
-        for entry in entries[start_page:end_page]:
-            if entry in self.dirs:
-                widget = self._dir_button(entry)
-            else:
-                widget = self._file_button(entry)
-            widget.rect.topleft = (left, top)
-            self.add(widget)
-            top += widget.rect.height + self.padding
-            page_left = max(page_left, left + widget.rect.width + self.padding)
-        # Add page list buttons
-        if not self.prev_but:
-            self.prev_but = TextButton((0, 0), self.gd, u'\N{UPWARDS ARROW}')
-            self.prev_but.do_prepare()
-            self.prev_but.add_callback('clicked', self.change_page, -1)
-        self.prev_but.rect.topleft = (page_left, page_top)
-        if not self.next_but:
-            self.next_but = TextButton((0, 0), self.gd, u'\N{DOWNWARDS ARROW}')
-            self.next_but.do_prepare()
-            self.next_but.add_callback('clicked', self.change_page, +1)
-        page_top = max(top - self.next_but.rect.height,
-                self.prev_but.rect.bottom + self.padding)
-        self.next_but.rect.topleft = (page_left, page_top)
-        if self.page > 0:
-            self.prev_but.enable()
-        else:
-            self.prev_but.disable()
-        if end_page + 1 < len(entries):
-            self.next_but.enable()
-        else:
-            self.next_but.disable()
-        self.add(self.next_but)
-        self.add(self.prev_but)
-        # Add OK and Cancel buttons
-        top = max(self.prev_but.rect.bottom + self.padding,
-                top + 2 * self.padding)
-        ok_but = TextButton((left, top), self.gd, 'OK')
-        ok_but.add_callback('clicked', self.ok)
-        self.add(ok_but)
-        cancel_but = TextButton(
-                (left + ok_but.rect.width + 4 * self.padding, top),
-                self.gd, 'Cancel')
-        cancel_but.add_callback('clicked', self.cancel)
-        self.add(cancel_but)
-
-    def change_page(self, ev, widget, change):
-        self.page += change
-        self.fill_page()
-        return True
-
-    def change_dir(self, ev, widget, newdir):
-        """Change directory and refresh the widget."""
-        self.curdir = os.path.normpath(os.path.join(self.curdir, newdir))
-        self.page = 0
-        self.selected = None
-        self.get_lists()
-        self.fill_page()
-
-    def change_selection(self, ev, widget, entry):
-        """Update selection"""
-        self.selected = entry
-        self.fill_page()
-
-    def cancel(self, ev, widget):
-        if hasattr(self.parent, 'paused'):
-            self.parent.paused = False
-        self.parent.remove(self)
-        return True
-
-    def ok(self, ev, widget):
-        if hasattr(self.parent, 'paused'):
-            self.parent.paused = False
-        self.parent.remove(self)
-        if self.selected:
-            self.ok_callback(os.path.normpath(os.path.join(self.curdir,
-                self.selected)))
-        return True