Пример #1
0
def oedit(obj):
    """
    Edit the object 'obj' in a GUI-based editor and return the edited copy
    (if Cancel is pressed, return None)

    The object 'obj' is a container
    
    Supported container types:
    dict, list, tuple, str/unicode or numpy.array
    
    (instantiate a new QApplication if necessary,
    so it can be called directly from the interpreter)
    """
    # Local import
    from spyderlib.widgets.texteditor import TextEditor
    from spyderlib.widgets.dicteditor import DictEditor, ndarray, FakeObject
    from spyderlib.widgets.arrayeditor import ArrayEditor
    from spyderlib.utils.qthelpers import qapplication
    _app = qapplication()

    if isinstance(obj, ndarray) and ndarray is not FakeObject:
        dialog = ArrayEditor()
        if dialog.setup_and_check(obj):
            if dialog.exec_():
                return obj
    elif isinstance(obj, (str, unicode)):
        dialog = TextEditor(obj)
        if dialog.exec_():
            return dialog.get_copy()
    elif isinstance(obj, (dict, tuple, list)):
        dialog = DictEditor(obj)
        if dialog.exec_():
            return dialog.get_copy()
    else:
        raise RuntimeError("Unsupported datatype")
Пример #2
0
 def edit_array(self):
     """Open an array editor dialog"""
     parent = self.parent_layout.parent
     label = self.item.get_prop_value("display", "label")
     from spyderlib.widgets.arrayeditor import ArrayEditor
     editor = ArrayEditor(parent)
     if editor.setup_and_check(self.arr, title=label):
         if editor.exec_():
             self.update(self.arr)
Пример #3
0
 def edit_array(self):
     """Open an array editor dialog"""
     parent = self.parent_layout.parent
     label = self.item.get_prop_value("display", "label")
     from spyderlib.widgets.arrayeditor import ArrayEditor
     editor = ArrayEditor(parent)
     if editor.setup_and_check(self.arr, title=label):
         if editor.exec_():
             self.update(self.arr)
Пример #4
0
def oedit(obj):
    """
    Edit the object 'obj' in a GUI-based editor and return the edited copy
    (if Cancel is pressed, return None)

    The object 'obj' is a container
    
    Supported container types:
    dict, list, tuple, str/unicode or numpy.array
    
    (instantiate a new QApplication if necessary,
    so it can be called directly from the interpreter)
    """
    # Local import
    from spyderlib.widgets.texteditor import TextEditor
    from spyderlib.widgets.dicteditor import DictEditor, ndarray, FakeObject
    from spyderlib.widgets.arrayeditor import ArrayEditor

    # Creating QApplication if necessary
    from PyQt4.QtGui import QApplication
    if QApplication.startingUp():
        QApplication([])

    if isinstance(obj, ndarray) and ndarray is not FakeObject:
        dialog = ArrayEditor()
        if dialog.setup_and_check(obj):
            if dialog.exec_():
                return obj
    elif isinstance(obj, (str, unicode)):
        dialog = TextEditor(obj)
        if dialog.exec_():
            return dialog.get_copy()
    elif isinstance(obj, (dict, tuple, list)):
        dialog = DictEditor(obj)
        if dialog.exec_():
            return dialog.get_copy()
    else:
        raise RuntimeError("Unsupported datatype")
Пример #5
0
    def oedit(obj, modal=True, namespace=None, keeper=objecteditor.DialogKeeper()):
        """
        Edit the object 'obj' in a GUI-based editor and return the edited copy
        (if Cancel is pressed, return None)

        The object 'obj' is a container

        Supported container types:
        dict, list, tuple, str/unicode or numpy.array

        (instantiate a new QApplication if necessary,
        so it can be called directly from the interpreter)
        """
        # Local import
        from spyderlib.widgets.texteditor import TextEditor
        from spyderlib.widgets.dicteditorutils import (ndarray, FakeObject,
                                                       Image, is_known_type)
        from spyderlib.widgets.dicteditor import DictEditor
        from spyderlib.widgets.arrayeditor import ArrayEditor

        from spyderlib.utils.qthelpers import qapplication
        app = qapplication()

        # STARTMODIFICATION EMZED
        from emzed.core.data_types import PeakMap, Table
        from emzed.core.explorers  import PeakMapExplorer, TableExplorer
        # ENDMODIFICATION EMZED


        if modal:
            obj_name = ''
        else:
            assert isinstance(obj, basestring)
            obj_name = obj
            if namespace is None:
                namespace = globals()
            keeper.set_namespace(namespace)
            obj = namespace[obj_name]
            # keep QApplication reference alive in the Python interpreter:
            namespace['__qapp__'] = app

        conv_func = lambda data: data
        readonly = not is_known_type(obj)
        if isinstance(obj, ndarray) and ndarray is not FakeObject:
            dialog = ArrayEditor()
            if not dialog.setup_and_check(obj, title=obj_name,
                                          readonly=readonly):
                return
        elif isinstance(obj, Image) and Image is not FakeObject \
             and ndarray is not FakeObject:
            dialog = ArrayEditor()
            import numpy as np
            data = np.array(obj)
            if not dialog.setup_and_check(data, title=obj_name,
                                          readonly=readonly):
                return
            from spyderlib.pil_patch import Image
            conv_func = lambda data: Image.fromarray(data, mode=obj.mode)
        elif isinstance(obj, (str, unicode)):
            dialog = TextEditor(obj, title=obj_name, readonly=readonly)

        # START MODIFICATION EMZED
        elif isinstance(obj, PeakMap):
            dialog = PeakMapExplorer()
            dialog.setup(obj)
        elif isinstance(obj, Table):
            dialog = TableExplorer([obj], False)
            conv_func = lambda (x,) : x
        elif isinstance(obj, list) and all(isinstance(t, Table) for t in obj):
            dialog = TableExplorer(obj, False)
        # END MODIFICATION EMZED

        else:
            dialog = DictEditor()
            dialog.setup(obj, title=obj_name, readonly=readonly)

        def end_func(dialog):
            return conv_func(dialog.get_value())

        if modal:
            if dialog.exec_():
                return end_func(dialog)
        else:
            keeper.create_dialog(dialog, obj_name, end_func)
            import os
            qt_inputhook = os.environ.get("INSTALL_QT_INPUTHOOK",
                                          "").lower() == "true"
            if os.name == 'nt' and not qt_inputhook \
               and not os.environ.get('IPYTHON', False):
                app.exec_()
Пример #6
0
    def oedit(obj, modal=True, namespace=None, keeper=objecteditor.DialogKeeper()):
        """
        Edit the object 'obj' in a GUI-based editor and return the edited copy
        (if Cancel is pressed, return None)

        The object 'obj' is a container
        
        Supported container types:
        dict, list, tuple, str/unicode or numpy.array
        
        (instantiate a new QApplication if necessary,
        so it can be called directly from the interpreter)
        """
        # Local import
        from spyderlib.widgets.texteditor import TextEditor
        from spyderlib.widgets.dicteditorutils import (ndarray, FakeObject,
                                                       Image, is_known_type)
        from spyderlib.widgets.dicteditor import DictEditor
        from spyderlib.widgets.arrayeditor import ArrayEditor
        
        from spyderlib.utils.qthelpers import qapplication
        app = qapplication()

        # STARTMODIFICATION EMZED
        import libms.Explorers
        from libms.DataStructures import PeakMap, Table
        # ENDMODIFICATION EMZED

        
        if modal:
            obj_name = ''
        else:
            assert isinstance(obj, basestring)
            obj_name = obj
            if namespace is None:
                namespace = globals()
            keeper.set_namespace(namespace)
            obj = namespace[obj_name]
            # keep QApplication reference alive in the Python interpreter:
            namespace['__qapp__'] = app

        conv_func = lambda data: data
        readonly = not is_known_type(obj)
        if isinstance(obj, ndarray) and ndarray is not FakeObject:
            dialog = ArrayEditor()
            if not dialog.setup_and_check(obj, title=obj_name,
                                          readonly=readonly):
                return
        elif isinstance(obj, Image) and Image is not FakeObject \
             and ndarray is not FakeObject:
            dialog = ArrayEditor()
            import numpy as np
            data = np.array(obj)
            if not dialog.setup_and_check(data, title=obj_name,
                                          readonly=readonly):
                return
            from spyderlib.pil_patch import Image
            conv_func = lambda data: Image.fromarray(data, mode=obj.mode)
        elif isinstance(obj, (str, unicode)):
            dialog = TextEditor(obj, title=obj_name, readonly=readonly)

        # START MODIFICATION EMZED
        elif isinstance(obj, PeakMap):
            dialog = libms.Explorers.MzExplorer()
            dialog.setup(obj)
        elif isinstance(obj, Table):
            dialog = libms.Explorers.TableExplorer([obj], False)
            conv_func = lambda (x,) : x
        elif isinstance(obj, list) and all(isinstance(t, Table) for t in obj):
            dialog = libms.Explorers.TableExplorer(obj, False)
        # END MODIFICATION EMZED

        else:
            dialog = DictEditor()
            dialog.setup(obj, title=obj_name, readonly=readonly)
        
        def end_func(dialog):
            return conv_func(dialog.get_value())
        
        if modal:
            if dialog.exec_():
                return end_func(dialog)
        else:
            keeper.create_dialog(dialog, obj_name, end_func)
            import os
            qt_inputhook = os.environ.get("INSTALL_QT_INPUTHOOK",
                                          "").lower() == "true"
            if os.name == 'nt' and not qt_inputhook \
               and not os.environ.get('IPYTHON', False):
                app.exec_()