From 17f335a3f500391270d6f6001dca5dadd9ca3e72 Mon Sep 17 00:00:00 2001 From: Tomeu Vizoso Date: Fri, 22 Jun 2007 19:50:42 +0000 Subject: Implement nsIFilePicker using sugar.graphics.objectchooser. --- diff --git a/filepicker.py b/filepicker.py new file mode 100644 index 0000000..61e0abd --- /dev/null +++ b/filepicker.py @@ -0,0 +1,126 @@ +# Copyright (C) 2007, One Laptop Per Child +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +import logging + +import gtk + +import xpcom +from xpcom import components +from xpcom.components import interfaces +from xpcom.server.factory import Factory + +from sugar.graphics.objectchooser import ObjectChooser + +class FilePicker: + _com_interfaces_ = interfaces.nsIFilePicker + + cid = '{57901c41-06cb-4b9e-8258-37323327b583}' + description = 'Sugar File Picker' + + def __init__(self): + self._title = None + self._parent = None + self._file = None + + def appendFilter(self, title, filter): + logging.warning('FilePicker.appendFilter: UNIMPLEMENTED') + + def appendFilters(self, filterMask): + logging.warning('FilePicker.appendFilters: UNIMPLEMENTED') + + def init(self, parent, title, mode): + self._title = title + self._file = None + """ + cls = components.classes['@mozilla.org/embedcomp/window-watcher;1'] + window_watcher = cls.getService(interfaces.nsIWindowWatcher) + chrome = window_watcher.getChromeForWindow(parent) + self._parent = chrome.web_view.get_toplevel() + """ + self._parent = None + + if mode != interfaces.nsIFilePicker.modeOpen: + raise xpcom.COMException(NS_ERROR_NOT_IMPLEMENTED) + + def show(self): + chooser = ObjectChooser(self._title, self._parent, + gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT) + try: + result = chooser.run() + if result == gtk.RESPONSE_ACCEPT: + jobject = chooser.get_selected_object() + if jobject and jobject.file_path: + self._file = jobject.file_path + finally: + chooser.destroy() + del chooser + + if self._file: + return interfaces.nsIFilePicker.returnOK + else: + return interfaces.nsIFilePicker.returnCancel + + def set_defaultExtension(self, default_extension): + logging.warning('FilePicker.set_defaultExtension: UNIMPLEMENTED') + + def get_defaultExtension(self): + logging.warning('FilePicker.get_defaultExtension: UNIMPLEMENTED') + return None + + def set_defaultString(self, default_string): + logging.warning('FilePicker.set_defaultString: UNIMPLEMENTED') + + def get_defaultString(self): + logging.warning('FilePicker.get_defaultString: UNIMPLEMENTED') + return None + + def set_displayDirectory(self, display_directory): + logging.warning('FilePicker.set_displayDirectory: UNIMPLEMENTED') + + def get_displayDirectory(self): + logging.warning('FilePicker.get_displayDirectory: UNIMPLEMENTED') + return None + + def set_filterIndex(self, filter_index): + logging.warning('FilePicker.set_filterIndex: UNIMPLEMENTED') + + def get_filterIndex(self): + logging.warning('FilePicker.get_filterIndex: UNIMPLEMENTED') + return None + + def get_file(self): + if self._file: + cls = components.classes["@mozilla.org/file/local;1"] + local_file = cls.createInstance(interfaces.nsILocalFile) + local_file.initWithPath(self._file) + return local_file + else: + return None + + def get_Files(self): + logging.warning('FilePicker.get_Files: UNIMPLEMENTED') + return None + + def get_FileURL(self): + logging.warning('FilePicker.get_FileURL: UNIMPLEMENTED') + return None + +components.registrar.registerFactory(FilePicker.cid, + FilePicker.description, + '@mozilla.org/filepicker;1', + Factory(FilePicker)) + diff --git a/webactivity.py b/webactivity.py index f42a116..8ef06e8 100755 --- a/webactivity.py +++ b/webactivity.py @@ -32,6 +32,7 @@ from webtoolbar import WebToolbar import downloadmanager import promptservice import securitydialogs +import filepicker _HOMEPAGE = 'http://www.google.com' -- cgit v0.9.1