예제 #1
0
    def anteriorSiguiente(self):
        if self.imagenesCarpeta:
            widget = self.sender().objectName()

            if widget == "Anterior":
                self.estadoAnterior = True if self.posicion == 0 else False
                self.estadoSiguiente = False
                self.posicion -= 1 if self.posicion > 0 else 0
                posicionInternaX, posicionX = 650, -650 

            else:
                self.estadoSiguiente = True if self.posicion == len(self.imagenesCarpeta)-1 else False
                self.estadoAnterior = False
                self.posicion += 1 if self.posicion < len(self.imagenesCarpeta)-1 else 0
                posicionInternaX, posicionX = -650, 650 

            if self.estadoAnterior or self.estadoSiguiente:
                return
            else:
                imagen = self.imagenesCarpeta[self.posicion]

                # Verificar que la carpeta que contiene la imagene exista
                if not QDir(self.carpetaActual).exists():
                    self.Eliminar()
                    return

                elif not QFile.exists(imagen):
                    # Obtener la ruta y el nombre de las imagenes que se encuentren en la
                    # carpeta de la imagen seleccionada
                    imagenes = self.carpetaActual.entryInfoList(["*.jpg", "*.png", "*.ico", "*.bmp"],QDir.Files, QDir.Name)

                    if not imagenes:
                        self.Eliminar()
                        return

                    self.imagenesCarpeta = [imagen.absoluteFilePath() for imagen in imagenes]
                    self.posicion = randint(0, len(self.imagenesCarpeta)-1)
                    self.estadoAnterior = True if self.posicion == 0 else False
                    self.estadoSiguiente = True if self.posicion == len(self.imagenesCarpeta)-1 else False
                elif QImage(imagen).isNull():
                    del self.imagenesCarpeta[self.posicion]
                    if not self.imagenesCarpeta:
                        self.Eliminar()
                        return

                    self.posicion = randint(0, len(self.imagenesCarpeta)-1)
                    self.estadoAnterior = True if self.posicion == 0 else False
                    self.estadoSiguiente = True if self.posicion == len(self.imagenesCarpeta)-1 else False
                imagen = self.imagenesCarpeta[self.posicion]
                if self.labelImagen.pixmap():
                    labelConImagen = self.labelImagen
                elif self.labelImagenUno.pixmap():
                    labelConImagen = self.labelImagenUno

                # Función encargada de bloquear o desbloquear los botones
                self.bloquearBotones(False)

                # Nombre y extensión de la imagen
                nombre = QFileInfo(imagen).fileName()

                # Label en el que se va a mostrar la imagen
                labelMostrarImagen = self.labelImagen if self.labelImagenUno.pixmap() else self.labelImagenUno

                # Quitar la imagen actual y mostrar la siguiente
                self.Limpiar(labelConImagen, labelMostrarImagen, QImage(imagen), nombre, posicionInternaX, posicionX)                             
예제 #2
0
#!/usr/bin/env python3

from PyQt5.QtWidgets import (QWidget, QLabel, QLineEdit, QSpinBox, QHBoxLayout,
                             QVBoxLayout, QCheckBox, QTableWidget,
                             QAbstractItemView, QPushButton, QGroupBox,
                             QTableWidgetItem)
from PyQt5.QtCore import QFileInfo, QCoreApplication
import sys, copy

v2rayshellDebug = False

if __name__ == "__main__":
    v2rayshellDebug = True
    # this for debug test
    path = QFileInfo(sys.argv[0])
    srcPath = path.absoluteFilePath().split("/")
    sys.path.append("/".join(srcPath[:-4]))

from bridgehouse.editMap.inbound import logbook


class InboundSocksPanel(QWidget):
    def __init__(self):
        super().__init__()
        self.inboundSocksJSONFile = {
            "auth": "noauth",
            "accounts": [{
                "user": "******",
                "pass": "******"
            }],
            "udp": False,
예제 #3
0
 def strippedName(self, fullFileName):
     return QFileInfo(fullFileName).fileName()
예제 #4
0
    def accept(self):
        fileName = self.mUi.fileNameEdit.text()
        if fileName == '':
            return
        if (QFile.exists(fileName)):
            button = QMessageBox.warning(
                self, self.tr("Export as Image"),
                self.tr("%s already exists.\nDo you want to replace it?" %
                        QFileInfo(fileName).fileName()),
                QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
            if (button != QMessageBox.Yes):
                return

        visibleLayersOnly = self.mUi.visibleLayersOnly.isChecked()
        useCurrentScale = self.mUi.currentZoomLevel.isChecked()
        drawTileGrid = self.mUi.drawTileGrid.isChecked()
        includeBackgroundColor = self.mUi.includeBackgroundColor.isChecked()
        renderer = self.mMapDocument.renderer()
        # Remember the current render flags
        renderFlags = renderer.flags()
        renderer.setFlag(RenderFlag.ShowTileObjectOutlines, False)
        mapSize = renderer.mapSize()

        margins = self.mMapDocument.map().computeLayerOffsetMargins()
        mapSize.setWidth(mapSize.width() + margins.left() + margins.right())
        mapSize.setHeight(mapSize.height() + margins.top() + margins.bottom())

        if (useCurrentScale):
            mapSize *= self.mCurrentScale
        image = QImage()
        try:
            image = QImage(mapSize, QImage.Format_ARGB32_Premultiplied)
            if (includeBackgroundColor):
                if (self.mMapDocument.map().backgroundColor().isValid()):
                    image.fill(self.mMapDocument.map().backgroundColor())
                else:
                    image.fill(Qt.gray)
            else:
                image.fill(Qt.transparent)

        except:
            QMessageBox.critical(
                self, self.tr("Out of Memory"),
                self.
                tr("Could not allocate sufficient memory for the image. "
                   "Try reducing the zoom level or using a 64-bit version of Tiled."
                   ))
            return

        if (image.isNull()):
            gigabyte = 1073741824
            memory = mapSize.width() * mapSize.height() * 4
            gigabytes = memory / gigabyte
            QMessageBox.critical(
                self, self.tr("Image too Big"),
                self.
                tr("The resulting image would be %d x %d pixels and take %.2f GB of memory. "
                   "Tiled is unable to create such an image. Try reducing the zoom level."
                   % (mapSize.width(), mapSize.height(), gigabytes)))
            return

        painter = QPainter(image)
        if (useCurrentScale):
            if (smoothTransform(self.mCurrentScale)):
                painter.setRenderHints(QPainter.SmoothPixmapTransform)

            painter.setTransform(
                QTransform.fromScale(self.mCurrentScale, self.mCurrentScale))
            renderer.setPainterScale(self.mCurrentScale)
        else:
            renderer.setPainterScale(1)

        painter.translate(margins.left(), margins.top())

        for layer in self.mMapDocument.map().layers():
            if (visibleLayersOnly and not layer.isVisible()):
                continue
            painter.setOpacity(layer.opacity())
            painter.translate(layer.offset())

            tileLayer = layer
            objGroup = layer
            imageLayer = layer
            tp = type(layer)
            if tp == TileLayer:
                renderer.drawTileLayer(painter, tileLayer)
            elif tp == ObjectGroup:
                objects = objGroup.objects()
                if (objGroup.drawOrder() == ObjectGroup.DrawOrder.TopDownOrder
                    ):
                    objects = QList(
                        sorted(objects, key=lambda x: x.y(), reverse=True))
                for object in objects:
                    if (object.isVisible()):
                        if (object.rotation() != 0.0):
                            origin = renderer.pixelToScreenCoords_(
                                object.position())
                            painter.save()
                            painter.translate(origin)
                            painter.rotate(object.rotation())
                            painter.translate(-origin)

                        color = MapObjectItem.objectColor(object)
                        renderer.drawMapObject(painter, object, color)
                        if (object.rotation() != 0.0):
                            painter.restore()
            elif tp == ImageLayer:
                renderer.drawImageLayer(painter, imageLayer)

        painter.translate(-layer.offset())

        if (drawTileGrid):
            prefs = preferences.Preferences.instance()
            renderer.drawGrid(painter,
                              QRectF(QPointF(), QSizeF(renderer.mapSize())),
                              prefs.gridColor())

        painter.end()

        # Restore the previous render flags
        renderer.setFlags(renderFlags)
        image.save(fileName)
        self.mPath = QFileInfo(fileName).path()
        # Store settings for next time
        s = preferences.Preferences.instance().settings()
        s.setValue(VISIBLE_ONLY_KEY, visibleLayersOnly)
        s.setValue(CURRENT_SCALE_KEY, useCurrentScale)
        s.setValue(DRAW_GRID_KEY, drawTileGrid)
        s.setValue(INCLUDE_BACKGROUND_COLOR, includeBackgroundColor)
        super().accept()
예제 #5
0
	def getBaseName(self):
		if self._fileName:
			fileinfo = QFileInfo(self._fileName)
			basename = fileinfo.completeBaseName()
			return (basename if basename else fileinfo.fileName())
		return self.tr("New document")
예제 #6
0
파일: share.py 프로젝트: probonopd/gridsync
    def __init__(self, gateways):
        super(InviteReceiverDialog, self).__init__()
        self.gateways = gateways
        self.invite_receiver = None
        self.joined_folders = []

        self.setMinimumSize(500, 300)

        self.mail_closed_icon = QLabel()
        self.mail_closed_icon.setAlignment(Qt.AlignCenter)
        self.mail_closed_icon.setPixmap(Pixmap('mail-envelope-closed.png',
                                               128))

        self.mail_open_icon = QLabel()
        self.mail_open_icon.setAlignment(Qt.AlignCenter)
        self.mail_open_icon.setPixmap(Pixmap('mail-envelope-open.png', 128))

        self.folder_icon = QLabel()
        icon = QFileIconProvider().icon(QFileInfo(config_dir))
        self.folder_icon.setPixmap(icon.pixmap(128, 128))
        self.folder_icon.setAlignment(Qt.AlignCenter)

        self.invite_code_widget = InviteCodeWidget(self)
        self.invite_code_widget.lineedit.go.connect(self.go)  # XXX

        self.tor_label = QLabel()
        self.tor_label.setToolTip(
            "This connection is being routed through the Tor network.")
        self.tor_label.setPixmap(Pixmap('tor-onion.png', 24))

        self.checkmark = QLabel()
        self.checkmark.setAlignment(Qt.AlignCenter)
        self.checkmark.setPixmap(Pixmap('green_checkmark.png', 32))

        self.progressbar = QProgressBar(self)
        self.progressbar.setValue(0)
        self.progressbar.setMaximum(6)  # XXX
        self.progressbar.setTextVisible(False)

        self.message_label = QLabel(' ')
        self.message_label.setStyleSheet("color: grey")
        self.message_label.setAlignment(Qt.AlignCenter)

        self.error_label = QLabel()
        self.error_label.setStyleSheet("color: red")
        self.error_label.setAlignment(Qt.AlignCenter)

        self.close_button = QPushButton("Close")
        self.close_button.clicked.connect(self.close)

        layout = QGridLayout(self)
        layout.addItem(QSpacerItem(0, 0, 0, QSizePolicy.Expanding), 0, 0)
        layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, 0), 1, 1)
        layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, 0), 1, 2)
        layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, 0), 1, 3)
        layout.addWidget(self.mail_closed_icon, 1, 2, 1, 3)
        layout.addWidget(self.mail_open_icon, 1, 2, 1, 3)
        layout.addWidget(self.folder_icon, 1, 2, 1, 3)
        layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, 0), 1, 4)
        layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, 0), 1, 5)
        layout.addWidget(self.invite_code_widget, 2, 2, 1, 3)
        layout.addWidget(self.checkmark, 2, 3, 1, 1)
        layout.addWidget(self.tor_label, 3, 1, 1, 1,
                         Qt.AlignRight | Qt.AlignVCenter)
        layout.addWidget(self.progressbar, 3, 2, 1, 3)
        layout.addWidget(self.message_label, 5, 1, 1, 5)
        layout.addWidget(self.error_label, 5, 2, 1, 3)
        layout.addWidget(self.close_button, 6, 3)
        layout.addItem(QSpacerItem(0, 0, 0, QSizePolicy.Expanding), 7, 1)

        self.reset()
예제 #7
0
def main():
    # Initialise.

    defaultContext = "@default"
    fetchedTor = MetaTranslator()
    codecForTr = ''
    codecForSource = ''
    tsFileNames = []
    uiFileNames = []

    verbose = False
    noObsolete = False
    metSomething = False
    numFiles = 0
    standardSyntax = True
    metTsFlag = False
    tr_func = None
    translate_func = None

    # Parse the command line.

    for arg in sys.argv[1:]:
        if arg == "-ts":
            standardSyntax = False

    argc = len(sys.argv)
    i = 1

    while i < argc:
        arg = sys.argv[i]
        i += 1

        if arg == "-help":
            printUsage()
            sys.exit(0)

        if arg == "-version":
            sys.stderr.write("pylupdate5 v%s\n" % PYQT_VERSION_STR)
            sys.exit(0)

        if arg == "-noobsolete":
            noObsolete = True
            continue

        if arg == "-verbose":
            verbose = True
            continue

        if arg == "-ts":
            metTsFlag = True
            continue

        if arg == "-tr-function":
            if i >= argc:
                sys.stderr.write(
                    "pylupdate5 error: missing -tr-function name\n")
                sys.exit(2)

            tr_func = sys.argv[i]
            i += 1
            continue

        if arg == "-translate-function":
            if i >= argc:
                sys.stderr.write(
                    "pylupdate5 error: missing -translate-function name\n")
                sys.exit(2)

            translate_func = sys.argv[i]
            i += 1
            continue

        numFiles += 1

        fullText = ""

        if not metTsFlag:
            f = QFile(arg)

            if not f.open(QIODevice.ReadOnly):
                sys.stderr.write("pylupdate5 error: Cannot open file '%s'\n" %
                                 arg)
                sys.exit(1)

            t = QTextStream(f)
            fullText = t.readAll()
            f.close()

        if standardSyntax:
            oldDir = QDir.currentPath()
            QDir.setCurrent(QFileInfo(arg).path())

            fetchedTor = MetaTranslator()
            codecForTr = ''
            codecForSource = ''
            tsFileNames = []
            uiFileNames = []

            for key, value in proFileTagMap(fullText).items():
                for t in value.split(' '):
                    if key == "SOURCES":
                        fetchtr_py(QDir.current().absoluteFilePath(t),
                                   fetchedTor, defaultContext, True,
                                   codecForSource, tr_func, translate_func)
                        metSomething = True

                    elif key == "TRANSLATIONS":
                        tsFileNames.append(QDir.current().absoluteFilePath(t))
                        metSomething = True

                    elif key in ("CODEC", "DEFAULTCODEC", "CODECFORTR"):
                        codecForTr = t
                        fetchedTor.setCodec(codecForTr)

                    elif key == "CODECFORSRC":
                        codecForSource = t

                    elif key == "FORMS":
                        fetchtr_ui(QDir.current().absoluteFilePath(t),
                                   fetchedTor, defaultContext, True)

            updateTsFiles(fetchedTor, tsFileNames, codecForTr, noObsolete,
                          verbose)

            if not metSomething:
                sys.stderr.write(
                    "pylupdate5 warning: File '%s' does not look like a "
                    "project file\n" % arg)
            elif len(tsFileNames) == 0:
                sys.stderr.write(
                    "pylupdate5 warning: Met no 'TRANSLATIONS' entry in "
                    "project file '%s'\n" % arg)

            QDir.setCurrent(oldDir)
        else:
            if metTsFlag:
                if arg.lower().endswith(".ts"):
                    fi = QFileInfo(arg)

                    if not fi.exists() or fi.isWritable():
                        tsFileNames.append(arg)
                    else:
                        sys.stderr.write(
                            "pylupdate5 warning: For some reason, I "
                            "cannot save '%s'\n" % arg)
                else:
                    sys.stderr.write(
                        "pylupdate5 error: File '%s' lacks .ts extension\n" %
                        arg)
            else:
                fi = QFileInfo(arg)

                if fi.suffix() in ("py", "pyw"):
                    fetchtr_py(fi.absoluteFilePath(), fetchedTor,
                               defaultContext, True, codecForSource, tr_func,
                               translate_func)
                else:
                    fetchtr_ui(fi.absoluteFilePath(), fetchedTor,
                               defaultContext, True)

    if not standardSyntax:
        updateTsFiles(fetchedTor, tsFileNames, codecForTr, noObsolete, verbose)

    if numFiles == 0:
        printUsage()
        sys.exit(1)
예제 #8
0
 def get_path(path: str = None, override: bool = False) -> str:
     if override:
         if getattr(sys, 'frozen', False):
             return os.path.join(sys._MEIPASS, path)
         return os.path.join(QFileInfo(__file__).absolutePath(), path)
     return ':assets/%s' % path
예제 #9
0
segments_copy_without = np.multiply(segments_copy_without, mask)
segments_copy_without[segments_copy_without < 0] = -9999.0

print('Saving classification to raster with gdal')
result_path = "C:/temp/naip/classified.tif"
result_dataset = driver_tiff.Create(result_path, source_dataset_without.RasterXSize,
                                    source_dataset_without.RasterYSize,
                                    1, gdal.GDT_Float32)

result_dataset.SetGeoTransform(source_dataset_without.GetGeoTransform())
result_dataset.SetProjection(source_dataset_without.GetProjection())
result_dataset.GetRasterBand(1).SetNoDataValue(-9999.0)
result_dataset.GetRasterBand(1).WriteArray(segments_copy_without)
result_dataset = None

fileInfo = QFileInfo(result_path)
baseName = fileInfo.baseName()
layer = QgsRasterLayer(result_path, baseName)

pcolor = []

pcolor.append(QgsColorRampShader.ColorRampItem(1, QColor("#d2ca97")))
pcolor.append(QgsColorRampShader.ColorRampItem(2, QColor("#f7f7f7")))
pcolor.append(QgsColorRampShader.ColorRampItem(3, QColor("#a1d99b")))
pcolor.append(QgsColorRampShader.ColorRampItem(4, QColor("#41ab5d")))
pcolor.append(QgsColorRampShader.ColorRampItem(5, QColor("#006d2c")))
pcolor.append(QgsColorRampShader.ColorRampItem(6, QColor("#00441b")))

renderer = QgsPalettedRasterRenderer(layer.dataProvider(), 1,
                                     QgsPalettedRasterRenderer.colorTableToClassData(pcolor))
layer.setRenderer(renderer)
 def select_3d_file(self):
     """Select 3d file"""
     file_3d, _filter_3d = QFileDialog.getOpenFileName(
         self.dlg, "Select .3d file ", self.path_3d, '*.3d')
     self.dlg.selectedFile.setText(file_3d)
     self.path_3d = QFileInfo(file_3d).path()  # memorise path selection
예제 #11
0
 def load_stylesheet(qssfile: str) -> None:
     if QFileInfo(qssfile).exists():
         qss = QFile(qssfile)
         qss.open(QFile.ReadOnly | QFile.Text)
         qApp.setStyleSheet(QTextStream(qss).readAll())
예제 #12
0
 def mkdir(self, filename):
     dir = QFileInfo(filename).dir()
     if not dir.exists():
         QDir().mkpath(dir.absolutePath())
예제 #13
0
 def showWatchFileInfo(self):
     if self.useWatchFile:
         fileInfo = QFileInfo(self.watchFileName)
         infoText = 'use code from file:\n' + self.watchFileName + '\n' + (
             '(exists)' if fileInfo.exists() else '(doesn\'t exist)')
         self.codeEditor.setPlainText(infoText)
예제 #14
0
    def __init__(self, filename='', wins=None, parent=None):
        global g_allFuncList
        super(QsciScintilla, self).__init__(parent)
        self.win = wins
        self.jumpName = ''
        self.list_line = []
        self.Font = QFont()
        # self.Font = self.win.EditFont  # 采用主窗口传入的字体
        self.Font.setFixedPitch(True)
        #self.loadFile(self.filename)
        self.setFont(self.Font)
        # 1.设置文档的编码格式为 “utf8” ,换行符为 windows   【可选linux,Mac】
        self.setUtf8(True)
        self.setEolMode(
            QsciScintilla.SC_EOL_CRLF)  # 文件中的每一行都以EOL字符结尾(换行符为 \r \n)
        # 2.设置括号匹配模式
        self.setBraceMatching(QsciScintilla.StrictBraceMatch)  #
        # 3.设置 Tab 键功能
        self.setIndentationsUseTabs(True)  # 行首缩进采用Tab键,反向缩进是Shift +Tab
        self.setIndentationWidth(4)  # 行首缩进宽度为4个空格

        self.setIndentationGuides(True)  # 显示虚线垂直线的方式来指示缩进
        self.setTabIndents(True)  # 编辑器将行首第一个非空格字符推送到下一个缩进级别
        self.setAutoIndent(True)  # 插入新行时,自动缩进将光标推送到与前一个相同的缩进级别
        self.setBackspaceUnindents(True)
        self.setTabWidth(4)  # Tab 等于 4 个空格
        # 4.设置光标
        self.setCaretWidth(2)  # 光标宽度(以像素为单位),0表示不显示光标
        self.setCaretForegroundColor(QColor("darkCyan"))  # 光标颜色
        self.setCaretLineVisible(True)  # 是否高亮显示光标所在行
        self.setCaretLineBackgroundColor(QColor('#FFCFCF'))  # 光标所在行的底色
        # 5.设置页边特性。        这里有3种Margin:[0]行号    [1]改动标识   [2]代码折叠
        # 5.1 设置行号
        self.setMarginsFont(self.Font)  # 行号字体
        self.setMarginLineNumbers(0, True)  # 设置标号为0的页边显示行号
        self.setMarginWidth(0, '00000')  # 行号宽度
        self.setMarkerForegroundColor(QColor("#FFFFFF"), 0)
        # 5.2 设置改动标记
        self.setMarginType(1, QsciScintilla.SymbolMargin)  # 设置标号为1的页边用于显示改动标记
        self.setMarginWidth(1, "0000")  # 改动标记占用的宽度
        img = QPixmap("test1.png")  # 改动标记图标,大小是48 x 48
        sym_1 = img.scaled(QSize(16, 16))  # 图标缩小为 16 x 16
        self.markerDefine(sym_1, 0)
        self.setMarginMarkerMask(1, 0b1111)
        self.setMarkerForegroundColor(QColor("#ee1111"), 1)  # 00ff00
        # 5.3  设置代码自动折叠区域
        self.setFolding(QsciScintilla.PlainFoldStyle)
        self.setMarginWidth(2, 12)
        # 5.3.1 设置代码折叠和展开时的页边标记 - +
        self.markerDefine(QsciScintilla.Minus,
                          QsciScintilla.SC_MARKNUM_FOLDEROPEN)
        self.markerDefine(QsciScintilla.Plus, QsciScintilla.SC_MARKNUM_FOLDER)
        self.markerDefine(QsciScintilla.Minus,
                          QsciScintilla.SC_MARKNUM_FOLDEROPENMID)
        self.markerDefine(QsciScintilla.Plus,
                          QsciScintilla.SC_MARKNUM_FOLDEREND)
        # 5.3.2 设置代码折叠后,+ 的颜色FFFFFF
        self.setMarkerBackgroundColor(QColor("#FFBCBC"),
                                      QsciScintilla.SC_MARKNUM_FOLDEREND)
        self.setMarkerForegroundColor(QColor("red"),
                                      QsciScintilla.SC_MARKNUM_FOLDEREND)

        # 6.语法高亮显示
        # 6.1语法高亮的设置见 MyLexerCPP类 源码
        self.lexer = MyLexerCPP(self)
        self.setLexer(self.lexer)
        # 6.2设置自动补全
        self.mod = False
        self.__api = QsciAPIs(self.lexer)
        # SDCC编译器的关键字 列表
        sdcc_kwlist = [
            '__data', '__idata', '__pdata', '__xdata', '__code', '__bit',
            '__sbit', '__sfr', 'u8', 'u16', 'WORD', 'BYTE', 'define',
            'include', '__interrupt', 'auto', 'double', 'int', 'struct',
            'break', 'else', 'long', 'switch', 'case', 'enum', 'register',
            'typedef', 'default', 'char', 'extern', 'return', 'union', 'const',
            'float', 'short', 'unsigned', 'continue', 'for', 'signed', 'void',
            'goto', 'sizeof', 'volatile', 'do', 'while', 'static', 'if'
        ]
        autocompletions = keyword.kwlist + sdcc_kwlist
        # autocompletions = sdcc_kwlist
        print("sciisodk")

        for ac in autocompletions:
            self.__api.add(ac)
        self.__api.prepare()
        self.autoCompleteFromAll()
        self.setAutoCompletionSource(QsciScintilla.AcsAll)  # 自动补全所以地方出现的
        self.setAutoCompletionCaseSensitivity(True)  # 设置自动补全大小写敏感
        self.setAutoCompletionThreshold(1)  # 输入1个字符,就出现自动补全 提示
        self.setAutoCompletionReplaceWord(False)
        self.setAutoCompletionUseSingle(QsciScintilla.AcusExplicit)
        self.setAttribute(Qt.WA_DeleteOnClose)
        # 设置函数名为关键字2    KeyWord = sdcc_kwlistcc  ;KeywordSet2 = 函数名
        self.SendScintilla(QsciScintilla.SCI_SETKEYWORDS, 0,
                           " ".join(sdcc_kwlist).encode(encoding='utf-8'))
        self.SendScintilla(QsciScintilla.SCI_STYLESETFORE,
                           QsciLexerCPP.KeywordSet2, 0x7f0000)
        # self.SendScintilla(QsciScintilla.SCI_SETKEYWORDS, 1, " ".join(g_allFuncList).encode(encoding='utf-8'))

        self.filename = filename
        if self.filename == '':
            self.filename = str("未命名-{0}".format(SciTextEdit.NextId))
            SciTextEdit.NextId += 1
        self.setModified(False)
        # 设置文档窗口的标题
        self.setWindowTitle(QFileInfo(self.filename).fileName())
        # 将槽函数链接到文本改动的信号
        self.textChanged.connect(self.textChangedAction)
        # 给文档窗口添加右键菜单
        self.setContextMenuPolicy(Qt.CustomContextMenu)  #
        self.customContextMenuRequested.connect(self.RightMenu)
예제 #15
0
 def createActions(self):
     root = QFileInfo(__file__).absolutePath()
예제 #16
0
    def __init__(self, gui):
        super(MainWindow, self).__init__()
        self.gui = gui
        self.gateways = []
        self.welcome_dialog = None
        self.recovery_key_exporter = None

        self.setWindowTitle(APP_NAME)
        self.setMinimumSize(QSize(600, 400))
        self.setUnifiedTitleAndToolBarOnMac(True)
        self.setContextMenuPolicy(Qt.NoContextMenu)

        if sys.platform == 'darwin':
            # To disable the broken/buggy "full screen" mode on macOS.
            # See https://github.com/gridsync/gridsync/issues/241
            self.setWindowFlags(Qt.Dialog)

        self.shortcut_new = QShortcut(QKeySequence.New, self)
        self.shortcut_new.activated.connect(self.show_welcome_dialog)

        self.shortcut_open = QShortcut(QKeySequence.Open, self)
        self.shortcut_open.activated.connect(self.select_folder)

        self.shortcut_preferences = QShortcut(QKeySequence.Preferences, self)
        self.shortcut_preferences.activated.connect(
            self.gui.show_preferences_window)

        self.shortcut_close = QShortcut(QKeySequence.Close, self)
        self.shortcut_close.activated.connect(self.close)

        self.shortcut_quit = QShortcut(QKeySequence.Quit, self)
        self.shortcut_quit.activated.connect(self.confirm_quit)

        self.central_widget = CentralWidget(self.gui)
        self.setCentralWidget(self.central_widget)

        font = Font(8)

        folder_icon_default = QFileIconProvider().icon(QFileInfo(config_dir))
        folder_icon_composite = CompositePixmap(
            folder_icon_default.pixmap(256, 256), resource('green-plus.png'))
        folder_icon = QIcon(folder_icon_composite)

        folder_action = QAction(folder_icon, "Add Folder", self)
        folder_action.setToolTip("Add a Folder...")
        folder_action.setFont(font)
        folder_action.triggered.connect(self.select_folder)

        grid_invites_enabled = True
        features_settings = settings.get('features')
        if features_settings:
            grid_invites = features_settings.get('grid_invites')
            if grid_invites and grid_invites.lower() == 'false':
                grid_invites_enabled = False

        if grid_invites_enabled:
            invites_action = QAction(QIcon(resource('invite.png')), "Invites",
                                     self)
            invites_action.setToolTip("Enter or Create an Invite Code")
            invites_action.setFont(font)

            enter_invite_action = QAction(QIcon(), "Enter Invite Code...",
                                          self)
            enter_invite_action.setToolTip("Enter an Invite Code...")
            enter_invite_action.triggered.connect(self.open_invite_receiver)

            create_invite_action = QAction(QIcon(), "Create Invite Code...",
                                           self)
            create_invite_action.setToolTip("Create on Invite Code...")
            create_invite_action.triggered.connect(
                self.open_invite_sender_dialog)

            invites_menu = QMenu(self)
            invites_menu.addAction(enter_invite_action)
            invites_menu.addAction(create_invite_action)

            invites_button = QToolButton(self)
            invites_button.setDefaultAction(invites_action)
            invites_button.setMenu(invites_menu)
            invites_button.setPopupMode(2)
            invites_button.setStyleSheet(
                'QToolButton::menu-indicator { image: none }')
            invites_button.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)

        else:
            invite_action = QAction(QIcon(resource('invite.png')),
                                    "Enter Code", self)
            invite_action.setToolTip("Enter an Invite Code...")
            invite_action.setFont(font)
            invite_action.triggered.connect(self.open_invite_receiver)

        spacer_left = QWidget()
        spacer_left.setSizePolicy(QSizePolicy.Expanding, 0)

        self.combo_box = ComboBox()
        self.combo_box.currentIndexChanged.connect(self.on_grid_selected)

        spacer_right = QWidget()
        spacer_right.setSizePolicy(QSizePolicy.Expanding, 0)

        history_action = QAction(QIcon(resource('time.png')), 'History', self)
        history_action.setToolTip("Show/Hide History")
        history_action.setFont(font)
        history_action.triggered.connect(self.on_history_button_clicked)

        self.history_button = QToolButton(self)
        self.history_button.setDefaultAction(history_action)
        self.history_button.setCheckable(True)
        self.history_button.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)

        recovery_action = QAction(QIcon(resource('key.png')), "Recovery", self)
        recovery_action.setToolTip("Import or Export a Recovery Key")
        recovery_action.setFont(font)

        import_action = QAction(QIcon(), "Import Recovery Key...", self)
        import_action.setToolTip("Import Recovery Key...")
        import_action.triggered.connect(self.import_recovery_key)

        export_action = QAction(QIcon(), "Export Recovery Key...", self)
        export_action.setToolTip("Export Recovery Key...")
        export_action.setShortcut(QKeySequence.Save)
        export_action.triggered.connect(self.export_recovery_key)

        recovery_menu = QMenu(self)
        recovery_menu.addAction(import_action)
        recovery_menu.addAction(export_action)

        recovery_button = QToolButton(self)
        recovery_button.setDefaultAction(recovery_action)
        recovery_button.setMenu(recovery_menu)
        recovery_button.setPopupMode(2)
        recovery_button.setStyleSheet(
            'QToolButton::menu-indicator { image: none }')
        recovery_button.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)

        self.toolbar = self.addToolBar('')
        p = self.palette()
        dimmer_grey = BlendedColor(p.windowText().color(),
                                   p.window().color(), 0.7).name()
        if sys.platform != 'darwin':
            self.toolbar.setStyleSheet("""
                QToolBar {{ border: 0px }}
                QToolButton {{ color: {} }}
            """.format(dimmer_grey))
        else:
            self.toolbar.setStyleSheet(
                "QToolButton {{ color: {} }}".format(dimmer_grey))
        self.toolbar.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)
        self.toolbar.setIconSize(QSize(24, 24))
        self.toolbar.setMovable(False)
        self.toolbar.addAction(folder_action)
        if grid_invites_enabled:
            self.toolbar.addWidget(invites_button)
        else:
            self.toolbar.addAction(invite_action)
        self.toolbar.addWidget(spacer_left)
        self.toolbar.addWidget(self.combo_box)
        self.toolbar.addWidget(spacer_right)
        self.toolbar.addWidget(self.history_button)
        self.toolbar.addWidget(recovery_button)

        if sys.platform != 'win32':  # Text is getting clipped on Windows 10
            for action in self.toolbar.actions():
                widget = self.toolbar.widgetForAction(action)
                if isinstance(widget, QToolButton):
                    widget.setMaximumWidth(68)

        self.active_invite_sender_dialogs = []
        self.active_invite_receiver_dialogs = []

        self.pending_news_message = ()
예제 #17
0
    def _database_downloaded(self, branch, progress, reply):
        """Called when the file has finished downloading."""
        # Close the progress dialog
        progress.close()

        # Get the absolute path of the file
        app_path = QCoreApplication.applicationFilePath()
        app_name = QFileInfo(app_path).fileName()
        file_ext = "i64" if "64" in app_name else "idb"
        file_name = "%s_%s.%s" % (branch.repo, branch.name, file_ext)
        file_path = self._plugin.user_resource("files", file_name)

        # Write the packet content to disk
        with open(file_path, "wb") as output_file:
            output_file.write(reply.content)
        self._plugin.logger.info("Saved file %s" % file_name)

        # Save the old database
        database = ida_loader.get_path(ida_loader.PATH_TYPE_IDB)
        if database:
            ida_loader.save_database(database, ida_loader.DBFL_TEMP)

        # This is a very ugly hack used to open a database into IDA. We don't
        # have any function for this in the SDK, so I sorta hijacked the
        # snapshot functionality in this effect.

        # Get the library to call functions not present in the bindings
        idaname = "ida64" if "64" in app_name else "ida"
        if sys.platform == "win32":
            dllname, dlltype = idaname + ".dll", ctypes.windll
        elif sys.platform == "linux2":
            dllname, dlltype = "lib" + idaname + ".so", ctypes.cdll
        elif sys.platform == "darwin":
            dllname, dlltype = "lib" + idaname + ".dylib", ctypes.cdll
        dllpath = ida_diskio.idadir(None)
        if not os.path.exists(os.path.join(dllpath, dllname)):
            dllpath = dllpath.replace("ida64", "ida")
        dll = dlltype[os.path.join(dllpath, dllname)]

        # Close the old database using the term_database library function
        old_path = ida_loader.get_path(ida_loader.PATH_TYPE_IDB)
        if old_path:
            dll.term_database()

        # Open the new database using the init_database library function
        # This call only won't be enough because the user interface won't
        # be initialized, this is why the snapshot functionality is used for
        args = [app_name, file_path]
        argc = len(args)
        argv = (ctypes.POINTER(ctypes.c_char) * (argc + 1))()
        for i, arg in enumerate(args):
            arg = arg.encode("utf-8")
            argv[i] = ctypes.create_string_buffer(arg)

        v = ctypes.c_int(0)
        av = ctypes.addressof(v)
        pv = ctypes.cast(av, ctypes.POINTER(ctypes.c_int))
        dll.init_database(argc, argv, pv)

        # Create a temporary copy of the new database because we cannot use
        # the snapshot functionality to restore the currently opened database
        file_ext = ".i64" if "64" in app_name else ".idb"
        tmp_file, tmp_path = tempfile.mkstemp(suffix=file_ext)
        shutil.copyfile(file_path, tmp_path)

        # This hook is used to delete the temporary database when all done
        class UIHooks(ida_kernwin.UI_Hooks):
            def database_inited(self, is_new_database, idc_script):
                self.unhook()

                os.close(tmp_file)
                if os.path.exists(tmp_path):
                    os.remove(tmp_path)

        hooks = UIHooks()
        hooks.hook()

        # Call the restore_database_snapshot library function
        # This will initialize the user interface, completing the process
        s = ida_loader.snapshot_t()
        s.filename = tmp_path  # Use the temporary database
        ida_kernwin.restore_database_snapshot(s, None, None)
 def slot_get_save_mask(self):
     str, _ = QFileDialog.getSaveFileName(self, "Save file", '../../data/',
                                          self.tr("mask(*.png)"))
     self.lineEdit_mask.setText(str)
     tp_dir = QFileInfo(str).path()
     QDir.setCurrent(tp_dir)
예제 #19
0
파일: share.py 프로젝트: probonopd/gridsync
    def __init__(self, gateway, gui, folder_names=None):
        super(InviteSenderDialog, self).__init__()
        self.gateway = gateway
        self.gui = gui
        self.folder_names = folder_names
        self.folder_names_humanized = humanized_list(folder_names, 'folders')
        self.settings = {}
        self.pending_invites = []
        self.use_tor = self.gateway.use_tor

        self.setMinimumSize(500, 300)

        header_icon = QLabel(self)
        if self.folder_names:
            icon = QFileIconProvider().icon(
                QFileInfo(
                    self.gateway.get_magic_folder_directory(
                        self.folder_names[0])))
        else:
            icon = QIcon(os.path.join(gateway.nodedir, 'icon'))
            if not icon.availableSizes():
                icon = QIcon(resource('tahoe-lafs.png'))
        header_icon.setPixmap(icon.pixmap(50, 50))

        header_text = QLabel(self)
        if self.folder_names:
            header_text.setText(self.folder_names_humanized)
        else:
            header_text.setText(self.gateway.name)
        header_text.setFont(Font(18))
        header_text.setAlignment(Qt.AlignCenter)

        header_layout = QGridLayout()
        header_layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, 0), 1,
                              1)
        header_layout.addWidget(header_icon, 1, 2)
        header_layout.addWidget(header_text, 1, 3)
        header_layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, 0), 1,
                              4)

        self.subtext_label = QLabel(self)
        self.subtext_label.setFont(Font(10))
        self.subtext_label.setStyleSheet("color: grey")
        self.subtext_label.setWordWrap(True)
        self.subtext_label.setAlignment(Qt.AlignCenter)

        self.noise_label = QLabel()
        font = Font(16)
        font.setFamily("Courier")
        font.setStyleHint(QFont.Monospace)
        self.noise_label.setFont(font)
        self.noise_label.setStyleSheet("color: grey")

        self.noise_timer = QTimer()
        self.noise_timer.timeout.connect(
            lambda: self.noise_label.setText(b58encode(os.urandom(16))))
        self.noise_timer.start(75)

        self.code_label = QLabel()
        self.code_label.setFont(Font(18))
        self.code_label.setTextInteractionFlags(Qt.TextSelectableByMouse)
        self.code_label.hide()

        self.box_title = QLabel(self)
        self.box_title.setAlignment(Qt.AlignCenter)
        self.box_title.setFont(Font(16))

        self.box = QGroupBox()
        self.box.setAlignment(Qt.AlignCenter)
        self.box.setStyleSheet('QGroupBox {font-size: 16px}')

        self.copy_button = QToolButton()
        self.copy_button.setIcon(QIcon(resource('copy.png')))
        self.copy_button.setToolTip("Copy to clipboard")
        self.copy_button.setStyleSheet('border: 0px; padding: 0px;')
        self.copy_button.hide()

        box_layout = QGridLayout(self.box)
        box_layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, 0), 1, 1)
        box_layout.addWidget(self.noise_label, 1, 2)
        box_layout.addWidget(self.code_label, 1, 3)
        box_layout.addWidget(self.copy_button, 1, 4)
        box_layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, 0), 1, 5)

        self.close_button = QPushButton("Close and cancel invite")
        self.close_button.setAutoDefault(False)

        self.checkmark = QLabel()
        self.checkmark.setPixmap(Pixmap('green_checkmark.png', 32))
        self.checkmark.setAlignment(Qt.AlignCenter)
        self.checkmark.hide()

        self.tor_label = QLabel()
        self.tor_label.setToolTip(
            "This connection is being routed through the Tor network.")
        self.tor_label.setPixmap(Pixmap('tor-onion.png', 24))
        self.tor_label.hide()

        self.progress_bar = QProgressBar()
        self.progress_bar.setMaximum(2)
        self.progress_bar.setTextVisible(False)
        self.progress_bar.hide()

        layout = QGridLayout(self)
        layout.addItem(QSpacerItem(0, 0, 0, QSizePolicy.Expanding), 0, 0)
        layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, 0), 1, 1)
        layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, 0), 1, 2)
        layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, 0), 1, 3)
        layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, 0), 1, 4)
        layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, 0), 1, 5)
        layout.addLayout(header_layout, 1, 3)
        layout.addItem(QSpacerItem(0, 0, 0, QSizePolicy.Expanding), 2, 1)
        layout.addWidget(self.box_title, 3, 2, 1, 3)
        layout.addWidget(self.checkmark, 3, 3)
        layout.addWidget(self.tor_label, 4, 1, 1, 1,
                         Qt.AlignRight | Qt.AlignVCenter)
        layout.addWidget(self.box, 4, 2, 1, 3)
        layout.addWidget(self.progress_bar, 4, 2, 1, 3)
        layout.addWidget(self.subtext_label, 5, 2, 1, 3)
        layout.addItem(QSpacerItem(0, 0, 0, QSizePolicy.Expanding), 6, 1)
        layout.addWidget(self.close_button, 7, 3)
        layout.addItem(QSpacerItem(0, 0, 0, QSizePolicy.Expanding), 8, 1)

        self.copy_button.clicked.connect(self.on_copy_button_clicked)
        self.close_button.clicked.connect(self.close)

        self.set_box_title("Generating invite code...")
        self.subtext_label.setText("Creating folder invite(s)...\n\n")

        if self.use_tor:
            self.tor_label.show()
            self.progress_bar.setStyleSheet(
                'QProgressBar::chunk {{ background-color: {}; }}'.format(
                    TOR_PURPLE))

        self.go()  # XXX
예제 #20
0
 def getAppPath(self) -> str:
     if getattr(sys, 'frozen', False):
         return sys._MEIPASS
     return QFileInfo(__file__).absolutePath()
예제 #21
0
def open_file(path):
    QDesktopServices.openUrl(
        QUrl.fromLocalFile(QFileInfo(path).absoluteFilePath()))
예제 #22
0
파일: dualscale.py 프로젝트: bsberry/stlib
 def getPath(self):
     return os.path.join(QFileInfo.absolutePath(QFileInfo(__file__)),
                         'dualscale.ui')
예제 #23
0
파일: config.py 프로젝트: suyilearn/retext
	def updateButtonText(self):
		if self.fileName:
			self.setText(QFileInfo(self.fileName).fileName())
		else:
			self.setText(self.defaultText)
    def anteriorSiguiente(self):
        if self.imagenesCarpeta:
            widget = Form.sender().objectName()

            if widget == "Anterior":
                self.estadoAnterior = True if self.position == 0 else False
                self.estadoSiguiente = False

                self.position -= 1 if self.position > 0 else 0
                posicionInternaX, posicionX = 650, -650
            else:
                self.estadoSiguiente = True if self.position == len(
                    self.imagenesCarpeta) - 1 else False
                self.estadoAnterior = False

                self.position += 1 if self.position < len(
                    self.imagenesCarpeta) - 1 else 0
                posicionInternaX, posicionX = -650, 650

            if self.estadoAnterior or self.estadoSiguiente:
                return
            else:
                imagen = self.imagenesCarpeta[self.position]

                # Verificar que la carpeta que contiene la imagene exista
                if not QDir(self.carpetaActual).exists():
                    self.Eliminar()
                    return
                elif not QFile.exists(imagen):
                    # Obtener la ruta y el nombre de las imagenes que se encuentren en la
                    # carpeta de la imagen seleccionada
                    imagenes = self.carpetaActual.entryInfoList(
                        ["*.jpg", "*.png", "*.ico", "*.bmp"], QDir.Files,
                        QDir.Name)

                    if not imagenes:
                        self.Eliminar()
                        return

                    self.imagenesCarpeta = [
                        imagen.absoluteFilePath() for imagen in imagenes
                    ]

                    self.position = randint(0, len(self.imagenesCarpeta) - 1)
                    self.estadoAnterior = True if self.position == 0 else False
                    self.estadoSiguiente = True if self.position == len(
                        self.imagenesCarpeta) - 1 else False
                elif QImage(imagen).isNull():
                    del self.imagenesCarpeta[self.position]

                    if not self.imagenesCarpeta:
                        self.Eliminar()
                        return

                    self.position = randint(0, len(self.imagenesCarpeta) - 1)
                    self.estadoAnterior = True if self.position == 0 else False
                    self.estadoSiguiente = True if self.position == len(
                        self.imagenesCarpeta) - 1 else False

                imagen = self.imagenesCarpeta[self.position]

                if self.labelImagen.pixmap():
                    labelConImagen = self.labelImagen
                elif self.labelImagenUno.pixmap():
                    labelConImagen = self.labelImagenUno

                # Function responsible for locking or unlocking buttons
                self.bloquearBotones(False)

                # Image name and extension
                nombre = QFileInfo(imagen).fileName()

                # Label in which the image will be displayed
                labelMostrarImagen = self.labelImagen if self.labelImagenUno.pixmap(
                ) else self.labelImagenUno

                # Remove current image and show next
                self.Limpiar(labelConImagen, labelMostrarImagen,
                             QImage(imagen), nombre, posicionInternaX,
                             posicionX)
예제 #25
0
    def __newResource(self):
        """
        Private slot to handle the New Resource menu action.
        """
        itm = self.model().item(self.currentIndex())
        if itm is None:
            path = self.project.ppath
        else:
            try:
                path = os.path.dirname(itm.fileName())
            except AttributeError:
                try:
                    path = itm.dirName()
                except AttributeError:
                    path = os.path.join(self.project.ppath, itm.data(0))

        if self.hooks["newResource"] is not None:
            self.hooks["newResource"](path)
        else:
            fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
                self, self.tr("New Resource"), path,
                self.tr("Qt Resource Files (*.qrc)"), "",
                E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))

            if not fname:
                # user aborted or didn't enter a filename
                return

            ext = QFileInfo(fname).suffix()
            if not ext:
                ex = selectedFilter.split("(*")[1].split(")")[0]
                if ex:
                    fname += ex

            if os.path.exists(fname):
                res = E5MessageBox.yesNo(
                    self,
                    self.tr("New Resource"),
                    self.tr("The file already exists! Overwrite it?"),
                    icon=E5MessageBox.Warning)
                if not res:
                    # user selected to not overwrite
                    return

            try:
                if self.project.useSystemEol():
                    newline = None
                else:
                    newline = self.project.getEolString()
                rcfile = open(fname, 'w', encoding="utf-8", newline=newline)
                rcfile.write('<!DOCTYPE RCC>\n')
                rcfile.write('<RCC version="1.0">\n')
                rcfile.write('<qresource>\n')
                rcfile.write('</qresource>\n')
                rcfile.write('</RCC>\n')
                rcfile.close()
            except IOError as e:
                E5MessageBox.critical(
                    self, self.tr("New Resource"),
                    self.tr("<p>The new resource file <b>{0}</b> could not"
                            " be created.<br>Problem: {1}</p>").format(
                                fname, str(e)))
                return

            self.project.appendFile(fname)
            self.sourceFile.emit(fname)
예제 #26
0
 def get_filesize(self, path):
     if path.startswith('file:///'):
         path = path.strip('file:///')
     file = QFileInfo(QFile(path))
     self._filesize = file.size()
     return self._filesize
예제 #27
0
    def createActions(self):
        root = QFileInfo(__file__).absolutePath()

        self.newAct = QAction(QIcon(root + '/images/new.png'),
                              "&New",
                              self,
                              shortcut=QKeySequence.New,
                              statusTip="Create a new file",
                              triggered=self.newFile)

        self.openAct = QAction(QIcon(root + '/images/open.png'),
                               "&Open...",
                               self,
                               shortcut=QKeySequence.Open,
                               statusTip="Open an existing file",
                               triggered=self.open)

        self.saveAct = QAction(QIcon(root + '/images/save.png'),
                               "&Save",
                               self,
                               shortcut=QKeySequence.Save,
                               statusTip="Save the document to disk",
                               triggered=self.save)

        self.saveAsAct = QAction(
            "Save &As...",
            self,
            shortcut=QKeySequence.SaveAs,
            statusTip="Save the document under a new name",
            triggered=self.saveAs)

        self.exitAct = QAction("E&xit",
                               self,
                               shortcut="Ctrl+Q",
                               statusTip="Exit the application",
                               triggered=self.close)

        self.cutAct = QAction(
            QIcon(root + '/images/cut.png'),
            "Cu&t",
            self,
            shortcut=QKeySequence.Cut,
            statusTip="Cut the current selection's contents to the clipboard",
            triggered=self.textEdit.cut)

        self.copyAct = QAction(
            QIcon(root + '/images/copy.png'),
            "&Copy",
            self,
            shortcut=QKeySequence.Copy,
            statusTip="Copy the current selection's contents to the clipboard",
            triggered=self.textEdit.copy)

        self.pasteAct = QAction(
            QIcon(root + '/images/paste.png'),
            "&Paste",
            self,
            shortcut=QKeySequence.Paste,
            statusTip=
            "Paste the clipboard's contents into the current selection",
            triggered=self.textEdit.paste)

        self.aboutAct = QAction("&About",
                                self,
                                statusTip="Show the application's About box",
                                triggered=self.about)

        self.aboutQtAct = QAction("About &Qt",
                                  self,
                                  statusTip="Show the Qt library's About box",
                                  triggered=QApplication.instance().aboutQt)

        self.cutAct.setEnabled(False)
        self.copyAct.setEnabled(False)
        self.textEdit.copyAvailable.connect(self.cutAct.setEnabled)
        self.textEdit.copyAvailable.connect(self.copyAct.setEnabled)
예제 #28
0
 def get_filename(self, path):
     if path.startswith('file:///'):
         path = path.strip('file:///')
     file = QFileInfo(QFile(path))
     return file.fileName()
예제 #29
0
 def processClick(self):
     startDir = (QFileInfo(self.fileName).absolutePath()
                 if self.fileName else '')
     self.fileName = QFileDialog.getOpenFileName(
         self, self.tr('Select file to open'), startDir)[0]
     self.updateButtonText()
예제 #30
0
    def initbridgeJSONData(self, v2rayshellConfigFileName=False):
        """
        open v2rayshell config JSON File. save it to memory.
        """
        if (v2rayshellConfigFileName):
            self.v2rayshellConfigFileName = v2rayshellConfigFileName

        self.clear()

        fileInfo = QFileInfo(self.v2rayshellConfigFileName)
        self.fileName = fileInfo.fileName()
        self.openFile = QFile(self.v2rayshellConfigFileName)

        self.openFile.open(QIODevice.ReadOnly | QIODevice.Text)
        if self.openFile.error() != self.openFile.NoError:
            self.msgBox.information(
                QDialog().move(self.fly), "{}".format(self.fileName),
                self.translate("bridgetreasureChest",
                               "Unable to open the file {}:  {}.").format(
                                   self.v2rayshellConfigFileName,
                                   self.openFile.errorString()))
            self.msgBox.move(QApplication.desktop().screen().rect().center() -
                             self.msgBox.rect().center())
            self.openFile = None
            return
        JSONData = str(self.openFile.readAll(), "utf-8")
        try:
            JSONData = json.loads(JSONData)
        except ValueError as e:
            self.msgBox.information(
                QDialog().move(self.fly),
                self.translate("bridgetreasureChest", "Parse JSON Data Error"),
                self.translate("bridgetreasureChest",
                               "Unable to parse {}:  error:{}.").format(
                                   self.fileName, e))
            self.msgBox.move(QApplication.desktop().screen().rect().center() -
                             self.msgBox.rect().center())
            self.openFile = None
            JSONData = None
            return

        try:
            JSONData["preferences"]
        except Exception:
            JSONData["preferences"] = {}

        try:
            JSONData["configFiles"]
        except Exception:
            JSONData["configFiles"] = []

        if (len(JSONData["preferences"]) > 0):
            try:
                JSONData["preferences"]["v2ray-core"]
            except Exception:
                JSONData["preferences"]["v2ray-core"] = False
            else:
                self.setV2raycoreVersion(JSONData["preferences"]["v2ray-core"])

            try:
                JSONData["preferences"]["v2ray-coreFilePath"]
            except Exception:
                JSONData["preferences"]["v2ray-coreFilePath"] = False
            else:
                self.setV2raycoreFilePath(
                    JSONData["preferences"]["v2ray-coreFilePath"])

            try:
                JSONData["preferences"]["language"]
            except Exception:
                JSONData["preferences"]["language"] = "en_US"
            else:
                self.setLanguage(JSONData["preferences"]["language"])

            try:
                JSONData["preferences"]["startup"]
            except Exception:
                JSONData["preferences"]["startup"] = False
            else:
                self.setStartup(JSONData["preferences"]["startup"])

            try:
                JSONData["preferences"]["connection"]
            except Exception:
                JSONData["preferences"]["connection"] = {}

            if not JSONData["preferences"]["connection"]:
                JSONData["preferences"]["connection"] = {}

            try:
                JSONData["preferences"]["connection"]["enable"]
            except Exception:
                JSONData["preferences"]["connection"]["enable"] = False

            try:
                JSONData["preferences"]["connection"]["connect"]
            except Exception:
                JSONData["preferences"]["connection"]["connect"] = "switch"

            try:
                JSONData["preferences"]["connection"]["interval"]
            except Exception:
                JSONData["preferences"]["connection"]["interval"] = 60

            try:
                JSONData["preferences"]["connection"]["timeout"]
            except Exception:
                JSONData["preferences"]["connection"]["timeout"] = 5

            try:
                JSONData["preferences"]["connection"]["trytimes"]
            except Exception:
                JSONData["preferences"]["connection"]["trytimes"] = 3

            self.setConnection(JSONData["preferences"]["connection"])

            try:
                JSONData["update"]
            except Exception:
                JSONData["update"] = {}

            try:
                JSONData["update"]["enable"]
            except Exception:
                JSONData["update"]["enable"] = False

            try:
                JSONData["update"]["schedule"]
            except Exception:
                JSONData["update"]["schedule"] = {}

            try:
                JSONData["update"]["schedule"]["date"]
            except Exception:
                JSONData["update"]["schedule"]["date"] = 8

            try:
                JSONData["update"]["schedule"]["time"]
            except Exception:
                JSONData["update"]["schedule"]["time"] = 3

            try:
                JSONData["update"]["install"]
            except Exception:
                JSONData["update"]["install"] = "manual"

            try:
                JSONData["update"]["downloadFile"]
            except Exception:
                JSONData["update"]["downloadFile"] = "v2ray-windows-64.zip"

            try:
                JSONData["update"]["silentInstall"]
            except Exception:
                JSONData["update"]["silentInstall"] = True

            self.setUpdateSchedule(JSONData["update"])

        if (len(JSONData["configFiles"]) > 0):
            for i in JSONData["configFiles"]:
                try:
                    self.setV2raycoreconfigFiles(i["enable"], i["hostName"],
                                                 i["configFileName"])
                except Exception:
                    continue

        self.allLanguages = copy.deepcopy(self.findQmFiles())

        self.openFile.close()