Example #1
0
 def delete_file(self, fname, multiple, yes_to_all):
     """Delete file"""
     if multiple:
         buttons = QMessageBox.Yes|QMessageBox.YesAll| \
                   QMessageBox.No|QMessageBox.Cancel
     else:
         buttons = QMessageBox.Yes|QMessageBox.No
     if yes_to_all is None:
         answer = QMessageBox.warning(self, _("Delete"),
                              _("Do you really want "
                                "to delete <b>%s</b>?"
                                ) % osp.basename(fname), buttons)
         if answer == QMessageBox.No:
             return yes_to_all
         elif answer == QMessageBox.Cancel:
             return False
         elif answer == QMessageBox.YesAll:
             yes_to_all = True
     try:
         if osp.isfile(fname):
             misc.remove_file(fname)
             self.parent_widget.removed.emit(fname)
         else:
             self.remove_tree(fname)
             self.parent_widget.removed_tree.emit(fname)
         return yes_to_all
     except EnvironmentError as error:
         action_str = _('delete')
         QMessageBox.critical(self, _("Project Explorer"),
                         _("<b>Unable to %s <i>%s</i></b>"
                           "<br><br>Error message:<br>%s"
                           ) % (action_str, fname, to_text_string(error)))
     return False
Example #2
0
 def __init__(self, parent=None):
     super(WinUserEnvDialog, self).__init__(parent)
     self.setup(get_user_env(),
                title="HKEY_CURRENT_USER\Environment", width=600)
     if parent is None:
         parent = self
     QMessageBox.warning(parent, _("Warning"),
                 _("If you accept changes, "
                   "this will modify the current user environment "
                   "variables directly <b>in Windows registry</b>. "
                   "Use it with precautions, at your own risks.<br>"
                   "<br>Note that for changes to take effect, you will "
                   "need to restart the parent process of this applica"
                   "tion (simply restart Spyder if you have executed it "
                   "from a Windows shortcut, otherwise restart any "
                   "application from which you may have executed it, "
                   "like <i>Python(x,y) Home</i> for example)"))
Example #3
0
 def remove_path(self):
     answer = QMessageBox.warning(
         self, _("Remove path"),
         _("Do you really want to remove selected path?"),
         QMessageBox.Yes | QMessageBox.No)
     if answer == QMessageBox.Yes:
         self.pathlist.pop(self.listwidget.currentRow())
         self.update_list()
 def load_and_translate(self,
                        combine,
                        pythonfile,
                        editor,
                        set_current=True):
     """
     Read filename as combine archive, unzip, translate, reconstitute in 
     Python, and create an editor instance and return it
     *Warning* This is loading file, creating editor but not executing
     the source code analysis -- the analysis must be done by the editor
     plugin (in case multiple editorstack instances are handled)
     """
     combine = str(combine)
     self.emit(SIGNAL('starting_long_process(QString)'),
               _("Loading %s...") % combine)
     text, enc = encoding.read(combine)
     text = Translatecombine(combine)
     zipextloctemp, sbmlloclisttemp, sedmlloclisttemp = manifestsearch(
         combine)
     for i in range(len(text)):
         widgeteditor = editor.editorstacks[0]
         sedmlfname = os.path.basename(sedmlloclisttemp[i])
         finfo = widgeteditor.create_new_editor(
             os.path.splitext(sedmlfname)[0] + '.py',
             enc,
             text[i],
             set_current,
             new=True)
         index = widgeteditor.data.index(finfo)
         widgeteditor._refresh_outlineexplorer(index, update=True)
         self.emit(SIGNAL('ending_long_process(QString)'), "")
         if widgeteditor.isVisible() and widgeteditor.checkeolchars_enabled \
          and sourcecode.has_mixed_eol_chars(text[i]):
             name = os.path.basename(
                 os.path.splitext(sedmlfname)[0] + '.py')
             QMessageBox.warning(
                 self, widgeteditor.title,
                 _("<b>%s</b> contains mixed end-of-line "
                   "characters.<br>Spyder will fix this "
                   "automatically.") % name, QMessageBox.Ok)
             widgeteditor.set_os_eol_chars(index)
         widgeteditor.is_analysis_done = False
         finfo.editor.set_cursor_position('eof')
         finfo.editor.insert_text(os.linesep)
     return finfo, combine
Example #5
0
 def load_and_translate(self,
                        sedmlfile,
                        pythonfile,
                        editor,
                        set_current=True):
     """
     Read filename as SED-ML file, translate it to PhrasedML, and
     create an editor instance and return it
     *Warning* This is loading file, creating editor but not executing
     the source code analysis -- the analysis must be done by the editor
     plugin (in case multiple editorstack instances are handled)
     """
     #sedmlfile = to_text_string(sedmlfile)
     sedmlfile = str(sedmlfile)
     self.emit(SIGNAL('starting_long_process(QString)'),
               _("Loading %s...") % sedmlfile)
     text, enc = encoding.read(sedmlfile)
     fname = os.path.basename(sedmlfile)
     temp = '"End of code generated by Import SED-ML with PhrasedML plugin ' + time.strftime(
         '%m/%d/%Y') + '"\n"Extracted from ' + fname + '"'
     text = "import tellurium as te\n\nphrasedmlStr = '''" + pl.convertFile(
         sedmlfile
     ) + "'''\n\nte.executeSEDML(te.sedml.tephrasedml.phrasedml.convertString(phrasedmlStr))\n\n" + temp
     widgeteditor = editor.editorstacks[0]
     finfo = widgeteditor.create_new_editor(pythonfile,
                                            enc,
                                            text,
                                            set_current,
                                            new=True)
     index = widgeteditor.data.index(finfo)
     widgeteditor._refresh_outlineexplorer(index, update=True)
     self.emit(SIGNAL('ending_long_process(QString)'), "")
     if widgeteditor.isVisible() and widgeteditor.checkeolchars_enabled \
        and sourcecode.has_mixed_eol_chars(text):
         name = os.path.basename(pythonfile)
         QMessageBox.warning(
             self, widgeteditor.title,
             _("<b>%s</b> contains mixed end-of-line "
               "characters.<br>Spyder will fix this "
               "automatically.") % name, QMessageBox.Ok)
         widgeteditor.set_os_eol_chars(index)
     widgeteditor.is_analysis_done = False
     finfo.editor.set_cursor_position('eof')
     finfo.editor.insert_text(os.linesep)
     return finfo, sedmlfile
Example #6
0
 def check_shortcuts(self):
     """Check shortcuts for conflicts."""
     conflicts = []
     for index, sh1 in enumerate(self.source_model.shortcuts):
         if index == len(self.source_model.shortcuts)-1:
             break
         for sh2 in self.source_model.shortcuts[index+1:]:
             if sh2 is sh1:
                 continue
             if str(sh2.key) == str(sh1.key) \
                and (sh1.context == sh2.context or sh1.context == '_' or
                     sh2.context == '_'):
                 conflicts.append((sh1, sh2))
     if conflicts:
         self.parent().show_this_page.emit()
         cstr = "\n".join(['%s <---> %s' % (sh1, sh2)
                           for sh1, sh2 in conflicts])
         QMessageBox.warning(self, _("Conflicts"),
                             _("The following conflicts have been "
                               "detected:")+"\n"+cstr, QMessageBox.Ok)
Example #7
0
 def _sel_to_text(self, cell_range):
     """Copy an array portion to a unicode string"""
     if not cell_range:
         return
     row_min, row_max, col_min, col_max = get_idx_rect(cell_range)
     _data = self.model().get_data()
     if PY3:
         output = io.BytesIO()
     else:
         output = io.StringIO()
     try:
         np.savetxt(output, _data[row_min:row_max+1, col_min:col_max+1],
                    delimiter='\t')
     except:
         QMessageBox.warning(self, _("Warning"),
                             _("It was not possible to copy values for "
                               "this array"))
         return
     contents = output.getvalue().decode('utf-8')
     output.close()
     return contents
Example #8
0
    def launch_error_message(self, error_type, error=None):
        """Launch a message box with a predefined error message.

        Parameters
        ----------
        error_type : int [CLOSE_ERROR, RESET_ERROR, RESTART_ERROR]
            Possible error codes when restarting/reseting spyder.
        error : Exception
            Actual Python exception error caught.
        """
        messages = {
            CLOSE_ERROR:
            _("It was not possible to close the previous "
              "Spyder instance.\nRestart aborted."),
            RESET_ERROR:
            _("Spyder could not reset to factory "
              "defaults.\nRestart aborted."),
            RESTART_ERROR:
            _("It was not possible to restart Spyder.\n"
              "Operation aborted.")
        }
        titles = {
            CLOSE_ERROR: _("Spyder exit error"),
            RESET_ERROR: _("Spyder reset error"),
            RESTART_ERROR: _("Spyder restart error")
        }

        if error:
            e = error.__repr__()
            message = messages[error_type] + _("\n\n{0}").format(e)
        else:
            message = messages[error_type]

        title = titles[error_type]
        self.splash.hide()
        QMessageBox.warning(self, title, message, QMessageBox.Ok)
        raise RuntimeError(message)
Example #9
0
 def set_user_env(reg, parent=None):
     """Set HKCU (current user) environment variables"""
     reg = listdict2envdict(reg)
     types = dict()
     key = OpenKey(HKEY_CURRENT_USER, "Environment")
     for name in reg:
         try:
             _x, types[name] = QueryValueEx(key, name)
         except WindowsError:
             types[name] = REG_EXPAND_SZ
     key = OpenKey(HKEY_CURRENT_USER, "Environment", 0, KEY_SET_VALUE)
     for name in reg:
         SetValueEx(key, name, 0, types[name], reg[name])
     try:
         from win32gui import SendMessageTimeout
         from win32con import (HWND_BROADCAST, WM_SETTINGCHANGE,
                               SMTO_ABORTIFHUNG)
         SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0,
                            "Environment", SMTO_ABORTIFHUNG, 5000)
     except ImportError:
         QMessageBox.warning(parent, _("Warning"),
                     _("Module <b>pywin32 was not found</b>.<br>"
                       "Please restart this Windows <i>session</i> "
                       "(not the computer) for changes to take effect."))
Example #10
0
 def resize_to_contents(self):
     """Resize cells to contents"""
     size = 1
     for dim in self.shape:
         size *= dim
     if size > 1e5:
         answer = QMessageBox.warning(
             self, _("Array editor"),
             _("Resizing cells of a table of such "
               "size could take a long time.\n"
               "Do you want to continue anyway?"),
             QMessageBox.Yes | QMessageBox.No)
         if answer == QMessageBox.No:
             return
     self.resizeColumnsToContents()
     self.resizeRowsToContents()
Example #11
0
    def setup_and_check(self, data, title=''):
        """
        Setup DataFrameEditor:
        return False if data is not supported, True otherwise
        """
        size = 1
        for dim in data.shape:
            size *= dim
        if size > 1e6:
            answer = QMessageBox.warning(
                self,
                _("%s editor") % data.__class__.__name__,
                _("Opening and browsing this "
                  "%s can be slow\n\n"
                  "Do you want to continue anyway?") % data.__class__.__name__,
                QMessageBox.Yes | QMessageBox.No)
            if answer == QMessageBox.No:
                return

        self.layout = QGridLayout()
        self.setLayout(self.layout)
        self.setWindowIcon(get_icon('arredit.png'))
        if title:
            title = to_text_string(title)  # in case title is not a string
        else:
            title = _("%s editor") % data.__class__.__name__
        if isinstance(data, TimeSeries):
            self.is_time_series = True
            data = data.to_frame()

        self.setWindowTitle(title)
        self.resize(600, 500)

        self.dataModel = DataFrameModel(data, parent=self)
        self.dataTable = DataFrameView(self, self.dataModel)

        self.layout.addWidget(self.dataTable)
        self.setLayout(self.layout)
        self.setMinimumSize(400, 300)
        # Make the dialog act as a window
        self.setWindowFlags(Qt.Window)
        btn_layout = QHBoxLayout()

        btn = QPushButton(_("Format"))
        # disable format button for int type
        btn_layout.addWidget(btn)
        self.connect(btn, SIGNAL("clicked()"), self.change_format)
        btn = QPushButton(_('Resize'))
        btn_layout.addWidget(btn)
        self.connect(btn, SIGNAL("clicked()"),
                     self.dataTable.resizeColumnsToContents)

        bgcolor = QCheckBox(_('Background color'))
        bgcolor.setChecked(self.dataModel.bgcolor_enabled)
        bgcolor.setEnabled(self.dataModel.bgcolor_enabled)
        self.connect(bgcolor, SIGNAL("stateChanged(int)"),
                     self.change_bgcolor_enable)
        btn_layout.addWidget(bgcolor)

        self.bgcolor_global = QCheckBox(_('Column min/max'))
        self.bgcolor_global.setChecked(self.dataModel.colum_avg_enabled)
        self.bgcolor_global.setEnabled(not self.is_time_series
                                       and self.dataModel.bgcolor_enabled)
        self.connect(self.bgcolor_global, SIGNAL("stateChanged(int)"),
                     self.dataModel.colum_avg)
        btn_layout.addWidget(self.bgcolor_global)

        btn_layout.addStretch()
        bbox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
        self.connect(bbox, SIGNAL("accepted()"), SLOT("accept()"))
        self.connect(bbox, SIGNAL("rejected()"), SLOT("reject()"))
        btn_layout.addWidget(bbox)

        self.layout.addLayout(btn_layout, 2, 0)

        return True