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