Exemple #1
0
    def showOpenFile(self):
        dlg = QFileDialog(self)
        dlg.setWindowTitle(self.tr("Open Video Files"))
        dlg.setWindowModality(Qt.WindowModal)

        mimeFilters = [
            "video/mp4",
            "video/quicktime",
            "video/x-msvideo",
            "video/x-ms-wmv"
        ]
        globPatterns = []
        db = QMimeDatabase()
        for m in mimeFilters:
            mimeType = db.mimeTypeForName(m)
            if not mimeType.isValid():
                logger.warn("Invalid MIME type: {}".format(m))
                continue
            globPatterns.extend(mimeType.globPatterns())
        globText = ' '.join(globPatterns)
        logger.debug("Video glob patterns: {}".format(globText))

        dlg.setNameFilters([
            self.tr("Video Files ({})").format(globText),
            self.tr("All Files (*)")
        ])
        dlg.setAcceptMode(QFileDialog.AcceptOpen)
        dlg.setOption(QFileDialog.ReadOnly, True)
        dlg.setOption(QFileDialog.DontUseCustomDirectoryIcons, True)
        dlg.setLabelText(QFileDialog.Accept, self.tr("Open Movie"))
        dlg.setFileMode(QFileDialog.ExistingFiles)

        if dlg.exec_():
            filenames = dlg.selectedFiles()
            self.processVideoFiles(filenames)
Exemple #2
0
def readMap(filename=None):
    """
    Import alternate map file.
    """
    if filename is None:
        fd = QFileDialog(None, "Load map file")
        fd.setLabelText(QFileDialog.Accept, "Import")
        fd.setNameFilters(["Map Files (*.txt)", "All Files (*)"])
        fd.setOptions(QFileDialog.DontUseNativeDialog)
        fd.setViewMode(QFileDialog.List)
        fd.setFileMode(QFileDialog.ExistingFile)
        if fd.exec():
            fileNames = fd.selectedFiles()
            filename = fileNames[0]
    else:
        pass
    numlines = sum(1 for line in open(filename))
    if numlines < 2:
        print('Map file is empty.')
        return
    else:
        print('Map has ', numlines, ' lines.')
    # read the first line - target coords in HH:MM:SS.SS, DD:MM:SS.SS
    file = open(filename)
    line = file.readline()
    if len(line.split()) != 6:
        print('File is not a map file.')
        return
    file.close()
    mapListPath = filename
    numMapPoints = numlines - 1
    return numMapPoints, mapListPath
Exemple #3
0
    def browse(self, type_='process'):
        """Open a dialog to choose either .mgf or metadata.txt file"""

        dialog = QFileDialog(self)
        dialog.setFileMode(QFileDialog.ExistingFile)

        if type_ == 'process':
            dialog.setNameFilters(["All supported formats (*.mgf *.msp)",
                                   "Mascot Generic Format (*.mgf)",
                                   "NIST Text Format of Individual Spectra (*.msp)",
                                   "All files (*)"])
        elif type_ == 'metadata':
            dialog.setNameFilters(["Metadata File (*.csv *.tsv *.txt *.xls *.xlsx *.xlsm *.xlsb *.ods)",
                                   "Microsoft Excel spreadsheets (*.xls *.xlsx, *.xlsm *.xlsb)",
                                   "OpenDocument spreadsheets (*.ods)",
                                   "All files (*)"])

        def on_dialog_finished(result):
            if result == QDialog.Accepted:
                filename = dialog.selectedFiles()[0]
                if type_ == 'process':
                    self.editProcessFile.setText(filename)
                    self.editProcessFile.setPalette(self.style().standardPalette())
                else:
                    self.on_show_options_dialog(filename)

        dialog.finished.connect(on_dialog_finished)
        dialog.open()
Exemple #4
0
    def importFromGDAL(self):
        """
        Import stretch and lookup table from file where these have already 
        been saved
        """
        from . import viewerwindow
        from osgeo import gdal

        viewerwindow.populateFilters()
        dlg = QFileDialog(self)
        dlg.setNameFilters(viewerwindow.GDAL_FILTERS)
        dlg.setFileMode(QFileDialog.ExistingFile)
        # set last dir
        dir = os.path.dirname(self.layer.filename)
        dlg.setDirectory(dir)

        if dlg.exec_() == QDialog.Accepted:
            fname = dlg.selectedFiles()[0]
            fname = str(fname)
            try:
                stretch = viewerstretch.ViewerStretch.fromGDALFileWithLUT(
                    fname)
                if stretch is None:
                    QMessageBox.critical(self, MESSAGE_TITLE,
                                         "Unable to find stretch")
                else:
                    self.viewwidget.setNewStretch(stretch, self.layer)

                    self.stretchLayout.updateStretch(stretch)

            except Exception as e:
                QMessageBox.critical(self, MESSAGE_TITLE, str(e))
Exemple #5
0
def writeSct(sctPars, sctfile):
    """
    Write a *.sct file from a dictionary.
    """
    fd = QFileDialog(None, "Save updated .sct file")
    fd.setLabelText(QFileDialog.Accept, "Export as")
    fd.setNameFilters(["Scan description (*.sct)", "All Files (*)"])
    fd.setOptions(QFileDialog.DontUseNativeDialog)
    fd.setViewMode(QFileDialog.List)
    fd.selectFile(sctfile)
    if fd.exec():
        #fd.getSaveFileName(directory=sctfile)
        filenames = fd.selectedFiles()
        filename = filenames[0]
        if filename[-4:] != '.sct':
            filename += '.sct'
        print("Exporting scan description to file: ", filename)
        with io.open(filename, mode='w') as f:
            for key in sctPars.keys():
                if sctPars[key] != "":
                    #print(sctPars[key])
                    f.write("{0:25s} #{1:s}\n".format(sctPars[key],
                                                      key.upper()))
        print('File ' + filename + ' exported.')
        msg = "File " + filename + ' exported.\n'
    else:
        msg = 'Updated .sct file not saved.\n'
    return msg
Exemple #6
0
    def chooseFiles(self, mode, oldFiles, acceptedMimeTypes):
        #Format acceptedMimeTypes
        nameFiltersString = ""
        for x in acceptedMimeTypes:
            nameFiltersString += "*" + x + " "
        uploadDialog = QFileDialog()

        if (args.downloadPath):
            uploadDialog.setDirectory(args.downloadPath)

        uploadDialog.setNameFilters([nameFiltersString])
        uploadDialog.setFileMode(QFileDialog.ExistingFile)
        uploadDialog.setAcceptMode(QFileDialog.AcceptOpen)

        options = QFileDialog.Options()
        options |= QFileDialog.ReadOnly
        options |= QFileDialog.DontUseNativeDialog

        uploadDialog.setOptions(options)

        if uploadDialog.exec_():
            fileName = uploadDialog.selectedFiles()
            return fileName

        return [""]
 def _save_copter_as(self):
     dialog = QFileDialog()
     dialog.setAcceptMode(QFileDialog.AcceptSave)
     dialog.setNameFilters(["JSON files (*.json)", "All Files (*)"])
     dialog.selectNameFilter("JSON files (*.json)")
     dialog.setDefaultSuffix("*.json")
     dialog.setDirectory(os.path.dirname(__copter_dir__))
     save = dialog.exec_()
     if save:
         copter_file = dialog.selectedFiles()
         copter_name = copter_file[0].split("/")[-1]
         copter_name = copter_name.split(".")[0]
         if not self.copter.name == copter_name:
             rename_msg = "Rename current copter to '{}'?".format(
                 copter_name)
             reply = QMessageBox.question(self, 'Message', rename_msg,
                                          QMessageBox.Yes, QMessageBox.No)
             if reply == QMessageBox.Yes:
                 self.copter.name = copter_name
                 self._init_copter_settings()
         json_serializer.writefile(copter_file[0], self.copter)
         self.settings.current_copter = copter_file[0]
         self.settings.save()
         self._open_copter_settings()
     return
 def openClicked(self):
     dlg = QFileDialog(self)
     dlg.setDefaultSuffix("json")
     dlg.setFileMode(QFileDialog.ExistingFile)
     dlg.setAcceptMode(QFileDialog.AcceptOpen)
     dlg.setNameFilters(("JSON files (*.json)", "All files (*)"))
     if dlg.exec():
         path = dlg.selectedFiles()[0]
         try:
             with WaitCursor():
                 with open(path, 'r') as f:
                     d = json.load(f)
                     warn = None
                     if 'version' not in d:
                         warn = "The JSON configuration file does not contain a version number. It may be incompatible with this program."
                     else:
                         cversion = StrictVersion(d['version'])
                         if cversion.version[0] != jsonversion.version[0]:
                             raise BaseException("The JSON configuration file format is not compatible with this version of %s" % QApplication.applicationDisplayName())
                         elif cversion.version[1] != jsonversion.version[1]:
                             warn = "The JSON configuration file format version does not match this version of %s. Incompatibilites should be handled gracefully, but unexpected results may occur." % QApplication.applicationDisplayName()
                     if warn:
                         with TempDefaultCursor():
                             QMessageBox.warning(self, "Warning", warn)
                     self.ui.settingsTab.unserialize(d)
                     self.ui.experimentsTab.unserialize(d['experiments'])
                 self.setModified(False)
                 self.currentFileChanged.emit(path)
         except BaseException as e:
             QMessageBox.critical(self, "Error", str(e))
Exemple #9
0
def FileDialog(directory='', forOpen=True, fmt='', isFolder=False):
    options = QFileDialog.Options()
    options |= QFileDialog.DontUseNativeDialog
    options |= QFileDialog.DontUseCustomDirectoryIcons
    dialog = QFileDialog()
    dialog.setOptions(options)

    dialog.setFilter(dialog.filter() | QtCore.QDir.Hidden)

    # ARE WE TALKING ABOUT FILES OR FOLDERS
    if isFolder:
        dialog.setFileMode(QFileDialog.DirectoryOnly)
    else:
        dialog.setFileMode(QFileDialog.AnyFile)
    # OPENING OR SAVING
    dialog.setAcceptMode(QFileDialog.AcceptOpen) if forOpen else dialog.setAcceptMode(QFileDialog.AcceptSave)

    # SET FORMAT, IF SPECIFIED
    if fmt != '' and isFolder is False:
        dialog.setDefaultSuffix(fmt)
        dialog.setNameFilters([f'{fmt} (*.{fmt})'])

    # SET THE STARTING DIRECTORY
    if directory != '':
        dialog.setDirectory(str(directory))
    else:
        dialog.setDirectory(str(ROOT_DIR))


    if dialog.exec_() == QDialog.Accepted:
        path = dialog.selectedFiles()[0]  # returns a list
        return path
    else:
        return ''
Exemple #10
0
 def saveRotatedFits(self, name_orig):
     """ Save the downloaded FITS image """
     
     filename, file_extension = os.path.splitext(name_orig)
     #fileroot = os.path.basename(filename)
     #print('file root is ', fileroot)
     print('Saving ',filename+'_NE.fits')
     # Dialog to save file
     fd = QFileDialog()
     fd.setLabelText(QFileDialog.Accept, "Save as")
     fd.setNameFilters(["Fits Files (*.fits)","All Files (*)"])
     fd.setOptions(QFileDialog.DontUseNativeDialog)
     fd.setViewMode(QFileDialog.List)
     fd.selectFile(filename+'_NE.fits')        
     if (fd.exec()):
         fileName = fd.selectedFiles()
         outfile = fileName[0]
         filename, file_extension = os.path.splitext(outfile)
         # basename = os.path.basename(filename)            
         # Primary header
         image = self.data
         wcs   = self.wcs
         header = wcs.to_header()
         header.remove('WCSAXES')
         header['INSTRUME'] = (self.source, 'Instrument')
         hdu = fits.PrimaryHDU(image)
         hdu.header.extend(header)
         hdul = fits.HDUList([hdu])
         hdul.writeto(outfile,overwrite=True) # clobber true  allows rewriting
         hdul.close()
Exemple #11
0
    def on_template_save_as(self):
        template_file = self.mainwindow.template_view_controller.selected_template
        if template_file is not None:
            fd = QFileDialog(self.mainwindow, "Save template",
                             self.template_dialog_path)
            fd.setDefaultSuffix("template")
            filters = [
                "Template files (*.template)", "JSON files (*.json)",
                "Any files (*)"
            ]
            fd.setNameFilters(filters)
            fd.setAcceptMode(QFileDialog.AcceptSave)
            if fd.exec():
                filename = fd.selectedFiles()[0]
                file = open(filename, "w")
                template_file.file = file

                self.save_file(file, template_file.template)

                templates = self.mainwindow.template_list_controller.templates
                filename = template_file.file.name
                if filename not in templates:
                    templates.append(filename)
                    self.mainwindow.template_list_controller.templates = templates
                    index = self.ui.templateListView.selectionModel().model(
                    ).createIndex(templates.index(filename), 0)
                    self.ui.templateListView.selectionModel().select(
                        index, QItemSelectionModel.Select)
                    self.mainwindow.template_view_controller.selected_template = file.name
Exemple #12
0
def exportContours(self):
    """Export defined contours."""
    itab = self.itabs.currentIndex()
    ic0 = self.ici[itab]
    ih0 = self.ihi[itab]
    if ic0.contour is not None:
        if ic0.title in ['Flux', 'Coverage map', 'Flux [no atm. corr.]']:
            source = self.specCube.instrument
        else:
            source = ic0.title
        info = [('source', source), ('levels', ih0.levels)]
        data = OrderedDict(info)
        # Open a dialog
        fd = QFileDialog()
        fd.setLabelText(QFileDialog.Accept, "Export as")
        fd.setNameFilters(["Json Files (*.json)", "All Files (*)"])
        fd.setOptions(QFileDialog.DontUseNativeDialog)
        fd.setViewMode(QFileDialog.List)
        if (fd.exec()):
            filenames = fd.selectedFiles()
            filename = filenames[0]
            if filename[-5:] != '.json':
                filename += '.json'
            print("Exporting contour levels to file: ", filename)
            with io.open(filename, mode='w') as f:
                str_ = json.dumps(data,
                                  indent=2,
                                  separators=(',', ': '),
                                  ensure_ascii=False,
                                  cls=MyEncoder)
                f.write(str_)
            self.sb.showMessage("Aperture exported in file " + filename, 3000)
    else:
        return
def saveDump(buf):
    dump = {"flash": []}
    for l in buf.split("\n"):
        if not l:
            break
        addr, val = l.split(":")
        dump["flash"].append({"addr": addr, "val": val})

    dlg = QFileDialog()
    dlg.setFileMode(QFileDialog.AnyFile)
    dlg.setNameFilters(["Json files (*.json)"])
    if dlg.exec_():
        filenames = dlg.selectedFiles()
        try:
            with open(filenames[0], "w") as f:
                json.dump(dump, f)
            msg = QMessageBox(QMessageBox.Information, "Save flash dump",
                              "Saved successfully.")
            msg.exec_()
        except Exception as e:
            msg = QMessageBox(QMessageBox.Warning, "Save flash dump",
                              "Error while saving flash dump:\n" + str(e))
            msg.exec_()
    else:
        return
Exemple #14
0
    def openLocalCube(self):
        """ Open local spectral cube."""

        # Open a dialog
        fd = QFileDialog()
        fd.setLabelText(QFileDialog.Accept, "Import")
        fd.setNameFilters(["Fits Files (*.fits)", "All Files (*)"])
        fd.setOptions(QFileDialog.DontUseNativeDialog)
        fd.setViewMode(QFileDialog.List)
        fd.setFileMode(QFileDialog.ExistingFile)

        if (fd.exec()):
            filenames = fd.selectedFiles()
            cube_file = filenames[0]
            print("File selected is: ", filenames[0])
            try:
                print('opening ', cube_file)
                self.data = specCube(cube_file)
                self.wcs = self.data.wcs
                # Check if coordinates are inside the image
                x, y = self.wcs.wcs_world2pix(self.lon, self.lat, 0)
                print('x y ', x, y)
                if x >= 0 and x <= self.data.nx and y >= 0 and y <= self.data.ny:
                    print('Source inside the FITS cube')
                else:
                    self.data = None
                    self.wcs = None
                    print('The selected  FITS is not a valid file')
            except:
                self.data = None
                self.wcs = None
                print('The selected  FITS is not a valid file')
Exemple #15
0
def dlg_export(parent):

	dialog = QFileDialog(parent)
	dialog.setWindowTitle(_("Export the simulation as"))
	dialog.setAcceptMode(QFileDialog.AcceptSave)
	types=[]
	types.append(_("gpvdm archive input+output files (*.gpvdm)"))
	types.append(_("gpvdm archive input files (*.gpvdm)"))
	types.append(_("optical materials database (*.zip)"))
	types.append(_("pdf file (*.pdf)"))
	types.append(_("jpg image (*.jpg)"))
	types.append(_("tex file (*.tex)"))
	types.append(_("Excel file (*.xlsx)"))

	dialog.setNameFilters(types)
	dialog.setFileMode(QFileDialog.ExistingFile)
	dialog.setAcceptMode(QFileDialog.AcceptSave)

	if dialog.exec_() == QDialog.Accepted:
		file_name = dialog.selectedFiles()[0]
		if dialog.selectedNameFilter()==_("gpvdm archive input+output files (*.gpvdm)"):
			export_archive(file_name,True)
		elif dialog.selectedNameFilter()==_("gpvdm archive input files (*.gpvdm)"):
			export_archive(file_name,False)
		elif dialog.selectedNameFilter()==_("optical materials database (*.zip)"):
			export_materials(file_name)
		elif dialog.selectedNameFilter()==_("pdf file (*.pdf)") or dialog.selectedNameFilter()==_("jpg image (*.jpg)") or dialog.selectedNameFilter()==_("tex file (*.tex)"):
			export_as(file_name)
		elif dialog.selectedNameFilter()==_("Excel file (*.xlsx)"):
			gen_workbook(os.getcwd(),file_name)
Exemple #16
0
 def openProjectDialog(self):
     fileDialog = QFileDialog()
     fileDialog.setDefaultSuffix("pyr")
     fileDialog.setFileMode(QFileDialog.ExistingFile)
     fileDialog.setNameFilters(["Pyree Project Files (*.pyr)", "Any files (*)"])
     if fileDialog.exec():
         self.openProject(fileDialog.selectedFiles()[0])
Exemple #17
0
 def on_btnExportTrace_clicked(self):
     """
     Export the contents of the trace tab to .txt file
     """
     # get filename to save as
     dlg = QFileDialog()
     dlg.setAcceptMode(QFileDialog.AcceptSave)
     dlg.setDefaultSuffix("txt")
     dlg.setNameFilters(["Trace File (*.txt)", "all files (*.*)"])
     dlg.setDirectory(self.parent.settings.value("Default/ProjPath"))
     if dlg.exec_():
         fileNames = dlg.selectedFiles()
         if fileNames:
             self.fileName = fileNames[0]
             # save the file
             file = QFile(self.fileName)
             if not file.open(QFile.WriteOnly | QFile.Text):
                 self.helper.displayErrMsg(
                     "Export Trace Error", "Cannot write file {} {}".format(
                         self.fileName, file.errorString()))
                 return
             outstr = QTextStream(file)
             QApplication.setOverrideCursor(Qt.WaitCursor)
             outstr << self.textTrace.toPlainText()
             QApplication.restoreOverrideCursor()
Exemple #18
0
 def pick_picture(self):
     qfd = QFileDialog()
     qfd.setNameFilters(["*.png", "*.jpg"])
     if qfd.exec():
         files = qfd.selectedFiles()
         for file in files:
             self.send_picture(file)
    def getImageFileNamesToOpen(cls, parent_window, defaultDirectory):
        """
        Launch an "Open File" dialog to ask the user for one or more image files.
        """
        extensions = OpDataSelection.SupportedExtensions
        filter_strs = ["*." + x for x in extensions]
        filters = ["{filt} ({filt})".format(filt=x) for x in filter_strs]
        filt_all_str = "Image files (" + ' '.join(filter_strs) + ')'

        fileNames = []
        
        if ilastik_config.getboolean("ilastik", "debug"):
            # use Qt dialog in debug mode (more portable?)
            file_dialog = QFileDialog(parent_window, "Select Images")
            file_dialog.setOption(QFileDialog.DontUseNativeDialog, True)
            # do not display file types associated with a filter
            # the line for "Image files" is too long otherwise
            file_dialog.setNameFilters([filt_all_str] + filters)
            #file_dialog.setNameFilterDetailsVisible(False)
            # select multiple files
            file_dialog.setFileMode(QFileDialog.ExistingFiles)
            file_dialog.setDirectory( defaultDirectory )

            if file_dialog.exec_():
                fileNames = file_dialog.selectedFiles()
        else:
            # otherwise, use native dialog of the present platform
            fileNames, _filter = QFileDialog.getOpenFileNames(parent_window, "Select Images", defaultDirectory, filt_all_str)
        return fileNames
Exemple #20
0
def _fileDialog(acceptMode, fileMode,
                parent=None, caption='', directory='', filters=(),
                selectedFilter=None, options=0):

    nameFilters = make_filters(filters)

    dialog = QFileDialog(parent, caption, directory)
    dialog.setNameFilters(nameFilters)
    dialog.setAcceptMode(acceptMode)
    dialog.setFileMode(fileMode)
    dialog.setOptions(QFileDialog.Options(options))
    if selectedFilter is not None:
        dialog.selectNameFilter(nameFilters[selectedFilter])

    if dialog.exec_() != QDialog.Accepted:
        return None

    filename = dialog.selectedFiles()[0]
    if fileMode != QFileDialog.Directory:
        selectedFilter = nameFilters.index(dialog.selectedNameFilter())

        _, ext = os.path.splitext(filename)

        if not ext:
            ext = filters[selectedFilter][1]    # use first extension
            if ext.startswith('*.') and ext != '*.*':
                return filename + ext[1:]       # remove leading '*'
    return filename
Exemple #21
0
    def handlebuttonbrowse(self):
        dlg = QFileDialog()
        dlg.setFileMode(QFileDialog.AnyFile)
        dlg.setAcceptMode(QFileDialog.AcceptSave)
        dlg.setLabelText(QFileDialog.Accept, "Save comparison")
        dlg.setDefaultSuffix(self.expected_extension.strip('.'))

        inputfilename = self.settings.get_object('inputfilename')
        dirname = os.path.dirname(inputfilename)
        suggested_filename = os.path.splitext(
            os.path.basename(inputfilename))[0] + self.expected_extension
        dlg.setDirectory(dirname)
        dlg.selectFile(suggested_filename)

        filternames = [
            "%s files (*%s)" % (ext.strip('.'), ext)
            for ext in [self.expected_extension]
        ]
        filternames += ["all files (*)"]
        dlg.setNameFilters(filternames)

        if dlg.exec_():
            self.outputfilename = str(dlg.selectedFiles()[0])
        self.settings.register('outputfilename', self)
        self.outputfile.setText(shorten_path(self.outputfilename))

        if self.outputfilename:
            self.compare()
            self.issaved = True

            print('Complete!')

            self.buttonshow.setEnabled(True)
Exemple #22
0
    def set_input(self) -> None:
        """Handler for the input button."""
        try:
            dialog = QFileDialog()
            dialog.setFileMode(QFileDialog.ExistingFile)
            dialog.setNameFilters(["GEDCOM files (*.ged)"])
            if not dialog.exec():
                return

            files = dialog.selectedFiles()
            assert len(files) == 1
            ged_path = files[0]
            self.input_value.setText(ged_path)

            import_config = {
                'input': ged_path,
            }
            ged_import = ged2dot.GedcomImport()
            graph = ged_import.load(import_config)
            self.rootfamily_value.clear()
            for node in graph:
                if not isinstance(node, ged2dot.Family):
                    continue
                help_string = ""
                if node.husb and node.husb.get_surname():
                    help_string += node.husb.get_surname()
                help_string += "-"
                if node.wife and node.wife.get_surname():
                    help_string += node.wife.get_surname()
                key = "%s (%s)" % (node.get_identifier(), help_string)
                self.rootfamily_value.addItem(key, node.get_identifier())
            self.update_status()
        except Exception:  # pylint: disable=broad-except
            self.print_traceback()
Exemple #23
0
    def importAction(self):
        fileDialog = QFileDialog(self)
        fileDialog.setWindowTitle("Import VisualStates File")
        fileDialog.setViewMode(QFileDialog.Detail)
        fileDialog.setNameFilters(['VisualStates File (*.xml)'])
        fileDialog.setDefaultSuffix('.xml')
        fileDialog.setAcceptMode(QFileDialog.AcceptOpen)
        if fileDialog.exec_():
            tempPath = self.fileManager.getFullPath()
            file = self.fileManager.open(fileDialog.selectedFiles()[0])
            if file[0] is not None:
                self.fileManager.setPath(tempPath)
                # if the current active state already has an initial state make sure that
                # there will not be any initial state in the imported state
                if self.activeState.getInitialChild() is not None:
                    for childState in file[0].getChildren():
                        childState.setInitial(False)

                # Update importing Namespaces
                importedState, self.config, self.libraries, self.globalNamespace = self.importManager.updateAuxiliaryData(file, self)
                self.treeModel.loadFromRoot(importedState, self.activeState)
                self.automataScene.displayState(self.activeState)
                self.automataScene.setLastIndexes(self.rootState)
            else:
                self.showWarning("Wrong file selected",
                                 "The selected file is not a valid VisualStates file")
def dlg_export(parent):

	dialog = QFileDialog(parent)
	dialog.setWindowTitle(_("Export the simulation as"))
	dialog.setAcceptMode(QFileDialog.AcceptSave)
	types=[]
	types.append(_("gpvdm archive input+output files")+" (*.gpvdm)")
	types.append(_("gpvdm archive input files")+" (*.gpvdm)")
	types.append(_("optical materials database")+" (*.zip)")
	types.append(_("pdf file")+" (*.pdf)")
	types.append(_("jpg image")+" (*.jpg)")
	types.append(_("tex file")+" (*.tex)")

	dialog.setNameFilters(types)
	dialog.setFileMode(QFileDialog.ExistingFile)
	dialog.setAcceptMode(QFileDialog.AcceptSave)

	if dialog.exec_() == QDialog.Accepted:
		file_name = dialog.selectedFiles()[0]
		#print(dialog.selectedNameFilter())
		if dialog.selectedNameFilter()==_("gpvdm archive input+output files")+" (*.gpvdm)":
			export_archive(file_name,True)
		elif dialog.selectedNameFilter()==_("gpvdm archive input files")+" (*.gpvdm)":
			export_archive(file_name,False)
		elif dialog.selectedNameFilter()==_("optical materials database")+" (*.zip)":
			export_materials(file_name)
		elif dialog.selectedNameFilter()==_("pdf file")+" (*.pdf)" or dialog.selectedNameFilter()==_("jpg image")+" (*.jpg)" or dialog.selectedNameFilter()==_("tex file")+" (*.tex)":
			export_as(file_name)
Exemple #25
0
    def getModelFileNameToOpen(cls, parent_window, defaultDirectory):
        """
        opens a QFileDialog for importing files
        """
        extensions = ["pytorch"]
        filter_strs = ["*." + x for x in extensions]
        filters = ["{filt} ({filt})".format(filt=x) for x in filter_strs]
        filt_all_str = "Neural nets (" + " ".join(filter_strs) + ")"

        fileName = None

        if ilastik_config.getboolean("ilastik", "debug"):
            # use Qt dialog in debug mode (more portable?)
            file_dialog = QFileDialog(parent_window, "Select Model")
            file_dialog.setOption(QFileDialog.DontUseNativeDialog, True)
            # do not display file types associated with a filter
            # the line for "Image files" is too long otherwise
            file_dialog.setNameFilters([filt_all_str] + filters)
            # file_dialog.setNameFilterDetailsVisible(False)
            file_dialog.setFileMode(QFileDialog.ExistingFile)
            file_dialog.setDirectory(defaultDirectory)

            if file_dialog.exec_():
                fileName = file_dialog.selectedFiles()[0]
        else:
            # otherwise, use native dialog of the present platform
            fileName, _ = QFileDialog.getOpenFileName(parent_window,
                                                      "Select Model",
                                                      defaultDirectory,
                                                      filt_all_str)

        return fileName
Exemple #26
0
def file_dialog(dir='', for_open=True, fmt='', is_folder=False):
    """Dialog z eksploratorem Windows. Otwieranie/tworzenie folderów i plików."""
    options = QFileDialog.Options()
    options |= QFileDialog.DontUseNativeDialog
    options |= QFileDialog.DontUseCustomDirectoryIcons
    dialog = QFileDialog()
    dialog.setOptions(options)
    dialog.setFilter(dialog.filter() | QDir.Hidden)
    if is_folder:  # Otwieranie folderu
        dialog.setFileMode(QFileDialog.DirectoryOnly)
    else:  # Otwieranie pliku
        dialog.setFileMode(QFileDialog.AnyFile)
    # Otwieranie / zapisywanie:
    dialog.setAcceptMode(
        QFileDialog.AcceptOpen) if for_open else dialog.setAcceptMode(
            QFileDialog.AcceptSave)
    # Ustawienie filtrowania rozszerzeń plików:
    if fmt != '' and not is_folder:
        dialog.setDefaultSuffix(fmt)
        dialog.setNameFilters([f'{fmt} (*.{fmt})'])
    # Ścieżka startowa:
    if dir != '':
        dialog.setDirectory(str(dir))
    else:
        dialog.setDirectory(str(os.environ["HOMEPATH"]))
    # Przekazanie ścieżki folderu/pliku:
    if dialog.exec_() == QDialog.Accepted:
        path = dialog.selectedFiles()[0]
        return path
    else:
        return ''
Exemple #27
0
def _fileDialog(acceptMode,
                fileMode,
                parent=None,
                caption='',
                directory='',
                filters=(),
                selectedFilter=None,
                options=0):

    nameFilters = make_filters(filters)

    dialog = QFileDialog(parent, caption, directory)
    dialog.setNameFilters(nameFilters)
    dialog.setAcceptMode(acceptMode)
    dialog.setFileMode(fileMode)
    dialog.setOptions(QFileDialog.Options(options))
    if selectedFilter is not None:
        dialog.selectNameFilter(nameFilters[selectedFilter])

    if dialog.exec_() != QDialog.Accepted:
        return None

    filename = dialog.selectedFiles()[0]
    if fileMode != QFileDialog.Directory:
        selectedFilter = nameFilters.index(dialog.selectedNameFilter())

        _, ext = os.path.splitext(filename)

        if not ext:
            ext = filters[selectedFilter][1]  # use first extension
            if ext.startswith('*.') and ext != '*.*':
                return filename + ext[1:]  # remove leading '*'
    return filename
Exemple #28
0
 def on_btnExportLog_clicked(self):
     """
     Export the contents of the log tab to .csv file
     """
     # get filename to save as
     dlg = QFileDialog()
     dlg.setAcceptMode(QFileDialog.AcceptSave)
     dlg.setDefaultSuffix("csv")
     dlg.setNameFilters(["Log File (*.csv)", "all files (*.*)"])
     dlg.setDirectory(self.parent.settings.value("Default/ProjPath"))
     if dlg.exec_():
         fileNames = dlg.selectedFiles()
         try:
             if fileNames:
                 self.fileName = fileNames[0]
                 # save the file
                 with open(self.fileName, 'w', newline='') as csvfile:
                     csvWriter = csv.writer(csvfile,
                                            delimiter=',',
                                            quotechar='"',
                                            quoting=csv.QUOTE_MINIMAL)
                     for row in range(self.gridLog.model().rowCount()):
                         rowItems = []
                         for col in range(
                                 self.gridLog.model().columnCount()):
                             value = self.gridLog.model().index(
                                 row, col,
                                 QModelIndex()).data(Qt.DisplayRole)
                             rowItems.append(value)
                         csvWriter.writerow(c for c in rowItems)
         except BaseException as e:
             msg = "{} - {} failed.".format("Write CSV", repr(e))
             self.helper.displayErrMsg("Export CSV Error", msg)
Exemple #29
0
def conv_save_pressed(P, W):
    head = _translate('HandlerClass', 'Save Error')
    with open(P.fNgc, 'r') as inFile:
        for line in inFile:
            if '(new conversational file)' in line:
                msg0 = _translate('HandlerClass',
                                  'An empty file cannot be saved')
                P.dialog_show_ok(QMessageBox.Warning, '{}'.format(head),
                                 '{}\n'.format(msg0))
                return
    P.vkb_show()
    dlg = QFileDialog(W)
    dlg.setOptions(QFileDialog.DontUseNativeDialog)
    dlg.setAcceptMode(QFileDialog.AcceptSave)
    dlg.setNameFilters(['G-Code Files (*.ngc *.nc *.tap)', 'All Files (*)'])
    dlg.setDefaultSuffix('ngc')
    dlg.setDirectory(P.programPrefix)
    name = ''
    if dlg.exec_():
        name = dlg.selectedFiles()[0]
    if name:
        COPY(P.fNgc, name)
        W.conv_save.setEnabled(False)
        conv_enable_tabs(P, W)
    P.vkb_show(True)
Exemple #30
0
    def getImageFileNamesToOpen(cls, parent_window, defaultDirectory):
        """
        opens a QFileDialog for importing files
        """
        extensions = ['nn']
        filter_strs = ["*." + x for x in extensions]
        filters = ["{filt} ({filt})".format(filt=x) for x in filter_strs]
        filt_all_str = "Image files (" + ' '.join(filter_strs) + ')'

        fileNames = []

        if ilastik_config.getboolean("ilastik", "debug"):
            # use Qt dialog in debug mode (more portable?)
            file_dialog = QFileDialog(parent_window, "Select Model")
            file_dialog.setOption(QFileDialog.DontUseNativeDialog, True)
            # do not display file types associated with a filter
            # the line for "Image files" is too long otherwise
            file_dialog.setNameFilters([filt_all_str] + filters)
            #file_dialog.setNameFilterDetailsVisible(False)
            # select multiple files
            file_dialog.setFileMode(QFileDialog.ExistingFiles)
            file_dialog.setDirectory(defaultDirectory)

            if file_dialog.exec_():
                fileNames = file_dialog.selectedFiles()
        else:
            # otherwise, use native dialog of the present platform
            fileNames, _ = QFileDialog.getOpenFileNames(parent_window, "Select Model", defaultDirectory, filt_all_str)

        return fileNames
Exemple #31
0
 def file_dlg(self, text):
     msg_box = QMessageBox()
     msg_box.setIcon(QMessageBox.Question)
     try:
         msg_box.setWindowIcon(
             QtGui.QIcon(os.path.join("misc", "archerrank2.svg")))
     except FileNotFoundError:
         msg_box.setWindowIcon(
             QtGui.QIcon(
                 os.path.abspath(
                     os.path.join(os.path.dirname(sys.argv[0]), "misc",
                                  "archerrank2.svg"))))
     msg_box.setText(self.tr("Question"))
     msg_box.setInformativeText(text)
     msg_box.addButton(self.tr('Load'), QMessageBox.AcceptRole)
     msg_box.addButton(self.tr('New'), QMessageBox.AcceptRole)
     msg_box.addButton(self.tr('Exit'), QMessageBox.NoRole)
     reply = msg_box.exec_()
     if reply == 0:
         fileName, _ = QFileDialog.getOpenFileName(
             None, "QFileDialog.getOpenFileName()", "",
             "Acherrang2 Files (*.sqlite)")
         return fileName
     elif reply == 1:
         filedialog = QFileDialog(msg_box)
         filedialog.setFilter(filedialog.filter() | QtCore.QDir.Hidden)
         filedialog.setDefaultSuffix('sqlite')
         filedialog.setAcceptMode(QFileDialog.AcceptSave)
         filedialog.setNameFilters(["Acherrang2 Files (*.sqlite)"])
         if filedialog.exec_() == QFileDialog.Accepted:
             return filedialog.selectedFiles()[0]
         return
     else:
         return "exit"
Exemple #32
0
    def contextCoverMenu(self, point):
        if len(self.treeFileList.selectedItems()) == 1:
            menu = QMenu()

            actionLoad = menu.addAction(_translate('fb2mobi-gui', 'Load from file...'))
            actionSave = menu.addAction(_translate('fb2mobi-gui', 'Save to file...'))
            actionClear = menu.addAction(_translate('fb2mobi-gui', 'Clear'))

            action = menu.exec_(self.imgBookCover.mapToGlobal(point))

            if action == actionLoad:
                fileDialog = QFileDialog(self, _translate('fb2mobi-gui', 'Select book cover'))
                fileDialog.setFileMode(QFileDialog.ExistingFile)
                fileDialog.setNameFilters([_translate('fb2mobi-gui', 'Image files (*.png *.jpg *.bmp)')])

                if fileDialog.exec_():
                    file_list = fileDialog.selectedFiles()
                    self.loadNewCoverFormFile(file_list[0])
            elif action == actionSave:
                fileDialog = QFileDialog(self, _translate('fb2mobi-gui', 'Save cover as'))
                fileDialog.setAcceptMode(QFileDialog.AcceptSave)
                fileDialog.setFileMode(QFileDialog.AnyFile)
                fileDialog.setNameFilters([_translate('fb2mobi-gui', 'Image files (*.png *.jpg *.bmp)')])

                if fileDialog.exec_():
                    file_list = fileDialog.selectedFiles()  
                    self.book_cover.save(file_list[0], os.path.splitext(file_list[0])[1][1:].upper());

            elif action == actionClear:
                self.book_cover = None
                self.imgBookCover.clear()
Exemple #33
0
 def on_layout_save(self):
     dialog = QFileDialog()
     dialog.setDefaultSuffix("vil")
     dialog.setAcceptMode(QFileDialog.AcceptSave)
     dialog.setNameFilters(["Vial layout (*.vil)"])
     if dialog.exec_() == QDialog.Accepted:
         with open(dialog.selectedFiles()[0], "wb") as outf:
             outf.write(self.keymap_editor.save_layout())
 def fromFile(self):
     dlg = QFileDialog(self)
     dlg.setFileMode(QFileDialog.ExistingFile)
     dlg.setAcceptMode(QFileDialog.AcceptOpen)
     dlg.setNameFilters(("CSV files (*.csv *.txt)", "All files (*)"))
     if dlg.exec():
         path = dlg.selectedFiles()[0]
         self._fromFile(path)
Exemple #35
0
 def saveAsAction(self):
     fileDialog = QFileDialog(self)
     fileDialog.setWindowTitle("Save VisualStates Project")
     fileDialog.setViewMode(QFileDialog.Detail)
     fileDialog.setNameFilters(['VisualStates File (*.xml)'])
     fileDialog.setAcceptMode(QFileDialog.AcceptSave)
     if fileDialog.exec_():
         self.fileManager.setFullPath(fileDialog.selectedFiles()[0])
         self.fileManager.save(self.rootState, self.config, self.libraries)
Exemple #36
0
 def saveProjectDialog(self, saveAs = False):
     if saveAs or self.currentProject.filePath is None:
         fileDialog = QFileDialog()
         fileDialog.setDefaultSuffix("pyr")
         fileDialog.setFileMode(QFileDialog.AnyFile)
         fileDialog.setNameFilters(["Pyree Project Files (*.pyr)", "Any files (*)"])
         if fileDialog.exec():
             self.currentProject.saveToFile(fileDialog.selectedFiles()[0])
     else:
         self.currentProject.saveToFile(self.currentProject.filePath)
Exemple #37
0
 def open_file(self):
     dlg = QFileDialog(self)
     dlg.setWindowTitle('Open image')
     dlg.setViewMode(QFileDialog.Detail)
     dlg.setNameFilters([self.tr('Image Files (*.bmp)'), self.tr('All Files (*)')])
     dlg.setDefaultSuffix('.bmp')
     functions.set_style_sheet(dlg, STYLE_SHEET)
             
     if dlg.exec_() :
         self.piximage = piximage2.PixImage(dlg.selectedFiles()[0])
         self.display()
Exemple #38
0
 def on_action_Import_triggered(self):
     caption = 'Import csv dat'
     dialog = QFileDialog(self, caption)
     dialog.setFileMode(QFileDialog.ExistingFile)
     dialog.setNameFilters(['CSV soubory (*.csv)', 'Všechny soubory (*)'])
     if dialog.exec_():
         importDialog = ImportDialog()
         importDialog.setFilename(dialog.selectedFiles()[0])
         importDialog.exec_()
         self.updateData()
         self.blocksWidget.updateData()
         self.measurementsWidget.updateData()
Exemple #39
0
    def open_text(self):
        # Show loading page
        self.taggedTextWidget.stop()
        self.taggedTextWidget.showLoading()

        self.taggedDocumentWidget.stop()
        self.taggedDocumentWidget.showLoading()

        dialog = QFileDialog(self)
        dialog.setNameFilters([self.tr('Text Files (*.txt)'), self.tr('All Files (*)')])
        dialog.setDefaultSuffix('.txt')
        file_name = dialog.getOpenFileName(self, 'Open file')
        self.progressBar.setVisible(True)
        self.progressBar_2.setVisible(True)
        self.progressBar_3.setVisible(True)
        if file_name[0] != '':
            text = codecs.open(file_name[0], "r", "utf-8").read()
            # We need to create new TextWorker
            self.tag = (TextWorker(), QtCore.QThread())

            # prompt for custom common words list
            msg = QMessageBox()
            question = "Do you want to choose a custom list of domain specific common words?"
            reply = msg.question(self, 'Message', question, msg.Yes, msg.No)
            if reply == msg.Yes:
                dialog = QFileDialog(self)
                dialog.setNameFilters([self.tr('Text Files (*.txt)'), self.tr('All Files (*)')])
                dialog.setDefaultSuffix('.txt')
                file_name = dialog.getOpenFileName(self, 'Open file')
                self.tag[0].common_words_file = file_name[0]
            else:
                self.tag[0].common_words_file = "textparser/wordlist.txt"

            self.tag[0].TextToParse = text
            self.textEdit.setText(text)
            # Gray out all buttons
            self.openButton_1.setEnabled(False)
            self.openButton_2.setEnabled(False)
            self.actionText_ffnen.setEnabled(False)
            self.textEditApply.setEnabled(False)
            self.textEditApplyMarked.setEnabled(False)
            self.textEditSave.setEnabled(False)

            # Create Thread
            self.tag[1].objThread = QtCore.QThread()
            self.tag[0].moveToThread(self.tag[1])
            self.tag[0].finished.connect(self.tag[1].quit)
            self.tag[0].updated.connect(self.updateWorkerInfo);
            # self.tag[0].finished.connect(self.finishOpen)
            self.tag[1].started.connect(self.tag[0].longRunning)
            self.tag[1].finished.connect(self.finishOpen)

            self.tag[1].start()
Exemple #40
0
 def saveTextEdit(self):
     filename = ""
     dialog = QFileDialog(self, 'Save File')
     dialog.setNameFilters([self.tr('Text Files (*.txt)'), self.tr('All Files (*)')])
     dialog.setDefaultSuffix('.txt')
     filename = dialog.getSaveFileName()
     file = filename[0]
     if not file.endswith('.txt'):
         file += ".txt"
     f = open(file, 'w')
     filedata = self.textEdit.toPlainText()
     f.write(filedata)
     f.close()
Exemple #41
0
 def openAction(self):
     fileDialog = QFileDialog(self)
     fileDialog.setWindowTitle("Open VisualStates File")
     fileDialog.setViewMode(QFileDialog.Detail)
     fileDialog.setNameFilters(['VisualStates File (*.xml)'])
     fileDialog.setDefaultSuffix('.xml')
     fileDialog.setAcceptMode(QFileDialog.AcceptOpen)
     if fileDialog.exec_():
         (self.rootState, self.config, self.libraries) = self.fileManager.open(fileDialog.selectedFiles()[0])
         self.treeModel.removeAll()
         self.treeModel.loadFromRoot(self.rootState)
         # set the active state as the loaded state
         self.automataScene.setActiveState(self.rootState)
         self.automataScene.setLastIndexes(self.rootState)
Exemple #42
0
 def save_file(self):
     dlg = QFileDialog(self)
     dlg.setWindowTitle('Open image')
     dlg.setViewMode(QFileDialog.Detail)
     dlg.setFileMode(QFileDialog.AnyFile)
     dlg.setAcceptMode(QFileDialog.AcceptSave)
     dlg.setNameFilters([self.tr('Image Files (*.bmp)'), self.tr('All Files (*)')])
     dlg.setDefaultSuffix('.bmp')
     functions.set_style_sheet(dlg, STYLE_SHEET)
             
     if dlg.exec_():
         path = dlg.selectedFiles()[0]
         i = self.ui.tabWidget.currentIndex()
     
         if self.piximage is not None: 
             if (i == 0):
                 self.piximage.image_o.save(path)
             elif (i == 1):
                 self.piximage.image_t.save(path)
             elif (i == 2):
                 self.piximage.image_t_color.save(path)
    def requestWrite(self, nodes, file_name = None, limit_mimetypes = None, file_handler = None, **kwargs):
        if self._writing:
            raise OutputDeviceError.DeviceBusyError()

        # Set up and display file dialog
        dialog = QFileDialog()

        dialog.setWindowTitle(catalog.i18nc("@title:window", "Save to File"))
        dialog.setFileMode(QFileDialog.AnyFile)
        dialog.setAcceptMode(QFileDialog.AcceptSave)

        # Ensure platform never ask for overwrite confirmation since we do this ourselves
        dialog.setOption(QFileDialog.DontConfirmOverwrite)

        if sys.platform == "linux" and "KDE_FULL_SESSION" in os.environ:
            dialog.setOption(QFileDialog.DontUseNativeDialog)

        filters = []
        mime_types = []
        selected_filter = None

        if "preferred_mimetypes" in kwargs and kwargs["preferred_mimetypes"] is not None:
            preferred_mimetypes = kwargs["preferred_mimetypes"]
        else:
            preferred_mimetypes = Application.getInstance().getPreferences().getValue("local_file/last_used_type")
        preferred_mimetype_list = preferred_mimetypes.split(";")

        if not file_handler:
            file_handler = Application.getInstance().getMeshFileHandler()

        file_types = file_handler.getSupportedFileTypesWrite()

        file_types.sort(key = lambda k: k["description"])
        if limit_mimetypes:
            file_types = list(filter(lambda i: i["mime_type"] in limit_mimetypes, file_types))

        file_types = [ft for ft in file_types if not ft["hide_in_file_dialog"]]

        if len(file_types) == 0:
            Logger.log("e", "There are no file types available to write with!")
            raise OutputDeviceError.WriteRequestFailedError(catalog.i18nc("@info:warning", "There are no file types available to write with!"))

        # Find the first available preferred mime type
        preferred_mimetype = None
        for mime_type in preferred_mimetype_list:
            if any(ft["mime_type"] == mime_type for ft in file_types):
                preferred_mimetype = mime_type
                break

        for item in file_types:
            type_filter = "{0} (*.{1})".format(item["description"], item["extension"])
            filters.append(type_filter)
            mime_types.append(item["mime_type"])
            if preferred_mimetype == item["mime_type"]:
                selected_filter = type_filter
                if file_name:
                    file_name += "." + item["extension"]

        # CURA-6411: This code needs to be before dialog.selectFile and the filters, because otherwise in macOS (for some reason) the setDirectory call doesn't work.
        stored_directory = Application.getInstance().getPreferences().getValue("local_file/dialog_save_path")
        dialog.setDirectory(stored_directory)

        # Add the file name before adding the extension to the dialog
        if file_name is not None:
            dialog.selectFile(file_name)

        dialog.setNameFilters(filters)
        if selected_filter is not None:
            dialog.selectNameFilter(selected_filter)

        if not dialog.exec_():
            raise OutputDeviceError.UserCanceledError()

        save_path = dialog.directory().absolutePath()
        Application.getInstance().getPreferences().setValue("local_file/dialog_save_path", save_path)

        selected_type = file_types[filters.index(dialog.selectedNameFilter())]
        Application.getInstance().getPreferences().setValue("local_file/last_used_type", selected_type["mime_type"])

        # Get file name from file dialog
        file_name = dialog.selectedFiles()[0]
        Logger.log("d", "Writing to [%s]..." % file_name)
        
        if os.path.exists(file_name):
            result = QMessageBox.question(None, catalog.i18nc("@title:window", "File Already Exists"), catalog.i18nc("@label Don't translate the XML tag <filename>!", "The file <filename>{0}</filename> already exists. Are you sure you want to overwrite it?").format(file_name))
            if result == QMessageBox.No:
                raise OutputDeviceError.UserCanceledError()

        self.writeStarted.emit(self)

        # Actually writing file
        if file_handler:
            file_writer = file_handler.getWriter(selected_type["id"])
        else:
            file_writer = Application.getInstance().getMeshFileHandler().getWriter(selected_type["id"])

        try:
            mode = selected_type["mode"]
            if mode == MeshWriter.OutputMode.TextMode:
                Logger.log("d", "Writing to Local File %s in text mode", file_name)
                stream = open(file_name, "wt", encoding = "utf-8")
            elif mode == MeshWriter.OutputMode.BinaryMode:
                Logger.log("d", "Writing to Local File %s in binary mode", file_name)
                stream = open(file_name, "wb")
            else:
                Logger.log("e", "Unrecognised OutputMode.")
                return None

            job = WriteFileJob(file_writer, stream, nodes, mode)
            job.setFileName(file_name)
            job.setAddToRecentFiles(True)  # The file will be added into the "recent files" list upon success
            job.progress.connect(self._onJobProgress)
            job.finished.connect(self._onWriteJobFinished)

            message = Message(catalog.i18nc("@info:progress Don't translate the XML tags <filename>!", "Saving to <filename>{0}</filename>").format(file_name),
                              0, False, -1 , catalog.i18nc("@info:title", "Saving"))
            message.show()

            job.setMessage(message)
            self._writing = True
            job.start()
        except PermissionError as e:
            Logger.log("e", "Permission denied when trying to write to %s: %s", file_name, str(e))
            raise OutputDeviceError.PermissionDeniedError(catalog.i18nc("@info:status Don't translate the XML tags <filename>!", "Permission denied when trying to save <filename>{0}</filename>").format(file_name)) from e
        except OSError as e:
            Logger.log("e", "Operating system would not let us write to %s: %s", file_name, str(e))
            raise OutputDeviceError.WriteRequestFailedError(catalog.i18nc("@info:status Don't translate the XML tags <filename> or <message>!", "Could not save to <filename>{0}</filename>: <message>{1}</message>").format()) from e
Exemple #44
0
class MainWindow(QMainWindow):

    upload_pictures = pyqtSignal(list)

    def __init__(self, **kwargs):
        super(MainWindow, self).__init__(**kwargs)

        load_ui('MainWindow.ui', self)
        self.setWindowTitle('Picup - {}'.format(__version__))

        apikey = get_api_key(self)
        self.upload_in_progress = False
        self.upload_thread = QThread()
        self.upload = Upload(apikey=apikey)
        self.upload_thread.start()
        self.upload.moveToThread(self.upload_thread.thread())

        self.listView_files_model = FileListModel()
        self.listView_files.setModel(self.listView_files_model)

        self.pushButton_close.clicked.connect(self.close)
        self.pushButton_add_picture.clicked.connect(self.add_file)
        self.pushButton_upload.clicked.connect(self.start_upload)
        self.pushButton_clear_list.clicked.connect(
                                        self.listView_files_model.clear_list)
        self.pushButton_remove_selected.clicked.connect(self.remove_selected)

        self.upload.upload_finished.connect(self.upload_finished)
        self.upload.upload_error.connect(self.handle_error)

        self.upload_pictures.connect(self.upload.upload_multiple)

        self.dialog = QFileDialog(parent=self)
        self.dialog.setFileMode(QFileDialog.ExistingFiles)
        self.dialog.setNameFilters(SUPPORTED_FILE_TYPES)


    @pyqtSlot()
    def add_file(self):

        if self.dialog.exec_():
            files = self.dialog.selectedFiles()
            self.listView_files_model.add_files(files)

    @pyqtSlot()
    def start_upload(self,):
        print(self.upload_thread.isRunning())
        if (len(self.listView_files_model.files)
            and not self.upload_in_progress):
            self.upload_in_progress = True
            link_dialog = ShowLinks(self.upload,
                                    len(self.listView_files_model.files),
                                    parent=self)
            link_dialog.show()

            self.upload_pictures.emit(self.listView_files_model.files)
            self.listView_files_model.clear_list()
        elif self.upload_in_progress:
            logger.debug('Upload already in progress.')
            QMessageBox.warning(self, 'Upload Läuft', 'Es läuft bereits ein Upload Prozess.')

        else:
            logger.debug('There is nothing to upload.')
            QMessageBox.information(self, 'Nüx da', 'Es wurden keine bilder zum hochladen hinzugefügt')

    @pyqtSlot()
    def upload_finished(self):
        self.upload_in_progress = False

    @pyqtSlot(type, tuple)
    def handle_error(self, exception_type, args):
        message = QMessageBox(QMessageBox.Warning, 'Fehler',
                              'Fehler beim upload.', buttons=QMessageBox.Ok,
                              parent=self)
        message.setDetailedText(repr(exception_type) + '\n' + repr(args))

        message.exec_()

    @pyqtSlot()
    def remove_selected(self,):
        for item in self.listView_files.selectedIndexes():
            self.listView_files_model.remove_element(item.row(), item.row())
Exemple #45
0
class MainWindow(QMainWindow):
    """
    Main window class.
    Includes the main window itself as well as handling of it's signals
    """

    upload_pictures = pyqtSignal(list)

    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        load_ui('MainWindow.ui', self)
        self.setWindowTitle('Picup - {}'.format(__version__))

        apikey = get_api_key()
        if not apikey:
            apikey = self.request_api_key()

        self.legal_resize = True
        self.upload_in_progress = False
        self.upload_thread = QThread(parent=self)
        self.upload = Upload(apikey=apikey)
        self.upload_thread.start()
        self.upload.moveToThread(self.upload_thread)


        self.list_view_files_model = FileListModel(parent=self)
        self.list_view_files.setModel(self.list_view_files_model)

        self.pushButton_close.clicked.connect(self.shutdown)
        self.pushButton_add_picture.clicked.connect(self.add_file)
        self.pushButton_add_links.clicked.connect(self.add_url)
        self.pushButton_upload.clicked.connect(self.start_upload)
        self.pushButton_clear_list.clicked.connect(
                self.list_view_files_model.clear_list)
        self.pushButton_remove_selected.clicked.connect(self.remove_selected)

        self.upload.upload_finished.connect(self.upload_finished)
        self.upload.upload_error.connect(self.handle_error)

        self.upload_pictures.connect(self.upload.upload_multiple)

        self.dialog = QFileDialog(parent=self)
        self.dialog.setFileMode(QFileDialog.ExistingFiles)
        self.dialog.setNameFilters(SUPPORTED_FILE_TYPES)

        self.resize_container.hide()
        self.resize_container_percentual.hide()
        self.check_box_resize.clicked.connect(
                self.set_resize_box_visibility
                )
        self.radio_button_absolute.toggled.connect(
                self.set_absolute_resize_box_visibility
                )
        self.radio_button_percentual.toggled.connect(
                self.set_percentual_resize_box_visibility
                )
        self.spin_box_width.valueChanged.connect(self.update_resize)
        self.spin_box_higth.valueChanged.connect(self.update_resize)
        self.spin_box_percentual.valueChanged.connect(self.update_resize)
        self.comboBox_rotate_options.activated['QString'].connect(
                self.upload.change_default_rotation
                )
        self.checkBox_delete_exif.toggled.connect(
                self.upload.change_default_exif
                )

        self.comboBox_rotate_options.addItems(ALLOWED_ROTATION)

    def request_api_key(self,):
        """
        requests and stores an api key from the user, if non is stores yet.
        If none is given a default one is used.
        """
        window = KeyRequest(parent=self)
        if window.exec_():
            apikey = window.lineEdit_apikey.text()
            if apikey:
                set_api_key(apikey)
                return apikey
            return DEFAULT_API_KEY

        sys.exit(0)

    @pyqtSlot()
    def add_file(self):
        """
        add file(s) to the upload list.
        using Qts file dialog.
        """
        if self.dialog.exec_():
            files = self.dialog.selectedFiles()
            files = [(file_, 'file') for file_ in files]
            self.list_view_files_model.add_files(files)

    @pyqtSlot()
    def add_url(self,):
        """
        add url(s) to the upload list.
        using a text box.
        """
        url_input = UrlInput()
        code = url_input.exec_()
        urls = url_input.text()

        new_entrys = []
        not_added = []

        if code and urls != '':
            for url in urls.split('\n'):
                # skip empty lines
                if url == '':
                    continue
                parsed_url = urlparse(url, scheme='http')
                scheme = parsed_url.scheme.lower()
                if scheme in ['http', 'https', 'ftp']:
                    new_entrys.append((urlunparse(parsed_url), 'url'))

                else:
                    not_added.append(url)

            if not_added:
                message = QMessageBox(QMessageBox.Warning, 'Fehler',
                                      ('Ein oder mehrere link(s) konnten '
                                       'nicht hinzugefügt werden.'),
                                      buttons=QMessageBox.Ok,
                                      parent=self)
                message.setDetailedText('\n'.join(not_added))

            self.list_view_files_model.add_files(new_entrys)

    @pyqtSlot()
    def start_upload(self,):
        """
        starts the upload and does some setup for the status/result dialog.
        As well as some cleanup afterwards.
        It locks the application for any further uploads until this one is \
        finished.
        """
        if (len(self.list_view_files_model.files) and not
                    self.upload_in_progress and
                    self.legal_resize):
            self.upload_in_progress = True
            files = self.list_view_files_model.files.copy()

            link_dialog = ShowLinks(self.upload, len(files), parent=self)
            link_dialog.readd_pictures.connect(
                    self.list_view_files_model.add_files
                    )
            link_dialog.show()

            LOGGER.debug('emitting upload signal with arguments: %s', files)
            self.upload_pictures.emit(files)

            LOGGER.debug('cleanup main window')
            self.list_view_files_model.clear_list()

        elif self.upload_in_progress:
            LOGGER.debug('Upload already in progress.')
            QMessageBox.warning(self, 'Upload Läuft',
                                'Es läuft bereits ein Upload Prozess.')

        elif not self.legal_resize:
            LOGGER.debug('illegal resize string will not upload.')
            # pylint: disable=line-too-long
            # would harm readability
            QMessageBox.warning(self, 'Auflösung ungültig',
                                ('Die für die Skalierung angegebene Auflösung ist ungültig. '
                                 'Bitte gib diese im folgendem format an: breite x höhe')
                               )

        else:
            LOGGER.info('There is nothing to upload.')
            QMessageBox.information(self, 'Nüx da',
                                    ('Es wurden keine bilder zum hochladen '
                                     'hinzugefügt'))

    @pyqtSlot()
    def upload_finished(self,):
        """
        called through a signal after upload is finished to release the lock.
        """
        self.upload_in_progress = False

    @pyqtSlot(type, tuple)
    def handle_error(self, exception_type, args):
        """
        displays informations about an exception.
        """
        message = QMessageBox(QMessageBox.Warning, 'Fehler',
                              'Fehler beim upload.', buttons=QMessageBox.Ok,
                              parent=self)
        message.setDetailedText(repr(exception_type) + '\n' + repr(args))

        message.exec_()

    @pyqtSlot()
    def update_resize(self,):
        if (self.check_box_resize.isChecked() and
            self.radio_button_absolute.isChecked()):
            width = self.spin_box_width.value()
            higth = self.spin_box_higth.value()

            self.upload.change_default_resize("{}x{}".format(width, higth))

        elif (self.check_box_resize.isChecked() and
              self.radio_button_percentual.isChecked()):

            percentage = self.spin_box_percentual.value()
            self.upload.change_default_resize("{}%".format(percentage))

        else:
            self.upload.change_default_resize(None)

    @pyqtSlot(bool)
    def set_resize_box_visibility(self, visible):
        if visible:
            LOGGER.debug('show resize box')
            self.update_resize()
        else:
            LOGGER.debug('hide resize box')
            self.update_resize()

        self.resize_container.setVisible(visible)

    @pyqtSlot(bool)
    def set_absolute_resize_box_visibility(self, visible):
        if visible:
            LOGGER.debug('show absolute resize box')
            self.update_resize()
        else:
            LOGGER.debug('hide absolute resize box')

        self.resize_container_absolute.setVisible(visible)

    @pyqtSlot(bool)
    def set_percentual_resize_box_visibility(self, visible):
        if visible:
            LOGGER.debug('show percentual resize box')
            self.update_resize()
        else:
            LOGGER.debug('hide percentual resize box')

        self.resize_container_percentual.setVisible(visible)

    @pyqtSlot()
    def remove_selected(self,):
        """
        remove selected files from the upload list.
        """
        for item in self.list_view_files.selectedIndexes():
            self.list_view_files_model.remove_element(item.row(), item.row())

    @pyqtSlot()
    def display_about_qt(self,):
        """
        displays the about qt dialog
        """
        QMessageBox.aboutQt(self,)

    @pyqtSlot()
    def shutdown(self,):
        """shut down Qapp"""
        self.thread_cleanup()

        QCoreApplication.instance().quit()

    def thread_cleanup(self):
        """
        shuts down the upload thread at exit.
        """
        LOGGER.debug('begin cleanup threads')
        try:
            self.upload_thread.quit()
            self.upload_thread.wait()
        # pylint: disable=bare-except
        # I do want to catch them all here, to be able to log them.
        except:
            LOGGER.exception('Exception while cleanup')
        LOGGER.debug('thread cleanup finished')
    def browse(self):
        """
        Open a file dialog and select a user specified file.
        """
        formats = [
            "Text - comma separated (*.csv, *)",
            "Text - tab separated (*.tsv, *)",
            "Text - all files (*)"
        ]

        dlg = QFileDialog(
            self, windowTitle="Open Data File",
            acceptMode=QFileDialog.AcceptOpen,
            fileMode=QFileDialog.ExistingFile
        )
        dlg.setNameFilters(formats)
        state = self.dialog_state
        lastdir = state.get("directory", "")
        lastfilter = state.get("filter", "")

        if lastdir and os.path.isdir(lastdir):
            dlg.setDirectory(lastdir)
        if lastfilter:
            dlg.selectNameFilter(lastfilter)

        status = dlg.exec_()
        dlg.deleteLater()
        if status == QFileDialog.Accepted:
            self.dialog_state["directory"] = dlg.directory().absolutePath()
            self.dialog_state["filter"] = dlg.selectedNameFilter()

            selected_filter = dlg.selectedNameFilter()
            path = dlg.selectedFiles()[0]
            # pre-flight check; try to determine the nature of the file
            mtype = _mime_type_for_path(path)
            if not mtype.inherits("text/plain"):
                mb = QMessageBox(
                    parent=self,
                    windowTitle="",
                    icon=QMessageBox.Question,
                    text="The '{basename}' may be a binary file.\n"
                         "Are you sure you want to continue?".format(
                            basename=os.path.basename(path)),
                    standardButtons=QMessageBox.Cancel | QMessageBox.Yes
                )
                mb.setWindowModality(Qt.WindowModal)
                if mb.exec() == QMessageBox.Cancel:
                    return

            # initialize dialect based on selected extension
            if selected_filter in formats[:-1]:
                filter_idx = formats.index(selected_filter)
                if filter_idx == 0:
                    dialect = csv.excel()
                elif filter_idx == 1:
                    dialect = csv.excel_tab()
                else:
                    dialect = csv.excel_tab()
                header = True
            else:
                try:
                    dialect, header = sniff_csv_with_path(path)
                except Exception:
                    dialect, header = csv.excel(), True

            options = None
            # Search for path in history.
            # If found use the stored params to initialize the import dialog
            items = self.itemsFromSettings()
            idx = index_where(items, lambda t: samepath(t[0], path))
            if idx is not None:
                _, options_ = items[idx]
                if options_ is not None:
                    options = options_

            if options is None:
                if not header:
                    rowspec = []
                else:
                    rowspec = [(range(0, 1), RowSpec.Header)]
                options = Options(
                    encoding="utf-8", dialect=dialect, rowspec=rowspec)

            dlg = CSVImportDialog(
                self, windowTitle="Import Options",  sizeGripEnabled=True)
            dlg.setWindowModality(Qt.WindowModal)
            dlg.setPath(path)
            dlg.setOptions(options)
            status = dlg.exec_()
            dlg.deleteLater()
            if status == QDialog.Accepted:
                self.set_selected_file(path, dlg.options())
    def requestWrite(self, node, file_name = None, limit_mimetypes = None):
        if self._writing:
            raise OutputDeviceError.DeviceBusyError()

        dialog = QFileDialog()
        dialog.setWindowTitle(catalog.i18nc("@title:window", "Save to File"))
        dialog.setFileMode(QFileDialog.AnyFile)
        dialog.setAcceptMode(QFileDialog.AcceptSave)

        # Ensure platform never ask for overwrite confirmation since we do this ourselves
        dialog.setOption(QFileDialog.DontConfirmOverwrite)

        if sys.platform == "linux" and "KDE_FULL_SESSION" in os.environ:
            dialog.setOption(QFileDialog.DontUseNativeDialog)

        filters = []
        mime_types = []
        selected_filter = None
        last_used_type = Preferences.getInstance().getValue("local_file/last_used_type")

        file_types = Application.getInstance().getMeshFileHandler().getSupportedFileTypesWrite()
        file_types.sort(key = lambda k: k["description"])
        if limit_mimetypes:
            file_types = list(filter(lambda i: i["mime_type"] in limit_mimetypes, file_types))

        if len(file_types) == 0:
            Logger.log("e", "There are no file types available to write with!")
            raise OutputDeviceError.WriteRequestFailedError()

        for item in file_types:
            type_filter = "{0} (*.{1})".format(item["description"], item["extension"])
            filters.append(type_filter)
            mime_types.append(item["mime_type"])
            if last_used_type == item["mime_type"]:
                selected_filter = type_filter
                if file_name:
                    file_name += "." + item["extension"]

        dialog.setNameFilters(filters)
        if selected_filter != None:
            dialog.selectNameFilter(selected_filter)

        if file_name != None:
            dialog.selectFile(file_name)

        dialog.restoreState(Preferences.getInstance().getValue("local_file/dialog_state").encode())

        if not dialog.exec_():
            raise OutputDeviceError.UserCanceledError()

        Preferences.getInstance().setValue("local_file/dialog_state", str(dialog.saveState()))

        selected_type = file_types[filters.index(dialog.selectedNameFilter())]
        Preferences.getInstance().setValue("local_file/last_used_type", selected_type["mime_type"])

        file_name = dialog.selectedFiles()[0]

        if os.path.exists(file_name):
            result = QMessageBox.question(None, catalog.i18nc("@title:window", "File Already Exists"), catalog.i18nc("@label", "The file <filename>{0}</filename> already exists. Are you sure you want to overwrite it?").format(file_name))
            if result == QMessageBox.No:
                raise OutputDeviceError.UserCanceledError()

        self.writeStarted.emit(self)
        mesh_writer = Application.getInstance().getMeshFileHandler().getWriter(selected_type["id"])
        try:
            mode = selected_type["mode"]
            if mode == MeshWriter.OutputMode.TextMode:
                Logger.log("d", "Writing to Local File %s in text mode", file_name)
                stream = open(file_name, "wt")
            elif mode == MeshWriter.OutputMode.BinaryMode:
                Logger.log("d", "Writing to Local File %s in binary mode", file_name)
                stream = open(file_name, "wb")

            job = WriteMeshJob(mesh_writer, stream, node, mode)
            job.setFileName(file_name)
            job.progress.connect(self._onJobProgress)
            job.finished.connect(self._onWriteJobFinished)

            message = Message(catalog.i18nc("@info:progress", "Saving to <filename>{0}</filename>").format(file_name), 0, False, -1)
            message.show()

            job._message = message
            self._writing = True
            job.start()
        except PermissionError as e:
            Logger.log("e", "Permission denied when trying to write to %s: %s", file_name, str(e))
            raise OutputDeviceError.PermissionDeniedError(catalog.i18nc("@info:status", "Permission denied when trying to save <filename>{0}</filename>").format(file_name)) from e
        except OSError as e:
            Logger.log("e", "Operating system would not let us write to %s: %s", file_name, str(e))
            raise OutputDeviceError.WriteRequestFailedError(catalog.i18nc("@info:status", "Could not save to <filename>{0}</filename>: <message>{1}</message>").format()) from e