Esempio n. 1
0
    def saveFileAs(self):
        dir = QDir()
        docsPath = '{}/Documents'.format(dir.homePath())
        if not dir.exists(docsPath):
            docsPath = '{}/Documentos'.format(dir.homePath())

        #Regresa una tupla (filename, filter)
        filename = QFileDialog.getSaveFileName(self, 'Guardar como', docsPath,
                                               self.fileFilter)
        if not filename: return

        if self.filename:
            windowTitle = self.windowTitle().split('-')[0]
            self.setWindowTitle('{} - {}'.format(windowTitle, filename[0]))
        else:
            self.setWindowTitle('{} - {}'.format(self.windowTitle(),
                                                 filename[0]))

        self.filename = filename[0]

        file = QFile(self.filename)
        if not file.open(QIODevice.WriteOnly): return

        data = self.textContent.toPlainText()

        stream = QTextStream(file)
        stream.setCodec('UTF-8')
        stream << data

        file.flush()
        file.close()
        self.showMessage('Archivo guardado')
Esempio n. 2
0
    def PreprocessedQSS() -> str:
        lines = []
        qss_file = QFile(Loader.STYLE_FILE_PATH)
        if qss_file.open(QIODevice.ReadOnly | QFile.Text):
            stream = QTextStream(qss_file)
            stream.setCodec("UTF-8")

        while not stream.atEnd():
            lines.append(stream.readLine().rstrip("\n"))

        qss_file.close()

        qss_vars = {}
        qss_body = ""

        for i, l in enumerate(lines):
            l = l.strip()
            if len(l) == 0:
                continue

            if l.startswith("//"):
                continue

            if l[0] == "@":
                if not l.endswith(";"):
                    print(
                        "[WARNING] QSSPreprocessor : Parsing error at line %d for '%s' (missing semicolon)"
                        % (i, l))

                l = l.rstrip(";")
                s = l.split(":")
                if len(s) < 2:
                    print(
                        "[WARNING] QSSPreprocessor : Parsing error at line %d for '%s' (missing colon)"
                        % (i, l))
                    continue

                qss_vars[s[0].strip()] = s[1].strip()
            else:
                qss_body += l

        qss_vars_names = list(qss_vars.keys())
        qss_vars_names.sort()
        qss_vars_names.reverse()
        for k in qss_vars_names:
            qss_body = qss_body.replace(k, qss_vars[k])
            Loader._qss_variables[k] = qss_vars[k]

        return qss_body
Esempio n. 3
0
    def SpongesMorphotypes() -> dict:
        if len(Loader._sponges_morphotypes) == 0:
            content = ""
            file = QFile(Loader.MORPHOTYPES_FILE_PATH)
            if file.open(QIODevice.ReadOnly | QFile.Text):
                stream = QTextStream(file)
                stream.setCodec("UTF-8")
                content = stream.readAll()
                file.close()

                obj = json.loads(content)

            for i, m in enumerate(obj):
                Loader._sponges_morphotypes[i] = Morphotype(
                    m["name"], QColor(m["color"]))

        return Loader._sponges_morphotypes
Esempio n. 4
0
    def saveFile(self):
        if not self.filename:
            self.saveFileAs()
            return

        file = QFile(self.filename)
        if not file.open(QIODevice.WriteOnly): return

        data = self.textContent.toPlainText()

        stream = QTextStream(file)
        stream.setCodec('UTF-8')
        stream << data

        file.flush()
        file.close()
        self.showMessage('Archivo guardado')
Esempio n. 5
0
    def _dependenciesComboBoxChanged(self, idx: int):
        data = self._dependencies_list.currentData()
        self._version.setText(data["version"])
        self._license.setText(data["license"])
        self._author.setText(data["author"])
        self._link.setText("<a href='%s'>%s</a>" %
                           (data["link"], data["link"]))

        license_file = QFile(":/documents/licenses/%s" % data["license-file"])
        text = ""
        if license_file.open(QIODevice.ReadOnly | QFile.Text):
            stream = QTextStream(license_file)
            stream.setCodec("UTF-8")
            text = stream.readAll()
            license_file.close()

        self._license_area.setText(text)
Esempio n. 6
0
class QTextStreamGetSet(unittest.TestCase):
    def setUp(self):
        self.obj = QTextStream()

    def testCodec(self):
        '''QTextStream set/get Codec'''

        codec = QTextCodec.codecForName('ISO8859-1')
        self.obj.setCodec(codec)
        self.assertEqual(codec, self.obj.codec())

    def testDevice(self):
        '''QTextStream get/set Device'''
        device = QFile()
        self.obj.setDevice(device)
        self.assertEqual(device, self.obj.device())
        self.obj.setDevice(None)
        self.assertEqual(None, self.obj.device())
Esempio n. 7
0
class QTextStreamGetSet(unittest.TestCase):

    def setUp(self):
        self.obj = QTextStream()


    def testCodec(self):
        '''QTextStream set/get Codec'''

        codec = QTextCodec.codecForName('ISO8859-1')
        self.obj.setCodec(codec)
        self.assertEqual(codec, self.obj.codec())

    def testDevice(self):
        '''QTextStream get/set Device'''
        device = QFile()
        self.obj.setDevice(device)
        self.assertEqual(device, self.obj.device())
        self.obj.setDevice(None)
        self.assertEqual(None, self.obj.device())
Esempio n. 8
0
class QSingleApplication(QApplication):

    onMassageRecived = Signal(str)  # Text Massege Event;

    def init(self, uid: str) -> bool:
        """ Try To Connect or Create : If Created Then Return True """
        self._stream_str: Optional[QTextStream] = None
        self._server: Optional[QLocalServer] = None
        self._socket: Optional[QLocalSocket] = None
        self._uid: str = uid
        if not self.__connect():
            self.__createServer()
            return True
        return False

    def sendTextMassege(self, msg: str):
        """ Send A Text Massege To Running Instance """
        if self._socket and self._stream_str and not self._server:
            self._stream_str << msg << '\n'
            self._stream_str.flush()
            return self._socket.waitForBytesWritten()
        else:
            return False

    def __connect(self):
        """ Create A Local Socket And Try To Connect """
        if self._socket:
            self._socket.close()

        socket = QLocalSocket()
        socket.connectToServer(self._uid)
        connected = socket.waitForConnected()

        if not connected:
            socket.close()
            return False

        self._socket = socket
        self._stream_str = QTextStream(self._socket)
        self._stream_str.setCodec('UTF-8')
        return True

    def __createServer(self):
        """ Create A Server & Listen as UID """
        self._server = QLocalServer()
        self._server.listen(self._uid)
        self._server.newConnection.connect(self.__onNewConnection)

    def __onNewConnection(self):
        """ On New Socket Connection From Clint """
        if self._socket:
            self._socket.readyRead.disconnect(self.__onReadyRead)

        self._socket = self._server.nextPendingConnection()
        if not self._socket:
            return

        self._stream_str = QTextStream(self._socket)
        self._stream_str.setCodec('UTF-8')
        self._socket.readyRead.connect(self.__onReadyRead)

    def __onReadyRead(self):
        """ Stream Ready To Read """
        while True:
            msg = self._stream_str.readLine()
            if not msg:
                break
            self.onMassageRecived.emit(msg)
class SingleApplication(QApplication):

    messageReceived = Signal()

    def __init__(self, id, *argv):

        super(SingleApplication, self).__init__(*argv)
        self._id = id
        self._activationWindow = None
        self._activateOnMessage = False

        # Is there another instance running?
        self._outSocket = QLocalSocket()
        self._outSocket.connectToServer(self._id)
        self._isRunning = self._outSocket.waitForConnected()

        if self._isRunning:
            # Yes, there is.
            self._outStream = QTextStream(self._outSocket)
            self._outStream.setCodec('UTF-8')
        else:
            # No, there isn't.
            self._outSocket = None
            self._outStream = None
            self._inSocket = None
            self._inStream = None
            self._server = QLocalServer()
            self._server.listen(self._id)
            self._server.newConnection.connect(self._onNewConnection)

    def isRunning(self):
        return self._isRunning

    def id(self):
        return self._id

    def activationWindow(self):
        return self._activationWindow

    def setActivationWindow(self, activationWindow, activateOnMessage=True):
        self._activationWindow = activationWindow
        self._activateOnMessage = activateOnMessage

    def activateWindow(self):

        if not self._activationWindow:
            return

        self._activationWindow.show()

        self._activationWindow.setWindowState((
            self._activationWindow.windowState() & ~Qt.WindowMinimized)
                                              | Qt.WindowActive)

        SetWindowPos(
            self._activationWindow.winId(),
            # = always on top. only reliable way to bring it to the front on windows
            win32con.HWND_TOPMOST,
            0,
            0,
            0,
            0,
            win32con.SWP_NOMOVE | win32con.SWP_NOSIZE
            | win32con.SWP_SHOWWINDOW)

        # Do not reset topmost; for monitor control this is set...
        # SetWindowPos(self._activationWindow.winId(),
        #             # disable the always on top, but leave window at its top position
        #             win32con.HWND_NOTOPMOST,
        #             0, 0, 0, 0,
        #             win32con.SWP_NOMOVE | win32con.SWP_NOSIZE | win32con.SWP_SHOWWINDOW)

        # self._activationWindow.raise_()
        self._activationWindow.activateWindow()

    def sendMessage(self, msg):
        if not self._outStream:
            return False
        self._outStream << msg << '\n'
        self._outStream.flush()
        return self._outSocket.waitForBytesWritten()

    def _onNewConnection(self):
        if self._inSocket:
            self._inSocket.readyRead.disconnect(self._onReadyRead)
        self._inSocket = self._server.nextPendingConnection()
        if not self._inSocket:
            return
        self._inStream = QTextStream(self._inSocket)
        self._inStream.setCodec('UTF-8')
        self._inSocket.readyRead.connect(self._onReadyRead)
        if self._activateOnMessage:
            self.activateWindow()

    def _onReadyRead(self):
        while True:
            msg = self._inStream.readLine()
            if not msg:
                break
            self.messageReceived.emit(msg)
Esempio n. 10
0
class QtSingleApplication(QApplication):
    messageReceived = Signal()

    def __init__(self, id, *argv):
        super(QtSingleApplication, self).__init__(*argv)
        self._id = id
        self._activationWindow = None
        self._activateOnMessage = False

        # Is there another instance running?
        self._outSocket = QLocalSocket()
        self._outSocket.connectToServer(self._id)
        self._isRunning = self._outSocket.waitForConnected()

        if self._isRunning:
            # Yes, there is.
            self._outStream = QTextStream(self._outSocket)
            self._outStream.setCodec('UTF-8')
        else:
            # No, there isn't.
            self._outSocket = None
            self._outStream = None
            self._inSocket = None
            self._inStream = None
            self._server = QLocalServer()
            self._server.listen(self._id)
            self._server.newConnection.connect(self._onNewConnection)

    def isRunning(self):
        return self._isRunning

    def id(self):
        return self._id

    def activationWindow(self):
        return self._activationWindow

    def setActivationWindow(self, activationWindow, activateOnMessage=True):
        self._activationWindow = activationWindow
        self._activateOnMessage = activateOnMessage

    def activateWindow(self):
        if not self._activationWindow:
            return
        self._activationWindow.setWindowState(
            self._activationWindow.windowState() & ~Qt.WindowMinimized)
        self._activationWindow.raise_()
        self._activationWindow.activateWindow()

    def sendMessage(self, msg):
        if not self._outStream:
            return False
        self._outStream << msg << '\n'
        self._outStream.flush()
        return self._outSocket.waitForBytesWritten()

    def _onNewConnection(self):
        if self._inSocket:
            self._inSocket.readyRead.disconnect(self._onReadyRead)
        self._inSocket = self._server.nextPendingConnection()
        if not self._inSocket:
            return
        self._inStream = QTextStream(self._inSocket)
        self._inStream.setCodec('UTF-8')
        self._inSocket.readyRead.connect(self._onReadyRead)
        if self._activateOnMessage:
            self.activateWindow()

    def _onReadyRead(self):
        while True:
            msg = self._inStream.readLine()
            if not msg:
                break
            self.messageReceived.emit(msg)
Esempio n. 11
0
    def text(self) -> str:
        content = ""
        file = QFile(":/documents/report_template.html")
        if file.open(QIODevice.ReadOnly | QFile.Text):
            stream = QTextStream(file)
            stream.setCodec("UTF-8")
            content = stream.readAll()
            file.close()

        # Summary
        content = content.replace("{{TITLE}}", self._analysis._parameters.name())
        content = content.replace("{{ANALYSED_IMAGES}}", str(self._analysis.imagesCount()))
        content = content.replace("{{START_DATE}}", self._analysis.startDateTime().toString("dd/MM/yyyy 'à' hh:mm"))
        content = content.replace("{{END_DATE}}", self._analysis.endDateTime().toString("dd/MM/yyyy 'à' hh:mm"))
        
        # Parameters
        selected_morphotypes_names = [m.name() for m in self._analysis.parameters().selectedMorphotypes().values()]

        content = content.replace("{{ANALYSED_FOLDER}}", self._analysis.parameters().srcFolder())
        content = content.replace("{{CONFIDENCE_THRESHOLD}}", "%.1f%%" % (self._analysis.parameters().threshold()*100))
        content = content.replace("{{SELECTED_MORPHOTYPES}}", ", ".join(selected_morphotypes_names))
        content = content.replace("{{OPT_SAVE_PROCESSED_IMAGES}}", str(self._analysis.parameters().saveProcessedImages()))
        if self._analysis.parameters().saveProcessedImages():
            content = content.replace("{{PROCESSED_IMAGES_FOLDER}}", self._analysis.parameters().destFolder())
        
        # Detections
        morphotypes_stats = ""
        total_progress = ""

        total = self._analysis.totalDetections()
        div_by = total
        if div_by == 0:
            div_by = 1
        
        for morphotype_id, morphotype in self._analysis.parameters().selectedMorphotypes().items():
            detections = self._analysis.cumulativeDetectionsFor(morphotype_id)

            morphotypes_stats += """
                <div class="stat-item">
                    <div class="stat-item-header">
                        <span class="name">%s</span>
                        <span class="count">%s (%.1f%%)</span>
                    </div>
                    <div class="progress-container">
                        <div class="progress" style="width: %.1f%%; background-color: %s"></div>
                    </div>
                </div>
            """ % (morphotype.name(), detections, detections*100/div_by, detections*100/div_by, morphotype.color().name())

            total_progress += """
                <div class="progress" style="width: %.1f%%; background-color: %s"></div>
            """ % (detections*100/div_by, morphotype.color().name())

        content = content.replace("{{MORPHOTYPES_STATS}}", morphotypes_stats)
        content = content.replace("{{TOTAL_PROGRESS}}", total_progress)
        content = content.replace("{{TOTAL_DETECTIONS}}", str(total))


        # Chart
        content = content.replace("{{CHART_IMAGE}}", self._analysis.base64ChartImage())

        legend_items = ""
        for morphotype_id, morphotype in self._analysis.parameters().selectedMorphotypes().items():
            legend_items += """
                <div class="legend-item">
                    <div class="legend-item-color-container">
                        <div class="legend-item-color" style="background-color: %s"></div>
                    </div>
                    <div class="legend-item-name">%s</div>
                </div>
            """ % (morphotype.color().name(), morphotype.name())

        content = content.replace("{{LEGEND_ITEMS}}", legend_items)

        # Interest
        image_items = ""
        for processed_image_filename, base64_img in self._analysis.mostInterestingBase64Images().items():
            image_items += """
                <div class="images-item">
                    <div class="images-item-container">
                        <img src="%s">
                        <span>%s</span>
                    </div>
                </div>
            """ % (base64_img, processed_image_filename)

        content = content.replace("{{IMAGE_ITEMS}}", image_items)

        return content
Esempio n. 12
0
class QtSingleApplication(QApplication):
    messageReceived = Signal(str)

    def __init__(self, id, *argv):

        super(QtSingleApplication, self).__init__(*argv)
        self._id = id
        self._activationWindow = None
        self._activateOnMessage = False

        # Is there another instance running?
        self._outSocket = QLocalSocket()
        self._outSocket.connectToServer(self._id)
        self._isRunning = self._outSocket.waitForConnected()

        if self._isRunning:
            # Yes, there is.
            self._outStream = QTextStream(self._outSocket)
            self._outStream.setCodec('UTF-8')
        else:
            # No, there isn't.
            self._outSocket = None
            self._outStream = None
            self._inSocket = None
            self._inStream = None
            self._server = QLocalServer()
            self._server.listen(self._id)
            self._server.newConnection.connect(self._onNewConnection)

    def isRunning(self):
        return self._isRunning

    def id(self):
        return self._id

    def activationWindow(self):
        return self._activationWindow

    def setActivationWindow(self, activationWindow, activateOnMessage=True):
        self._activationWindow = activationWindow
        self._activateOnMessage = activateOnMessage

    def activateWindow(self):
        if not self._activationWindow:
            return
        self._activationWindow.setWindowState(
            self._activationWindow.windowState() & ~Qt.WindowMinimized)
        self._activationWindow.raise_()
        self._activationWindow.activateWindow()

    def sendMessage(self, msg):
        if not self._outStream:
            return False
        self._outStream << msg << '\n'
        self._outStream.flush()
        return self._outSocket.waitForBytesWritten()

    def _onNewConnection(self):
        if self._inSocket:
            self._inSocket.readyRead.disconnect(self._onReadyRead)
        self._inSocket = self._server.nextPendingConnection()
        if not self._inSocket:
            return
        self._inStream = QTextStream(self._inSocket)
        self._inStream.setCodec('UTF-8')
        self._inSocket.readyRead.connect(self._onReadyRead)
        if self._activateOnMessage:
            self.activateWindow()

    def _onReadyRead(self):
        while True:
            msg = self._inStream.readLine()
            if not msg: break
            self.messageReceived.emit(msg)