示例#1
0
文件: openfile.py 项目: yihan5523/e17
class OpenFile(elementary.Window):
    _notification = None

    def __init__(self, open_cb, *args, **kargs):
        elementary.Window.__init__(self, "openfile", elementary.ELM_WIN_BASIC)
        self.title_set("Open file")
        self.autodel_set(True)

        self._open_cb = (open_cb, args, kargs)

        bg = elementary.Background(self)
        self.resize_object_add(bg)
        bg.size_hint_weight_set(evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
        bg.show()

        self._fs = FileSelector(self)
        self._fs.filter = self._filter
        self._fs.action_add("Cancel", self._cancel)
        self._fs.action_add("Ok", self._open)
        self._fs.action_disabled_set("Ok", True)
        self._fs.callback_add("file.clicked", self._file_clicked)
        self._fs.callback_add("file.selected", self._file_selected)
        self._fs.callback_add("file.selection_clear", self._file_unselected)
        self.resize_object_add(self._fs)
        self._fs.show()

        self.resize(600, 480)

    def show(self):
        self.activate()
        elementary.Window.show(self)

    def _file_clicked(self, obj, data):
        self._open(None)

    def _file_selected(self, obj, data):
        self._fs.action_disabled_set("Ok", False)

    def _file_unselected(self, obj, data):
        self._fs.action_disabled_set("Ok", True)

    def _filter(self, file):
        return file.endswith(".edc") or file.endswith(".edj")

    def _path_set(self, value):
        self._fs.path = value

    path = property(fset=_path_set)

    def _open_ok(self, sf, **kargs):
        self.hide()
        open_cb, args, kargs = self._open_cb
        open_cb(sf, *args, **kargs)
        self.delete()

    def _open(self, bt, mode=None):
        swapfile.open(self._fs.file, self._open_ok, self._notify_err, mode)

    def _open_forced(self, bt, data):
        self._open(bt, swapfile.REPLACE)

    def _open_recovery(self, bt, data):
        self._open(bt, swapfile.RESTORE)

    def list_files_on_diretory(self):
        path = os.getenv("PWD")
        list = os.listdir(path)
        list.sort(key=str.lower)
        files = []
        for file in list:
            if not file.startswith("."):
                full = os.path.join(path, file)
                if os.path.isfile(full):
                    if file.endswith(".edj"):
                        files.append(file)
        return files

    def _cancel(self, bt):
        self.delete()

    def _notify_del(self):
        if self._notification:
            self._notification.hide()
            self._notification.delete()
            self._notification = None

    def _notify(self, message):
        self._notify_del()
        self._notification = elementary.Notify(self)
        self._notification.timeout_set(2)
        self._notification.orient_set(
            elementary.ELM_NOTIFY_ORIENT_BOTTOM_RIGHT)

        bx = elementary.Box(self)
        bx.size_hint_weight_set(evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
        bx.horizontal_set(True)
        self._notification.content_set(bx)
        bx.show()

        lb = elementary.Label(self)
        lb.text_set(message)
        bx.pack_end(lb)
        lb.show()

        self._notification.show()

    def _notify_err(self, err, **kargs):
        if self._notification:
            self._notification.hide()
            self._notification.delete()
            self._notification = None

        self._notification = ErrorNotify(self)

        if isinstance(err, IOError) and err.errno == errno.EEXIST:
            self._notification.title = "Swap file already exists"
            lb = elementary.Label(self._notification)
            lb.text_set("Another program may be editing the same file<br>" +
                        "or a previous edition session for this file crashed.")
            self._notification.pack_end(lb)
            lb.show()
            self._notification.action_add("Ignore Swap", self._open_forced)
            self._notification.action_add("Recover", self._open_recovery)
            self._notification.action_add("Abort", self._notify_abort)
        elif isinstance(err, swapfile.CompileError):
            self._notification.title = "Compiler Error"
            lb = elementary.Label(self._notification)
            lb.text_set(str(err.message).replace('\n', '<br>'))
            self._notification.pack_end(lb)
            lb.show()
            self._notification.action_add("Ok", self._notify_abort)
        else:
            self._notification.title = str(err).replace(':', '<br>')
            self._notification.action_add("Ok", self._notify_abort)

        self._notification.show()

    def _notify_abort(self, bt, data):
        self._notify_del()
示例#2
0
class FileSelectionWizard(Wizard):
    def __init__(self, parent, selected_cb, file_add_cb):
        Wizard.__init__(self, parent)

        self._selected_cb = selected_cb
        self._file_add_cb = file_add_cb

        self._selection = ""

        self._file_list_page_created = False
        self._add_new_file_page_created = False
        self._file_preview_page_created = False

        self._file_list_add()

        if self._files == []:
            self._create_add_new_file_page()
        else:
            self._create_file_list_page()

    def _create_file_list_page(self):
        #file list - page create and populate
        self._file_list_page_created = True
        self._add_file_list_header()

        self.content_add("file_list", self._file_list)
        self.action_add("file_list", "Cancel", self.close, key="Escape")
        self.action_add("file_list",
                        "Add New",
                        self._goto_add_new_file,
                        key="n")

    def _create_add_new_file_page(self):
        #file selector - page create and populate
        self._add_new_file_page_created = True
        self._add_add_new_file_header()

        self.action_add("add_new_file", "Go To List", self._back, key="Escape")
        self.action_add("add_new_file",
                        "Select",
                        self._new_file_added,
                        key="Return")

        self._file_selector_add()
        self.content_add("add_new_file", self._fs)

    def _create_file_preview_page(self):
        #file preview - page create and populate
        self._file_preview_page_created = True
        self._add_file_preview_header()

        self.action_add("file_preview", "Go To List", self._back, key="Escape")
        self.action_add("file_preview",
                        "Delete",
                        self._delete_file,
                        key="Delete")
        self.action_add("file_preview",
                        "Use",
                        self._file_selected,
                        key="Return")

        self._add_files_to_preview()

    def goto(self, page, alt_bg_style=None):
        Wizard.goto(self, page)

    def _goto_add_new_file(self):
        if not self._add_new_file_page_created:
            self._create_add_new_file_page()
        self.goto("add_new_file", alt_bg_style=True)

    def _goto_preview(self, obj=None, part=None, item_data=None):
        self._selection = item_data

        if not self._file_preview_page_created:
            self._create_file_preview_page()
        else:
            self._get_preview_file(self._selection)

        self.goto("file_preview", alt_bg_style=False)
        self._get_title_text()

    def _goto_files_list(self):
        self._update()
        self.goto("file_list", alt_bg_style=False)

    def _file_list_add(self):
        self._files = []
        self._file_list = elementary.Genlist(self)
        self._file_list.size_hint_align_set(evas.EVAS_HINT_FILL,
                                            evas.EVAS_HINT_FILL)
        self._file_list.size_hint_weight_set(evas.EVAS_HINT_EXPAND,
                                             evas.EVAS_HINT_EXPAND)
        self._update()
        self._file_list.show()

    def _file_selector_add(self):
        self._fs_filecounter = 0
        self._fs = FileSelector(self)
        self._fs.filter = self._fs_filter
        self._fs.multi = False
        self.action_disabled_set("add_new_file", "Select", True)
        self._fs.callback_add("file.selected", self._fs_file_selected_cb)
        self._fs.callback_add("file.unselected", self._fs_file_unselected_cb)
        self._fs.show()

    def _preview_scroller_add(self):
        self._preview_scroller = elementary.Scroller(self)
        self._preview_scroller.size_hint_align_set(evas.EVAS_HINT_FILL,
                                                   evas.EVAS_HINT_FILL)
        self._preview_scroller.size_hint_weight_set(evas.EVAS_HINT_EXPAND,
                                                    evas.EVAS_HINT_EXPAND)
        self._preview_scroller.policy_set(elementary.ELM_SCROLLER_POLICY_AUTO,
                                          elementary.ELM_SCROLLER_POLICY_AUTO)
        self._preview_scroller.bounce_set(False, False)
        self._preview_scroller.content_set(self._preview_file)
        self._preview_scroller.show()
        self.content_add("file_preview", self._preview_scroller)

    def _new_file_added(self):
        for i in self._fs.files:
            self._file_add_cb(i)
        new_file = os.path.basename(i)
        self._goto_preview(item_data=new_file)

    def _fs_file_selected_cb(self, obj, data):
        if data:
            self._fs_filecounter += 1
        self.action_disabled_set("add_new_file", "Select", False)

    def _fs_file_unselected_cb(self, obj, data):
        if data:
            self._fs_filecounter -= 1
        if self._fs_filecounter == 0:
            self.action_disabled_set("add_new_file", "Select", True)

    def _back(self):
        if not self._file_list_page_created:
            self._create_file_list_page()
        self._goto_files_list()

    def _back_file_preview(self):
        self._preview_file.hide()
        self._back()

    def _delete_file(self):
        print "FIXME: File deletion to be added soon"
        self.notify("File deletion to be added soon")
        self.goto("file_list")

    def _file_selected(self):
        self._selected_cb(self._selection)
        self.close()

    def _gl_text_get(self, *kargs):
        return kargs[-1]
示例#3
0
class FileSelectionWizard(Wizard):
    def __init__(self, parent, selected_cb, file_add_cb):
        Wizard.__init__(self, parent)

        self._selected_cb = selected_cb
        self._file_add_cb = file_add_cb

        self._selection = ""

        self._file_list_page_created = False
        self._add_new_file_page_created = False
        self._file_preview_page_created = False

        self._file_list_add()

        if self._files == []:
            self._create_add_new_file_page()
        else:
            self._create_file_list_page()

    def _create_file_list_page(self):
    #file list - page create and populate
        self._file_list_page_created = True
        self._add_file_list_header()

        self.content_add("file_list", self._file_list)
        self.action_add("file_list", "Cancel", self.close, key="Escape")
        self.action_add(
            "file_list", "Add New", self._goto_add_new_file, key="n")

    def _create_add_new_file_page(self):
    #file selector - page create and populate
        self._add_new_file_page_created = True
        self._add_add_new_file_header()

        self.action_add("add_new_file", "Go To List", self._back, key="Escape")
        self.action_add("add_new_file", "Select", self._new_file_added,
                        key="Return")

        self._file_selector_add()
        self.content_add("add_new_file", self._fs)

    def _create_file_preview_page(self):
    #file preview - page create and populate
        self._file_preview_page_created = True
        self._add_file_preview_header()

        self.action_add("file_preview", "Go To List", self._back, key="Escape")
        self.action_add("file_preview", "Delete", self._delete_file,
                        key="Delete")
        self.action_add("file_preview", "Use", self._file_selected,
                        key="Return")

        self._add_files_to_preview()

    def goto(self, page, alt_bg_style=None):
        Wizard.goto(self, page)

    def _goto_add_new_file(self):
        if not self._add_new_file_page_created:
            self._create_add_new_file_page()
        self.goto("add_new_file", alt_bg_style=True)

    def _goto_preview(self, obj=None, part=None, item_data=None):
        self._selection = item_data

        if not self._file_preview_page_created:
            self._create_file_preview_page()
        else:
            self._get_preview_file(self._selection)

        self.goto("file_preview", alt_bg_style=False)
        self._get_title_text()

    def _goto_files_list(self):
        self._update()
        self.goto("file_list", alt_bg_style=False)

    def _file_list_add(self):
        self._files = []
        self._file_list = elementary.Genlist(self)
        self._file_list.size_hint_align_set(
            evas.EVAS_HINT_FILL, evas.EVAS_HINT_FILL)
        self._file_list.size_hint_weight_set(
            evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
        self._update()
        self._file_list.show()

    def _file_selector_add(self):
        self._fs_filecounter = 0
        self._fs = FileSelector(self)
        self._fs.filter = self._fs_filter
        self._fs.multi = False
        self.action_disabled_set("add_new_file", "Select", True)
        self._fs.callback_add("file.selected", self._fs_file_selected_cb)
        self._fs.callback_add("file.unselected", self._fs_file_unselected_cb)
        self._fs.show()

    def _preview_scroller_add(self):
        self._preview_scroller = elementary.Scroller(self)
        self._preview_scroller.size_hint_align_set(
            evas.EVAS_HINT_FILL, evas.EVAS_HINT_FILL)
        self._preview_scroller.size_hint_weight_set(
            evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
        self._preview_scroller.policy_set(elementary.ELM_SCROLLER_POLICY_AUTO,
                                          elementary.ELM_SCROLLER_POLICY_AUTO)
        self._preview_scroller.bounce_set(False, False)
        self._preview_scroller.content_set(self._preview_file)
        self._preview_scroller.show()
        self.content_add("file_preview", self._preview_scroller)

    def _new_file_added(self):
        for i in self._fs.files:
            self._file_add_cb(i)
        new_file = os.path.basename(i)
        self._goto_preview(item_data=new_file)

    def _fs_file_selected_cb(self, obj, data):
        if data:
            self._fs_filecounter += 1
        self.action_disabled_set("add_new_file", "Select", False)

    def _fs_file_unselected_cb(self, obj, data):
        if data:
            self._fs_filecounter -= 1
        if self._fs_filecounter == 0:
            self.action_disabled_set("add_new_file", "Select", True)

    def _back(self):
        if not self._file_list_page_created:
            self._create_file_list_page()
        self._goto_files_list()

    def _back_file_preview(self):
        self._preview_file.hide()
        self._back()

    def _delete_file(self):
        print "FIXME: File deletion to be added soon"
        self.notify("File deletion to be added soon")
        self.goto("file_list")

    def _file_selected(self):
        self._selected_cb(self._selection)
        self.close()

    def _gl_label_get(self, *kargs):
        return kargs[-1]
示例#4
0
文件: openfile.py 项目: Limsik/e17
class OpenFile(elementary.Window):
    _notification = None

    def __init__(self, open_cb, *args, **kargs):
        elementary.Window.__init__(self, "openfile",
                                   elementary.ELM_WIN_BASIC)
        self.title_set("Open file")
        self.autodel_set(True)

        self._open_cb = (open_cb, args, kargs)

        bg = elementary.Background(self)
        self.resize_object_add(bg)
        bg.size_hint_weight_set(evas.EVAS_HINT_EXPAND,
                                evas.EVAS_HINT_EXPAND)
        bg.show()

        self._fs = FileSelector(self)
        self._fs.filter = self._filter
        self._fs.action_add("Cancel", self._cancel)
        self._fs.action_add("Ok", self._open)
        self._fs.action_disabled_set("Ok", True)
        self._fs.callback_add("file.clicked", self._file_clicked)
        self._fs.callback_add("file.selected", self._file_selected)
        self._fs.callback_add("file.selection_clear", self._file_unselected)
        self.resize_object_add(self._fs)
        self._fs.show()

        self.resize(600, 480)

    def show(self):
        self.activate()
        elementary.Window.show(self)

    def _file_clicked(self, obj, data):
        self._open(None)

    def _file_selected(self, obj, data):
        self._fs.action_disabled_set("Ok", False)

    def _file_unselected(self, obj, data):
        self._fs.action_disabled_set("Ok", True)

    def _filter(self, file):
        return file.endswith(".edc") or file.endswith(".edj")

    def _path_set(self, value):
        self._fs.path = value

    path = property(fset=_path_set)

    def _open_ok(self, sf, **kargs):
        self.hide()
        open_cb, args, kargs = self._open_cb
        open_cb(sf, *args, **kargs)
        self.delete()

    def _open(self, bt, mode=None):
        swapfile.open(self._fs.file, self._open_ok, self._notify_err, mode)

    def _open_forced(self, bt, data):
        self._open(bt, swapfile.REPLACE)

    def _open_recovery(self, bt, data):
        self._open(bt, swapfile.RESTORE)

    def list_files_on_diretory(self):
        path = os.getenv("PWD")
        list = os.listdir(path)
        list.sort(key=str.lower)
        files = []
        for file in list:
            if not file.startswith("."):
                full = os.path.join(path, file)
                if os.path.isfile(full):
                    if file.endswith(".edj"):
                        files.append(file)
        return files

    def _cancel(self, bt):
        self.delete()

    def _notify_del(self):
        if self._notification:
            self._notification.hide()
            self._notification.delete()
            self._notification = None

    def _notify(self, message):
        self._notify_del()
        self._notification = elementary.Notify(self)
        self._notification.timeout_set(2)
        self._notification.orient_set(
            elementary.ELM_NOTIFY_ORIENT_BOTTOM_RIGHT)

        bx = elementary.Box(self)
        bx.size_hint_weight_set(evas.EVAS_HINT_EXPAND,
                                evas.EVAS_HINT_EXPAND)
        bx.horizontal_set(True)
        self._notification.content_set(bx)
        bx.show()

        lb = elementary.Label(self)
        lb.text_set(message)
        bx.pack_end(lb)
        lb.show()

        self._notification.show()

    def _notify_err(self, err, **kargs):
        if self._notification:
            self._notification.hide()
            self._notification.delete()
            self._notification = None

        self._notification = ErrorNotify(self)

        if isinstance(err, IOError) and err.errno == errno.EEXIST:
            self._notification.title = "Swap file already exists"
            lb = elementary.Label(self._notification)
            lb.text_set(
                "Another program may be editing the same file<br>" +
                "or a previous edition session for this file crashed.")
            self._notification.pack_end(lb)
            lb.show()
            self._notification.action_add("Ignore Swap", self._open_forced)
            self._notification.action_add("Recover", self._open_recovery)
            self._notification.action_add("Abort", self._notify_abort)
        elif isinstance(err, swapfile.CompileError):
            self._notification.title = "Compiler Error"
            lb = elementary.Label(self._notification)
            lb.text_set(str(err.message).replace('\n', '<br>'))
            self._notification.pack_end(lb)
            lb.show()
            self._notification.action_add("Ok", self._notify_abort)
        else:
            self._notification.title = str(err).replace(':', '<br>')
            self._notification.action_add("Ok", self._notify_abort)

        self._notification.show()

    def _notify_abort(self, bt, data):
        self._notify_del()