def textLabel(self): text = my.tr("Original text") ret = QtWidgets.QLabel() ret.setText('<span style="color:blue">%s</span>' % text) ret.setToolTip(my.tr("Original text to translate")) self.textEdit.textChanged.connect(lambda: ret.setText( '<span style="color:blue">%s</span> (<span style="color:purple">%s</span>)' % ( text, len(self.textEdit.toPlainText().strip()), ))) return ret
def show(text, key=None): w = SHOW_WIDGETS.get(key) if not w: from Qt5 import QtWidgets SHOW_WIDGETS[key] = w = QtWidgets.QTextEdit() w.setAcceptRichText(False) if not isinstance(text, basestring): import json text = json.dumps(text, indent=2, ensure_ascii=False) w.setWindowTitle("key: %s" % key) w.setPlainText(text) w.show()
def textEdit(self): placeholder = "http://youtube.com/watch?v=lmOZEAAEMK0" #ret = QtWidgets.QPlainTextEdit(placeholder) ret = QtWidgets.QTextEdit( placeholder) # QTextEdit is needed for syntax highlighter ret.setToolTip(my.tr("Text contains YouTube video IDs")) ret.setAcceptRichText(False) # Not enabled for performance reason #ret.textChanged.connect(self._refreshSaveButton) from qthls.youtube import YouTubeHighlighter YouTubeHighlighter(ret) return ret
def inspector(self): ret = SkStyleView() skqss.class_(ret, 'texture') layout = QtWidgets.QHBoxLayout() layout.addWidget(self.newPostButton) #layout.addWidget(self.newTopicButton) layout.addStretch() layout.addWidget(self.browseButton) #layout.addWidget(self.gameButton) layout.addWidget(self.refreshButton) ret.setLayout(layout) layout.setContentsMargins(4, 4, 4, 4) return ret
def resultEdit(self): ret = QtWidgets.QTextBrowser() ret.setAcceptRichText(False) skqss.class_(ret, 'texture-inverse') #skqss.class_(ret, 'texture') #skqss.class_(ret, 'normal') #ret.setToolTip(tr_("Result")) ret.setReadOnly(True) ret.setPlainText(EMPTY_PLACEHOLDER) ret.setStyleSheet(CSS_TEXTEDIT) import osutil ret.anchorClicked.connect(osutil.open_url) return ret
def _createUi(self, q): layout = QtWidgets.QVBoxLayout() row = QtWidgets.QHBoxLayout() row.addStretch() row.addWidget(QtWidgets.QLabel(tr_("Language") + ":")) row.addWidget(self.languageEdit) layout.addLayout(row) layout.addWidget(self.contentEdit) row = QtWidgets.QHBoxLayout() row.addWidget(self.browseImageButton) row.addWidget(self.removeImageButton) row.addWidget(self.imageTitleEdit) row.addStretch() #row.addWidget(self.cancelButton) row.addWidget(self.saveButton) layout.addLayout(row) layout.setContentsMargins(5, 5, 5, 5) q.setLayout(layout)
def __init__(self, q): self.sourceModel = QtGui.QStandardItemModel(q) self.proxyModel = SkMultiFilterProxyModel(q) self.proxyModel.setDynamicSortFilter(True) self.proxyModel.setSortCaseSensitivity(Qt.CaseInsensitive) self.proxyModel.setSourceModel(self.sourceModel) q_parent = q.parent() self._parentWidget = q_parent if isinstance( q_parent, QtWidgets.QWidget) else None self.treeView = QtWidgets.QTreeView(self._parentWidget) self.treeView.setRootIsDecorated(True) self.treeView.setAlternatingRowColors(True) self.treeView.setSortingEnabled(True) self.treeView.setModel(self.proxyModel) self.filterEdit = QtWidgets.QLineEdit() self.filterEdit.setPlaceholderText(tr_("Search")) self.filterEdit.setToolTip("%s (%s, %s)" % (tr_("Search"), tr_("case-insensitive"), tr_("regular expression"))) self.countLabel = QtWidgets.QLabel() #self.countLabel.setToolTip(self.q.tr("Count")) # Connections # See: http://www.qtcentre.org/threads/2603-currentChanged-protected-slot-cant-get-working #self.treeView.activated.connect(q.currentIndexChanged) #self.treeView.clicked.connect(q.currentIndexChanged) self.selectionModel = self.treeView.selectionModel( ) # increase reference counting self.selectionModel.currentChanged.connect(q.currentIndexChanged) self.filterEdit.textChanged.connect(self._updateFilter) self.filterEdit.textChanged.connect(self._updateCount) self.sourceModel.dataChanged.connect(self._updateCount)
def shortcut(key, slot, parent=None): """ @param key str or QKeySequence @param slot function @param parent QWidget @return QShortcut """ if (parent is None and hasattr(slot, '__self__') and isinstance(slot.__self__, QtWidgets.QWidget)): parent = slot.__self__ if not isinstance(key, QtGui.QKeySequence): key = QtGui.QKeySequence(key) return QtWidgets.QShortcut(key, parent, slot)
def __init__(self, parent=None): super(SelectProcessPage, self).__init__(parent) self.setTitle(my.tr("Select game process")) introLabel = QtWidgets.QLabel(my.tr("Please select game process")) introLabel.setWordWrap(True) self._refreshButton = QtWidgets.QPushButton(tr_("Refresh")) self._refreshButton.clicked.connect(self._refresh) skqss.class_(self._refreshButton, 'btn btn-success') self._table = SkFilterTableController(self) self._table.currentIndexChanged.connect(self.completeChanged) layout = QtWidgets.QVBoxLayout() layout.addWidget(introLabel) layout.addWidget(self._table.view()) search = QtWidgets.QHBoxLayout() search.addWidget(self._table.filterEdit()) search.addWidget(self._table.countLabel()) search.addWidget(self._refreshButton) layout.addLayout(search) self.setLayout(layout)
def _createTextLabel(cls, edit, text='', tip=''): """ @param edit QTextEdit @param* text unicode @param* tip unicode @return QLabel """ text = text or edit.toolTip() tip = tip or edit.toolTip() ret = QtWidgets.QLabel() ret.setText(text) ret.setToolTip(tip) edit.textChanged.connect( partial(cls._refreshTextLabel, ret, edit, text)) return ret
def inspector(self): ret = SkStyleView() skqss.class_(ret, 'texture') layout = QtWidgets.QHBoxLayout() layout.addWidget(self.launchButton) layout.addWidget(self.subButton) layout.addWidget(self.topicButton) layout.addWidget(self.nameButton) layout.addStretch() layout.addWidget(self.helpButton) layout.addWidget(self.browseButton) layout.addWidget(self.editButton) layout.addWidget(self.refreshButton) # disabled ret.setLayout(layout) layout.setContentsMargins(4, 4, 4, 4) return ret
def languageEdit(self): ret = QtWidgets.QComboBox() ret.setEditable(False) ret.addItems(map(i18n.language_name2, config.LANGUAGES)) ret.setMaxVisibleItems(ret.count()) import settings try: langIndex = config.LANGUAGES.index( settings.global_().speechRecognitionLanguage()) except ValueError: langIndex = 0 # 'ja' ret.setCurrentIndex(langIndex) ret.currentIndexChanged.connect(self._saveLanguage) return ret
def optionMenu(self): ret = QtWidgets.QMenu(self.q) #a = ret.addAction(rc.standard_icon(QtWidgets.QStyle.SP_DialogHelpButton), tr_("Help")) a = ret.addAction(tr_("Preferences")) a.triggered.connect(self._openSettingsPage) a.setToolTip("about:settings") #a = ret.addAction(rc.standard_icon(QtWidgets.QStyle.SP_DialogHelpButton), tr_("Help")) a = ret.addAction(tr_("Help")) a.triggered.connect(self._openHelpPage) a.setToolTip("about:help") a = ret.addAction(tr_("About")) a.triggered.connect(self._openAboutPage) a.setToolTip("about:version") return ret
def createKeyButton(self, key, group='key', styleClass='btn btn-default'): # str -> QPushButton ret = QtWidgets.QPushButton(i18n.key_name(key)) ret.setToolTip(key) if styleClass: skqss.class_(ret, styleClass) ret.setCheckable(True) ret.value = key # str ret.clicked.connect( partial( lambda ret, key, group: self.updateCurrentValue( key, toggled=ret.isChecked(), group=group), ret, key, group)) self.keyButtons[group].append(ret) return ret
def gameLabel(self): import dataman dm = dataman.manager() ret = QtWidgets.QLabel() ret.setToolTip( my. tr("Current game for game-specific definitions in the Shared Dictionary" )) def _refresh(): ret.setText('#' + (dm.currentGameName() or my.tr("Unknown game"))) skqss.class_(ret, 'text-error' if dm.currentGame() else 'text-info') _refresh() dm.currentGameChanged.connect(_refresh) return ret
def annotMenu(self): ret = QtWidgets.QMenu(self.q) ss = settings.global_() a = ret.addAction(i18n.tr("Display furigana")) a.setCheckable(True) a.setEnabled(self._jlpAvailable) a.setChecked(self._rubyEnabled) a.triggered[bool].connect(ss.setRubyEnabled) a.triggered[bool].connect(self._setRubyEnabled) a.triggered.connect(self._refreshAnnotAct) a = self.fullTranslationAct = ret.addAction( i18n.tr("Display translation")) a.setCheckable(True) a.setEnabled(self._translatorAvailable) a.setChecked(self._fullTranslationEnabled) a.triggered[bool].connect(ss.setFullTranslationEnabled) a.triggered[bool].connect(self._setFullTranslationEnabled) a.triggered.connect(self._refreshAnnotAct) a = self.translationTipAct = ret.addAction( i18n.tr("Popup translation when hover")) a.setCheckable(True) a.setEnabled(self._translatorAvailable) a.setChecked(self._translationTipEnabled) a.triggered[bool].connect(ss.setTranslationTipEnabled) a.triggered[bool].connect(self._setTranslationTipEnabled) a.triggered.connect(self._refreshAnnotAct) ret.addSeparator() a = self.ttsAct = ret.addAction( i18n.tr("Text-to-speech when click")) # おんぷ a.setCheckable(True) a.setEnabled(self._ttsAvailable) a.setChecked(self._ttsEnabled) a.triggered[bool].connect(ss.setTtsEnabled) a.triggered[bool].connect(self._setTtsEnabled) a.setVisible(skos.WIN) # only enabled on Windows a.triggered.connect(self._refreshAnnotAct) return ret
def targetLanguageEdit(self): ret = QtWidgets.QComboBox() ret.setEditable(False) #items = map(i18n.language_name, config.LANGUAGES) items = [ tr_("All languages") if it == 'ja' else i18n.language_name(it) for it in config.LANGUAGES ] ret.addItems(items) ret.setMaxVisibleItems(ret.count()) ret.setMaximumWidth(COMBOBOX_MAXWIDTH) index = config.LANGUAGES.index(dataman.manager().user().language) ret.setCurrentIndex(index) ret.currentIndexChanged.connect(self._refreshStatus) ret.currentIndexChanged.connect(self._refreshYomi) return ret
def _createTextView(tip='', rich=False): """ @param* tip unicode @param* rich enable richText @return QTextEdit """ if rich: #ret = QtWidgets.QTextEdit(_EMPTY_TEXT) ret = skwidgets.SkTextEditWithAnchor(_EMPTY_TEXT) ret.anchorClicked.connect(evalutil.evalurl) else: ret = QtWidgets.QPlainTextEdit(_EMPTY_TEXT) ret.setMinimumWidth(_TEXTEDIT_MINWIDTH) ret.setMinimumHeight(_TEXTEDIT_MINHEIGHT) if tip: ret.setToolTip(tip) #ret.setAcceptRichText(False) #ret.setReadOnly(True) skqss.class_(ret, 'text-muted') #ret.resize(300, 200) return ret
def _createUi(self, q): layout = QtWidgets.QVBoxLayout() b = cancelButton = QtWidgets.QPushButton(tr_("Cancel")) skqss.class_(b, 'btn btn-default') b.clicked.connect(q.hide) b = updateButton = QtWidgets.QPushButton(tr_("Update")) b.setToolTip(tr_("Update")) skqss.class_(updateButton, 'btn btn-primary') b.clicked.connect(q.hide) b.clicked.connect(self.openUpdate) b.setDefault(True) infoLabel = QtWidgets.QLabel( my.tr("""Found new updates for Visual Novel Reader. Do you want to update now? You can find recent changes here:""")) layout.addWidget(infoLabel) linkstyle = 'color:#428bca' # bootstrap btn-link url = 'http://sakuradite.com/changes/vnr' changesLabel = QtWidgets.QLabel( '<a href="{1}" style="{0}">{1}</a>'.format(linkstyle, url)) changesLabel.setOpenExternalLinks(True) changesLabel.setAlignment(Qt.AlignHCenter) changesLabel.setToolTip(tr_("Recent changes")) layout.addWidget(changesLabel) layout.addStretch() row = QtWidgets.QHBoxLayout() row.addStretch() row.addWidget(cancelButton) row.addWidget(updateButton) layout.addLayout(row) q.setLayout(layout)
def __init__(self, parent=None): super(ChooseMeansPage, self).__init__(parent) self.setTitle(my.tr("Select how to find the game")) introLabel = QtWidgets.QLabel(my.tr("How would you like to select the game?")) introLabel.setWordWrap(True) self._windowButton = QtWidgets.QRadioButton(my.tr("Select the window of the running game") + " (%s)" % tr_("recommended")) self._windowButton.setToolTip("Alt+1") self._windowButton.clicked.connect(self.completeChanged) self._processButton = QtWidgets.QRadioButton(my.tr("Select the process of the running game")) self._processButton.setToolTip("Alt+2") self._processButton.clicked.connect(self.completeChanged) self._fileButton = QtWidgets.QRadioButton(my.tr("Select the game executable file on the hard drive")) self._fileButton.setToolTip("Alt+3") self._fileButton.clicked.connect(self.completeChanged) skwidgets.shortcut("alt+1", self._windowButton.click) skwidgets.shortcut("alt+2", self._processButton.click) skwidgets.shortcut("alt+3", self._fileButton.click) infoLabel = QtWidgets.QLabel("\n" + my.tr( "By the way, you can also drag the game's exe/lnk to the SpringBoard, which is equivalent to #3 (select by file)." )) infoLabel.setWordWrap(True) layout = QtWidgets.QVBoxLayout() layout.addWidget(introLabel) if not features.WINE: layout.addWidget(self._windowButton) layout.addWidget(self._processButton) layout.addWidget(self._fileButton) layout.addWidget(infoLabel) self.setLayout(layout)
def infoGroup(self): layout = QtWidgets.QVBoxLayout() layout.addWidget(self.nameEdit) ret = QtWidgets.QGroupBox(my.tr("Dashboard display name")) ret.setLayout(layout) return ret
def disableTimeZoneButton(self): ret = QtWidgets.QRadioButton("%s (%s)" % (my.tr("Launch the game in current time"), my.tr("do NOT change time zone"))) ret.toggled.connect(self._saveTimeZone) return ret
def enableTimeZoneButton(self): ret = QtWidgets.QRadioButton("%s (%s)" % (my.tr("Launch the game in Japan time"), my.tr("DO change time zone"))) ret.toggled.connect(self._saveTimeZone) return ret
def ntleaButton(self): ret = QtWidgets.QRadioButton( my.tr("Use {0} to change game locale").format(notr_("NTLEA"))) ret.toggled.connect(self._saveLoader) return ret
def applocButton(self): ret = QtWidgets.QRadioButton( "%s (%s)" % (my.tr("Use {0} to change game locale").format( notr_("AppLocale")), tr_("download"))) ret.toggled.connect(self._saveLoader) return ret
def disableLoaderButton(self): ret = QtWidgets.QRadioButton( "%s (%s)" % (my.tr("Launch the game WITHOUT loader"), my.tr("for Windows with Japanese locale"))) ret.toggled.connect(self._saveLoader) return ret
def resetLaunchButton(self): ret = QtWidgets.QPushButton(tr_("Reset")) ret.clicked.connect(self._resetLaunchPath) skqss.class_(ret, 'btn btn-danger') return ret
def embedEnableButton(self): ret = QtWidgets.QCheckBox( "%s (%s)" % (my.tr("Allow embedding translation when possible"), tr_("default"))) ret.clicked.connect(self._saveEmbedSettings) return ret
def hookButton(self): ret = QtWidgets.QCheckBox(tr_("Enable")) ret.toggled.connect(self._saveHookButton) return ret
def create_label(text=""): # unicode -> QLabel ret = QtWidgets.QLabel() if text: ret.setText(text + ":") ret.setAlignment(Qt.AlignRight | Qt.AlignVCenter) return ret