Ejemplo n.º 1
0
    def closeEvent(self, event):
        if self._version_thread and self._version_thread.isRunning():
            self._version_thread.terminate()
            self._version_thread.wait()

        self.com_server.stop()
        self.closing.emit()

        geo = self.geometry()
        self.settings['geometry'] = [
            geo.x(), geo.y(), geo.width(),
            geo.height()
        ]

        ZlmSettings.instance().save_to_file()
Ejemplo n.º 2
0
    def __init__(self, parent):
        QtWidgets.QDialog.__init__(
            self, parent, QtCore.Qt.WindowSystemMenuHint
            | QtCore.Qt.WindowTitleHint | QtCore.Qt.WindowCloseButtonHint)

        self.setWindowTitle("New version available")

        self.cb_check_for_update = QtWidgets.QPushButton(
            "Always check for updates.")
        self.cb_check_for_update.setCheckable(True)
        self.cb_check_for_update.setChecked(
            ZlmSettings.instance().check_for_updates)

        pb_download = QtWidgets.QPushButton("Download")
        pb_download.clicked.connect(self.accept)

        pb_cancel = QtWidgets.QPushButton("Cancel")
        pb_cancel.clicked.connect(self.reject)

        label = QtWidgets.QLabel(
            "A new version is available. Would you like to download it?")
        label.setWordWrap(True)

        layout = QtWidgets.QGridLayout()

        layout.addWidget(label, 0, 0, 1, 2)
        layout.addWidget(self.cb_check_for_update, 1, 0, 1, 2)
        layout.addItem(
            QtWidgets.QSpacerItem(0, 10, QtWidgets.QSizePolicy.Preferred,
                                  QtWidgets.QSizePolicy.Fixed), 2, 0, 1, 2)
        layout.addWidget(pb_download, 3, 0, 1, 1)
        layout.addWidget(pb_cancel, 3, 1, 1, 1)

        self.setLayout(layout)
Ejemplo n.º 3
0
    def show_option(self):
        settings_dialog = SettingsDialog(self)
        was_check_updates = ZlmSettings.instance().check_for_updates
        if settings_dialog.exec():
            always_on_top = self.settings.get("always_on_top", False)
            flags = self.windowFlags()
            on_top = flags & QtCore.Qt.WindowStaysOnTopHint == QtCore.Qt.WindowStaysOnTopHint
            if on_top != always_on_top:
                self.setWindowFlag(QtCore.Qt.WindowStaysOnTopHint,
                                   always_on_top)
                self.show()

            if not was_check_updates and ZlmSettings.instance(
            ).check_for_updates:
                self.check_for_updates()

            self.settings_changed.emit()
Ejemplo n.º 4
0
    def showEvent(self, event):
        self.showing.emit()

        if self._firstTime:
            self._firstTime = False

            if ZlmSettings.instance().check_for_updates:
                self.check_for_updates()
Ejemplo n.º 5
0
    def on_valid_version(self, valid):
        if not valid:
            dialog = VersionDialog(self)
            if dialog.exec_():
                try:
                    webbrowser.open(
                        "https://jonasouellet.github.io/zlayermanager/installation.html"
                    )
                except:
                    pass

            if dialog.stop_looking_for_update():
                ZlmSettings.instance().check_for_updates = False

        self._version_thread = None
Ejemplo n.º 6
0
def send_app_cmd(cmd):
    settings = ZlmSettings.instance()
    port = settings.get_current_app_port()
    if not port:
        for callback in on_port_not_set:
            callback(settings.current_app)
        return

    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
        command = bytes(cmd, 'utf-8')
        client.connect(('127.0.0.1', port))
        client.send(command)
    except Exception as e:
        for callback in on_exception:
            callback(e)
    finally:
        client.close()
Ejemplo n.º 7
0
def get_preset_folders():
    """ Look for preset folder
    1. With the executable
    2. In the user
    """

    out = {'app': [], 'user': None}

    if getattr(sys, 'frozen', False):
        root = sys.executable
    else:
        root = __file__

    directory = os.path.join(os.path.dirname(root), 'presets')
    if not os.path.isdir(directory):
        os.makedirs(directory)
    out['app'].append(directory)

    settings = ZlmSettings.instance()
    for directory in settings.additionnal_preset_dir:
        if os.path.isdir(directory):
            out['app'].append(directory)

    try:
        for directory in os.environ['ZLM_PRESET_PATH'].split(';'):
            if os.path.isdir(directory):
                out['app'].append(directory)
    except:
        pass

    directory = os.path.join(settings.getsettingfolder(), 'presets')
    if not os.path.isdir(directory):
        os.makedirs(directory)
    out['user'] = directory

    return out
Ejemplo n.º 8
0
    def __init__(self, example='layerName', parent=None):
        Qt.QDialog.__init__(
            self, parent, QtCore.Qt.WindowSystemMenuHint
            | QtCore.Qt.WindowTitleHint | QtCore.Qt.WindowCloseButtonHint)

        self.setWindowTitle("Rename")

        self.base_name = example

        self.sb_remove_start = Qt.QSpinBox()
        self.sb_remove_start.setMinimumWidth(50)
        self.sb_remove_start.setRange(0, 9)
        self.sb_remove_start.setObjectName('trim_start')

        self.sb_remove_end = Qt.QSpinBox()
        self.sb_remove_end.setRange(0, 9)
        self.sb_remove_end.setMinimumWidth(50)
        self.sb_remove_end.setObjectName('trim_end')

        self.le_prefix = Qt.QLineEdit()
        self.le_prefix.setValidator(
            Qt.QRegExpValidator(Qt.QRegExp(valid_name_re), self))
        self.le_prefix.setObjectName('prefix')

        self.le_suffix = Qt.QLineEdit()
        self.le_suffix.setValidator(
            Qt.QRegExpValidator(Qt.QRegExp(valid_name_re), self))
        self.le_suffix.setObjectName('suffix')

        self.le_base_name = Qt.QLineEdit()
        self.le_base_name.setValidator(
            Qt.QRegExpValidator(Qt.QRegExp(valid_name_re), self))
        # keep spaces for number
        self.le_base_name.setMaxLength(max_name_len - 2)
        self.le_base_name.setObjectName('basename')

        self.sb_padding = Qt.QSpinBox()
        self.sb_padding.setRange(1, 4)
        self.sb_padding.setValue(2)
        self.sb_padding.setObjectName('padding')

        self.sb_start = Qt.QSpinBox()
        self.sb_start.setRange(0, 999)
        self.sb_start.setObjectName('start')

        self.le_find = Qt.QLineEdit()
        self.le_find.setObjectName('find')
        self.le_replace = Qt.QLineEdit()
        self.le_replace.setValidator(
            Qt.QRegExpValidator(Qt.QRegExp(valid_name_re), self))
        self.le_replace.setObjectName('replace')

        self.lbl_ex = Qt.QLabel('Example: ' + self.base_name + ' -> ')
        self.lbl_name = Qt.QLabel(self.base_name)

        pb_accept = Qt.QPushButton("Accept")
        pb_accept.clicked.connect(self.accept)
        pb_cancel = Qt.QPushButton("Cancel")
        pb_cancel.clicked.connect(self.reject)

        layout = Qt.QHBoxLayout()
        layout.addWidget(self.sb_padding)
        layout.addWidget(Qt.QLabel("start #: "))
        layout.addWidget(self.sb_start)

        layout2 = Qt.QHBoxLayout()
        layout2.addStretch()
        layout2.addWidget(self.lbl_ex)
        layout2.addWidget(self.lbl_name)
        layout2.addStretch()

        grid = Qt.QGridLayout()

        grid.addWidget(Qt.QLabel("Find: "), 0, 0, 1, 1)
        grid.addWidget(self.le_find, 0, 1, 1, 2)
        grid.addWidget(Qt.QLabel("Replace: "), 0, 3, 1, 1)
        grid.addWidget(self.le_replace, 0, 4, 1, 2)

        grid.addWidget(Qt.QLabel("Strip start: "), 1, 0, 1, 1)
        grid.addWidget(self.sb_remove_start, 1, 1, 1, 1)
        grid.addItem(
            Qt.QSpacerItem(0, 0, Qt.QSizePolicy.Expanding,
                           Qt.QSizePolicy.Fixed), 1, 2, 1, 1)
        grid.addWidget(Qt.QLabel("Strip end: "), 1, 3, 1, 1)
        grid.addWidget(self.sb_remove_end, 1, 4, 1, 1)
        grid.addItem(
            Qt.QSpacerItem(0, 0, Qt.QSizePolicy.Expanding,
                           Qt.QSizePolicy.Fixed), 1, 5, 1, 1)

        grid.addWidget(Qt.QLabel("Base name: "), 2, 0, 1, 1)
        grid.addWidget(self.le_base_name, 2, 1, 1, 2)
        grid.addWidget(Qt.QLabel('Padding: '), 2, 3, 1, 1)
        grid.addLayout(layout, 2, 4, 1, 2)

        grid.addWidget(Qt.QLabel("Add prefix: "), 3, 0, 1, 1)
        grid.addWidget(self.le_prefix, 3, 1, 1, 2)
        grid.addWidget(Qt.QLabel("Add suffix: "), 3, 3, 1, 1)
        grid.addWidget(self.le_suffix, 3, 4, 1, 2)

        grid.addLayout(layout2, 4, 0, 1, 6)

        grid.addItem(
            Qt.QSpacerItem(0, 10, Qt.QSizePolicy.Expanding,
                           Qt.QSizePolicy.Fixed), 5, 0, 1, 6)
        grid.addWidget(pb_accept, 6, 0, 1, 3)
        grid.addWidget(pb_cancel, 6, 3, 1, 3)

        self.setLayout(grid)

        self.setSizeGripEnabled(False)
        self.setSizePolicy(Qt.QSizePolicy.Fixed, Qt.QSizePolicy.Fixed)

        self.connect_widgets()

        self.settings = ZlmSettings.instance().get('rename_ui', {})
        self.load_settings()
Ejemplo n.º 9
0
    def load_settings(self):
        for child in self.children():
            obj_name = child.objectName()
            if obj_name in self.settings:
                if isinstance(child, Qt.QSpinBox):
                    child.setValue(self.settings[obj_name])
                elif isinstance(child, Qt.QLineEdit):
                    child.setText(self.settings[obj_name])

    def save_settings(self):
        for child in self.children():
            obj_name = child.objectName()
            if isinstance(child, Qt.QSpinBox):
                self.settings[obj_name] = child.value()
            elif isinstance(child, Qt.QLineEdit):
                self.settings[obj_name] = child.text()

    def accept(self):
        self.save_settings()
        Qt.QDialog.accept(self)


if __name__ == "__main__":
    import sys
    app = Qt.QApplication(sys.argv)
    inst = RenameDialog()
    inst.show()
    exit_code = app.exec_()
    ZlmSettings.instance().save_to_file()
    sys.exit(exit_code)
Ejemplo n.º 10
0
    def __init__(self, file_path=None):
        QtWidgets.QMainWindow.__init__(self)
        self.settings = ZlmSettings.instance().get('ui', self.default_settings)

        self.setWindowTitle("ZLayerManager v{}".format(
            version.current_version))
        self._apply_custom_stylesheet()
        self.setWindowIcon(QtGui.QIcon(':/zbrush.png'))

        # Qt.Qt.WindowFlags
        self.setWindowFlag(QtCore.Qt.WindowStaysOnTopHint,
                           self.settings.get("always_on_top", False))

        self.tw_widget = ZlmLayerWidget(self)
        self.lbl_subtool = QtWidgets.QLabel("SubTool: ")

        self.lbl_layer_count = QtWidgets.QLabel("0")

        pb_option = QtWidgets.QPushButton(QtGui.QIcon(':/gear.png'), '')
        pb_option.clicked.connect(self.show_option)

        pb_help = QtWidgets.QPushButton(QtGui.QIcon(':/help.png'), '')
        pb_help.clicked.connect(self.open_help_url)

        topLayout = QtWidgets.QHBoxLayout()
        topLayout.addWidget(self.lbl_subtool)
        topLayout.addStretch()
        topLayout.addWidget(self.lbl_layer_count, 0, QtCore.Qt.AlignRight)
        topLayout.addWidget(QtWidgets.QLabel("Layers"), 0,
                            QtCore.Qt.AlignRight)
        topLayout.addSpacing(20)
        topLayout.addWidget(pb_option)
        topLayout.addWidget(pb_help)

        mainLayout = QtWidgets.QVBoxLayout()

        mainLayout.addLayout(topLayout)
        mainLayout.addWidget(self.tw_widget)

        self.central_widget = QtWidgets.QWidget()
        self.central_widget.setLayout(mainLayout)
        self.setCentralWidget(self.central_widget)

        # creating menu
        menuBar = self.menuBar()
        menu = menuBar.addMenu("Edit")
        action = menu.addAction("Reorder Layers")
        action.triggered.connect(self.open_reorder_layer)

        fix_layer_name = menu.addAction(QtGui.QIcon(':/rename.png'),
                                        "Remove name duplicate")
        fix_layer_name.triggered.connect(self.remove_name_dup)

        bulk_rename = menu.addAction(QtGui.QIcon(':/rename.png'), "Rename all")
        bulk_rename.triggered.connect(self.bulk_rename)

        zlm_app.on_exception.append(self.on_error)
        zlm_app.on_port_not_set.append(self.on_port_not_set)

        for i in range(3):
            zlm_core.main_layers.add_callback(i, self.update_layer_count)

        if file_path and os.path.exists(file_path):
            self.load_layers(file_path)

        geo = self.settings.get('geometry', None)
        if geo:
            self.setGeometry(*geo)

        # Setup the communication server
        self.com_server = CommunicationServer()
        self.com_server.add_callback('update', self.load_layers)
        self.com_server.add_callback('i_layer', import_layer)
        self.com_server.add_callback('i_base', import_base)
        self.com_server.add_callback('update_from_zbrush', send_update_request)
        self.com_server.add_callback('update_zbrush', send_to_zbrush)
        self.com_server.start()

        self._firstTime = True
        self._version_thread = None
Ejemplo n.º 11
0
 def on_error(self, e):
     QtWidgets.QMessageBox.warning(
         self, 'Could not communicate', 'Could not communicate with "{}".\n'
         'Please make sure port is opened.'.format(
             ZlmSettings.instance().current_app))
Ejemplo n.º 12
0
 def update_cb_app(self):
     setting = ZlmSettings(False)
     self.save(setting)
     self.build_combobox(setting)