def insertSendItem(self, text="", load = False): itemsNum = self.customSendItemsLayout.count() + 1 height = parameters.customSendItemHeight * (itemsNum + 1) + 20 topHeight = self.fileSendGroupBox.height() + self.logFileGroupBox.height() + 100 if height + topHeight > self.funcParent.height(): height = self.funcParent.height() - topHeight if height < 0: height = self.funcParent.height() // 3 self.customSendScroll.setMinimumHeight(height) item = QWidget() layout = QHBoxLayout() layout.setContentsMargins(0,0,0,0) item.setLayout(layout) cmd = QLineEdit(text) send = QPushButton("") utils_ui.setButtonIcon(send, "fa.send") cmd.setToolTip(text) send.setToolTip(text) cmd.textChanged.connect(lambda: self.onCustomItemChange(self.customSendItemsLayout.indexOf(item), cmd, send)) send.setProperty("class", "smallBtn") send.clicked.connect(lambda: self.sendCustomItem(self.config["customSendItems"][self.customSendItemsLayout.indexOf(item)])) delete = QPushButton("") utils_ui.setButtonIcon(delete, "fa.close") delete.setProperty("class", "deleteBtn") layout.addWidget(cmd) layout.addWidget(send) layout.addWidget(delete) delete.clicked.connect(lambda: self.deleteSendItem(self.customSendItemsLayout.indexOf(item), item)) self.customSendItemsLayout.addWidget(item) if not load: self.config["customSendItems"].append("")
def onSetMaximized(self, isMax=None, fromMaxBtn=False, fullScreen=False): if not isMax is None: if isMax: utils_ui.setButtonIcon(self.max, self.btnIcons[1][1]) else: utils_ui.setButtonIcon(self.max, self.btnIcons[1][0]) return status = Qt.WindowNoState if fullScreen: if self.parent.windowState() != Qt.WindowFullScreen: status = Qt.WindowFullScreen elif self.parent.windowState() == Qt.WindowNoState: if fromMaxBtn and sys.platform.startswith( "darwin"): # mac max button to full screen status = Qt.WindowFullScreen else: status = Qt.WindowMaximized if status == Qt.WindowNoState: utils_ui.setButtonIcon(self.max, self.btnIcons[1][0]) else: utils_ui.setButtonIcon(self.max, self.btnIcons[1][1]) self.parent.setWindowState(status) if status == Qt.WindowFullScreen: self.hide() else: self.show()
def changeRemark(idx, obj): if not "icon" in self.config["customSendItems"][idx]: self.config["customSendItems"][idx]["icon"] = None shortcut = [] if "shortcut" in self.config["customSendItems"][idx]: shortcut = self.config["customSendItems"][idx]["shortcut"] ok, remark, icon, shortcut = EditRemarDialog( obj.text(), self.config["customSendItems"][idx]["icon"], shortcut).exec() if ok: obj.setText(remark) if icon: utils_ui.setButtonIcon(obj, icon) else: obj.setIcon(QIcon()) self.config["customSendItems"][idx]["remark"] = remark self.config["customSendItems"][idx]["icon"] = icon self.config["customSendItems"][idx]["shortcut"] = shortcut
def onWidgetMain(self, parent): self.mainWidget = QSplitter(Qt.Vertical) # widgets receive and send area self.receiveArea = QTextEdit() font = QFont('Menlo,Consolas,Bitstream Vera Sans Mono,Courier New,monospace, Microsoft YaHei', 10) self.receiveArea.setFont(font) self.receiveArea.setLineWrapMode(QTextEdit.NoWrap) self.sendArea = QTextEdit() self.sendArea.setLineWrapMode(QTextEdit.NoWrap) self.sendArea.setAcceptRichText(False) self.clearReceiveButtion = QPushButton("") utils_ui.setButtonIcon(self.clearReceiveButtion, "mdi6.broom") self.sendButton = QPushButton("") utils_ui.setButtonIcon(self.sendButton, "fa.send") self.sendHistory = ComboBox() sendWidget = QWidget() sendAreaWidgetsLayout = QHBoxLayout() sendAreaWidgetsLayout.setContentsMargins(0,4,0,0) sendWidget.setLayout(sendAreaWidgetsLayout) buttonLayout = QVBoxLayout() buttonLayout.addWidget(self.clearReceiveButtion) buttonLayout.addStretch(1) buttonLayout.addWidget(self.sendButton) sendAreaWidgetsLayout.addWidget(self.sendArea) sendAreaWidgetsLayout.addLayout(buttonLayout) self.mainWidget.addWidget(self.receiveArea) self.mainWidget.addWidget(sendWidget) self.mainWidget.addWidget(self.sendHistory) self.mainWidget.setStretchFactor(0, 7) self.mainWidget.setStretchFactor(1, 2) self.mainWidget.setStretchFactor(2, 1) # event self.sendButton.clicked.connect(self.onSendData) self.clearReceiveButtion.clicked.connect(self.clearReceiveBuffer) self.receiveUpdateSignal.connect(self.updateReceivedDataDisplay) self.sendHistory.activated.connect(self.onSendHistoryIndexChanged) return self.mainWidget
def __init__(self, text="", icon=None, btnClass="smallBtn") -> None: super().__init__() layout = QHBoxLayout() layout.setContentsMargins(2, 2, 2, 2) self.setLayout(layout) self.button = QPushButton(text) self.button.setProperty("class", btnClass) if icon: utils_ui.setButtonIcon(self.button, icon) self.list = _Combobox() layout.addWidget(self.button) layout.addWidget(self.list) self.list.hide() self.button.clicked.connect(lambda: self._ctrl("show")) def onAvtivated(idx): self.activated.emit(idx) self._ctrl("hide") self.list.activated.connect(lambda idx: onAvtivated(idx)) self.list.currentIndexChanged.connect( lambda: self.currentIndexChanged.emit()) self.list.listviewFocusout.connect(self._listFocusout)
def onWidgetFunctional(self, parent): sendFunctionalLayout = QVBoxLayout() sendFunctionalLayout.setContentsMargins(0,0,0,0) # right functional layout self.filePathWidget = QLineEdit() self.openFileButton = QPushButton(_("Open File")) self.sendFileButton = QPushButton(_("Send File")) self.clearHistoryButton = QPushButton(_("Clear History")) self.addButton = QPushButton("") utils_ui.setButtonIcon(self.addButton, "fa.plus") self.fileSendGroupBox = QGroupBox(_("Sendding File")) fileSendGridLayout = QGridLayout() fileSendGridLayout.addWidget(self.filePathWidget, 0, 0, 1, 1) fileSendGridLayout.addWidget(self.openFileButton, 0, 1, 1, 1) fileSendGridLayout.addWidget(self.sendFileButton, 1, 0, 1, 2) self.fileSendGroupBox.setLayout(fileSendGridLayout) self.logFileGroupBox = QGroupBox(_("Save log")) # cumtom send zone # groupbox customSendGroupBox = QGroupBox(_("Cutom send")) customSendItemsLayout0 = QVBoxLayout() customSendItemsLayout0.setContentsMargins(0,8,0,0) customSendGroupBox.setLayout(customSendItemsLayout0) # scroll self.customSendScroll = QScrollArea() self.customSendScroll.setMinimumHeight(parameters.customSendItemHeight + 20) self.customSendScroll.setWidgetResizable(True) self.customSendScroll.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) # add scroll to groupbox customSendItemsLayout0.addWidget(self.customSendScroll) # wrapper widget cutomSendItemsWraper = QWidget() customSendItemsLayoutWrapper = QVBoxLayout() customSendItemsLayoutWrapper.setContentsMargins(0,0,0,0) cutomSendItemsWraper.setLayout(customSendItemsLayoutWrapper) # custom items customItems = QWidget() self.customSendItemsLayout = QVBoxLayout() self.customSendItemsLayout.setContentsMargins(0,0,0,0) customItems.setLayout(self.customSendItemsLayout) customSendItemsLayoutWrapper.addWidget(customItems) customSendItemsLayoutWrapper.addWidget(self.addButton) # set wrapper widget self.customSendScroll.setWidget(cutomSendItemsWraper) self.customSendScroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) # logFileLayout = QHBoxLayout() self.saveLogCheckbox = QCheckBox() self.logFilePath = QLineEdit() self.logFileBtn = QPushButton(_("Log path")) logFileLayout.addWidget(self.saveLogCheckbox) logFileLayout.addWidget(self.logFilePath) logFileLayout.addWidget(self.logFileBtn) self.logFileGroupBox.setLayout(logFileLayout) sendFunctionalLayout.addWidget(self.logFileGroupBox) sendFunctionalLayout.addWidget(self.fileSendGroupBox) sendFunctionalLayout.addWidget(self.clearHistoryButton) sendFunctionalLayout.addWidget(customSendGroupBox) sendFunctionalLayout.addStretch(1) self.funcWidget = QWidget() self.funcWidget.setLayout(sendFunctionalLayout) # event self.sendFileButton.clicked.connect(self.sendFile) self.saveLogCheckbox.clicked.connect(self.setSaveLog) self.logFileBtn.clicked.connect(self.selectLogFile) self.openFileButton.clicked.connect(self.selectFile) self.addButton.clicked.connect(self.customSendAdd) self.clearHistoryButton.clicked.connect(self.clearHistory) self.funcParent = parent return self.funcWidget
def __init__(self, parent, icon=None, title="", height=35, btnIcons=None, brothers=[], widgets=[[], []]) -> None: super().__init__() self._height = height self.parent = parent if not btnIcons: btnIcons = [ "mdi.window-minimize", ["mdi.window-maximize", "mdi.window-restore"], "mdi.window-close", ["ph.push-pin-bold", "ph.push-pin-fill"] ] self.btnIcons = btnIcons layout = QHBoxLayout() if brothers: rootLayout = QVBoxLayout() rootLayout.setContentsMargins(0, 0, 0, 0) rootLayout.setSpacing(0) widget = QWidget() widget.setProperty("class", "TitleBar") widget.setLayout(layout) widget.setFixedHeight(height) rootLayout.addWidget(widget) for w in brothers: rootLayout.addWidget(w) self._height += w.height() self.setLayout(rootLayout) else: self.setLayout(layout) self.setFixedHeight(self._height) layout.setContentsMargins(0, 0, 0, 0) layout.setSpacing(0) iconWidget = None if icon and os.path.exists(icon): iconWidget = QLabel() iconWidget.setPixmap(QPixmap(icon).scaled(height, height)) iconWidget.setProperty("class", "icon") self.min = QPushButton("") self.max = QPushButton("") self.close = QPushButton("") self.top = QPushButton("") utils_ui.setButtonIcon(self.min, btnIcons[0]) utils_ui.setButtonIcon(self.max, btnIcons[1][0]) utils_ui.setButtonIcon(self.close, btnIcons[2]) utils_ui.setButtonIcon(self.top, btnIcons[3][0]) self.title = QLabel(title) widgets_l, widgets_r = widgets if sys.platform.startswith("darwin"): layout.addWidget(self.close) layout.addWidget(self.min) layout.addWidget(self.max) for w in widgets_r: layout.addWidget(w) layout.addStretch(0) if iconWidget: layout.addWidget(iconWidget) layout.addWidget(self.title) layout.addStretch(0) layout.addWidget(self.top) for w in widgets_l: layout.addWidget(w) else: if iconWidget: layout.addWidget(iconWidget) layout.addWidget(self.title) layout.addWidget(self.top) for w in widgets_l: layout.addWidget(w) layout.addStretch(0) for w in widgets_r: layout.addWidget(w) layout.addWidget(self.min) layout.addWidget(self.max) layout.addWidget(self.close) self.min.setFixedHeight(height) self.max.setFixedHeight(height) self.close.setFixedHeight(height) self.top.setFixedHeight(height) self.min.setMinimumWidth(height) self.max.setMinimumWidth(height) self.close.setMinimumWidth(height) self.top.setMinimumWidth(height) self.min.setProperty("class", "min") self.max.setProperty("class", "max") self.close.setProperty("class", "close") self.title.setProperty("class", "title") self.top.setProperty("class", "top") self.close.clicked.connect(lambda: parent.close()) self.max.clicked.connect(lambda: self.onSetMaximized(fromMaxBtn=True)) self.min.clicked.connect( lambda: parent.setWindowState(Qt.WindowNoState) if parent.windowState() == Qt.WindowMinimized else parent. setWindowState(Qt.WindowMinimized)) self.top.clicked.connect(lambda: self.onSetTop()) self.setProperty("class", "TitleBar")
def _off(flags): flags &= (~Qt.WindowStaysOnTopHint) self.parent.setWindowFlags(flags) utils_ui.setButtonIcon(self.top, self.btnIcons[3][0]) self.top.setProperty("class", "top")
def _on(flags): flags |= Qt.WindowStaysOnTopHint self.parent.setWindowFlags(flags) utils_ui.setButtonIcon(self.top, self.btnIcons[3][1]) self.top.setProperty("class", "topActive")
def insertSendItem(self, item=None, load=False): # itemsNum = self.customSendItemsLayout.count() + 1 # height = parameters.customSendItemHeight * (itemsNum + 1) + 20 # topHeight = self.receiveWidget.height() + 100 # if height + topHeight > self.funcParent.height(): # height = self.funcParent.height() - topHeight # if height < 0: # height = self.funcParent.height() // 3 # self.customSendScroll.setMinimumHeight(height) if not item: item = {"text": "", "remark": None, "icon": None} if type(item) == str: item = {"text": item, "remark": None} text = item["text"] remark = item["remark"] itemWidget = QWidget() layout = QHBoxLayout() layout.setContentsMargins(0, 0, 0, 0) itemWidget.setLayout(layout) cmd = QLineEdit(text) if remark: send = QPushButton(remark) else: send = QPushButton("") if (not "icon" in item) or not item["icon"]: item["icon"] = "fa.send" if not "shortcut" in item: item["shortcut"] = [] utils_ui.setButtonIcon(send, item["icon"]) editRemark = QPushButton("") editRemark.setObjectName("editRemark") utils_ui.setButtonIcon(editRemark, "ei.pencil") editRemark.setProperty("class", "remark") cmd.setToolTip(text) send.setToolTip(text) cmd.textChanged.connect(lambda: self.onCustomItemChange( self.customSendItemsLayout.indexOf(itemWidget), cmd, send)) send.setProperty("class", "smallBtn") def sendCustomData(idx): self.sendCustomItem(self.config["customSendItems"][idx]) send.clicked.connect(lambda: sendCustomData( self.customSendItemsLayout.indexOf(itemWidget))) delete = QPushButton("") utils_ui.setButtonIcon(delete, "fa.close") delete.setProperty("class", "deleteBtn") layout.addWidget(cmd) layout.addWidget(send) layout.addWidget(editRemark) layout.addWidget(delete) delete.clicked.connect(lambda: self.deleteSendItem( self.customSendItemsLayout.indexOf(itemWidget), itemWidget, [send, editRemark, delete])) def changeRemark(idx, obj): if not "icon" in self.config["customSendItems"][idx]: self.config["customSendItems"][idx]["icon"] = None shortcut = [] if "shortcut" in self.config["customSendItems"][idx]: shortcut = self.config["customSendItems"][idx]["shortcut"] ok, remark, icon, shortcut = EditRemarDialog( obj.text(), self.config["customSendItems"][idx]["icon"], shortcut).exec() if ok: obj.setText(remark) if icon: utils_ui.setButtonIcon(obj, icon) else: obj.setIcon(QIcon()) self.config["customSendItems"][idx]["remark"] = remark self.config["customSendItems"][idx]["icon"] = icon self.config["customSendItems"][idx]["shortcut"] = shortcut editRemark.clicked.connect(lambda: changeRemark( self.customSendItemsLayout.indexOf(itemWidget), send)) self.customSendItemsLayout.addWidget(itemWidget) if not load: self.config["customSendItems"].append(item) return item
def onWidgetMain(self, parent): self.mainWidget = QSplitter(Qt.Vertical) self.receiveWidget = TextEdit() font = QFont( 'Menlo,Consolas,Bitstream Vera Sans Mono,Courier New,monospace, Microsoft YaHei', 10) self.receiveWidget.setFont(font) self.receiveWidget.setLineWrapMode(TextEdit.NoWrap) self.clearBtn = QPushButton("") self.keyBtneventFilter = self.ModeButtonEventFilter( self.onModeBtnKeyPressEvent, self.onModeBtnKeyReleaseEvent) self.keyModeBtn = self.ModeButton(_("Key mode"), self.keyBtneventFilter) layoutClearMode = QHBoxLayout() layoutClearMode.addWidget(self.clearBtn) layoutClearMode.addWidget(self.keyModeBtn) clearModeWidget = QWidget() clearModeWidget.setLayout(layoutClearMode) utils_ui.setButtonIcon(self.clearBtn, "mdi6.broom") self.addButton = QPushButton("") utils_ui.setButtonIcon(self.addButton, "fa.plus") self.customSendScroll = QScrollArea() self.customSendScroll.setMinimumHeight( parameters.customSendItemHeight + 20) self.customSendScroll.setWidgetResizable(True) self.customSendScroll.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) self.customSendScroll.setHorizontalScrollBarPolicy( Qt.ScrollBarAlwaysOff) cutomSendItemsWraper = QWidget() self.customSendScroll.setWidget(cutomSendItemsWraper) # wrapper widget cutomSendItemsWraper0 = QWidget() cutomSendItemsWraper0.setProperty("class", "scrollbar2") layout0 = QVBoxLayout() layout0.setContentsMargins(0, 8, 0, 0) cutomSendItemsWraper0.setLayout(layout0) layout0.addWidget(self.customSendScroll) customSendItemsLayoutWrapper = QVBoxLayout() customSendItemsLayoutWrapper.setContentsMargins(0, 0, 0, 0) cutomSendItemsWraper.setLayout(customSendItemsLayoutWrapper) # items container self.customItems = QWidget() self.customSendItemsLayout = QVBoxLayout() self.customSendItemsLayout.setContentsMargins(0, 0, 0, 0) self.customItems.setLayout(self.customSendItemsLayout) customSendItemsLayoutWrapper.addWidget(self.customItems) customSendItemsLayoutWrapper.addWidget(self.addButton) customSendItemsLayoutWrapper.addStretch(0) self.mainWidget.addWidget(self.receiveWidget) self.mainWidget.addWidget(clearModeWidget) self.mainWidget.addWidget(cutomSendItemsWraper0) self.mainWidget.setStretchFactor(0, 2) self.mainWidget.setStretchFactor(1, 1) self.mainWidget.setStretchFactor(2, 11) # event self.addButton.clicked.connect(lambda: self.insertSendItem()) def clearReceived(): self.receiveWidget.clear() self.statusBar.clear() self.clearBtn.clicked.connect(clearReceived) def keyModeOn(event): self.keyModeBtn.setProperty("class", "deleteBtn") utils_ui.updateStyle(self.mainWidget, self.keyModeBtn) self.keyModeClickTime = time.time() # show all shortcut widgets = self.customItems.findChildren(QPushButton, "editRemark") for i, w in enumerate(widgets): shortcut = "+".join( (name for v, name in self.config["customSendItems"][i] ["shortcut"])) w.setText(shortcut) utils_ui.updateStyle(self.mainWidget, w) def keyModeOff(event): self.keyModeBtn.setProperty("class", "") utils_ui.updateStyle(self.mainWidget, self.keyModeBtn) self.keyModeClickTime = 0 # remove all preesed keys even them not release actually, to avoid window swith by ALT+TAB bug self.pressedKeys = [] # hide all shortcut widgets = self.customItems.findChildren(QPushButton, "editRemark") for w in widgets: w.setText("") def keyModeTuggle(): if self.keyModeBtn.property("class") == "deleteBtn": if time.time() - self.keyModeClickTime < 0.2: return else: self.keyModeBtn.clearFocus() self.keyModeBtn.onFocusIn.connect(keyModeOn) self.keyModeBtn.onFocusOut.connect(keyModeOff) self.keyModeBtn.clicked.connect(keyModeTuggle) return self.mainWidget