コード例 #1
0
    def __init__(self, filter_updater, parent=None):
        """
        :type filter_updater: (str) -> None
        :type parent: QWidget
        """
        super().__init__(parent)

        self._filter_updater = lambda: filter_updater(self.text())

        self.setFixedHeight(self.HEIGHT)
        self.setMaxLength(48)
        self.setMaximumWidth(200)

        self._tool_button = QToolButton(self)
        self._tool_button.setIcon(QIcon(resource_filepath("clear.png")))
        self._tool_button.setStyleSheet("QToolButton {"
                                        "   border: none;"
                                        "   padding: 0px;"
                                        "}")

        frame_width = self._getFrameWidth()
        icon_side = self.HEIGHT - 2 * frame_width
        self._tool_button.setFixedSize(icon_side, icon_side)
        self._tool_button.clicked.connect(self.onClearButton)
        self._tool_button.hide()
        self.textChanged.connect(self.updateFilter)
        stylesheet = \
            "QLineEdit {{" \
            "   padding-right: {}px;" \
            "   background-color: #FFFFFF;" \
            "}}".format(self._tool_button.sizeHint().width() + frame_width + 1)
        self.setStyleSheet(stylesheet)
コード例 #2
0
 def create_header_bar(self, layout):
     back_button = QToolButton()
     back_button.setIconSize(QSize(30, 30))
     back_button.setIcon(QIcon(os.path.join("icons", "ic_action_back.png")))
     back_button.setStyleSheet("border: 0px;")
     back_button.setToolTip("Zurück")
     back_button.clicked.connect(self.back)
     layout.addWidget(back_button)
コード例 #3
0
    def __init__(self, parent=None):
        QLineEdit.__init__(self, parent)
        self.clear_button = QToolButton(self)
        self.clear_button.setText("clear")
        self.clear_button.hide()
        self.clear_button.clicked.connect(self.clear)
        # self.clear_button.setIcon(QIcon(":/denied.png"))

        self.textChanged.connect(self.update_clear_button)
コード例 #4
0
ファイル: main.py プロジェクト: eivind88/raskolnikov-browser
    def bookmark(self):
        """Toggle bookmark."""
        global bookmarks
        if not self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebView, unicode('webView')).url().toEncoded() in bookmarks:
            bookmarks.append(self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebView, unicode('webView')).url().toEncoded())
            pickle.dump(bookmarks, open(bookFile, "wb"))
            link = QToolButton()
            link.setDefaultAction(QAction(unicode(unicode(self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebView, unicode('webView')).url().toEncoded())), link))
            link.setObjectName(unicode(self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebView, unicode('webView')).url().toEncoded()))
            link.setFont(QFont("Helvetica Neue", 11, QFont.Normal))
            link.clicked.connect(self.handleBookmarks)
            self.bookmarks_layout.addWidget(link)

            if self.bookmarks_widget.isHidden():
                self.bookmarks_widget.show()

            self.dbutton.setText(u"★")

        else:
            bookmarks.remove(self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebView, unicode('webView')).url().toEncoded())
            pickle.dump(bookmarks, open(bookFile, "wb"))
            link = self.bookmarks_widget.findChild(QToolButton, unicode(self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebView, unicode('webView')).url().toEncoded()))
            self.bookmarks_layout.removeWidget(link)
            link.deleteLater()
            link = None

            if not bookmarks:
                self.bookmarks_widget.hide()

            self.dbutton.setText(u"☆")
コード例 #5
0
ファイル: HelpForm.py プロジェクト: ra2003/xindex
    def createWidgets(self):
        self.backButton = QToolButton()
        self.backButton.setIcon(QIcon(":/go-back.svg"))
        self.backButton.setText("&Back")
        self.backButton.setToolTip("""\
<p><b>Back</b> ({})</p>
<p>Navigate to the previous page.</p>""".format(
            QKeySequence("Alt+Left").toString()))
        self.forwardButton = QToolButton()
        self.forwardButton.setIcon(QIcon(":/go-forward.svg"))
        self.forwardButton.setText("&Forward")
        self.forwardButton.setToolTip("""\
<p><b>Forward</b> ({})</p>
<p>Navigate to the page you've just come back from.</p>""".format(
            QKeySequence("Alt+Right").toString()))
        self.contentsButton = QToolButton()
        self.contentsButton.setIcon(QIcon(":/go-home.svg"))
        self.contentsButton.setText("&Contents")
        self.contentsButton.setToolTip("""\
<p><b>Contents</b> ({})</p>
<p>Navigate to the contents page.</p>""".format(
            QKeySequence("Alt+Home").toString()))
        self.searchLineEdit = Widgets.LegendLineEdit.LineEdit(
            "Search (F3 or Ctrl+F)")
        self.searchLineEdit.setToolTip("""\
<p><b>Search editor</p>
<p>Type in a word to search for in the online help pages and press
<b>Enter</b> or <b>F3</b> to search.</p>""")
        self.zoomInButton = QToolButton()
        self.zoomInButton.setIcon(QIcon(":/zoomin.svg"))
        self.zoomInButton.setText("&Zoom In")
        self.zoomInButton.setToolTip("""\
<p><b>Zoom In</b> ({})</p>
<p>Make the text bigger.</p>""".format(
            QKeySequence("Alt++").toString()))
        self.zoomOutButton = QToolButton()
        self.zoomOutButton.setIcon(QIcon(":/zoomout.svg"))
        self.zoomOutButton.setText("Zoom &Out")
        self.zoomOutButton.setToolTip("""\
<p><b>Zoom Out</b> ({})</p>
<p>Make the text smaller.</p>""".format(
            QKeySequence("Alt+-").toString()))
        width = self.fontMetrics().width(self.zoomOutButton.text() + " ")
        for button in (self.backButton, self.forwardButton,
                       self.contentsButton, self.zoomInButton,
                       self.zoomOutButton):
            button.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)
            button.setMinimumWidth(width)
            button.setFocusPolicy(Qt.NoFocus)
        self.browser = QWebView()
        page = self.browser.page()
        page.setLinkDelegationPolicy(QWebPage.DelegateAllLinks)
        if self.debug:
            self.urlLabel = QLabel()
コード例 #6
0
ファイル: qbadgebutton.py プロジェクト: Jonney/Khweeteur
    def __init__(self, parent=None):
        QToolButton.__init__(self, parent)

        self.badge_counter = 0x00
        self.badge_size = 25

        self.redGradient = QRadialGradient(0.0, 0.0, 17.0, self.badge_size - 3,
								self.badge_size - 3)
        self.redGradient.setColorAt(0.0, QColor(0xe0, 0x84, 0x9b))
        self.redGradient.setColorAt(0.5, QColor(0xe9, 0x34, 0x43))
        self.redGradient.setColorAt(1.0, QColor(0xdc, 0x0c, 0x00))
コード例 #7
0
    def __init__(self, parent=None):
        QToolButton.__init__(self, parent)

        self.badge_counter = 0x00
        self.badge_size = 25

        self.redGradient = QRadialGradient(0.0, 0.0, 17.0, self.badge_size - 3,
                                           self.badge_size - 3)
        self.redGradient.setColorAt(0.0, QColor(0xe0, 0x84, 0x9b))
        self.redGradient.setColorAt(0.5, QColor(0xe9, 0x34, 0x43))
        self.redGradient.setColorAt(1.0, QColor(0xdc, 0x0c, 0x00))
コード例 #8
0
 def create_header_bar(self, layout):
     back_button = QToolButton()
     back_button.setIconSize(QSize(30, 30))
     back_button.setIcon(QIcon(os.path.join("icons", "ic_action_back.png")))
     back_button.setStyleSheet("border: 0px;")
     back_button.setToolTip("Zurück")
     back_button.clicked.connect(self.back)
     layout.addWidget(back_button)
コード例 #9
0
    def _make_tabs_button(self, side_widgets, side_icons):

        if len(side_widgets) != len(side_icons):
            raise Exception(
                "Bad parameters : len(side_widgets) ({}) != len(side_icons) ({})"
                .format(len(side_widgets), len(side_icons)))

        layout = QVBoxLayout()

        self._side_icons = []

        ndx = 0
        for w in side_widgets:

            resource_name = side_icons[ndx]
            pixmap = QPixmap(os.path.join(resource_dir, resource_name))
            icon = QIcon(pixmap)
            self._side_icons.append(icon)

            b = QToolButton()
            b.setIcon(icon)
            b.setIconSize(pixmap.rect().size())
            b.setMaximumWidth(pixmap.rect().width() + 6)

            b.clicked.connect(self.signal_mapper_tab_changed.map)
            self.signal_mapper_tab_changed.setMapping(b, ndx)

            layout.addWidget(b)
            layout.setStretch(ndx, 1)
            ndx += 1

        layout.addStretch()

        return layout
コード例 #10
0
ファイル: ViewAllPanel.py プロジェクト: ra2003/xindex
class Panel(QWidget):
    def __init__(self, state, parent=None):
        super().__init__(parent)
        self.state = state
        self.createWidgets()
        self.layoutWidgets()
        self.helpButton.clicked.connect(
            lambda: self.state.help("xix_ref_panel_index.html"))

    def clear(self):
        self.view.clear()

    def createWidgets(self):
        self.indexLabel = QLabel("&Index ")
        self.view = Views.All.View(self.state)
        self.tooltips.append((self.view, """
<p><b>Index view</b> (Alt+I)</p>
<p>This view shows all the index's entries.</p>
<p>The entries are always shown in the correct order in accordance with
the the chosen <b>Index→Options, Rules, Calculate Sort As Rules</b>, so
there's never a need to explicitly sort.</p>"""))
        self.indexLabel.setBuddy(self.view)
        self.gotoLabel = QLabel("Goto <font color=darkgreen>(Ctrl+T)</font>")
        self.gotoLineEdit = SelectAllLineEdit()
        self.gotoLabel.setBuddy(self.gotoLineEdit)
        self.tooltips.append((self.gotoLineEdit, """
<p><b>Goto (Ctrl+T)</b></p>
<p>Enter a few initial letters to goto the first main entry whose
term begins with those letters.</p>"""))
        self.state.editors.add(self.gotoLineEdit)
        self.helpButton = QToolButton()
        self.helpButton.setIcon(QIcon(":/help.svg"))
        self.helpButton.setFocusPolicy(Qt.NoFocus)

    def layoutWidgets(self):
        layout = QVBoxLayout()
        hbox = QHBoxLayout()
        hbox.addWidget(self.indexLabel)
        hbox.addSpacing(self.fontMetrics().width("W") * 4)
        hbox.addStretch()
        hbox.addWidget(self.gotoLabel)
        hbox.addWidget(self.gotoLineEdit, 1)
        hbox.addWidget(self.helpButton)
        layout.addLayout(hbox)
        layout.addWidget(self.view, 1)
        self.setLayout(layout)

    def updateDisplayFonts(self):
        self.view.updateDisplayFonts()
コード例 #11
0
 def paintEvent(self, event):
     QToolButton.paintEvent(self, event)
     p = QPainter(self)
     p.setRenderHint(QPainter.TextAntialiasing)
     p.setRenderHint(QPainter.Antialiasing)
     if self.badge_counter > 0x00:
         point = self.rect().topRight()
         self.drawBadge(
             p,
             point.x() - self.badge_size,
             point.y(),
             self.badge_size,
             str(self.badge_counter),
             QBrush(self.redGradient),
         )
コード例 #12
0
ファイル: qbadgebutton.py プロジェクト: Jonney/Khweeteur
 def paintEvent(self, event):
     QToolButton.paintEvent(self, event)
     p = QPainter(self)
     p.setRenderHint(QPainter.TextAntialiasing)
     p.setRenderHint(QPainter.Antialiasing)
     if self.badge_counter > 0x00:
         point = self.rect().topRight()
         self.drawBadge(
             p,
             point.x() - self.badge_size,
             point.y(),
             self.badge_size,
             str(self.badge_counter),
             QBrush(self.redGradient),
             )
コード例 #13
0
ファイル: ViewFilteredPanel.py プロジェクト: ra2003/xindex
    def createWidgets(self):
        self.helpButton = QToolButton()
        self.helpButton.setIcon(QIcon(":/help.svg"))
        self.helpButton.setFocusPolicy(Qt.NoFocus)
        self.helpButton.clicked.connect(self.help)
        self.tooltips.append(
            (self.helpButton,
             """Help on the Suggestions or Filtered panel."""))
        self.view = Views.Filtered.View(self.state)
        self.tooltips.append((self.view, """<p><b>Filtered view</b></p>
<p>This view shows any entries that match the current <b>Filter</b>.</p>
<p>Press <b>F3</b> or click <img src=":/goto-found.svg" width={0}
height={0}> or click <b>Goto→Filtered</b> to go to the current filtered
entry.</p>""".format(TOOLTIP_IMAGE_SIZE)))
        self.view.match = ""
        self.filterLabel = QLabel(
            "Filter <font color=darkgreen>(Ctrl+F)</font>")
        self.filterComboBox = QComboBox()
        self.filterComboBox.setMaxVisibleItems(24)
        self.tooltips.append((self.filterComboBox, """\
<p><b>Filter combobox</b></p>
<p>Use this combobox to choose the filter to use.</p>
<p>The <b>Terms Matching</b>, <b>Pages Matching</b>, and <b>Notes
Matching</b> filters need a match text.</p>"""))
        self.filterLabel.setBuddy(self.filterComboBox)
        for filter in FilterKind:
            if not filter.isCheck:
                self.filterComboBox.addItem(filter.text, filter)
        self.filterComboBox.currentIndexChanged[int].connect(self.query)
        self.filterTextComboBox = ComboBox()
        self.filterTextComboBox.setEditable(True)
        self.filterTextComboBox.setDuplicatesEnabled(False)
        self.filterTextComboBox.currentIndexChanged[str].connect(self.setMatch)
        self.tooltips.append((self.filterTextComboBox, """\
<p><b>Filter Match editor</b></p>
<p>The text to match when using a <b>Terms Matching</b>, <b>Pages
Matching</b>, or <b>Notes Matching</b> filter.</p>
<p>For terms and notes, the filtered entries are chosen by
case-insensitively comparing with the match word or words.</p> <p>Add a
<tt>*</tt> after a word to match any words that begin with the text
preceding the <tt>*</tt>.</p> <p>For example, “comp*” will match
“compress”, “compulsory”, “computer”, “computed”, etc.</p>
<p>For pages, enter them as you would for an entry's pages, e.g.,
<tt>199,202-5</tt> to match entries whose pages equal or include
<tt>199,202,203,204,205</tt>, whether explicitly, or within page
ranges.</p>"""))
        self.view.pane.clickLine.connect(self.state.updateNavigationStatus)
コード例 #14
0
ファイル: ctSESAM.py プロジェクト: rbuchli/ctSESAM-pyside
 def create_header_bar(self, layout):
     self.sync_button = QToolButton()
     self.sync_button.setIconSize(QSize(30, 30))
     self.sync_button.setIcon(QIcon(os.path.join("icons", "ic_action_sync.png")))
     self.sync_button.setStyleSheet("border: 0px;")
     self.sync_button.setToolTip("Sync")
     self.sync_button.clicked.connect(self.sync_clicked)
     self.sync_button.setVisible(False)
     layout.addWidget(self.sync_button)
     self.clipboard_button = QToolButton()
     self.clipboard_button.setIconSize(QSize(30, 30))
     self.clipboard_button.setIcon(QIcon(os.path.join("icons", "ic_action_copy.png")))
     self.clipboard_button.setStyleSheet("border: 0px;")
     self.clipboard_button.setToolTip("in die Zwischenablage")
     self.clipboard_button.clicked.connect(self.copy_to_clipboard)
     self.clipboard_button.setVisible(False)
     layout.addWidget(self.clipboard_button)
コード例 #15
0
ファイル: GroupsPanel.py プロジェクト: ra2003/xindex
    def createWidgets(self):
        self.label = QLabel("Gro&ups")
        self.groupsList = QListWidget()
        self.tooltips.append((self.groupsList, """
<p><b>Groups</b> (Alt+U)</p>
<p>A (possibly empty) list of the current entry's groups.</p>"""))
        self.label.setBuddy(self.groupsList)
        self.closeButton = QToolButton()
        self.closeButton.setIcon(QIcon(":/hide.svg"))
        self.closeButton.setFocusPolicy(Qt.NoFocus)
        self.tooltips.append((self.closeButton, """<p><b>Hide</b></p>
<p>Hide the Groups panel.</p>
<p>Use <b>Spelling→Show Suggestions and Groups</b> to show it
again.</p>"""))
        self.helpButton = QToolButton()
        self.helpButton.setIcon(QIcon(":/help.svg"))
        self.helpButton.setFocusPolicy(Qt.NoFocus)
        self.tooltips.append((self.helpButton, "Help on the Groups panel."))
コード例 #16
0
def make_tool_button(filename, name=None):

    res_path = os.path.join(resource_dir, filename)
    if filename not in resources_cache:
        if not os.path.exists(res_path):
            raise Exception("Can't find resource {}".format(res_path))

        pixmap = QPixmap(res_path)
        icon = QIcon(pixmap)
        resources_cache[filename] = (pixmap, icon)

    pixmap, icon = resources_cache[filename]
    b = QToolButton()
    b.setIcon(icon)
    b.setIconSize(pixmap.rect().size())
    b.setMaximumWidth(pixmap.rect().width())  # 6
    if name:
        b.setObjectName(name)

    return b
コード例 #17
0
    def createWidgets(self):
        self.label = QLabel("Suggestions")
        self.spellList = Widgets.List.HtmlListWidget(self.state)
        self.tooltips.append((self.spellList, """
<p><b>Suggestions</b> (Alt+N,Tab)</p>
<p>A (possibly empty) list of completions or replacements for the word
being typed in the <b>Term</b> editor.</p>"""))
        self.label.setBuddy(self.spellList)
        self.closeButton = QToolButton()
        self.closeButton.setIcon(QIcon(":/hide.svg"))
        self.closeButton.setFocusPolicy(Qt.NoFocus)
        self.tooltips.append((self.closeButton, """<p><b>Hide</b></p>
<p>Hide the Suggestions panel.</p>
<p>Use <b>Spelling→Show Suggestions and Groups</b> to show it
again.</p>"""))
        self.helpButton = QToolButton()
        self.helpButton.setIcon(QIcon(":/help.svg"))
        self.helpButton.setFocusPolicy(Qt.NoFocus)
        self.tooltips.append(
            (self.helpButton, "Help on the Suggestions panel."))
コード例 #18
0
ファイル: ViewAllPanel.py プロジェクト: ra2003/xindex
    def createWidgets(self):
        self.indexLabel = QLabel("&Index ")
        self.view = Views.All.View(self.state)
        self.tooltips.append((self.view, """
<p><b>Index view</b> (Alt+I)</p>
<p>This view shows all the index's entries.</p>
<p>The entries are always shown in the correct order in accordance with
the the chosen <b>Index→Options, Rules, Calculate Sort As Rules</b>, so
there's never a need to explicitly sort.</p>"""))
        self.indexLabel.setBuddy(self.view)
        self.gotoLabel = QLabel("Goto <font color=darkgreen>(Ctrl+T)</font>")
        self.gotoLineEdit = SelectAllLineEdit()
        self.gotoLabel.setBuddy(self.gotoLineEdit)
        self.tooltips.append((self.gotoLineEdit, """
<p><b>Goto (Ctrl+T)</b></p>
<p>Enter a few initial letters to goto the first main entry whose
term begins with those letters.</p>"""))
        self.state.editors.add(self.gotoLineEdit)
        self.helpButton = QToolButton()
        self.helpButton.setIcon(QIcon(":/help.svg"))
        self.helpButton.setFocusPolicy(Qt.NoFocus)
コード例 #19
0
 def show_calorie_calc(self, row_count=0):
     '''
     show calorie calculator
     :return:
     '''
     if row_count > 0:
         row_count += 1
     self.clear_table(None, None)
     self.stuff_table.clearContents()
     self.stuff_table.setColumnCount(3)
     self.stuff_table.setRowCount(row_count)
     self.stuff_table.setHorizontalHeaderLabels(['Amount', 'Unit', 'Name'])
     if row_count > 0:
         stuff_widget = QWidget()
         stuff_pixmap = QPixmap('icons/add.png')
         stuff_icon = QIcon()
         stuff_add_bt = QToolButton()
         stuff_icon.addPixmap(stuff_pixmap)
         stuff_add_bt.setIcon(stuff_icon)
         stuff_add_bt.setIconSize(QSize(8, 8))
         stuff_add_bt.clicked.connect(
             lambda: self.stuff_table.insertRow(row_count - 1))
         stuff_layout = QHBoxLayout()
         stuff_layout.addWidget(stuff_add_bt)
         stuff_widget.setLayout(stuff_layout)
         self.stuff_table.setCellWidget(row_count - 1, 2, stuff_widget)
コード例 #20
0
ファイル: managerui.py プロジェクト: jogden88/TagFileManager
	def editTab(self):
		
		self.eFileTable = QTableView()
		self.eFileTable.setModel(self.eFileModel)
		self.eFileTable.setSelectionBehavior(QAbstractItemView.SelectRows)

		self.setColumnsWidths(self.eFileTable)

		self.editWidget = QWidget()

		vLayout = QVBoxLayout()
		vLayout.addWidget(self.eFileTable)

		dropBtn = QToolButton()
		dropBtn.setDefaultAction(self.dropEditTabAct)

		undBtn = QPushButton("Undo Delete")
		undBtn.clicked.connect(self.undeleteFiles)

		rmvBtn = QPushButton("Delete")
		rmvBtn.clicked.connect(self.deleteFiles)

		cmtBtn = QPushButton("Update")
		cmtBtn.clicked.connect(self.update)

		hLayout = QHBoxLayout()
		hLayout.addWidget(dropBtn)
		hLayout.addStretch(1)
		hLayout.addWidget(undBtn)
		hLayout.addWidget(rmvBtn)
		hLayout.addWidget(cmtBtn)

		vLayout.addLayout(hLayout)

		self.editWidget.setLayout(vLayout)

		self.tabWidget.addTab(self.editWidget, u"Edit")
コード例 #21
0
ファイル: controls.py プロジェクト: asymworks/python-divelog
 def __init__(self, parent=None):
     super(SearchEdit, self).__init__(parent)
     
     clr_pixmap = QPixmap(':/icons/clear.png')
     self._btn_clear = QToolButton(self)
     self._btn_clear.setIcon(clr_pixmap)
     self._btn_clear.setIconSize(clr_pixmap.size())
     self._btn_clear.setCursor(Qt.ArrowCursor)
     self._btn_clear.setStyleSheet('QToolButton { border: none; padding: 0px; }');
     self._btn_clear.clicked.connect(self.clear)
     fw = self.style().pixelMetric(QStyle.PM_DefaultFrameWidth)
     
     #TODO: Make a Search glyph show up properly
     self.setStyleSheet('QLineEdit { padding-right: %dpx; }' % (self._btn_clear.sizeHint().width() + fw + 1))
     msz = self.minimumSizeHint()
     self.setMinimumSize(max([msz.width(), self._btn_clear.sizeHint().height() + fw * 2 + 2]), 
                         max([msz.height(), self._btn_clear.sizeHint().height() + fw * 2 + 2]))
     self.setPlaceholderText('Search')
コード例 #22
0
class LabelFilterEdit(QLineEdit):

    clear_button = None

    def __init__(self, parent=None):
        QLineEdit.__init__(self, parent)
        self.clear_button = QToolButton(self)
        self.clear_button.setText("clear")
        self.clear_button.hide()
        self.clear_button.clicked.connect(self.clear)
        # self.clear_button.setIcon(QIcon(":/denied.png"))

        self.textChanged.connect(self.update_clear_button)

    def resizeEvent(self, *args, **kwargs):
        super(LabelFilterEdit, self).resizeEvent(*args, **kwargs)

        sz = self.clear_button.sizeHint()
        frameWidth = 0 #self.style().pixelMetric(QStyle.PM_DefaultFrameWidth)
        self.clear_button.move(self.rect().right() - sz.width() - frameWidth,
                               (self.rect().bottom() + 1 - sz.height()) / 2)

    def update_clear_button(self, text):
        self.clear_button.setVisible(len(text)>0)
コード例 #23
0
    def setup_ui(self):
        main_layout = QHBoxLayout(self)

        edt = QLineEdit(self)
        edt.setPlaceholderText("Wildcard filter")
        btn = QToolButton(self)
        btn.clicked.connect(self.set_icon)

        layout = QHBoxLayout(self)
        layout.addWidget(edt)
        layout.addWidget(btn)

        layout2 = QVBoxLayout()
        layout2.addLayout(layout)

        model = TListModel(self)
        proxy = QSortFilterProxyModel(self)
        proxy.setFilterCaseSensitivity(Qt.CaseInsensitive)
        proxy.setSourceModel(model)
        edt.textChanged.connect(proxy.setFilterWildcard)

        list = QListView()
        list.setModel(proxy)
        selection_model = list.selectionModel()
        selection_model.currentChanged.connect(self.currentChanged)
        layout2.addWidget(list)

        main_layout.addLayout(layout2)

        image = QLabel("Select icon", self)
        image.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
        image.setMinimumWidth(256)
        main_layout.addWidget(image)

        self.btn = btn
        self.edt = edt
        self.image = image
        self.list = list
        self.proxy = proxy
        self.model = model
        self.selection_model = selection_model
コード例 #24
0
ファイル: managerui.py プロジェクト: jogden88/TagFileManager
	def addTab(self):

		self.aFileTable = QTableView()
		self.aFileTable.setModel(self.aFileModel)
		self.aFileTable.setSelectionBehavior(QAbstractItemView.SelectRows)

		self.setColumnsWidths(self.aFileTable)

		self.addWidget = QWidget()

		vLayout = QVBoxLayout()
		vLayout.addWidget(self.aFileTable)

		addBtn = QToolButton()
		addBtn.setDefaultAction(self.findAct)
		# addBtn.clicked.connect(self.findFilesDlg)

		dropBtn = QToolButton()
		dropBtn.setDefaultAction(self.dropAddTabAct)
		# rmvBtn.clicked.connect(self.rmvFiles)

		insBtn = QPushButton("Track")
		insBtn.clicked.connect(self.insert)

		hLayout = QHBoxLayout()

		hLayout.addWidget(addBtn)
		hLayout.addWidget(dropBtn)
		hLayout.addStretch(1)		
		hLayout.addWidget(insBtn)

		vLayout.addLayout(hLayout)

		self.addWidget.setLayout(vLayout)

		self.tabWidget.addTab(self.addWidget, u"Add")
コード例 #25
0
def CreateFlatButton(action):
	"""
	Create a custom flat button and style
	it so that it will look good on all platforms.
	"""

	toolButton = QToolButton()
	toolButton.setIcon(action.icon())
	toolButton.setText(action.text())
	toolButton.setAutoRaise(True)
	toolButton.setIconSize(QSize(32, 32))
	toolButton.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)
	if sys.platform.startswith('darwin'):
		# Bug for Mac: QToolButtons do not react to setAutoRaise so
		# can't be made flat when they are not used inside a toolbar.
		# Setting a custom style sheet with border to none fixes this.
		# But then it looses all its highlight and pressed visual cues
		# so some extra styling needs to be done to provide some nice
		# visual feedback on hover and pressed states.
		toolButton.setStyleSheet("QToolButton {"
			"border: none;"
			"} "
			"QToolButton:hover {"
			"background-color: qradialgradient(cx: 0.5, cy: 0.5,"
			"fx: 0.5, fy: 0.5,"
			"radius: 0.5, "
			"stop: 0 rgba(255, 255, 255, 100), "
			"stop: 1 rgba(0, 0, 0, 0));"
			"}"
			"QToolButton:pressed {"
			"background-color: qradialgradient(cx: 0.5, cy: 0.5,"
			"fx: 0.5, fy: 0.5,"
			"radius: 0.5, "
			"stop: 0 rgba(255, 255, 255, 200), "
			"stop: 1 rgba(0, 0, 0, 0));"
			"}")
	font = QFont()
	font.setPixelSize(10)
	toolButton.setFont(font)

	# Connect the clicked signal to the action trigger
	def pushed():
		toolButton.action.triggered.emit()
	setattr(toolButton, "pushed", pushed)
	toolButton.clicked.connect(toolButton.pushed)
	setattr(toolButton, "action", action)

	return toolButton
コード例 #26
0
    def setupUi(self, MainWindow):

        lbMinWidth = 65
        # leMinWidth = 200

        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(400, 310)

        # self.centralwidget = QWidget(MainWindow)
        self.mainSplitter = QSplitter(Qt.Horizontal, MainWindow)
        self.mainSplitter.setObjectName("centralwidget")
        self.mainSplitter.setProperty("childrenCollapsible", False)
        MainWindow.setCentralWidget(self.mainSplitter)

        self.leftSplitter = QSplitter(Qt.Vertical, self.mainSplitter)
        self.leftSplitter.setProperty("childrenCollapsible", False)
        ##### login_gbox
        self.login_gbox = QGroupBox(self.leftSplitter)
        self.login_gbox.setFlat(True)
        self.login_gbox.setObjectName("login_gbox")

        login_gbox_layout = QVBoxLayout(self.login_gbox)
        login_gbox_csf_layout = QHBoxLayout()
        login_gbox_account_layout = QHBoxLayout()
        login_gbox_connect_layout = QHBoxLayout()
        login_gbox_layout.addLayout(login_gbox_csf_layout)
        login_gbox_layout.addLayout(login_gbox_account_layout)
        login_gbox_layout.addLayout(login_gbox_connect_layout)

        self.lb_client_secrets_file_path = QLabel(self.login_gbox)
        self.lb_client_secrets_file_path.setObjectName("lb_client_secrets_file_path")
        self.lb_client_secrets_file_path.setMinimumWidth(lbMinWidth)

        self.client_secrets_file_path_le = QLineEdit(self.login_gbox)
        self.client_secrets_file_path_le.setObjectName("client_secrets_file_path_le")

        self.client_secret_file_path_tBtn = QToolButton(self.login_gbox)
        self.client_secret_file_path_tBtn.setObjectName("client_secret_file_path_tBtn")

        login_gbox_csf_layout.addWidget(self.lb_client_secrets_file_path)
        login_gbox_csf_layout.addWidget(self.client_secrets_file_path_le)
        login_gbox_csf_layout.addWidget(self.client_secret_file_path_tBtn)

        self.lb_account = QLabel(self.login_gbox)
        self.lb_account.setMaximumWidth(lbMinWidth)
        self.lb_account.setObjectName("lb_account")

        self.remove_account_btn = QToolButton(self.login_gbox)
        self.remove_account_btn.setObjectName("remove_account_btn")
        self.remove_account_btn.setMinimumWidth(20)
        self.remove_account_btn.setEnabled(False)

        self.add_account_btn = QToolButton(self.login_gbox)
        self.add_account_btn.setObjectName("add_account_btn")
        self.add_account_btn.setMinimumWidth(20)

        self.accounts_cb = QComboBox(self.login_gbox)
        self.accounts_cb.setObjectName("accounts_cb")

        login_gbox_account_layout.addWidget(self.lb_account)
        login_gbox_account_layout.addWidget(self.remove_account_btn)
        login_gbox_account_layout.addWidget(self.add_account_btn)
        login_gbox_account_layout.addWidget(self.accounts_cb)

        self.lb_decryption_key = QLabel(self.login_gbox)
        self.lb_decryption_key.setObjectName("lb_decryption_key")
        self.lb_decryption_key.setMinimumWidth(lbMinWidth)
        self.lb_decryption_key.hide()

        self.decryption_key_le = QLineEdit(self.login_gbox)
        self.decryption_key_le.setEchoMode(QLineEdit.Password)
        self.decryption_key_le.setObjectName("decryption_key_le")
        self.decryption_key_le.hide()

        self.connect_btn = QPushButton(self.login_gbox)
        self.connect_btn.setEnabled(False)
        self.connect_btn.setObjectName("connect_btn")

        login_gbox_connect_layout.addWidget(self.lb_decryption_key)
        login_gbox_connect_layout.addWidget(self.decryption_key_le)
        login_gbox_connect_layout.addWidget(self.connect_btn)

        #### search_gbox
        self.search_gbox = QGroupBox(self.leftSplitter)
        self.search_gbox.setFlat(True)
        self.search_gbox.setObjectName("search_gbox")
        self.search_gbox.hide()

        search_gbox_layout = QVBoxLayout(self.search_gbox)
        search_gbox_mailbox_layout = QVBoxLayout()
        search_gbox_date_layout = QHBoxLayout()
        search_gbox_from_layout = QHBoxLayout()
        search_gbox_to_layout = QHBoxLayout()
        search_gbox_subject_layout = QHBoxLayout()
        search_gbox_threads_layout = QHBoxLayout()
        search_gbox_paramaters_layout = QHBoxLayout()

        search_gbox_layout.addLayout(search_gbox_mailbox_layout)
        search_gbox_layout.addLayout(search_gbox_date_layout)
        search_gbox_layout.addLayout(search_gbox_from_layout)
        search_gbox_layout.addLayout(search_gbox_to_layout)
        search_gbox_layout.addLayout(search_gbox_subject_layout)
        search_gbox_layout.addLayout(search_gbox_threads_layout)
        search_gbox_layout.addLayout(search_gbox_paramaters_layout)

        self.lb_select_mailbox = QLabel(self.search_gbox)
        self.lb_select_mailbox.setObjectName("lb_select_mailbox")
        self.mailboxes_lw = QListWidget(self.search_gbox)
        self.mailboxes_lw.setEditTriggers(QAbstractItemView.NoEditTriggers)
        self.mailboxes_lw.setSelectionMode(QAbstractItemView.ExtendedSelection)
        self.mailboxes_lw.setObjectName("mailboxes_lw")
        search_gbox_mailbox_layout.addWidget(self.lb_select_mailbox)
        search_gbox_mailbox_layout.addWidget(self.mailboxes_lw)

        self.after_date_cb = QCheckBox(self.search_gbox)
        self.after_date_cb.setObjectName("after_date_cb")
        self.after_date_cb.setMinimumWidth(lbMinWidth)
        self.after_date_cb.setMaximumWidth(lbMinWidth)
        self.after_date_edit = QDateEdit(self.search_gbox)
        self.after_date_edit.setCalendarPopup(True)
        self.after_date_edit.setObjectName("after_date_edit")
        self.after_date_edit.setDate(QDate.currentDate().addDays(-365))
        self.after_date_edit.setMaximumDate(QDate.currentDate())
        self.after_date_edit.setEnabled(False)
        self.before_date_cb = QCheckBox(self.search_gbox)
        self.before_date_cb.setObjectName("before_date_cb")
        self.before_date_cb.setMinimumWidth(70)
        self.before_date_cb.setMaximumWidth(70)
        self.before_date_edit = QDateEdit(self.search_gbox)
        self.before_date_edit.setCalendarPopup(True)
        self.before_date_edit.setObjectName("before_date_edit")
        self.before_date_edit.setDate(QDate.currentDate())
        self.before_date_edit.setMaximumDate(QDate.currentDate())
        self.before_date_edit.setEnabled(False)
        search_gbox_date_layout.addWidget(self.after_date_cb)
        search_gbox_date_layout.addWidget(self.after_date_edit)
        search_gbox_date_layout.addWidget(self.before_date_cb)
        search_gbox_date_layout.addWidget(self.before_date_edit)

        self.lb_from = QLabel(self.search_gbox)
        self.lb_from.setObjectName("lb_from")
        self.lb_from.setMinimumWidth(lbMinWidth)
        self.from_le = QLineEdit(self.search_gbox)
        self.from_le.setObjectName("from_le")
        search_gbox_from_layout.addWidget(self.lb_from)
        search_gbox_from_layout.addWidget(self.from_le)

        self.lb_to = QLabel(self.search_gbox)
        self.lb_to.setObjectName("lb_to")
        self.lb_to.setMinimumWidth(lbMinWidth)
        self.to_le = QLineEdit(self.search_gbox)
        self.to_le.setObjectName("to_le")
        search_gbox_to_layout.addWidget(self.lb_to)
        search_gbox_to_layout.addWidget(self.to_le)

        self.lb_subject = QLabel(self.search_gbox)
        self.lb_subject.setObjectName("lb_subject")
        self.lb_subject.setMinimumWidth(lbMinWidth)
        self.subject_le = QLineEdit(self.search_gbox)
        self.subject_le.setObjectName("subject_le")
        search_gbox_subject_layout.addWidget(self.lb_subject)
        search_gbox_subject_layout.addWidget(self.subject_le)

        self.lb_threads = QLabel(self.search_gbox)
        self.lb_threads.setObjectName("lb_threads")
        self.lb_threads.setMaximumWidth(lbMinWidth)
        self.thread_count_sb = QSpinBox(self.search_gbox)
        self.thread_count_sb.setMinimum(1)
        self.thread_count_sb.setMaximum(10)
        self.thread_count_sb.setObjectName("thread_count_sb")
        self.html_radio = QRadioButton(self.search_gbox)
        self.html_radio.setObjectName("html_radio")
        self.text_radio = QRadioButton(self.search_gbox)
        self.text_radio.setObjectName("text_radio")
        self.extactTypeButtonGroup = QButtonGroup(self)
        self.extactTypeButtonGroup.addButton(self.html_radio)
        self.extactTypeButtonGroup.addButton(self.text_radio)
        self.html_radio.setChecked(True)
        self.search_btn = QPushButton(self.search_gbox)
        self.search_btn.setObjectName("search_btn")
        search_gbox_threads_layout.addWidget(self.lb_threads)
        search_gbox_threads_layout.addWidget(self.thread_count_sb)
        search_gbox_threads_layout.addWidget(self.html_radio)
        search_gbox_threads_layout.addWidget(self.text_radio)
        search_gbox_threads_layout.addWidget(self.search_btn)

        self.parameters_cb = QCheckBox(self.search_gbox)
        self.parameters_cb.setText("")
        self.parameters_cb.setObjectName("parameters_cb")
        self.parameters_le = QLineEdit(self.search_gbox)
        self.parameters_le.setEnabled(False)
        self.parameters_le.setObjectName("parameters_le")
        search_gbox_paramaters_layout.addWidget(self.parameters_cb)
        search_gbox_paramaters_layout.addWidget(self.parameters_le)

        #### log_gbox
        self.log_gbox = QGroupBox(self.leftSplitter)
        self.log_gbox.setFlat(True)
        self.log_gbox.setObjectName("log_gbox")
        log_layout = QVBoxLayout(self.log_gbox)
        self.log_te = QTextEdit(self.log_gbox)
        self.log_te.setLineWrapMode(QTextEdit.NoWrap)
        self.log_te.setReadOnly(True)
        self.log_te.setTextInteractionFlags(Qt.TextSelectableByKeyboard | Qt.TextSelectableByMouse)
        self.log_te.setObjectName("log_te")

        self.disconnect_btn = QPushButton(self.log_gbox)
        self.disconnect_btn.setObjectName("disconnect_btn")
        self.disconnect_btn.hide()
        log_layout.addWidget(self.log_te)
        log_layout_btn = QHBoxLayout()
        log_layout.addLayout(log_layout_btn)
        log_layout_btn.addWidget(self.disconnect_btn)
        log_layout_btn.addStretch()

        #### links_gbox
        self.links_gbox = QGroupBox(self.mainSplitter)
        self.links_gbox.setFlat(True)
        self.links_gbox.setObjectName("links_gbox")
        self.links_gbox.hide()
        links_gbox_layout = QVBoxLayout(self.links_gbox)
        links_gbox_links_layout = QVBoxLayout()
        links_gbox_buttons_layout = QHBoxLayout()
        links_gbox_layout.addLayout(links_gbox_links_layout)
        links_gbox_layout.addLayout(links_gbox_buttons_layout)

        self.links_text_edit = QTextEdit(self.links_gbox)
        self.links_text_edit.setObjectName("links_text_edit")
        links_gbox_links_layout.addWidget(self.links_text_edit)

        self.export_txt_btn = QPushButton(self.links_gbox)
        self.export_txt_btn.setObjectName("export_txt_btn")
        self.export_txt_btn.setEnabled(False)
        self.export_html_btn = QPushButton(self.links_gbox)
        self.export_html_btn.setObjectName("export_html_btn")
        self.export_html_btn.setEnabled(False)

        links_gbox_buttons_layout.addWidget(self.export_txt_btn)
        links_gbox_buttons_layout.addWidget(self.export_html_btn)
        
        ### menubar
        self.menubar = QMenuBar(MainWindow)
        # self.menubar.setGeometry(QRect(0, 0, 860, 21))
        self.menubar.setObjectName("menubar")
        self.menu_file = QMenu(self.menubar)
        self.menu_file.setObjectName("menu_file")
        self.menu_help = QMenu(self.menubar)
        self.menu_help.setObjectName("menu_help")
        MainWindow.setMenuBar(self.menubar)
        self.action_about = QAction(MainWindow)
        self.action_about.setObjectName("action_about")
        self.action_About_Qt = QAction(MainWindow)
        self.action_About_Qt.setObjectName("action_About_Qt")
        self.action_exit = QAction(MainWindow)
        self.action_exit.setObjectName("action_exit")
        self.actionSave = QAction(MainWindow)
        self.actionSave.setObjectName("actionSave")
        self.action_Gmail_Advanced_Search_Syntax = QAction(MainWindow)
        self.action_Gmail_Advanced_Search_Syntax.setObjectName("action_Gmail_Advanced_Search_Syntax")
        self.menu_file.addAction(self.action_exit)
        self.menu_help.addAction(self.action_Gmail_Advanced_Search_Syntax)
        self.menu_help.addSeparator()
        self.menu_help.addAction(self.action_about)
        self.menu_help.addAction(self.action_About_Qt)
        self.menubar.addAction(self.menu_file.menuAction())
        self.menubar.addAction(self.menu_help.menuAction())
        
        self.retranslateUi(MainWindow)
        QMetaObject.connectSlotsByName(MainWindow)
        MainWindow.setTabOrder(self.client_secrets_file_path_le, self.client_secret_file_path_tBtn)
        MainWindow.setTabOrder(self.client_secret_file_path_tBtn, self.remove_account_btn)
        MainWindow.setTabOrder(self.remove_account_btn, self.add_account_btn)
        MainWindow.setTabOrder(self.add_account_btn, self.accounts_cb)
        MainWindow.setTabOrder(self.decryption_key_le, self.connect_btn)
        MainWindow.setTabOrder(self.connect_btn, self.log_te)
        MainWindow.setTabOrder(self.log_te, self.mailboxes_lw)
        MainWindow.setTabOrder(self.mailboxes_lw, self.after_date_cb)
        MainWindow.setTabOrder(self.after_date_cb, self.after_date_edit)
        MainWindow.setTabOrder(self.after_date_edit, self.before_date_cb)
        MainWindow.setTabOrder(self.before_date_cb, self.before_date_edit)
        MainWindow.setTabOrder(self.before_date_edit, self.from_le)
        MainWindow.setTabOrder(self.from_le, self.to_le)
        MainWindow.setTabOrder(self.to_le, self.subject_le)
        MainWindow.setTabOrder(self.subject_le, self.thread_count_sb)
        MainWindow.setTabOrder(self.thread_count_sb, self.html_radio)
        MainWindow.setTabOrder(self.html_radio, self.text_radio)
        MainWindow.setTabOrder(self.text_radio, self.search_btn)
        MainWindow.setTabOrder(self.search_btn, self.parameters_cb)
        MainWindow.setTabOrder(self.parameters_cb, self.parameters_le)
        MainWindow.setTabOrder(self.parameters_le, self.disconnect_btn)
        MainWindow.setTabOrder(self.disconnect_btn, self.links_text_edit)
        MainWindow.setTabOrder(self.links_text_edit, self.export_txt_btn)
        MainWindow.setTabOrder(self.export_txt_btn, self.export_html_btn)
        MainWindow.setTabOrder(self.export_html_btn, self.mailboxes_lw)
コード例 #27
0
class MDISubWindow_TextEdit(QTextEdit):
    documentCount = 1
    def __init__(self, parent=None, filePath=''):
        """Default class constructor."""
        super(MDISubWindow_TextEdit, self).__init__(parent)

        print(filePath)
        self.filePath = filePath
        self.fileName = os.path.basename(os.path.abspath(filePath))
        self.fileExt = os.path.splitext(self.fileName)[1]

        if not filePath:
            self.setWindowTitle('Untitled[*]')
            parent.setWindowIcon(QIcon(gIconDir + os.sep + 'new.png'))
        else:
            f = open(filePath, 'r')
            txt = f.read()
            f.close()
            self.setText(txt)

            self.setWindowTitle('%s[*]' % self.fileName)

            # TODO: This is changing all the subwindows icons. We want individual icons based on filetype...?
            if self.fileExt in ('.py', '.pyw'):
                parent.setWindowIcon(QIcon(gIconDir + os.sep + 'pyscript.png'))
            else:
                parent.setWindowIcon(QIcon(gIconDir + os.sep + 'new.png'))

        monoFont = QFont('Courier New')
        monoFont.setFixedPitch(True)
        self.setFont(monoFont)
        self.setWordWrapMode(QTextOption.NoWrap)
        ## self.setTextBackgroundColor(QColor('#000000'))
        ## self.setTextColor(QColor('#FFFFFF'))
        self.setCursorWidth(2)
        self.CreateActions()

        self.zoomLevel = 0

        gMainWin.action_Edit_Cut.setEnabled(False)
        gMainWin.action_Edit_Copy.setEnabled(False)
        self.copyAvailable.connect(gMainWin.action_Edit_Cut.setEnabled)
        self.copyAvailable.connect(gMainWin.action_Edit_Copy.setEnabled)
        # Handle the Context Menu Entries Also.
        self.action_Edit_Undo.setEnabled(False)
        self.action_Edit_Redo.setEnabled(False)
        self.action_Edit_Cut.setEnabled(False)
        self.action_Edit_Copy.setEnabled(False)
        self.undoAvailable.connect(self.action_Edit_Undo.setEnabled)
        self.redoAvailable.connect(self.action_Edit_Redo.setEnabled)
        self.copyAvailable.connect(self.action_Edit_Cut.setEnabled)
        self.copyAvailable.connect(self.action_Edit_Copy.setEnabled)

        self.document().contentsChanged.connect(self.TheDocumentWasModified)

        # self.show()
        # self.showMaximized()
        # self.setFocusPolicy(Qt.WheelFocus)
        ##### self.setFocus() # This makes the MDIArea go into SubWindowView...?

        self.gCornerWidget = QToolButton(self)
        # self.gCornerWidgetToolTip = QToolTip()
        QToolTip.setFont(QFont('SansSerif', 10))
        br = QBrush(QPixmap(gImgDir + os.sep + 'texture-spirals.png'))
        pal = QPalette()
        # pal.setBrush(QPalette.Active, QPalette.Base, br)
        # pal.setColor(QPalette.Background, QColor('#FF8000'))
        pal.setColor(QPalette.ColorGroup.Inactive,
                     QPalette.ColorRole.ToolTipBase,
                     QColor(EMBROIDERBLUE2))
        QToolTip.setPalette(QPalette(pal))
        self.action_Edit_SelectAll.setToolTip('This is a <b>QWidget</b> widget')

        self.gCornerWidget.setDefaultAction(self.action_Edit_SelectAll)
        self.setCornerWidget(self.gCornerWidget)
        # We want to show the corner widget no matter what so...
        self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)



    def CreateActions(self):
        self.action_Edit_Undo = QAction(QIcon(gIconDir + os.sep + 'undo.png'),
                self.tr('&Undo'), self,
                shortcut=UndoShortcut, # QKeySequence.Undo
                statusTip=self.tr('Reverses the most recent action.'),
                triggered=self.undo)

        self.action_Edit_Redo = QAction(QIcon(gIconDir + os.sep + 'redo.png'),
                self.tr('&Redo'), self,
                shortcut=RedoShortcut, # QKeySequence.Redo
                statusTip=self.tr('Reverses the effects of the previous undo action.'),
                triggered=self.redo)

        self.action_Edit_Cut = QAction(QIcon(gIconDir + os.sep + 'cut.png'),
                self.tr('Cu&t'), self,
                shortcut=CutShortcut, # QKeySequence.Cut
                statusTip=self.tr('Cut the current selection\'s contents to the clipboard.'),
                triggered=self.cut)

        self.action_Edit_Copy = QAction(QIcon(gIconDir + os.sep + 'copy.png'),
                self.tr('&Copy'), self,
                shortcut=CopyShortcut, # QKeySequence.Copy
                statusTip=self.tr('Copy the current selection\'s contents to the clipboard.'),
                triggered=self.copy)

        self.action_Edit_Paste = QAction(QIcon(gIconDir + os.sep + 'paste.png'),
                self.tr('&Paste'), self,
                shortcut=PasteShortcut, # QKeySequence.Paste
                statusTip=self.tr('Paste the clipboard\'s contents into the current selection.'),
                triggered=self.paste)

        self.action_Edit_Delete = QAction(QIcon(gIconDir + os.sep + 'delete.png'),
                self.tr('&Delete'), self,
                # shortcut=DeleteShortcut, # QKeySequence.Delete
                statusTip=self.tr('Delete selection.'),
                triggered=gMainWin.OnTODO)
                # triggered=self.delete)

        self.action_Edit_SelectAll = QAction(QIcon(gIconDir + os.sep + 'selectall.png'),
                self.tr('&Select All'), self,
                # shortcut=SelectAllShortcut, # QKeySequence.SelectAll
                statusTip=self.tr('Select all text in the document.'),
                # toolTip=QToolTip.text('Select All'),
                triggered=self.selectAll)

        self.action_Edit_ZoomIn = QAction(QIcon(gIconDir + os.sep + 'zoomin.png'),
                self.tr('Zoom &In'), self,
                shortcut=QKeySequence.ZoomIn, # ZoomInShortcut,
                statusTip=self.tr('Zoom In'),
                triggered=self.DoZoomIn)

        self.action_Edit_ZoomOut = QAction(QIcon(gIconDir + os.sep + 'zoomout.png'),
                self.tr('Zoom &Out'), self,
                shortcut=QKeySequence(Qt.CTRL + Qt.Key_Plus), #QKeySequence.ZoomOut, # ZoomOutShortcut,
                statusTip=self.tr('Zoom Out'),
                triggered=self.DoZoomOut)

        self.action_Edit_ZoomDefault = QAction(QIcon(gIconDir + os.sep + 'zoom.png'),
                self.tr('Zoom &Default'), self,
                shortcut=ZoomDefaultShortcut,
                statusTip=self.tr('Zoom Default'),
                triggered=self.DoZoomDefault)



    def TheDocumentWasModified(self):
        """"""
        self.setWindowModified(self.document().isModified())

    # def focusInEvent(self, event):
        # event.accept()
        # event.ignore()
        # print('focusInEvent - ')

    def AskToSaveBeforeClosing(self):
        """"""
        if self.document().isModified():
            ret = QMessageBox.warning(self, 'Warning',
                    'The document has been modified.' '\n'
                    'Do you want to save your changes?',
                    QMessageBox.Save | QMessageBox.Discard |
                    QMessageBox.Cancel)
            if ret == QMessageBox.Save:
                return self.OnSave()
            elif ret == QMessageBox.Cancel:
                if gMainWin.isEmbroidermodderMainWindowClosing:
                    gMainWin.isEmbroidermodderMainWindowClosing = False # Cancel closing the app.
                return False
        return True

    def OnSave(self):
        """"""
        if self.filePath:
            return self.OnSaveFilePath(self.filePath)

        return self.OnSaveAs()

    def OnSaveAs(self):
        """"""
        filePath, filtr = QFileDialog.getSaveFileName(self,
                                                      self.tr('Save As...'),
                                                      os.getcwd(),
                                                      WILDCARD_ALL)
        if filePath:
            return self.OnSaveFilePath(filePath)

        return False

    def OnSaveFilePath(self, filePath):
        """"""
        file = QFile(filePath)
        if not file.open(QFile.WriteOnly | QFile.Text):
            QMessageBox.warning(self, self.tr('Warning'),
                    self.tr('Cannot write file') + ' %s:\n%s.' % (filePath, file.errorString()))
            return False

        outf = QTextStream(file)
        QApplication.setOverrideCursor(Qt.WaitCursor)
        outf << self.toPlainText()
        QApplication.restoreOverrideCursor()

        self.DoSetCurrentFilePath(filePath)

        # Clear the Modified Flag.
        self.document().setModified(False)
        self.setWindowModified(False)
        self.setWindowTitle('%s[*]' % self.fileName)

        return True

    def OnPrint(self):
        """"""
        document = self.document()
        printer = QPrinter()

        dlg = QPrintDialog(printer, self)
        if dlg.exec_() != QDialog.Accepted:
            return

        document.print_(printer)

    def contextMenuEvent(self, event):
        """
        Handles the ``contextMenuEvent`` event for :class:`MDISubWindow_TextEdit`.

        :param `event`: a `QContextMenuEvent` event to be processed.
        """
        menu = QMenu(self)
        menu.addAction(self.action_Edit_Undo)
        menu.addAction(self.action_Edit_Redo)
        menu.addSeparator()
        menu.addAction(self.action_Edit_Cut)
        menu.addAction(self.action_Edit_Copy)
        menu.addAction(self.action_Edit_Paste)
        menu.addAction(self.action_Edit_Delete)
        menu.addSeparator()
        menu.addAction(self.action_Edit_SelectAll)
        menu.popup(self.mapToGlobal(event.pos()))
        # menu.exec_(self.mapToGlobal(event.pos()))
        event.accept()
        print("MDISubWindow_TextEdit contextMenuEvent")

    def DoZoomOut(self):
        """"""
        self.zoomOut()
        self.zoomLevel = self.zoomLevel - 1

    def DoZoomIn(self):
        """"""
        self.zoomIn()
        self.zoomLevel = self.zoomLevel + 1

    def GetZoomLevel(self):
        """"""
        return self.zoomLevel

    def DoZoomDefault(self):
        """"""
        if self.zoomLevel: # not == 0
            if self.zoomLevel < 0:
                while self.GetZoomLevel():
                    self.DoZoomIn()
            else:
                while self.GetZoomLevel():
                    self.DoZoomOut()

    def OnDay(self):
        """"""
        self.setTextBackgroundColor(QColor('#FFFFFF'))
        self.setTextColor(QColor('#000000'))
        print('OnDay')

    def OnNight(self):
        """"""
        self.setTextBackgroundColor(QColor('#000000'))
        # self.setTextColor(QColor('#FFFFFF'))

        # sample_palette = QPalette()
        # sample_palette.setColor(QPalette.Window, Qt.white)
        # sample_palette.setColor(QPalette.WindowText, Qt.blue)

        # self.setAutoFillBackground(True)
        # self.setPalette(sample_palette)
        self.document().setDefaultStyleSheet("QTextEdit {color: white; background-color: black}")
        # self.setStyleSheet("color: white; background-color: black")
        # self.setStyleSheet("color: white;"
                           # "background-color: black;"
                           # "selection-color: black;"
                           # "selection-background-color: white;")
        # self.setExtraSelections([(0, 1)])

        # self.setAutoFillBackground(True)
        # self.setBackgroundRole(QPalette.Background)
        self.update()
        print('OnNight')

    def wheelEvent(self, event):
        """"""
        evtDelta = event.delta()
        evtModifiers = event.modifiers()
        evtAltDown = evtModifiers & Qt.AltModifier
        evtShiftDown = evtModifiers & Qt.ShiftModifier
        evtCtrlDown = evtModifiers & Qt.ControlModifier
        ## print('evtModifiers = %s' % evtModifiers)
        ## print('evtAltDown = %s' % evtAltDown)
        ## print('evtShiftDown = %s' % evtShiftDown)
        ## print('evtCtrlDown = %s' % evtCtrlDown)
        ## print('event.delta() = %s' % evtDelta)
        # Ctrl+MouseWheel Zooming.
        if (evtDelta < 0) and evtCtrlDown and not evtShiftDown and not evtAltDown:
            if self.zoomLevel > -7:
                self.DoZoomOut()
                print('zoomLevel = %d' % self.zoomLevel)
        elif (evtDelta > 0) and evtCtrlDown and not evtShiftDown and not evtAltDown:
            if self.zoomLevel < 20:
                self.DoZoomIn()
                print('zoomLevel = %d' % self.zoomLevel)
        # Shift+MouseWheel Horizontal Scrolling.
        elif (evtDelta < 0) and not evtCtrlDown and evtShiftDown and not evtAltDown:
            self.horizontalScrollBar().triggerAction(QAbstractSlider.SliderSingleStepAdd)
            self.horizontalScrollBar().triggerAction(QAbstractSlider.SliderSingleStepAdd)
        elif (evtDelta > 0) and not evtCtrlDown and evtShiftDown and not evtAltDown:
            self.horizontalScrollBar().triggerAction(QAbstractSlider.SliderSingleStepSub)
            self.horizontalScrollBar().triggerAction(QAbstractSlider.SliderSingleStepSub)
        # Reproduce Regular Scrolling.
        elif evtDelta < 0:
            self.verticalScrollBar().triggerAction(QAbstractSlider.SliderSingleStepAdd)
            self.verticalScrollBar().triggerAction(QAbstractSlider.SliderSingleStepAdd)
        elif evtDelta > 0:
            self.verticalScrollBar().triggerAction(QAbstractSlider.SliderSingleStepSub)
            self.verticalScrollBar().triggerAction(QAbstractSlider.SliderSingleStepSub)

        event.accept()
        # event.ignore()

        # numDegrees = event.delta() / 8
        # numSteps = numDegrees / 15
        # print('numDegrees = %s' % numDegrees)
        # print('numSteps = %s' % numSteps)

        #if event.orientation() == Qt.Horizontal:
        #    self.scroll(numSteps, 0)
        #    # self.scrollHorizontally(numSteps)
        #else:
        #    self.scroll(0, numSteps)
        #    # self.scrollVertically(numSteps)
        #event.accept()

    def DoSetCurrentFilePath(self, filePath):
        """"""
        self.filePath = str(filePath)
        self.fileName = os.path.basename(os.path.abspath(filePath))
        self.fileExt = os.path.splitext(self.fileName)[1]

    def closeEvent(self, event):
        """"""
        if self.AskToSaveBeforeClosing():
            # self.DoWriteSettings()
            event.accept()
        else:
            event.ignore()
コード例 #28
0
    def __init__(self, parent=None, filePath=''):
        """Default class constructor."""
        super(MDISubWindow_TextEdit, self).__init__(parent)

        print(filePath)
        self.filePath = filePath
        self.fileName = os.path.basename(os.path.abspath(filePath))
        self.fileExt = os.path.splitext(self.fileName)[1]

        if not filePath:
            self.setWindowTitle('Untitled[*]')
            parent.setWindowIcon(QIcon(gIconDir + os.sep + 'new.png'))
        else:
            f = open(filePath, 'r')
            txt = f.read()
            f.close()
            self.setText(txt)

            self.setWindowTitle('%s[*]' % self.fileName)

            # TODO: This is changing all the subwindows icons. We want individual icons based on filetype...?
            if self.fileExt in ('.py', '.pyw'):
                parent.setWindowIcon(QIcon(gIconDir + os.sep + 'pyscript.png'))
            else:
                parent.setWindowIcon(QIcon(gIconDir + os.sep + 'new.png'))

        monoFont = QFont('Courier New')
        monoFont.setFixedPitch(True)
        self.setFont(monoFont)
        self.setWordWrapMode(QTextOption.NoWrap)
        ## self.setTextBackgroundColor(QColor('#000000'))
        ## self.setTextColor(QColor('#FFFFFF'))
        self.setCursorWidth(2)
        self.CreateActions()

        self.zoomLevel = 0

        gMainWin.action_Edit_Cut.setEnabled(False)
        gMainWin.action_Edit_Copy.setEnabled(False)
        self.copyAvailable.connect(gMainWin.action_Edit_Cut.setEnabled)
        self.copyAvailable.connect(gMainWin.action_Edit_Copy.setEnabled)
        # Handle the Context Menu Entries Also.
        self.action_Edit_Undo.setEnabled(False)
        self.action_Edit_Redo.setEnabled(False)
        self.action_Edit_Cut.setEnabled(False)
        self.action_Edit_Copy.setEnabled(False)
        self.undoAvailable.connect(self.action_Edit_Undo.setEnabled)
        self.redoAvailable.connect(self.action_Edit_Redo.setEnabled)
        self.copyAvailable.connect(self.action_Edit_Cut.setEnabled)
        self.copyAvailable.connect(self.action_Edit_Copy.setEnabled)

        self.document().contentsChanged.connect(self.TheDocumentWasModified)

        # self.show()
        # self.showMaximized()
        # self.setFocusPolicy(Qt.WheelFocus)
        ##### self.setFocus() # This makes the MDIArea go into SubWindowView...?

        self.gCornerWidget = QToolButton(self)
        # self.gCornerWidgetToolTip = QToolTip()
        QToolTip.setFont(QFont('SansSerif', 10))
        br = QBrush(QPixmap(gImgDir + os.sep + 'texture-spirals.png'))
        pal = QPalette()
        # pal.setBrush(QPalette.Active, QPalette.Base, br)
        # pal.setColor(QPalette.Background, QColor('#FF8000'))
        pal.setColor(QPalette.ColorGroup.Inactive,
                     QPalette.ColorRole.ToolTipBase,
                     QColor(EMBROIDERBLUE2))
        QToolTip.setPalette(QPalette(pal))
        self.action_Edit_SelectAll.setToolTip('This is a <b>QWidget</b> widget')

        self.gCornerWidget.setDefaultAction(self.action_Edit_SelectAll)
        self.setCornerWidget(self.gCornerWidget)
        # We want to show the corner widget no matter what so...
        self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
コード例 #29
0
class CustomCircuitCreator(QWidget):

    def __init__(self):
        super(CustomCircuitCreator, self).__init__()
        self.PaintArea = PaintArea(self)
        self.PaintArea.clearImage()
        self.grid = QGridLayout(self)
        self.grid.addWidget(self.PaintArea, 1, 0, 1, 9)
        self.scrollArea = QScrollArea()
        self.scrollArea.setBackgroundRole(QPalette.Dark)
        self.createToolsButtons()
        self.createButtons()
        self.setWindowTitle("Custom circuit creator")
        self.resize(self.PaintArea.size_w, self.PaintArea.size_h + 85)

    def closeEvent(self, event):
        if self.maybeSave():
            event.accept()
        else:
            event.ignore()

    def createButtons(self):
        buttonsDialog = QDialogButtonBox(self)
        buttonsDialog.setStandardButtons(
            QDialogButtonBox.Save |
            QDialogButtonBox.Cancel |
            QDialogButtonBox.Reset)
        self.grid.addWidget(buttonsDialog, 3, 0, 3, 9)
        buttonsDialog.button(QDialogButtonBox.Save).clicked.connect(
            self.saveFile)
        buttonsDialog.button(QDialogButtonBox.Reset).clicked.connect(
            self.PaintArea.clearImage)
        buttonsDialog.button(QDialogButtonBox.Cancel).clicked.connect(
            self.close)

    def createToolsButtons(self):
        buttonsFrame = QFrame()
        buttonsLayout = QHBoxLayout(buttonsFrame)
        buttonsLayout.setSizeConstraint(QLayout.SetDefaultConstraint)

        iconPath = filePath('icons/')
        self.penButton = QToolButton(
            self,
            icon=QIcon(iconPath + 'pen_w.png'))
        self.penButton.setToolTip('freehand drawing')
        self.penButton.clicked.connect(lambda: self.PaintArea.setTool('pen'))
        buttonsLayout.addWidget(self.penButton)

        self.lineButton = QToolButton(
            self,
            icon=QIcon(iconPath + 'line_w.png'))
        self.lineButton.setToolTip('draw lines')
        self.lineButton.clicked.connect(lambda: self.PaintArea.setTool('line'))
        buttonsLayout.addWidget(self.lineButton)

        self.rect = QToolButton(
            self,
            icon=QIcon(iconPath + 'rect_w.png'))
        self.rect.setToolTip('create rectangle')
        self.rect.clicked.connect(lambda: self.PaintArea.setTool('rect'))
        buttonsLayout.addWidget(self.rect)

        self.roundRect = QToolButton(
            self,
            icon=QIcon(iconPath + 'roundrect_w.png'))
        self.roundRect.setToolTip('create a round-corner rectanlge')
        self.roundRect.clicked.connect(
            lambda: self.PaintArea.setTool('roundRect'))
        buttonsLayout.addWidget(self.roundRect)

        self.circle = QToolButton(
            self,
            icon=QIcon(iconPath + 'ellipse_w.png'))
        self.circle.setToolTip('create circle')
        self.circle.clicked.connect(lambda: self.PaintArea.setTool('circle'))
        buttonsLayout.addWidget(self.circle)

        self.eraser = QToolButton(
            self,
            icon=QIcon(iconPath + 'eraser_w.png'))
        self.eraser.setToolTip('erase parts of the drawing')
        self.eraser.clicked.connect(lambda: self.PaintArea.setTool('eraser'))
        buttonsLayout.addWidget(self.eraser)

        self.mirror_w = QToolButton(
            self,
            icon=QIcon(iconPath + 'mirror-w_w.png'))
        self.mirror_w.setToolTip('vertical symmetric inversion')
        self.mirror_w.clicked.connect(self.PaintArea.mirror_w)
        buttonsLayout.addWidget(self.mirror_w)

        self.mirror_h = QToolButton(
            self,
            icon=QIcon(iconPath + 'mirror-h_w.png'))
        self.mirror_h.setToolTip('horizontal symmetric inversion')
        self.mirror_h.clicked.connect(self.PaintArea.mirror_h)
        buttonsLayout.addWidget(self.mirror_h)

        self.rotate = QToolButton(
            self,
            icon=QIcon(iconPath + 'rotate_w.png'))
        self.rotate.setToolTip('rotate')
        self.rotate.clicked.connect(self.PaintArea.rotate)
        buttonsLayout.addWidget(self.rotate)

        self.grid.addWidget(buttonsFrame, 0, 0, QtCore.Qt.AlignLeft)

    def maybeSave(self):
        if self.PaintArea.isModified():
            ret = QMessageBox.warning(
                self, "Save your work",
                "The drawing has been modified.\n"
                "Do you want to save your changes ?",
                QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel)
            if ret == QMessageBox.Save:
                return self.saveFile('png')
            elif ret == QMessageBox.Cancel:
                return False

        return True

    def saveFile(self, fileFormat='png'):
        initialPath = QtCore.QDir.currentPath() + '/customCirc.' + fileFormat
        fileName = QFileDialog.getSaveFileName(
            self, "Save As", initialPath, "%s Files (*.%s);;All Files (*)"
            % (fileFormat.upper(), fileFormat))
        if fileName:
            if self.PaintArea.saveImage('customCirc.' + fileFormat):
                self.close()
コード例 #30
0
ファイル: ctSESAM.py プロジェクト: rbuchli/ctSESAM-pyside
class MainWindow(QWidget, object):
    master_password_label = None
    master_password_edit = None
    domain_label = None
    domain_edit = None
    username_label = None
    username_edit = None
    strength_label = None
    strength_selector = None
    password_label = None
    password = None
    sync_button = None
    clipboard_button = None
    setting = None
    decrypt_kgk_task = None
    settings_window = None

    def __init__(self):
        super(MainWindow, self).__init__()
        self.nam = QNetworkAccessManager()
        self.setWindowIcon(QIcon(os.path.join('icons', 'Logo_rendered_edited.png')))
        layout = QBoxLayout(QBoxLayout.TopToBottom)
        layout.setContentsMargins(0, 0, 0, 0)
        self.preference_manager = PreferenceManager()
        self.kgk_manager = KgkManager()
        self.kgk_manager.set_preference_manager(self.preference_manager)
        self.settings_manager = PasswordSettingsManager(self.preference_manager)
        self.setting_dirty = True
        # Header bar
        header_bar = QFrame()
        header_bar.setStyleSheet(
            "QWidget { background: rgb(40, 40, 40); } " +
            "QToolButton { background: rgb(40, 40, 40); }" +
            "QToolTip { color: rgb(255, 255, 255); background-color: rgb(20, 20, 20); " +
            "border: 1px solid white; }")
        header_bar.setAutoFillBackground(True)
        header_bar.setFixedHeight(45)
        header_bar_layout = QBoxLayout(QBoxLayout.LeftToRight)
        header_bar_layout.addStretch()
        header_bar.setLayout(header_bar_layout)
        layout.addWidget(header_bar)
        self.create_header_bar(header_bar_layout)
        # Widget area
        main_area = QFrame()
        main_layout = QBoxLayout(QBoxLayout.TopToBottom)
        main_area.setLayout(main_layout)
        layout.addWidget(main_area)
        self.create_main_area(main_layout)
        # Window layout
        layout.addStretch()
        main_layout.addStretch()
        self.setLayout(layout)
        settings = QSettings()
        size = settings.value("MainWindow/size")
        if not size:
            size = QSize(350, 450)
        self.resize(size)
        position = settings.value("MainWindow/pos")
        if not position:
            position = QPoint(0, 24)
        self.move(position)
        self.setWindowTitle("c't SESAM")
        self.master_password_edit.setFocus()
        self.show()

    # noinspection PyUnresolvedReferences
    def create_header_bar(self, layout):
        self.sync_button = QToolButton()
        self.sync_button.setIconSize(QSize(30, 30))
        self.sync_button.setIcon(QIcon(os.path.join("icons", "ic_action_sync.png")))
        self.sync_button.setStyleSheet("border: 0px;")
        self.sync_button.setToolTip("Sync")
        self.sync_button.clicked.connect(self.sync_clicked)
        self.sync_button.setVisible(False)
        layout.addWidget(self.sync_button)
        self.clipboard_button = QToolButton()
        self.clipboard_button.setIconSize(QSize(30, 30))
        self.clipboard_button.setIcon(QIcon(os.path.join("icons", "ic_action_copy.png")))
        self.clipboard_button.setStyleSheet("border: 0px;")
        self.clipboard_button.setToolTip("in die Zwischenablage")
        self.clipboard_button.clicked.connect(self.copy_to_clipboard)
        self.clipboard_button.setVisible(False)
        layout.addWidget(self.clipboard_button)

    # noinspection PyUnresolvedReferences
    def create_main_area(self, layout):
        # Master password
        master_password_label = QLabel("&Master-Passwort:")
        self.master_password_edit = QLineEdit()
        self.master_password_edit.setEchoMode(QLineEdit.EchoMode.Password)
        self.master_password_edit.textChanged.connect(self.masterpassword_changed)
        self.master_password_edit.returnPressed.connect(self.move_focus)
        self.master_password_edit.editingFinished.connect(self.masterpassword_entered)
        self.master_password_edit.setMaximumHeight(28)
        master_password_label.setBuddy(self.master_password_edit)
        layout.addWidget(master_password_label)
        layout.addWidget(self.master_password_edit)
        # Domain
        domain_label = QLabel("&Domain:")
        self.domain_edit = QComboBox()
        self.domain_edit.setEditable(True)
        self.domain_edit.textChanged.connect(self.domain_changed)
        self.domain_edit.currentIndexChanged.connect(self.domain_changed)
        self.domain_edit.lineEdit().editingFinished.connect(self.domain_entered)
        self.domain_edit.lineEdit().returnPressed.connect(self.move_focus)
        self.domain_edit.setMaximumHeight(28)
        domain_label.setBuddy(self.domain_edit)
        layout.addWidget(domain_label)
        layout.addWidget(self.domain_edit)
        # Username
        self.username_label = QLabel("&Username:"******"&Passwortstärke:")
        self.strength_label.setVisible(False)
        self.strength_selector = PasswordStrengthSelector()
        self.strength_selector.set_min_length(4)
        self.strength_selector.set_max_length(36)
        self.strength_selector.setMinimumHeight(60)
        self.strength_selector.set_length(12)
        self.strength_selector.set_complexity(6)
        self.strength_selector.strength_changed.connect(self.strength_changed)
        self.strength_selector.setVisible(False)
        self.strength_label.setBuddy(self.strength_selector)
        layout.addWidget(self.strength_label)
        layout.addWidget(self.strength_selector)
        # Password
        self.password_label = QLabel("&Passwort:")
        self.password_label.setVisible(False)
        self.password = QLabel()
        self.password.setTextFormat(Qt.PlainText)
        self.password.setAlignment(Qt.AlignCenter)
        self.password.setFont(QFont("Helvetica", 18, QFont.Bold))
        self.password.setVisible(False)
        self.password_label.setBuddy(self.password)
        layout.addWidget(self.password_label)
        layout.addWidget(self.password)

    def set_masterpassword(self, masterpassword):
        self.master_password_edit.setText(masterpassword)

    def set_domain(self, domain):
        self.domain_edit.lineEdit().setText(domain)

    def closeEvent(self, *args, **kwargs):
        settings = QSettings()
        settings.setValue("MainWindow/size", self.size())
        settings.setValue("MainWindow/pos", self.pos())
        settings.sync()

    def masterpassword_changed(self):
        self.kgk_manager.reset()
        self.decrypt_kgk_task = None
        self.clipboard_button.setVisible(False)
        if len(self.master_password_edit.text()) > 0:
            self.sync_button.setVisible(True)
        else:
            self.sync_button.setVisible(False)

    def masterpassword_entered(self):
        if len(self.master_password_edit.text()) > 0 and not self.decrypt_kgk_task:
            self.kgk_manager.get_kgk_crypter_salt()
            self.decrypt_kgk_task = DecryptKgkTask(
                self.master_password_edit.text(),
                self.preference_manager,
                self.kgk_manager,
                self.settings_manager,
                self.domain_edit)

    def set_visibilities(self):
        if len(self.domain_edit.lineEdit().text()) > 0:
            self.username_label.setVisible(True)
            self.username_edit.setVisible(True)
            self.strength_label.setVisible(True)
            self.strength_selector.setVisible(True)
            self.password_label.setVisible(True)
            self.password.setVisible(True)
        else:
            self.username_label.setVisible(False)
            self.username_edit.setVisible(False)
            self.strength_label.setVisible(False)
            self.strength_selector.setVisible(False)
            self.password_label.setVisible(False)
            self.password.setVisible(False)
            self.clipboard_button.setVisible(False)

    def domain_changed(self):
        self.setting_dirty = True
        self.password.setText("")
        self.clipboard_button.setVisible(False)
        self.set_visibilities()
        if self.kgk_manager.has_kgk() and (not self.decrypt_kgk_task or not self.decrypt_kgk_task.is_running()) and \
           len(self.domain_edit.lineEdit().text()) > 0 and \
           self.domain_edit.lineEdit().text() in self.settings_manager.get_domain_list():
            self.domain_entered()

    def domain_entered(self):
        self.setting_dirty = self.domain_edit.lineEdit().text() not in self.settings_manager.get_domain_list()
        self.setting = self.settings_manager.get_setting(self.domain_edit.lineEdit().text())
        self.username_edit.blockSignals(True)
        self.username_edit.setText(self.setting.get_username())
        self.username_edit.blockSignals(False)
        self.strength_selector.blockSignals(True)
        self.strength_selector.set_length(self.setting.get_length())
        self.strength_selector.set_complexity(self.setting.get_complexity())
        self.strength_selector.set_extra_count(len(self.setting.get_extra_character_set()))
        self.strength_selector.blockSignals(False)
        self.generate_password()

    def move_focus(self):
        line_edits = [self.master_password_edit, self.domain_edit, self.username_edit]
        for i, edit in enumerate(line_edits):
            if edit.hasFocus() and i + 1 < len(line_edits):
                line_edits[i + 1].setFocus()
                return True
        self.generate_button.setFocus()

    def generate_password(self):
        if not self.kgk_manager.has_kgk():
            self.kgk_manager.create_new_kgk()
            self.kgk_manager.create_and_save_new_kgk_block()
        if not self.kgk_manager.kgk_crypter or not self.kgk_manager.salt:
            self.kgk_manager.get_kgk_crypter(self.master_password_edit.text().encode('utf-8'),
                                             self.kgk_manager.get_kgk_crypter_salt())
        if self.setting_dirty:
            self.setting.new_salt()
            self.setting.calculate_template()
        self.settings_manager.set_setting(self.setting)
        if not self.setting.get_legacy_password():
            generator = CtSesam(self.setting.get_domain(),
                                self.setting.get_username(),
                                self.kgk_manager.get_kgk(),
                                self.setting.get_salt(),
                                self.setting.get_iterations())
            password = generator.generate(self.setting)
        else:
            password = self.setting.get_legacy_password()
        self.password.setText(password)
        self.password.setTextInteractionFlags(Qt.TextSelectableByMouse | Qt.TextSelectableByKeyboard)
        self.clipboard_button.setVisible(True)
        self.settings_manager.store_local_settings(self.kgk_manager)
        self.setting_dirty = False

    def copy_to_clipboard(self):
        QApplication.clipboard().setText(self.password.text())

    def username_changed(self):
        if self.setting:
            if self.setting.get_username() != self.username_edit.text():
                self.setting.set_username(self.username_edit.text())
                self.setting_dirty = True
            self.generate_password()

    def strength_changed(self, complexity, length):
        if self.setting:
            if self.setting.get_length() != length:
                self.setting.set_length(length)
                self.setting_dirty = True
            if self.setting.get_complexity() != complexity:
                self.setting.set_complexity(complexity)
                self.setting_dirty = True
            self.generate_password()

    def migrate_local_domains(self, new_kgk_manager):
        for domain in self.settings_manager.get_domain_list():
            setting = self.settings_manager.get_setting(domain)
            generator = CtSesam(setting.get_domain(),
                                setting.get_username(),
                                self.kgk_manager.get_kgk(),
                                setting.get_salt(),
                                setting.get_iterations())
            setting.set_legacy_password(generator.generate(setting))
            self.settings_manager.set_setting(setting)
        self.kgk_manager = new_kgk_manager
        self.settings_manager.store_local_settings(self.kgk_manager)

    # noinspection PyUnresolvedReferences
    def sync_clicked(self):
        self.masterpassword_entered()
        if not self.settings_manager.sync_manager.has_settings():
            self.show_sync_settings()
        else:
            pull_successful, data = self.settings_manager.sync_manager.pull()
            if pull_successful and len(data) > 0:
                remote_kgk_manager = KgkManager()
                remote_kgk_manager.update_from_blob(self.master_password_edit.text().encode('utf-8'), b64decode(data))
                if len(self.preference_manager.get_kgk_block()) == 112 and \
                   remote_kgk_manager.has_kgk() and self.kgk_manager.has_kgk() and \
                   self.kgk_manager.get_kgk() != remote_kgk_manager.get_kgk():
                    if len(self.settings_manager.get_domain_list()) > 0:
                        print("Lokal und auf dem Server gibt es unterschiedliche KGKs. Das ist ein Problem!")
                    self.migrate_local_domains(remote_kgk_manager)
                else:
                    if len(self.preference_manager.get_kgk_block()) != 112:
                        self.kgk_manager = remote_kgk_manager
                        self.kgk_manager.set_preference_manager(self.preference_manager)
                        self.kgk_manager.store_local_kgk_block()
                    self.settings_manager.update_from_export_data(remote_kgk_manager, b64decode(data))
                    self.domain_edit.blockSignals(True)
                    current_domain = self.domain_edit.lineEdit().text()
                    for i in reversed(range(self.domain_edit.count())):
                        self.domain_edit.removeItem(i)
                    self.domain_edit.insertItems(0, self.settings_manager.get_domain_list())
                    self.domain_edit.blockSignals(False)
                    self.domain_edit.setEditText(current_domain)
            self.settings_manager.store_settings(self.kgk_manager)

    # noinspection PyUnresolvedReferences
    def show_sync_settings(self, url=None, username=None, password=None):
        self.settings_window = SettingsWindow(
            self.settings_manager.sync_manager,
            self.nam,
            url=self.settings_manager.sync_manager.server_address,
            username=self.settings_manager.sync_manager.username,
            password=self.settings_manager.sync_manager.password,
            certificate=self.settings_manager.sync_manager.certificate)
        self.settings_window.finished.connect(self.sync_clicked)
コード例 #31
0
ファイル: controls.py プロジェクト: asymworks/python-divelog
class SearchEdit(QLineEdit):
    '''
    SearchEdit
    
    Styled search edit box which includes a search icon, clear button, and
    pre-defined preview text.
    '''
    def __init__(self, parent=None):
        super(SearchEdit, self).__init__(parent)
        
        clr_pixmap = QPixmap(':/icons/clear.png')
        self._btn_clear = QToolButton(self)
        self._btn_clear.setIcon(clr_pixmap)
        self._btn_clear.setIconSize(clr_pixmap.size())
        self._btn_clear.setCursor(Qt.ArrowCursor)
        self._btn_clear.setStyleSheet('QToolButton { border: none; padding: 0px; }');
        self._btn_clear.clicked.connect(self.clear)
        fw = self.style().pixelMetric(QStyle.PM_DefaultFrameWidth)
        
        #TODO: Make a Search glyph show up properly
        self.setStyleSheet('QLineEdit { padding-right: %dpx; }' % (self._btn_clear.sizeHint().width() + fw + 1))
        msz = self.minimumSizeHint()
        self.setMinimumSize(max([msz.width(), self._btn_clear.sizeHint().height() + fw * 2 + 2]), 
                            max([msz.height(), self._btn_clear.sizeHint().height() + fw * 2 + 2]))
        self.setPlaceholderText('Search')
    
    def resizeEvent(self, e):
        sz = self._btn_clear.sizeHint()
        fw = self.style().pixelMetric(QStyle.PM_DefaultFrameWidth)
        self._btn_clear.move(self.rect().right() - fw - sz.width(),
            (self.rect().bottom() + 1 - sz.height()) / 2 + 1)
        
    def sizeHint(self):
        s = super(SearchEdit, self).sizeHint()
        s.setWidth(250)
        return s
コード例 #32
0
ファイル: main.py プロジェクト: eivind88/raskolnikov-browser
    def __init__(self, parent=None):
        """Initialize the parent class of this instance."""
        super(window, self).__init__(parent)
        app.aboutToQuit.connect(self.myExitHandler)

        self.style_sheet = self.styleSheet('style')
        # app.setStyle(QStyleFactory.create('Macintosh'))
        #app.setStyleSheet(self.style_sheet)
        self.layout().setSpacing(0)
        self.layout().setContentsMargins(0,0,0,0)

        app.setOrganizationName("Eivind Arvesen")
        app.setOrganizationDomain("https://github.com/eivind88/raskolnikov")
        app.setApplicationName("Raskolnikov")
        app.setApplicationVersion("0.0.1")
        settings = QSettings()

        self.data_location = QDesktopServices.DataLocation
        self.temp_location = QDesktopServices.TempLocation
        self.cache_location = QDesktopServices.CacheLocation

        self.startpage = "https://duckduckgo.com/"
        self.new_tab_behavior = "insert"

        global bookmarks

        global saved_tabs
        print "Currently saved_tabs:\n", saved_tabs

        global menubar
        menubar = QMenuBar()

        # Initialize a statusbar for the window
        self.statusbar = self.statusBar()
        self.statusbar.setFont(QFont("Helvetica Neue", 11, QFont.Normal))
        self.statusbar.setStyleSheet(self.style_sheet)
        self.statusbar.setMinimumHeight(15)

        self.pbar = QProgressBar()
        self.pbar.setMaximumWidth(100)
        self.statusbar.addPermanentWidget(self.pbar)

        self.statusbar.hide()

        self.setMinimumSize(504, 235)
        # self.setWindowModified(True)
        # app.alert(self, 0)
        self.setWindowTitle("Raskolnikov")
        # toolbar = self.addToolBar('Toolbar')
        # toolbar.addAction(exitAction)
        # self.setUnifiedTitleAndToolBarOnMac(True)
        self.setWindowIcon(QIcon(""))

        # Create input widgets
        self.bbutton = QPushButton(u"<")
        self.fbutton = QPushButton(u">")
        self.hbutton = QPushButton(u"⌂")
        self.edit = QLineEdit("")
        self.edit.setFont(QFont("Helvetica Neue", 12, QFont.Normal))
        self.edit.setPlaceholderText("Enter URL")
        # self.edit.setMinimumSize(400, 24)
        self.rbutton = QPushButton(u"↻")
        self.dbutton = QPushButton(u"☆")
        self.tbutton = QPushButton(u"⁐")
        # ↆ ⇧ √ ⌘ ⏎ ⏏ ⚠ ✓ ✕ ✖ ✗ ✘ ::: ❤ ☮ ☢ ☠ ✔ ☑ ♥ ✉ ☣ ☤ ✘ ☒ ♡ ツ ☼ ☁ ❅ ✎
        self.nbutton = QPushButton(u"+")
        self.nbutton.setObjectName("NewTab")
        self.nbutton.setMinimumSize(35, 30)
        self.nbutton.setSizePolicy(QSizePolicy.Minimum,QSizePolicy.Minimum)

        self.edit.setTextMargins(2, 1, 2, 0)

        # create a horizontal layout for the input
        input_layout = QHBoxLayout()
        input_layout.setSpacing(4)
        input_layout.setContentsMargins(0, 0, 0, 0)

        # add the input widgets to the input layout
        input_layout.addWidget(self.bbutton)
        input_layout.addWidget(self.fbutton)
        input_layout.addWidget(self.hbutton)
        input_layout.addWidget(self.edit)
        input_layout.addWidget(self.rbutton)
        input_layout.addWidget(self.dbutton)
        input_layout.addWidget(self.tbutton)

        # create a widget to hold the input layout
        self.input_widget = QFrame()
        self.input_widget.setObjectName("InputWidget")
        self.input_widget.setStyleSheet(self.style_sheet)

        # set the layout of the widget
        self.input_widget.setLayout(input_layout)
        self.input_widget.setVisible(True)

        # CREATE BOOKMARK-LINE HERE
        self.bookmarks_layout = QHBoxLayout()
        self.bookmarks_layout.setSpacing(0)
        self.bookmarks_layout.setContentsMargins(0, 0, 0, 0)

        for i in bookmarks:
            link = QToolButton()
            link.setDefaultAction(QAction(unicode(i), link))
            link.setObjectName(unicode(i))
            link.setFont(QFont("Helvetica Neue", 11, QFont.Normal))
            link.clicked.connect(self.handleBookmarks)

            self.bookmarks_layout.addWidget(link)

        self.bookmarks_widget = QFrame()
        self.bookmarks_widget.setObjectName("BookmarkWidget")
        self.bookmarks_widget.setStyleSheet(self.style_sheet)
        self.bookmarks_widget.setLayout(self.bookmarks_layout)

        if not bookmarks:
            self.bookmarks_widget.hide()

        # Task list
        self.tasklist = QStandardItemModel()
        #parentItem = self.tasklist.invisibleRootItem()
        #self.tasklist.header().hide()
        self.tasklist.setHorizontalHeaderItem(0, QStandardItem('Tasks'))
        parentItem = QStandardItem("Parent")
        self.tasklist.appendRow(parentItem)
        for i in range(4):
            item = QStandardItem("Item %d" % i)
            parentItem.appendRow(item)
            #parentItem = item

        #self.list.activated[str].connect(self.handleBookmarks)
        #self.list.view().setSizePolicy(QSizePolicy.Minimum,QSizePolicy.Minimum)

        # create tabs
        self.tabs = QTabWidget()
        self.tabs.setDocumentMode(True)
        self.tabs.setTabsClosable(True)
        self.tabs.setMovable(True)
        self.tabs.tabBar().hide()
        self.tabs.setFont(QFont("Helvetica Neue", 11, QFont.Normal))
        self.tabs.setCornerWidget(self.nbutton)
        self.tabs.cornerWidget().setObjectName("CornerWidget")
        self.tabs.cornerWidget().setMinimumSize(10, 24)
        self.tabs.cornerWidget().setSizePolicy(QSizePolicy.Minimum,QSizePolicy.Minimum)

        if saved_tabs:
            for tab in saved_tabs['tabs']:
                tasklist = QTreeView()
                tasklist.hide()
                tasklist.setObjectName('taskList')
                tasklist.setMinimumWidth(100)
                tasklist.setMaximumWidth(250)

                new_tab = QWebView()
                new_tab.setObjectName('webView')

                inspector = QWebInspector(self)
                inspector.setObjectName('webInspector')
                inspector.hide()

                page_layout = QVBoxLayout()
                page_layout.setSpacing(0)
                page_layout.setContentsMargins(0, 0, 0, 0)
                page_layout.addWidget(new_tab)
                page_layout.addWidget(inspector)
                page_widget = QFrame()
                page_widget.setObjectName('pageWidget')
                page_widget.setLayout(page_layout)

                complete_tab_layout = QHBoxLayout()
                complete_tab_layout.setSpacing(0)
                complete_tab_layout.setContentsMargins(0, 0, 0, 0)
                complete_tab_layout.addWidget(tasklist)
                complete_tab_layout.addWidget(page_widget)
                complete_tab_widget = QFrame()
                complete_tab_widget.setLayout(complete_tab_layout)

                #for page in tab['history']:
                #    new_tab.load(QUrl(page['url']))
                #print tab['current_history']
                #for item in new_tab.history().items():
                #    print item
                #new_tab.history().goToItem(new_tab.history().itemAt(tab['current_history']))
                new_tab.load(QUrl(tab['history'][tab['current_history']]['url']))
                tab['current_history']
                self.tabs.setUpdatesEnabled(False)
                if self.new_tab_behavior == "insert":
                    self.tabs.insertTab(self.tabs.currentIndex()+1, complete_tab_widget,
                                        unicode(new_tab.title()))
                elif self.new_tab_behavior == "append":
                    self.tabs.appendTab(complete_tab_widget, unicode(new_tab.title()))
                self.tabs.setUpdatesEnabled(True)
                new_tab.titleChanged.connect(self.change_tab)
                new_tab.urlChanged.connect(self.change_tab)
                new_tab.loadStarted.connect(self.load_start)
                new_tab.loadFinished.connect(self.load_finish)
                new_tab.loadProgress.connect(self.pbar.setValue)
                new_tab.page().linkHovered.connect(self.linkHover)
                inspector.setPage(new_tab.page())

            for index, tab in enumerate(saved_tabs['tabs']):
                self.tabs.setTabText(index, tab['history'][tab['current_history']]['title'])

            self.tabs.setCurrentIndex(saved_tabs['current_tab'])
        else:
            self.new_tab()

        tabs_layout = QVBoxLayout()
        tabs_layout.setSpacing(0)
        tabs_layout.setContentsMargins(0, 0, 0, 0)
        tabs_layout.addWidget(self.tabs)

        self.tabs_widget = QFrame()
        self.tabs_widget.setObjectName("TabLine")
        self.tabs_widget.setStyleSheet(self.style_sheet)
        self.tabs_widget.setLayout(tabs_layout)
        self.tabs_widget.setVisible(True)

        # Webkit settings
        gsettings = self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebView, unicode('webView')).settings().globalSettings()
        # Basic settings
        gsettings.setAttribute(QWebSettings.AutoLoadImages, True)
        gsettings.setAttribute(QWebSettings.JavascriptEnabled, True)
        gsettings.setAttribute(QWebSettings.JavascriptCanOpenWindows, False)
        gsettings.setAttribute(QWebSettings.JavascriptCanAccessClipboard, False)
        gsettings.setAttribute(QWebSettings.PluginsEnabled, False) # Flash isn't stable at present
        gsettings.setAttribute(QWebSettings.JavaEnabled, False) # Java applet's aren't supported by PySide
        gsettings.setAttribute(QWebSettings.DeveloperExtrasEnabled, True)
        gsettings.setAttribute(QWebSettings.AcceleratedCompositingEnabled,
            True)
        # Performace settings
        gsettings.setAttribute(QWebSettings.DnsPrefetchEnabled, True)
        gsettings.setAttribute(QWebSettings.AcceleratedCompositingEnabled, True)
        gsettings.setAttribute(QWebSettings.DnsPrefetchEnabled, True)
        # Other settings
        gsettings.setAttribute(QWebSettings.PrivateBrowsingEnabled, False)

        # Create a vertical layout and add widgets
        vlayout = QVBoxLayout()
        vlayout.setSpacing(0)
        vlayout.setContentsMargins(0, 0, 0, 0)
        # toolbar.addWidget(self.input_widget)
        vlayout.addWidget(self.input_widget)
        vlayout.addWidget(self.bookmarks_widget)
        vlayout.addWidget(self.tabs_widget)

        # create a widget to hold the vertical layout
        wrapper_widget = QWidget()
        wrapper_widget.setLayout(vlayout)
        self.setCentralWidget(wrapper_widget)

        self.bbutton.clicked.connect(self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebView, unicode('webView')).back)
        self.fbutton.clicked.connect(self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebView, unicode('webView')).forward)
        self.hbutton.clicked.connect(self.goHome)
        self.edit.returnPressed.connect(self.set_url)
        # Add button signal to "go" slot
        self.rbutton.clicked.connect(self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebView, unicode('webView')).reload)
        self.dbutton.clicked.connect(self.bookmark)
        self.tbutton.clicked.connect(self.toggleTaskBar)
        self.nbutton.clicked.connect(self.new_tab)
        self.tabs.tabCloseRequested.connect(self.tabs.removeTab)
        self.tabs.currentChanged.connect(self.change_tab)

        widgets = (input_layout.itemAt(i).widget() for i in range(
            input_layout.count()))
        for widget in widgets:
            if isinstance(widget, QPushButton):
                widget.setFixedSize(33, 21)
                widget.setFont(QFont("Helvetica Neue", 12, QFont.Normal))
                widget.pressed.connect(self.press_button)
                widget.released.connect(self.release_button)

        # make a ctrl+q quit
        sequence = QKeySequence(Qt.CTRL + Qt.Key_Q)
        QShortcut(sequence, self, SLOT("close()"))

        # make an accelerator to toggle fullscreen
        sequence = QKeySequence(Qt.CTRL + Qt.SHIFT + Qt.Key_F)
        QShortcut(sequence, self, self.toggle_fullscreen)

        # make an accelerator to toggle input visibility
        sequence = QKeySequence(Qt.CTRL + Qt.ALT + Qt.Key_L)
        QShortcut(sequence, self, self.toggle_input)

        # make an accelerator to focus adress-bar
        sequence = QKeySequence(Qt.CTRL + Qt.Key_L)
        QShortcut(sequence, self, self.focus_adress)

        # make an accelerator to reload page
        sequence = QKeySequence(Qt.CTRL + Qt.Key_R)
        QShortcut(sequence, self, self.tabs.currentWidget().findChild(QFrame, unicode('pageWidget')).findChild(QWebView, unicode('webView')).reload)

        # make an accelerator to create new tab
        sequence = QKeySequence(Qt.CTRL + Qt.Key_T)
        QShortcut(sequence, self, self.new_tab)

        # make an accelerator to close tab
        sequence = QKeySequence(Qt.CTRL + Qt.Key_W)
        QShortcut(sequence, self, self.close_tab)

        # make an accelerator to navigate tabs
        sequence = QKeySequence(Qt.CTRL + Qt.SHIFT + Qt.Key_Left)
        QShortcut(sequence, self, self.previous_tab)
        sequence = QKeySequence(Qt.CTRL + Qt.SHIFT + Qt.Key_Right)
        QShortcut(sequence, self, self.next_tab)

        # make an accelerator to toggle inspector
        sequence = QKeySequence(Qt.CTRL + Qt.ALT + Qt.Key_U)
        QShortcut(sequence, self, self.handleShowInspector)

        # make an accelerator to toggle bookmark
        sequence = QKeySequence(Qt.CTRL + Qt.Key_D)
        QShortcut(sequence, self, self.bookmark)

        # make an accelerator to toggle task/project-list
        sequence = QKeySequence(Qt.CTRL + Qt.SHIFT + Qt.Key_L)
        QShortcut(sequence, self, self.toggleTaskBar)

        # finally set the attribute need to rotate
        # try:
        #     self.setAttribute(Qt.WA_Maemo5AutoOrientation, True)
        # except:
        #     print "not maemo"

        self.statusbar.show()
コード例 #33
0
ファイル: ToolBar.py プロジェクト: uheee/FCY
    def _init_toolbar(self):
        self.basedir = os.path.join(matplotlib.rcParams['datapath'], 'images')

        layout = QVBoxLayout(self)
        #a = QToolButton(self._icon('home.png'), u'原状', self.home)
        a = QToolButton(self)
        layout.addWidget(a)
        a.setToolTip(u'恢复初始状态')
        #a = QToolButton(self._icon('back.png'), u'后退', self.back)
        a = QToolButton(self)
        layout.addWidget(a)
        a.setToolTip(u'前一个视图')
        #a = QToolButton(self._icon('forward.png'), u'前进', self.forward)
        a = QToolButton(self)
        layout.addWidget(a)
        a.setToolTip(u'下一个视图')
        #a = QToolButton(self._icon('move.png'), u'平移', self.pan)
        a = QToolButton(self)
        layout.addWidget(a)
        a.setToolTip('Pan axes with left mouse, zoom with right')
        #a = QToolButton(self._icon('zoom_to_rect.png'), 'Zoom', self.zoom)
        a = QToolButton(self)
        layout.addWidget(a)
        a.setToolTip('Zoom to rectangle')
コード例 #34
0
class MainWindow(QMainWindow):
    """docstring for MainWindow"""
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.serviceProvider = 0
        self.popupMenu = None
        self.mapControlButtons = []
        self.mapControlTypes = []
        self.markerObjects = []
        self.setWindowTitle(self.tr('Map Viewer Demo'))

        self.routingManager = None
        self.mapManager = None
        self.mapWidget = None
        self.markerIcon = None
        self.slider = None

        manager = QNetworkConfigurationManager()

        canStartIAP = manager.capabilities() & QNetworkConfigurationManager.CanStartAndStopInterfaces

        configuration = manager.defaultConfiguration()

        if not configuration.isValid or (not canStartIAP and configuration.starte() != QNetworkConfiguration.Active):
            QMessageBox.information(self, self.tr('Map Viewer Demo'),
                                    self.tr('Available Access Points not found.'))
            return

        self.session = QNetworkSession(configuration, self)
        self.session.opened.connect(self.networkSessionOpened)
        self.session.error.connect(self.error)

        self.session.open()
        self.session.waitForOpened()

        self.setProvider('nokia')
        self.setupUi()

    def networkSessionOpened(self):
        pass

    def sliderValueChanged(self, value):
        self.mapWidget.setZoomLevel(value)

    def mapZoomLevelChanged(self, level):
        self.slider.setSliderPosition(int(level))

    def mapTypeChanged(self, newType):
        index = self.mapControlTypes.index(newType)
        if index != -1:
            self.mapControButtons[index].setChecked(True)

    def mapTypeToggled(self, checked):
        if checked:
            button = self.sender()
            index = self.mapControlButtons.index(button)
            if index != -1:
                print index, self.mapControlTypes[index]
                self.mapWidget.setMapType(self.mapControlTypes[index])

    def updateCoords(self, coords):
        if not coords.isValid():
            return

        self.latitudeEdit.setText('%f' % coords.latitude())
        self.longitudeEdit.setText('%f' % coords.longitude())

    def setCoordsClicked(self):
        lat = float(self.latitudeEdit.text())
        lon = float(self.longitudeEdit.text())
        self.mapWidget.setCenter(QGeoCoordinate(lat, lon))

    def setProvider(self, providerId):
        self.serviceProvider = QGeoServiceProvider(providerId)
        if self.serviceProvider.error() != QGeoServiceProvider.NoError:
            QMessageBox.information(self, self.tr('MapViewer Example'),
                                    self.tr('Unable to dinf the %s geoservices plugin.' % providerId))

            qApp.quit()
            return

        self.mapManager = self.serviceProvider.mappingManager()
        self.routingManager = self.serviceProvider.routingManager()

    def error(self, error):
        if error == QNetworkSession.UnknownSessionError:
            msgBox = QMessageBox(self.parent())
            msgBox.setText('This application requires network access to function.')
            msgBox.setInformativeText('Press Cancel to quit the application.')
            msgBox.setStandardButtons(QMessageBox.Retry | QMessageBox.Cancel)
            msgBox.setIcon(QMessageBox.Information)
            msgBox.setDefaultButton(QMessageBox.Retry)
            ret = msgBox.exec_()
            if ret == QMessageBox.Retry:
                QTimer.singleShot(0, self.session.open)
            elif ret == QMessageBox.Cancel:
                self.close()
        elif error == QNetworkSession.SessionAbortedError:
            msgBox = QMessageBox(self.parent())
            msgBox.setText('Out of range of network')
            msgBox.setInformativeText('Move back into range and press Retry, or press Cancel to quit the application')
            msgBox.setStandardButtons(QMessageBox.Retry | QMessageBox.Cancel)
            msgBox.setIcon(QMessageBox.Information)
            msgBox.setDefaultButton(QMessageBox.Retry)
            ret = msgBox.exec_()
            if ret == QMessageBox.Retry:
                QTimer.singleShot(0, self.session.open)
            elif ret == QMessageBox.Cancel:
                self.close()


    def setupUi(self):

        scene = QGraphicsScene(self)
        self.view = QGraphicsView(scene, self)
        self.view.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.view.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.view.setVisible(True)
        self.view.setInteractive(True)

        self.createPixmapIcon()

        self.mapWidget = MapWidget(self.mapManager)
        scene.addItem(self.mapWidget)
        self.mapWidget.setCenter(QGeoCoordinate(-8.1, -34.95))
        self.mapWidget.setZoomLevel(5)

        #...
        self.slider = QSlider(Qt.Vertical, self)
        self.slider.setTickInterval(1)
        self.slider.setTickPosition(QSlider.TicksBothSides)
        self.slider.setMaximum(self.mapManager.maximumZoomLevel())
        self.slider.setMinimum(self.mapManager.minimumZoomLevel())

        self.slider.valueChanged[int].connect(self.sliderValueChanged)
        self.mapWidget.zoomLevelChanged[float].connect(self.mapZoomLevelChanged)

        mapControlLayout = QVBoxLayout()

        self.mapWidget.mapTypeChanged.connect(self.mapTypeChanged)

        for mapType in self.mapWidget.supportedMapTypes():
            radio = QRadioButton(self)
            if mapType == QGraphicsGeoMap.StreetMap:
                radio.setText('Street')
            elif mapType == QGraphicsGeoMap.SatelliteMapDay:
                radio.setText('Sattelite')
            elif mapType == QGraphicsGeoMap.SatelliteMapNight:
                radio.setText('Sattelite - Night')
            elif mapType == QGraphicsGeoMap.TerrainMap:
                radio.setText('Terrain')

            if mapType == self.mapWidget.mapType():
                radio.setChecked(True)

            radio.toggled[bool].connect(self.mapTypeToggled)

            self.mapControlButtons.append(radio)
            self.mapControlTypes.append(mapType)
            mapControlLayout.addWidget(radio)

        self.latitudeEdit = QLineEdit()
        self.longitudeEdit = QLineEdit()

        formLayout = QFormLayout()
        formLayout.addRow('Latitude', self.latitudeEdit)
        formLayout.addRow('Longitude', self.longitudeEdit)

        self.captureCoordsButton = QToolButton()
        self.captureCoordsButton.setText('Capture coordinates')
        self.captureCoordsButton.setCheckable(True)

        self.captureCoordsButton.toggled[bool].connect(
                self.mapWidget.setMouseClickCoordQuery)
        self.mapWidget.coordQueryResult.connect(self.updateCoords)

        self.setCoordsButton = QPushButton()
        self.setCoordsButton.setText('Set coordinates')
        self.setCoordsButton.clicked.connect(self.setCoordsClicked)

        buttonLayout = QHBoxLayout()

        buttonLayout.addWidget(self.captureCoordsButton)
        buttonLayout.addWidget(self.setCoordsButton)

        coordControlLayout = QVBoxLayout()
        coordControlLayout.addLayout(formLayout)
        coordControlLayout.addLayout(buttonLayout)

        widget = QWidget(self)
        layout = QGridLayout()
        layout.setRowStretch(0, 1)
        layout.setRowStretch(1, 0)

        topLayout = QGridLayout()
        bottomLayout = QGridLayout()

        topLayout.setColumnStretch(0, 0)
        topLayout.setColumnStretch(1, 1)

        bottomLayout.setColumnStretch(0, 0)
        bottomLayout.setColumnStretch(1, 1)

        topLayout.addWidget(self.slider, 0, 0)
        topLayout.addWidget(self.view, 0, 1)

        bottomLayout.addLayout(mapControlLayout, 0, 0)
        bottomLayout.addLayout(coordControlLayout, 0, 1)

        layout.addLayout(topLayout, 0, 0)
        layout.addLayout(bottomLayout, 1, 0)

        self.layout = layout
        widget.setLayout(layout)
        self.setCentralWidget(widget)

        self.view.setContextMenuPolicy(Qt.CustomContextMenu)

        self.view.customContextMenuRequested.connect(self.customContextMenuRequest)

    def createPixmapIcon(self):
        self.markerIcon = QPixmap(MARKER_WIDTH, MARKER_HEIGHT)
        self.markerIcon.fill(Qt.transparent)

        painter = QPainter(self.markerIcon)

        p1 = QPoint(MARKER_WIDTH / 2, MARKER_HEIGHT - 1)
        p2 = QPoint(MARKER_WIDTH / 2, MARKER_HEIGHT - 1 - MARKER_PIN_LEN)
        pen = QPen(Qt.black)
        pen.setWidth(2)
        pen.setCosmetic(True)
        painter.setPen(pen)
        painter.drawLine(p1, p2)
        ellipse = QRect(0, 0, MARKER_WIDTH - 1, MARKER_HEIGHT - 1)
        pen.setWidth(1)
        painter.setPen(pen)
        color = QColor(Qt.green)
        color.setAlpha(127)
        brush = QBrush(color)
        painter.setBrush(brush)
        painter.drawEllipse(ellipse)

    def resizeEvent(self, event):
        self.view.setSceneRect(QRectF(QPointF(0.0, 0.0), self.view.size()))
        self.mapWidget.resize(self.view.size())

    def showEvent(self, event):
        self.view.setSceneRect(QRectF(QPointF(0.0, 0.0), self.view.size()))
        self.mapWidget.resize(self.view.size())

    def createMenus(self):
        self.popupMenu = QMenu(self)

        # Markers
        subMenuItem = QMenu(self.tr('Marker'), self)
        self.popupMenu.addMenu(subMenuItem)

        menuItem = QAction(self.tr('Set marker'), self)
        subMenuItem.addAction(menuItem)
        menuItem.triggered[bool].connect(self.drawPixmap)

        menuItem = QAction(self.tr('Remove marker'), self)
        subMenuItem.addAction(menuItem)
        menuItem.triggered[bool].connect(self.removePixmaps)

        menuItem = QAction(self.tr('Select objects'), self)
        subMenuItem.addAction(menuItem)
        menuItem.triggered[bool].connect(self.selectObjects)

        # Draw
        subMenuItem = QMenu(self.tr('Draw'), self)
        self.popupMenu.addMenu(subMenuItem)

        menuItem = QAction(self.tr('Rectangle'), self)
        subMenuItem.addAction(menuItem)
        menuItem.triggered[bool].connect(self.drawRect)

        menuItem = QAction(self.tr('Polyline'), self)
        subMenuItem.addAction(menuItem)
        menuItem.triggered[bool].connect(self.drawPolyline)

        menuItem = QAction(self.tr('Polygon'), self)
        subMenuItem.addAction(menuItem)
        menuItem.triggered[bool].connect(self.drawPolygon)

        menuItem = QAction(self.tr('Circle'), self)
        subMenuItem.addAction(menuItem)
        menuItem.triggered[bool].connect(self.drawCircle)

        menuItem = QAction(self.tr('Text'), self)
        subMenuItem.addAction(menuItem)
        menuItem.triggered[bool].connect(self.drawText)

        # Routing
        subMenuItem = QMenu(self.tr('Route'), self)
        self.popupMenu.addMenu(subMenuItem)

        menuItem = QAction(self.tr('Calculate route'), self)
        subMenuItem.addAction(menuItem)
        menuItem.triggered[bool].connect(self.calculateRoute)

    def selectObjects(self):
        for obj in self.mapWidget.mapObjects():
            obj.setSelected(False)

        if len(self.markerObjects) < 2:
            return

        bottomRight = self.markerObjects.pop()
        topLeft = self.markerObjects.pop()

        self.mapWidget.removeMapObject(topLeft)
        self.mapWidget.removeMapObject(bottomRight)

        selectedObjects = self.mapWidget.mapObjectsInScreenRect(
                    QRectF(self.mapWidget.coordinateToScreenPosition(topLeft.coordinate()),
                           self.mapWidget.coordinateToScreenPosition(bottomRight.coordinate()))
                )

        for obj in selectedObjects:
            obj.setSelected(True)

    def drawRect(self):
        if len(self.markerObjects) < 2:
            return

        p1, p2 = self.markerObjects[:2]

        pen = QPen(Qt.white)
        pen.setWidth(2)
        pen.setCosmetic(True)
        fill = QColor(Qt.black)
        fill.setAlpha(65)
        rectangle = QGeoMapRectangleObject(p1.coordinate(), p2.coordinate())
        rectangle.setPen(pen)
        rectangle.setBrush(QBrush(fill))
        self.mapWidget.addMapObject(rectangle)

    def drawPolyline(self):
        path = [mark.coordinate() for mark in self.markerObjects]

        pen = QPen(Qt.white)
        pen.setWidth(2)
        pen.setCosmetic(True)
        polyline = QGeoMapPolylineObject()
        polyline.setPen(pen)
        polyline.setPath(path)

        self.mapWidget.addMapObject(polyline)

    def drawPolygon(self):
        path = [mark.coordinate() for mark in self.markerObjects]

        pen = QPen(Qt.white)
        pen.setWidth(2)
        pen.setCosmetic(True)
        polygon = QGeoMapPolygonObject()
        polygon.setPen(pen)
        fill = QColor(Qt.black)
        fill.setAlpha(65)
        polygon.setBrush(QBrush(fill))
        polygon.setPath(path)

        self.mapWidget.addMapObject(polygon)

    def drawCircle(self):

        if not len(self.markerObjects):
            return

        p1 = self.markerObjects[0]
        center = p1.coordinate()

        radius = 3000 # Meters

        if len(self.markerObjects) >= 2:
            radius = center.distanceTo(self.markerObjects[1].coordinate())

        pen = QPen(Qt.white)
        pen.setWidth(2)
        pen.setCosmetic(True)
        circle = QGeoMapCircleObject(center, radius)
        circle.setPen(pen)
        fill = QColor(Qt.black)
        fill.setAlpha(65)
        circle.setBrush(QBrush(fill))

        self.mapWidget.addMapObject(circle)

    def drawText(self):

        if not len(self.markerObjects):
            return

        start = self.markerObjects[0].coordinate()

        text = QGeoMapTextObject(start, 'Text')

        fill = QColor(Qt.black)
        text.setBrush(fill)
        self.mapWidget.addMapObject(text)

    def calculateRoute(self):
        if len(self.markerObjects) < 2:
            return

        waypoints = [x.coordinate() for x in self.markerObjects[:2]]

        request = QGeoRouteRequest(waypoints)
        self.routeReply = self.routingManager.calculateRoute(request)
        self.routeReply.finished.connect(self.routeFinished)

    def routeFinished(self):

        if not self.routeReply.routes():
            return

        route = QGeoMapRouteObject(self.routeReply.routes()[0])
        routeColor = QColor(Qt.blue)
        routeColor.setAlpha(127)
        pen = QPen(routeColor)
        pen.setWidth(7)
        pen.setCosmetic(True)
        pen.setCapStyle(Qt.RoundCap)
        route.setPen(pen)
        self.mapWidget.addMapObject(route)

    def drawPixmap(self):
        marker = QGeoMapPixmapObject(self.mapWidget.screenPositionToCoordinate(self.lastClicked),
                                    QPoint(-(MARKER_WIDTH / 2), -MARKER_HEIGHT), self.markerIcon)
        self.mapWidget.addMapObject(marker)
        self.markerObjects.append(marker)

    def removePixmaps(self):
        for i in range(len(self.markerObjects)):
            marker = self.markerObjects.pop()

            self.mapWidget.removeMapObject(marker)
            marker.deleteLater()

    def customContextMenuRequest(self, point):
        self.lastClicked = point
        if self.focusWidget() == self.view:
            if not self.popupMenu:
                self.createMenus()

            self.popupMenu.popup(self.view.mapToGlobal(self.lastClicked))
コード例 #35
0
    def __init__(self, parent=None, filePath=''):
        """Default class constructor."""
        super(MDISubWindow_TextEdit, self).__init__(parent)

        print(filePath)
        self.filePath = filePath
        self.fileName = os.path.basename(os.path.abspath(filePath))
        self.fileExt = os.path.splitext(self.fileName)[1]

        if not filePath:
            self.setWindowTitle('Untitled[*]')
            parent.setWindowIcon(QIcon(gIconDir + os.sep + 'new.png'))
        else:
            f = open(filePath, 'r')
            txt = f.read()
            f.close()
            self.setText(txt)

            self.setWindowTitle('%s[*]' % self.fileName)

            # TODO: This is changing all the subwindows icons. We want individual icons based on filetype...?
            if self.fileExt in ('.py', '.pyw'):
                parent.setWindowIcon(QIcon(gIconDir + os.sep + 'pyscript.png'))
            else:
                parent.setWindowIcon(QIcon(gIconDir + os.sep + 'new.png'))

        monoFont = QFont('Courier New')
        monoFont.setFixedPitch(True)
        self.setFont(monoFont)
        self.setWordWrapMode(QTextOption.NoWrap)
        ## self.setTextBackgroundColor(QColor('#000000'))
        ## self.setTextColor(QColor('#FFFFFF'))
        self.setCursorWidth(2)
        self.CreateActions()

        self.zoomLevel = 0

        gMainWin.action_Edit_Cut.setEnabled(False)
        gMainWin.action_Edit_Copy.setEnabled(False)
        self.copyAvailable.connect(gMainWin.action_Edit_Cut.setEnabled)
        self.copyAvailable.connect(gMainWin.action_Edit_Copy.setEnabled)
        # Handle the Context Menu Entries Also.
        self.action_Edit_Undo.setEnabled(False)
        self.action_Edit_Redo.setEnabled(False)
        self.action_Edit_Cut.setEnabled(False)
        self.action_Edit_Copy.setEnabled(False)
        self.undoAvailable.connect(self.action_Edit_Undo.setEnabled)
        self.redoAvailable.connect(self.action_Edit_Redo.setEnabled)
        self.copyAvailable.connect(self.action_Edit_Cut.setEnabled)
        self.copyAvailable.connect(self.action_Edit_Copy.setEnabled)

        self.document().contentsChanged.connect(self.TheDocumentWasModified)

        # self.show()
        # self.showMaximized()
        # self.setFocusPolicy(Qt.WheelFocus)
        ##### self.setFocus() # This makes the MDIArea go into SubWindowView...?

        self.gCornerWidget = QToolButton(self)
        # self.gCornerWidgetToolTip = QToolTip()
        QToolTip.setFont(QFont('SansSerif', 10))
        br = QBrush(QPixmap(gImgDir + os.sep + 'texture-spirals.png'))
        pal = QPalette()
        # pal.setBrush(QPalette.Active, QPalette.Base, br)
        # pal.setColor(QPalette.Background, QColor('#FF8000'))
        pal.setColor(QPalette.ColorGroup.Inactive,
                     QPalette.ColorRole.ToolTipBase, QColor(EMBROIDERBLUE2))
        QToolTip.setPalette(QPalette(pal))
        self.action_Edit_SelectAll.setToolTip(
            'This is a <b>QWidget</b> widget')

        self.gCornerWidget.setDefaultAction(self.action_Edit_SelectAll)
        self.setCornerWidget(self.gCornerWidget)
        # We want to show the corner widget no matter what so...
        self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
コード例 #36
0
class MDISubWindow_TextEdit(QTextEdit):
    documentCount = 1

    def __init__(self, parent=None, filePath=''):
        """Default class constructor."""
        super(MDISubWindow_TextEdit, self).__init__(parent)

        print(filePath)
        self.filePath = filePath
        self.fileName = os.path.basename(os.path.abspath(filePath))
        self.fileExt = os.path.splitext(self.fileName)[1]

        if not filePath:
            self.setWindowTitle('Untitled[*]')
            parent.setWindowIcon(QIcon(gIconDir + os.sep + 'new.png'))
        else:
            f = open(filePath, 'r')
            txt = f.read()
            f.close()
            self.setText(txt)

            self.setWindowTitle('%s[*]' % self.fileName)

            # TODO: This is changing all the subwindows icons. We want individual icons based on filetype...?
            if self.fileExt in ('.py', '.pyw'):
                parent.setWindowIcon(QIcon(gIconDir + os.sep + 'pyscript.png'))
            else:
                parent.setWindowIcon(QIcon(gIconDir + os.sep + 'new.png'))

        monoFont = QFont('Courier New')
        monoFont.setFixedPitch(True)
        self.setFont(monoFont)
        self.setWordWrapMode(QTextOption.NoWrap)
        ## self.setTextBackgroundColor(QColor('#000000'))
        ## self.setTextColor(QColor('#FFFFFF'))
        self.setCursorWidth(2)
        self.CreateActions()

        self.zoomLevel = 0

        gMainWin.action_Edit_Cut.setEnabled(False)
        gMainWin.action_Edit_Copy.setEnabled(False)
        self.copyAvailable.connect(gMainWin.action_Edit_Cut.setEnabled)
        self.copyAvailable.connect(gMainWin.action_Edit_Copy.setEnabled)
        # Handle the Context Menu Entries Also.
        self.action_Edit_Undo.setEnabled(False)
        self.action_Edit_Redo.setEnabled(False)
        self.action_Edit_Cut.setEnabled(False)
        self.action_Edit_Copy.setEnabled(False)
        self.undoAvailable.connect(self.action_Edit_Undo.setEnabled)
        self.redoAvailable.connect(self.action_Edit_Redo.setEnabled)
        self.copyAvailable.connect(self.action_Edit_Cut.setEnabled)
        self.copyAvailable.connect(self.action_Edit_Copy.setEnabled)

        self.document().contentsChanged.connect(self.TheDocumentWasModified)

        # self.show()
        # self.showMaximized()
        # self.setFocusPolicy(Qt.WheelFocus)
        ##### self.setFocus() # This makes the MDIArea go into SubWindowView...?

        self.gCornerWidget = QToolButton(self)
        # self.gCornerWidgetToolTip = QToolTip()
        QToolTip.setFont(QFont('SansSerif', 10))
        br = QBrush(QPixmap(gImgDir + os.sep + 'texture-spirals.png'))
        pal = QPalette()
        # pal.setBrush(QPalette.Active, QPalette.Base, br)
        # pal.setColor(QPalette.Background, QColor('#FF8000'))
        pal.setColor(QPalette.ColorGroup.Inactive,
                     QPalette.ColorRole.ToolTipBase, QColor(EMBROIDERBLUE2))
        QToolTip.setPalette(QPalette(pal))
        self.action_Edit_SelectAll.setToolTip(
            'This is a <b>QWidget</b> widget')

        self.gCornerWidget.setDefaultAction(self.action_Edit_SelectAll)
        self.setCornerWidget(self.gCornerWidget)
        # We want to show the corner widget no matter what so...
        self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)

    def CreateActions(self):
        self.action_Edit_Undo = QAction(
            QIcon(gIconDir + os.sep + 'undo.png'),
            self.tr('&Undo'),
            self,
            shortcut=UndoShortcut,  # QKeySequence.Undo
            statusTip=self.tr('Reverses the most recent action.'),
            triggered=self.undo)

        self.action_Edit_Redo = QAction(
            QIcon(gIconDir + os.sep + 'redo.png'),
            self.tr('&Redo'),
            self,
            shortcut=RedoShortcut,  # QKeySequence.Redo
            statusTip=self.tr(
                'Reverses the effects of the previous undo action.'),
            triggered=self.redo)

        self.action_Edit_Cut = QAction(
            QIcon(gIconDir + os.sep + 'cut.png'),
            self.tr('Cu&t'),
            self,
            shortcut=CutShortcut,  # QKeySequence.Cut
            statusTip=self.tr(
                'Cut the current selection\'s contents to the clipboard.'),
            triggered=self.cut)

        self.action_Edit_Copy = QAction(
            QIcon(gIconDir + os.sep + 'copy.png'),
            self.tr('&Copy'),
            self,
            shortcut=CopyShortcut,  # QKeySequence.Copy
            statusTip=self.tr(
                'Copy the current selection\'s contents to the clipboard.'),
            triggered=self.copy)

        self.action_Edit_Paste = QAction(
            QIcon(gIconDir + os.sep + 'paste.png'),
            self.tr('&Paste'),
            self,
            shortcut=PasteShortcut,  # QKeySequence.Paste
            statusTip=self.tr(
                'Paste the clipboard\'s contents into the current selection.'),
            triggered=self.paste)

        self.action_Edit_Delete = QAction(
            QIcon(gIconDir + os.sep + 'delete.png'),
            self.tr('&Delete'),
            self,
            # shortcut=DeleteShortcut, # QKeySequence.Delete
            statusTip=self.tr('Delete selection.'),
            triggered=gMainWin.OnTODO)
        # triggered=self.delete)

        self.action_Edit_SelectAll = QAction(
            QIcon(gIconDir + os.sep + 'selectall.png'),
            self.tr('&Select All'),
            self,
            # shortcut=SelectAllShortcut, # QKeySequence.SelectAll
            statusTip=self.tr('Select all text in the document.'),
            # toolTip=QToolTip.text('Select All'),
            triggered=self.selectAll)

        self.action_Edit_ZoomIn = QAction(
            QIcon(gIconDir + os.sep + 'zoomin.png'),
            self.tr('Zoom &In'),
            self,
            shortcut=QKeySequence.ZoomIn,  # ZoomInShortcut,
            statusTip=self.tr('Zoom In'),
            triggered=self.DoZoomIn)

        self.action_Edit_ZoomOut = QAction(
            QIcon(gIconDir + os.sep + 'zoomout.png'),
            self.tr('Zoom &Out'),
            self,
            shortcut=QKeySequence(
                Qt.CTRL +
                Qt.Key_Plus),  #QKeySequence.ZoomOut, # ZoomOutShortcut,
            statusTip=self.tr('Zoom Out'),
            triggered=self.DoZoomOut)

        self.action_Edit_ZoomDefault = QAction(
            QIcon(gIconDir + os.sep + 'zoom.png'),
            self.tr('Zoom &Default'),
            self,
            shortcut=ZoomDefaultShortcut,
            statusTip=self.tr('Zoom Default'),
            triggered=self.DoZoomDefault)

    def TheDocumentWasModified(self):
        """"""
        self.setWindowModified(self.document().isModified())

    # def focusInEvent(self, event):
    # event.accept()
    # event.ignore()
    # print('focusInEvent - ')

    def AskToSaveBeforeClosing(self):
        """"""
        if self.document().isModified():
            ret = QMessageBox.warning(
                self, 'Warning', 'The document has been modified.'
                '\n'
                'Do you want to save your changes?',
                QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel)
            if ret == QMessageBox.Save:
                return self.OnSave()
            elif ret == QMessageBox.Cancel:
                if gMainWin.isEmbroidermodderMainWindowClosing:
                    gMainWin.isEmbroidermodderMainWindowClosing = False  # Cancel closing the app.
                return False
        return True

    def OnSave(self):
        """"""
        if self.filePath:
            return self.OnSaveFilePath(self.filePath)

        return self.OnSaveAs()

    def OnSaveAs(self):
        """"""
        filePath, filtr = QFileDialog.getSaveFileName(self,
                                                      self.tr('Save As...'),
                                                      os.getcwd(),
                                                      WILDCARD_ALL)
        if filePath:
            return self.OnSaveFilePath(filePath)

        return False

    def OnSaveFilePath(self, filePath):
        """"""
        file = QFile(filePath)
        if not file.open(QFile.WriteOnly | QFile.Text):
            QMessageBox.warning(
                self, self.tr('Warning'),
                self.tr('Cannot write file') + ' %s:\n%s.' %
                (filePath, file.errorString()))
            return False

        outf = QTextStream(file)
        QApplication.setOverrideCursor(Qt.WaitCursor)
        outf << self.toPlainText()
        QApplication.restoreOverrideCursor()

        self.DoSetCurrentFilePath(filePath)

        # Clear the Modified Flag.
        self.document().setModified(False)
        self.setWindowModified(False)
        self.setWindowTitle('%s[*]' % self.fileName)

        return True

    def OnPrint(self):
        """"""
        document = self.document()
        printer = QPrinter()

        dlg = QPrintDialog(printer, self)
        if dlg.exec_() != QDialog.Accepted:
            return

        document.print_(printer)

    def contextMenuEvent(self, event):
        """
        Handles the ``contextMenuEvent`` event for :class:`MDISubWindow_TextEdit`.

        :param `event`: a `QContextMenuEvent` event to be processed.
        """
        menu = QMenu(self)
        menu.addAction(self.action_Edit_Undo)
        menu.addAction(self.action_Edit_Redo)
        menu.addSeparator()
        menu.addAction(self.action_Edit_Cut)
        menu.addAction(self.action_Edit_Copy)
        menu.addAction(self.action_Edit_Paste)
        menu.addAction(self.action_Edit_Delete)
        menu.addSeparator()
        menu.addAction(self.action_Edit_SelectAll)
        menu.popup(self.mapToGlobal(event.pos()))
        # menu.exec_(self.mapToGlobal(event.pos()))
        event.accept()
        print("MDISubWindow_TextEdit contextMenuEvent")

    def DoZoomOut(self):
        """"""
        self.zoomOut()
        self.zoomLevel = self.zoomLevel - 1

    def DoZoomIn(self):
        """"""
        self.zoomIn()
        self.zoomLevel = self.zoomLevel + 1

    def GetZoomLevel(self):
        """"""
        return self.zoomLevel

    def DoZoomDefault(self):
        """"""
        if self.zoomLevel:  # not == 0
            if self.zoomLevel < 0:
                while self.GetZoomLevel():
                    self.DoZoomIn()
            else:
                while self.GetZoomLevel():
                    self.DoZoomOut()

    def OnDay(self):
        """"""
        self.setTextBackgroundColor(QColor('#FFFFFF'))
        self.setTextColor(QColor('#000000'))
        print('OnDay')

    def OnNight(self):
        """"""
        self.setTextBackgroundColor(QColor('#000000'))
        # self.setTextColor(QColor('#FFFFFF'))

        # sample_palette = QPalette()
        # sample_palette.setColor(QPalette.Window, Qt.white)
        # sample_palette.setColor(QPalette.WindowText, Qt.blue)

        # self.setAutoFillBackground(True)
        # self.setPalette(sample_palette)
        self.document().setDefaultStyleSheet(
            "QTextEdit {color: white; background-color: black}")
        # self.setStyleSheet("color: white; background-color: black")
        # self.setStyleSheet("color: white;"
        # "background-color: black;"
        # "selection-color: black;"
        # "selection-background-color: white;")
        # self.setExtraSelections([(0, 1)])

        # self.setAutoFillBackground(True)
        # self.setBackgroundRole(QPalette.Background)
        self.update()
        print('OnNight')

    def wheelEvent(self, event):
        """"""
        evtDelta = event.delta()
        evtModifiers = event.modifiers()
        evtAltDown = evtModifiers & Qt.AltModifier
        evtShiftDown = evtModifiers & Qt.ShiftModifier
        evtCtrlDown = evtModifiers & Qt.ControlModifier
        ## print('evtModifiers = %s' % evtModifiers)
        ## print('evtAltDown = %s' % evtAltDown)
        ## print('evtShiftDown = %s' % evtShiftDown)
        ## print('evtCtrlDown = %s' % evtCtrlDown)
        ## print('event.delta() = %s' % evtDelta)
        # Ctrl+MouseWheel Zooming.
        if (evtDelta <
                0) and evtCtrlDown and not evtShiftDown and not evtAltDown:
            if self.zoomLevel > -7:
                self.DoZoomOut()
                print('zoomLevel = %d' % self.zoomLevel)
        elif (evtDelta >
              0) and evtCtrlDown and not evtShiftDown and not evtAltDown:
            if self.zoomLevel < 20:
                self.DoZoomIn()
                print('zoomLevel = %d' % self.zoomLevel)
        # Shift+MouseWheel Horizontal Scrolling.
        elif (evtDelta <
              0) and not evtCtrlDown and evtShiftDown and not evtAltDown:
            self.horizontalScrollBar().triggerAction(
                QAbstractSlider.SliderSingleStepAdd)
            self.horizontalScrollBar().triggerAction(
                QAbstractSlider.SliderSingleStepAdd)
        elif (evtDelta >
              0) and not evtCtrlDown and evtShiftDown and not evtAltDown:
            self.horizontalScrollBar().triggerAction(
                QAbstractSlider.SliderSingleStepSub)
            self.horizontalScrollBar().triggerAction(
                QAbstractSlider.SliderSingleStepSub)
        # Reproduce Regular Scrolling.
        elif evtDelta < 0:
            self.verticalScrollBar().triggerAction(
                QAbstractSlider.SliderSingleStepAdd)
            self.verticalScrollBar().triggerAction(
                QAbstractSlider.SliderSingleStepAdd)
        elif evtDelta > 0:
            self.verticalScrollBar().triggerAction(
                QAbstractSlider.SliderSingleStepSub)
            self.verticalScrollBar().triggerAction(
                QAbstractSlider.SliderSingleStepSub)

        event.accept()
        # event.ignore()

        # numDegrees = event.delta() / 8
        # numSteps = numDegrees / 15
        # print('numDegrees = %s' % numDegrees)
        # print('numSteps = %s' % numSteps)

        #if event.orientation() == Qt.Horizontal:
        #    self.scroll(numSteps, 0)
        #    # self.scrollHorizontally(numSteps)
        #else:
        #    self.scroll(0, numSteps)
        #    # self.scrollVertically(numSteps)
        #event.accept()

    def DoSetCurrentFilePath(self, filePath):
        """"""
        self.filePath = str(filePath)
        self.fileName = os.path.basename(os.path.abspath(filePath))
        self.fileExt = os.path.splitext(self.fileName)[1]

    def closeEvent(self, event):
        """"""
        if self.AskToSaveBeforeClosing():
            # self.DoWriteSettings()
            event.accept()
        else:
            event.ignore()
コード例 #37
0
    def createToolsButtons(self):
        buttonsFrame = QFrame()
        buttonsLayout = QHBoxLayout(buttonsFrame)
        buttonsLayout.setSizeConstraint(QLayout.SetDefaultConstraint)

        iconPath = filePath('icons/')
        self.penButton = QToolButton(
            self,
            icon=QIcon(iconPath + 'pen_w.png'))
        self.penButton.setToolTip('freehand drawing')
        self.penButton.clicked.connect(lambda: self.PaintArea.setTool('pen'))
        buttonsLayout.addWidget(self.penButton)

        self.lineButton = QToolButton(
            self,
            icon=QIcon(iconPath + 'line_w.png'))
        self.lineButton.setToolTip('draw lines')
        self.lineButton.clicked.connect(lambda: self.PaintArea.setTool('line'))
        buttonsLayout.addWidget(self.lineButton)

        self.rect = QToolButton(
            self,
            icon=QIcon(iconPath + 'rect_w.png'))
        self.rect.setToolTip('create rectangle')
        self.rect.clicked.connect(lambda: self.PaintArea.setTool('rect'))
        buttonsLayout.addWidget(self.rect)

        self.roundRect = QToolButton(
            self,
            icon=QIcon(iconPath + 'roundrect_w.png'))
        self.roundRect.setToolTip('create a round-corner rectanlge')
        self.roundRect.clicked.connect(
            lambda: self.PaintArea.setTool('roundRect'))
        buttonsLayout.addWidget(self.roundRect)

        self.circle = QToolButton(
            self,
            icon=QIcon(iconPath + 'ellipse_w.png'))
        self.circle.setToolTip('create circle')
        self.circle.clicked.connect(lambda: self.PaintArea.setTool('circle'))
        buttonsLayout.addWidget(self.circle)

        self.eraser = QToolButton(
            self,
            icon=QIcon(iconPath + 'eraser_w.png'))
        self.eraser.setToolTip('erase parts of the drawing')
        self.eraser.clicked.connect(lambda: self.PaintArea.setTool('eraser'))
        buttonsLayout.addWidget(self.eraser)

        self.mirror_w = QToolButton(
            self,
            icon=QIcon(iconPath + 'mirror-w_w.png'))
        self.mirror_w.setToolTip('vertical symmetric inversion')
        self.mirror_w.clicked.connect(self.PaintArea.mirror_w)
        buttonsLayout.addWidget(self.mirror_w)

        self.mirror_h = QToolButton(
            self,
            icon=QIcon(iconPath + 'mirror-h_w.png'))
        self.mirror_h.setToolTip('horizontal symmetric inversion')
        self.mirror_h.clicked.connect(self.PaintArea.mirror_h)
        buttonsLayout.addWidget(self.mirror_h)

        self.rotate = QToolButton(
            self,
            icon=QIcon(iconPath + 'rotate_w.png'))
        self.rotate.setToolTip('rotate')
        self.rotate.clicked.connect(self.PaintArea.rotate)
        buttonsLayout.addWidget(self.rotate)

        self.grid.addWidget(buttonsFrame, 0, 0, QtCore.Qt.AlignLeft)
コード例 #38
0
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):

        lbMinWidth = 65
        # leMinWidth = 200

        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(400, 310)

        # self.centralwidget = QWidget(MainWindow)
        self.mainSplitter = QSplitter(Qt.Horizontal, MainWindow)
        self.mainSplitter.setObjectName("centralwidget")
        self.mainSplitter.setProperty("childrenCollapsible", False)
        MainWindow.setCentralWidget(self.mainSplitter)

        self.leftSplitter = QSplitter(Qt.Vertical, self.mainSplitter)
        self.leftSplitter.setProperty("childrenCollapsible", False)
        ##### login_gbox
        self.login_gbox = QGroupBox(self.leftSplitter)
        self.login_gbox.setFlat(True)
        self.login_gbox.setObjectName("login_gbox")

        login_gbox_layout = QVBoxLayout(self.login_gbox)
        login_gbox_csf_layout = QHBoxLayout()
        login_gbox_account_layout = QHBoxLayout()
        login_gbox_connect_layout = QHBoxLayout()
        login_gbox_layout.addLayout(login_gbox_csf_layout)
        login_gbox_layout.addLayout(login_gbox_account_layout)
        login_gbox_layout.addLayout(login_gbox_connect_layout)

        self.lb_client_secrets_file_path = QLabel(self.login_gbox)
        self.lb_client_secrets_file_path.setObjectName("lb_client_secrets_file_path")
        self.lb_client_secrets_file_path.setMinimumWidth(lbMinWidth)

        self.client_secrets_file_path_le = QLineEdit(self.login_gbox)
        self.client_secrets_file_path_le.setObjectName("client_secrets_file_path_le")

        self.client_secret_file_path_tBtn = QToolButton(self.login_gbox)
        self.client_secret_file_path_tBtn.setObjectName("client_secret_file_path_tBtn")

        login_gbox_csf_layout.addWidget(self.lb_client_secrets_file_path)
        login_gbox_csf_layout.addWidget(self.client_secrets_file_path_le)
        login_gbox_csf_layout.addWidget(self.client_secret_file_path_tBtn)

        self.lb_account = QLabel(self.login_gbox)
        self.lb_account.setMaximumWidth(lbMinWidth)
        self.lb_account.setObjectName("lb_account")

        self.remove_account_btn = QToolButton(self.login_gbox)
        self.remove_account_btn.setObjectName("remove_account_btn")
        self.remove_account_btn.setMinimumWidth(20)
        self.remove_account_btn.setEnabled(False)

        self.add_account_btn = QToolButton(self.login_gbox)
        self.add_account_btn.setObjectName("add_account_btn")
        self.add_account_btn.setMinimumWidth(20)

        self.accounts_cb = QComboBox(self.login_gbox)
        self.accounts_cb.setObjectName("accounts_cb")

        login_gbox_account_layout.addWidget(self.lb_account)
        login_gbox_account_layout.addWidget(self.remove_account_btn)
        login_gbox_account_layout.addWidget(self.add_account_btn)
        login_gbox_account_layout.addWidget(self.accounts_cb)

        self.lb_decryption_key = QLabel(self.login_gbox)
        self.lb_decryption_key.setObjectName("lb_decryption_key")
        self.lb_decryption_key.setMinimumWidth(lbMinWidth)
        self.lb_decryption_key.hide()

        self.decryption_key_le = QLineEdit(self.login_gbox)
        self.decryption_key_le.setEchoMode(QLineEdit.Password)
        self.decryption_key_le.setObjectName("decryption_key_le")
        self.decryption_key_le.hide()

        self.connect_btn = QPushButton(self.login_gbox)
        self.connect_btn.setEnabled(False)
        self.connect_btn.setObjectName("connect_btn")

        login_gbox_connect_layout.addWidget(self.lb_decryption_key)
        login_gbox_connect_layout.addWidget(self.decryption_key_le)
        login_gbox_connect_layout.addWidget(self.connect_btn)

        #### search_gbox
        self.search_gbox = QGroupBox(self.leftSplitter)
        self.search_gbox.setFlat(True)
        self.search_gbox.setObjectName("search_gbox")
        self.search_gbox.hide()

        search_gbox_layout = QVBoxLayout(self.search_gbox)
        search_gbox_mailbox_layout = QVBoxLayout()
        search_gbox_date_layout = QHBoxLayout()
        search_gbox_from_layout = QHBoxLayout()
        search_gbox_to_layout = QHBoxLayout()
        search_gbox_subject_layout = QHBoxLayout()
        search_gbox_threads_layout = QHBoxLayout()
        search_gbox_paramaters_layout = QHBoxLayout()

        search_gbox_layout.addLayout(search_gbox_mailbox_layout)
        search_gbox_layout.addLayout(search_gbox_date_layout)
        search_gbox_layout.addLayout(search_gbox_from_layout)
        search_gbox_layout.addLayout(search_gbox_to_layout)
        search_gbox_layout.addLayout(search_gbox_subject_layout)
        search_gbox_layout.addLayout(search_gbox_threads_layout)
        search_gbox_layout.addLayout(search_gbox_paramaters_layout)

        self.lb_select_mailbox = QLabel(self.search_gbox)
        self.lb_select_mailbox.setObjectName("lb_select_mailbox")
        self.mailboxes_lw = QListWidget(self.search_gbox)
        self.mailboxes_lw.setEditTriggers(QAbstractItemView.NoEditTriggers)
        self.mailboxes_lw.setSelectionMode(QAbstractItemView.ExtendedSelection)
        self.mailboxes_lw.setObjectName("mailboxes_lw")
        search_gbox_mailbox_layout.addWidget(self.lb_select_mailbox)
        search_gbox_mailbox_layout.addWidget(self.mailboxes_lw)

        self.after_date_cb = QCheckBox(self.search_gbox)
        self.after_date_cb.setObjectName("after_date_cb")
        self.after_date_cb.setMinimumWidth(lbMinWidth)
        self.after_date_cb.setMaximumWidth(lbMinWidth)
        self.after_date_edit = QDateEdit(self.search_gbox)
        self.after_date_edit.setCalendarPopup(True)
        self.after_date_edit.setObjectName("after_date_edit")
        self.after_date_edit.setDate(QDate.currentDate().addDays(-365))
        self.after_date_edit.setMaximumDate(QDate.currentDate())
        self.after_date_edit.setEnabled(False)
        self.before_date_cb = QCheckBox(self.search_gbox)
        self.before_date_cb.setObjectName("before_date_cb")
        self.before_date_cb.setMinimumWidth(70)
        self.before_date_cb.setMaximumWidth(70)
        self.before_date_edit = QDateEdit(self.search_gbox)
        self.before_date_edit.setCalendarPopup(True)
        self.before_date_edit.setObjectName("before_date_edit")
        self.before_date_edit.setDate(QDate.currentDate())
        self.before_date_edit.setMaximumDate(QDate.currentDate())
        self.before_date_edit.setEnabled(False)
        search_gbox_date_layout.addWidget(self.after_date_cb)
        search_gbox_date_layout.addWidget(self.after_date_edit)
        search_gbox_date_layout.addWidget(self.before_date_cb)
        search_gbox_date_layout.addWidget(self.before_date_edit)

        self.lb_from = QLabel(self.search_gbox)
        self.lb_from.setObjectName("lb_from")
        self.lb_from.setMinimumWidth(lbMinWidth)
        self.from_le = QLineEdit(self.search_gbox)
        self.from_le.setObjectName("from_le")
        search_gbox_from_layout.addWidget(self.lb_from)
        search_gbox_from_layout.addWidget(self.from_le)

        self.lb_to = QLabel(self.search_gbox)
        self.lb_to.setObjectName("lb_to")
        self.lb_to.setMinimumWidth(lbMinWidth)
        self.to_le = QLineEdit(self.search_gbox)
        self.to_le.setObjectName("to_le")
        search_gbox_to_layout.addWidget(self.lb_to)
        search_gbox_to_layout.addWidget(self.to_le)

        self.lb_subject = QLabel(self.search_gbox)
        self.lb_subject.setObjectName("lb_subject")
        self.lb_subject.setMinimumWidth(lbMinWidth)
        self.subject_le = QLineEdit(self.search_gbox)
        self.subject_le.setObjectName("subject_le")
        search_gbox_subject_layout.addWidget(self.lb_subject)
        search_gbox_subject_layout.addWidget(self.subject_le)

        self.lb_threads = QLabel(self.search_gbox)
        self.lb_threads.setObjectName("lb_threads")
        self.lb_threads.setMaximumWidth(lbMinWidth)
        self.thread_count_sb = QSpinBox(self.search_gbox)
        self.thread_count_sb.setMinimum(1)
        self.thread_count_sb.setMaximum(10)
        self.thread_count_sb.setObjectName("thread_count_sb")
        self.html_radio = QRadioButton(self.search_gbox)
        self.html_radio.setObjectName("html_radio")
        self.text_radio = QRadioButton(self.search_gbox)
        self.text_radio.setObjectName("text_radio")
        self.extactTypeButtonGroup = QButtonGroup(self)
        self.extactTypeButtonGroup.addButton(self.html_radio)
        self.extactTypeButtonGroup.addButton(self.text_radio)
        self.html_radio.setChecked(True)
        self.search_btn = QPushButton(self.search_gbox)
        self.search_btn.setObjectName("search_btn")
        search_gbox_threads_layout.addWidget(self.lb_threads)
        search_gbox_threads_layout.addWidget(self.thread_count_sb)
        search_gbox_threads_layout.addWidget(self.html_radio)
        search_gbox_threads_layout.addWidget(self.text_radio)
        search_gbox_threads_layout.addWidget(self.search_btn)

        self.parameters_cb = QCheckBox(self.search_gbox)
        self.parameters_cb.setText("")
        self.parameters_cb.setObjectName("parameters_cb")
        self.parameters_le = QLineEdit(self.search_gbox)
        self.parameters_le.setEnabled(False)
        self.parameters_le.setObjectName("parameters_le")
        search_gbox_paramaters_layout.addWidget(self.parameters_cb)
        search_gbox_paramaters_layout.addWidget(self.parameters_le)

        #### log_gbox
        self.log_gbox = QGroupBox(self.leftSplitter)
        self.log_gbox.setFlat(True)
        self.log_gbox.setObjectName("log_gbox")
        log_layout = QVBoxLayout(self.log_gbox)
        self.log_te = QTextEdit(self.log_gbox)
        self.log_te.setLineWrapMode(QTextEdit.NoWrap)
        self.log_te.setReadOnly(True)
        self.log_te.setTextInteractionFlags(Qt.TextSelectableByKeyboard | Qt.TextSelectableByMouse)
        self.log_te.setObjectName("log_te")

        self.disconnect_btn = QPushButton(self.log_gbox)
        self.disconnect_btn.setObjectName("disconnect_btn")
        self.disconnect_btn.hide()
        log_layout.addWidget(self.log_te)
        log_layout_btn = QHBoxLayout()
        log_layout.addLayout(log_layout_btn)
        log_layout_btn.addWidget(self.disconnect_btn)
        log_layout_btn.addStretch()

        #### links_gbox
        self.links_gbox = QGroupBox(self.mainSplitter)
        self.links_gbox.setFlat(True)
        self.links_gbox.setObjectName("links_gbox")
        self.links_gbox.hide()
        links_gbox_layout = QVBoxLayout(self.links_gbox)
        links_gbox_links_layout = QVBoxLayout()
        links_gbox_buttons_layout = QHBoxLayout()
        links_gbox_layout.addLayout(links_gbox_links_layout)
        links_gbox_layout.addLayout(links_gbox_buttons_layout)

        self.links_text_edit = QTextEdit(self.links_gbox)
        self.links_text_edit.setObjectName("links_text_edit")
        links_gbox_links_layout.addWidget(self.links_text_edit)

        self.export_txt_btn = QPushButton(self.links_gbox)
        self.export_txt_btn.setObjectName("export_txt_btn")
        self.export_txt_btn.setEnabled(False)
        self.export_html_btn = QPushButton(self.links_gbox)
        self.export_html_btn.setObjectName("export_html_btn")
        self.export_html_btn.setEnabled(False)

        links_gbox_buttons_layout.addWidget(self.export_txt_btn)
        links_gbox_buttons_layout.addWidget(self.export_html_btn)
        
        ### menubar
        self.menubar = QMenuBar(MainWindow)
        # self.menubar.setGeometry(QRect(0, 0, 860, 21))
        self.menubar.setObjectName("menubar")
        self.menu_file = QMenu(self.menubar)
        self.menu_file.setObjectName("menu_file")
        self.menu_help = QMenu(self.menubar)
        self.menu_help.setObjectName("menu_help")
        MainWindow.setMenuBar(self.menubar)
        self.action_about = QAction(MainWindow)
        self.action_about.setObjectName("action_about")
        self.action_About_Qt = QAction(MainWindow)
        self.action_About_Qt.setObjectName("action_About_Qt")
        self.action_exit = QAction(MainWindow)
        self.action_exit.setObjectName("action_exit")
        self.actionSave = QAction(MainWindow)
        self.actionSave.setObjectName("actionSave")
        self.action_Gmail_Advanced_Search_Syntax = QAction(MainWindow)
        self.action_Gmail_Advanced_Search_Syntax.setObjectName("action_Gmail_Advanced_Search_Syntax")
        self.menu_file.addAction(self.action_exit)
        self.menu_help.addAction(self.action_Gmail_Advanced_Search_Syntax)
        self.menu_help.addSeparator()
        self.menu_help.addAction(self.action_about)
        self.menu_help.addAction(self.action_About_Qt)
        self.menubar.addAction(self.menu_file.menuAction())
        self.menubar.addAction(self.menu_help.menuAction())
        
        self.retranslateUi(MainWindow)
        QMetaObject.connectSlotsByName(MainWindow)
        MainWindow.setTabOrder(self.client_secrets_file_path_le, self.client_secret_file_path_tBtn)
        MainWindow.setTabOrder(self.client_secret_file_path_tBtn, self.remove_account_btn)
        MainWindow.setTabOrder(self.remove_account_btn, self.add_account_btn)
        MainWindow.setTabOrder(self.add_account_btn, self.accounts_cb)
        MainWindow.setTabOrder(self.decryption_key_le, self.connect_btn)
        MainWindow.setTabOrder(self.connect_btn, self.log_te)
        MainWindow.setTabOrder(self.log_te, self.mailboxes_lw)
        MainWindow.setTabOrder(self.mailboxes_lw, self.after_date_cb)
        MainWindow.setTabOrder(self.after_date_cb, self.after_date_edit)
        MainWindow.setTabOrder(self.after_date_edit, self.before_date_cb)
        MainWindow.setTabOrder(self.before_date_cb, self.before_date_edit)
        MainWindow.setTabOrder(self.before_date_edit, self.from_le)
        MainWindow.setTabOrder(self.from_le, self.to_le)
        MainWindow.setTabOrder(self.to_le, self.subject_le)
        MainWindow.setTabOrder(self.subject_le, self.thread_count_sb)
        MainWindow.setTabOrder(self.thread_count_sb, self.html_radio)
        MainWindow.setTabOrder(self.html_radio, self.text_radio)
        MainWindow.setTabOrder(self.text_radio, self.search_btn)
        MainWindow.setTabOrder(self.search_btn, self.parameters_cb)
        MainWindow.setTabOrder(self.parameters_cb, self.parameters_le)
        MainWindow.setTabOrder(self.parameters_le, self.disconnect_btn)
        MainWindow.setTabOrder(self.disconnect_btn, self.links_text_edit)
        MainWindow.setTabOrder(self.links_text_edit, self.export_txt_btn)
        MainWindow.setTabOrder(self.export_txt_btn, self.export_html_btn)
        MainWindow.setTabOrder(self.export_html_btn, self.mailboxes_lw)

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QApplication.translate("MainWindow", "Gmail URL Parser", None, QApplication.UnicodeUTF8))
        self.login_gbox.setTitle(QApplication.translate("MainWindow", "  Client secrets file path  ", None, QApplication.UnicodeUTF8))
        self.client_secrets_file_path_le.setPlaceholderText(QApplication.translate("MainWindow", "Please select your client secrets file", None, QApplication.UnicodeUTF8))
        self.lb_client_secrets_file_path.setText(QApplication.translate("MainWindow", "Path", None, QApplication.UnicodeUTF8))
        self.connect_btn.setText(QApplication.translate("MainWindow", "Connect", None, QApplication.UnicodeUTF8))
        self.client_secret_file_path_tBtn.setText(QApplication.translate("MainWindow", "...", None, QApplication.UnicodeUTF8))
        self.lb_account.setText(QApplication.translate("MainWindow", "Account", None, QApplication.UnicodeUTF8))
        self.add_account_btn.setText(QApplication.translate("MainWindow", "+", None, QApplication.UnicodeUTF8))
        self.remove_account_btn.setText(QApplication.translate("MainWindow", "-", None, QApplication.UnicodeUTF8))
        self.decryption_key_le.setPlaceholderText(QApplication.translate("MainWindow", "Decryption key", None, QApplication.UnicodeUTF8))
        self.lb_decryption_key.setText(QApplication.translate("MainWindow", "Key", None, QApplication.UnicodeUTF8))
        self.log_gbox.setTitle(QApplication.translate("MainWindow", "  Log  ", None, QApplication.UnicodeUTF8))
        self.search_gbox.setTitle(QApplication.translate("MainWindow", "  Search Parameters  ", None, QApplication.UnicodeUTF8))
        self.lb_to.setText(QApplication.translate("MainWindow", "To", None, QApplication.UnicodeUTF8))
        self.lb_from.setText(QApplication.translate("MainWindow", "From", None, QApplication.UnicodeUTF8))
        self.lb_subject.setText(QApplication.translate("MainWindow", "Subject", None, QApplication.UnicodeUTF8))
        self.search_btn.setText(QApplication.translate("MainWindow", "Search", None, QApplication.UnicodeUTF8))
        self.after_date_edit.setDisplayFormat(QApplication.translate("MainWindow", "yyyy-MM-dd", None, QApplication.UnicodeUTF8))
        self.before_date_edit.setDisplayFormat(QApplication.translate("MainWindow", "yyyy-MM-dd", None, QApplication.UnicodeUTF8))
        self.lb_select_mailbox.setToolTip(QApplication.translate("MainWindow", "<html><head/><body><p>Select multiple items to select labels</p></body></html>", None, QApplication.UnicodeUTF8))
        self.lb_select_mailbox.setText(QApplication.translate("MainWindow", "Select Mailbox or Labels", None, QApplication.UnicodeUTF8))
        self.after_date_cb.setText(QApplication.translate("MainWindow", "After", None, QApplication.UnicodeUTF8))
        self.before_date_cb.setText(QApplication.translate("MainWindow", "Before", None, QApplication.UnicodeUTF8))
        self.html_radio.setText(QApplication.translate("MainWindow", "html", None, QApplication.UnicodeUTF8))
        self.text_radio.setText(QApplication.translate("MainWindow", "text", None, QApplication.UnicodeUTF8))
        self.lb_threads.setText(QApplication.translate("MainWindow", "Threads", None, QApplication.UnicodeUTF8))
        self.links_gbox.setTitle(QApplication.translate("MainWindow", "  Links  ", None, QApplication.UnicodeUTF8))
        self.disconnect_btn.setText(QApplication.translate("MainWindow", "Disconnect", None, QApplication.UnicodeUTF8))
        self.export_txt_btn.setText(QApplication.translate("MainWindow", "Export as txt", None, QApplication.UnicodeUTF8))
        self.export_html_btn.setText(QApplication.translate("MainWindow", "Export as HTML", None, QApplication.UnicodeUTF8))
        self.menu_file.setTitle(QApplication.translate("MainWindow", "File", None, QApplication.UnicodeUTF8))
        self.menu_help.setTitle(QApplication.translate("MainWindow", "Help", None, QApplication.UnicodeUTF8))
        self.action_about.setText(QApplication.translate("MainWindow", "About", None, QApplication.UnicodeUTF8))
        self.action_About_Qt.setText(QApplication.translate("MainWindow", "About Qt", None, QApplication.UnicodeUTF8))
        self.action_exit.setText(QApplication.translate("MainWindow", "Exit", None, QApplication.UnicodeUTF8))
        self.action_exit.setShortcut(QApplication.translate("MainWindow", "Ctrl+Q", None, QApplication.UnicodeUTF8))
        self.actionSave.setText(QApplication.translate("MainWindow", "Save", None, QApplication.UnicodeUTF8))
        self.action_Gmail_Advanced_Search_Syntax.setText(QApplication.translate("MainWindow", "Gmail Advanced Search Syntax", None, QApplication.UnicodeUTF8))
コード例 #39
0
    def createWidgets(self):
        self.helpButton = QToolButton()
        self.helpButton.setIcon(QIcon(":/help.svg"))
        self.helpButton.setFocusPolicy(Qt.NoFocus)
        self.tooltips.append((self.helpButton, "Help on the Entry panel."))
        self.addingLabel = Widgets.Label.HtmlLabel(CANCEL_ADD)
        self.addingLabel.hide()
        self.termLabel = QLabel("&Term")
        self.termEdit = Widgets.LineEdit.HtmlLineEdit(self.state)
        self.tooltips.append((self.termEdit, """\
<p><b>Term editor</b> (Alt+T)</p>
<p>The entry's term text styled (e.g., <b>bold</b>, <i>italic</i>), as
it should appear in the final index.</p>"""))
        self.spellHighlighter = Widgets.SpellHighlighter.Highlighter(
            self.state, self.termEdit.document())
        self.termLabel.setBuddy(self.termEdit)
        self.pagesLabel = QLabel("&Pages")
        self.pagesEdit = Widgets.LineEdit.HtmlPagesLineEdit(self.state,
                                                            maxLines=3)
        self.tooltips.append((self.pagesEdit, """\
<p><b>Pages editor</b> (Alt+P)</p>
<p>The entry's pages styled (e.g., <b>bold</b>, <i>italic</i>), as they
should appear in the final index.</p> <p>The pages are automatically
sorted, and exact duplicates are automatically removed.</p> <p>See also
<b>Index→Combine Overlapping Pages</b> and <b>Index→Renumber
Pages</b>.</p>"""))
        self.pagesLabel.setBuddy(self.pagesEdit)
        self.calcSortAsCheckBox = QCheckBox("&Automatically Calculate Sort As")
        self.tooltips.append((self.calcSortAsCheckBox, """\
<p><b>Automatically Calculate Sort As</b> (Alt+A)</p>
<p>This checkbox controls how the Sort As text is created.</p>
<p>If checked, {} will either automatically create the sort as
text, or will present some choices from which to choose the sort as
text, depending on the term text.</p>
<p>If unchecked, the sort as text should be entered
manually.</p>""".format(QApplication.applicationName())))
        self.calcSortAsCheckBox.setChecked(True)
        self.sortAsHelpButton = QToolButton()
        self.sortAsHelpButton.setIcon(QIcon(":/help.svg"))
        self.sortAsHelpButton.setFocusPolicy(Qt.NoFocus)
        self.tooltips.append(
            (self.sortAsHelpButton, "Help on the Sort As text."))
        self.sortAsEdit = Widgets.LineEdit.LineEdit(self.state)
        self.tooltips.append((self.sortAsEdit, """\
<p><b>Sort As editor</b> (Alt+S)</p>
<p>The entry's sort as text.</p>
<p>If the <b>Automatically Calculate Sort As</b> checkbox is unchecked,
manually enter the sort as text to use for sorting the entry.</p>
<p>Main entry's are sorted using the sort as text, so it is easy to
force a non-standard ordering by entering a custom sort as text.</p>
<p>Subentries are also sorted using the sort as text, but the first word
of a subentry will be ignored for sorting purposes if it is in the
Ignore Subentry Function words list (see <b>Index→Ignore Subentry
Function words</b>) <i>and</i> the <b>Index→Options, Rules,
Ignore Subenty Function Words</b> checkbox is checked for this
index.</p>"""))
        self.sortAsEdit.setEnabled(False)
        self.sortAsLabel = QLabel("&Sort As")
        self.sortAsLabel.setBuddy(self.sortAsEdit)
        self.sortAsLabel.setEnabled(False)
        self.xrefLabel = QLabel("&Cross-references")
        self.xrefList = Widgets.List.HtmlListWidget(self.state, minLines=4)
        self.tooltips.append((self.xrefList, """\
<p><b>Cross-references list</b> (Alt+C)</p>
<p>The list of the entry's see and see also cross-references, both
generic and to other entries.</p>
<p>To add a cross-reference to an entry, circle the <i>to</i> entry
(<b>Entry→Circle</b>), then go to the <i>from</i> entry and click
<img src=":/xref-add.svg" width={0} height={0}> or press
<b>Entry→Add Cross-reference</b> (See also the <b>Entry</b>
menu.)</p>""".format(TOOLTIP_IMAGE_SIZE)))
        self.xrefLabel.setBuddy(self.xrefList)
        self.notesLabel = QLabel("&Notes")
        self.notesEdit = Widgets.LineEdit.MultilineHtmlEdit(self.state)
        self.tooltips.append((self.notesEdit, """\
<p><b>Notes editor</b> (Alt+N)</p>
<p>The entry's notes.</p>
<p>The notes shown here are never output as part of
the index so may be freely used for any purpose.</p>
<p>If the notes facility isn't wanted, the notes can be hidden by
unchecking the <b>Index→Options, General, Show Notes</b>
checkbox.</p>"""))
        self.notesLabel.setBuddy(self.notesEdit)
コード例 #40
0
ファイル: _Window.py プロジェクト: ra2003/xindex
class Mixin:
    def createWidgets(self):
        rules = SortAs.RulesForName[Gopt.Default.SortAsRules]
        self.sortAsRuleLabel = QLabel(LABEL_TEMPLATE.format(rules.abbrev))
        self.tooltips.append((self.sortAsRuleLabel, Lib.rulesTip(rules.tip)))
        self.modeLabel = QLabel()
        self.statusbar.addPermanentWidget(self.modeLabel)
        self.tooltips.append((self.modeLabel, """<p><b>Mode</b></p>
<p>{}'s current mode.</p>""".format(QApplication.applicationName())))
        self.statusbar.addPermanentWidget(self.sortAsRuleLabel)
        rules = Pages.RulesForName[Gopt.Default.PageRangeRules]
        self.pageRangeRulesLabel = QLabel(LABEL_TEMPLATE.format(rules.abbrev))
        self.tooltips.append(
            (self.pageRangeRulesLabel, Lib.rulesTip(rules.tip, False)))
        self.statusbar.addPermanentWidget(self.pageRangeRulesLabel)
        self.countLabel = QLabel(COUNT_LABEL_TEMPLATE.format(0, 0, 0, 0))
        self.tooltips.append((self.countLabel, """<p><b>Counts</b></p>
<p>Counts of entries in the current index.</p>"""))
        self.statusbar.addPermanentWidget(self.countLabel)
        self.worktimeLabel = QLabel()
        self.tooltips.append((self.worktimeLabel, """<p><b>Work Time</b></p>
<p>How many hours and minutes have been spent on this index.</p>"""))
        self.statusbar.addPermanentWidget(self.worktimeLabel)
        self.languageLabel = QLabel()
        self.tooltips.append((self.languageLabel, """<p><b>Language</b></p>
<p>The language used for spelling and suggestions for this index.</p>"""))
        self.statusbar.addPermanentWidget(self.languageLabel)
        self.state.viewAllPanel = ViewAllPanel.Panel(self.state)
        self.state.replacePanel = ReplacePanel.Panel(self.state)
        self.state.replacePanel.closeButton.clicked.connect(self.closeReplace)
        self.state.viewFilteredPanel = ViewFilteredPanel.Panel(self.state)
        # Above must precede EntryPanel
        self.state.entryPanel = EntryPanel.Panel(self.state, self)
        # SpellPanel depends on EntryPanel and entryActions
        self.entryActions = Actions.Entry.Actions(self)
        self.state.spellPanel = SpellPanel.Panel(self.state, self)
        self.state.groupsPanel = GroupsPanel.Panel(self.state, self)
        self.state.entryPanel.populateEditors(self.state.editors)

    def widgets(self):
        return (self.state.viewAllPanel, self.state.replacePanel,
                self.state.viewFilteredPanel, self.state.entryPanel,
                self.state.spellPanel, self.state.groupsPanel, self.menuBar(),
                self.fileToolBar, self.editToolBar, self.spellingToolBar,
                self.formatToolBar, self.indexToolBar, self.entryToolBar1,
                self.entryToolBar2, self.modifyToolBar, self.gotoToolBar1,
                self.gotoToolBar2, self.gotoToolBar4, self.gotoToolBar3)

    def closeReplace(self):
        self.state.replacePanel.stop()
        sizes = self.viewSplitter.sizes()
        self.viewSplitter.setSizes([sum(sizes), 0])

    def closeSuggestions(self):
        sizes = self.spellAndGroupsSplitter.sizes()
        if 0 in sizes:
            sizes = self.entrySuggestionSplitter.sizes()
            self.entrySuggestionSplitter.setSizes([sum(sizes), 0])
        else:
            self.spellAndGroupsSplitter.setSizes([0, sum(sizes)])

    def closeGroups(self):
        sizes = self.spellAndGroupsSplitter.sizes()
        if 0 in sizes:
            sizes = self.entrySuggestionSplitter.sizes()
            self.entrySuggestionSplitter.setSizes([sum(sizes), 0])
        else:
            self.spellAndGroupsSplitter.setSizes([sum(sizes), 0])

    def showSuggestions(self):
        sizes = self.entrySuggestionSplitter.sizes()
        quarter = sum(sizes) // 4
        self.entrySuggestionSplitter.setSizes([quarter * 3, quarter])
        half = sum(self.spellAndGroupsSplitter.sizes()) // 2
        self.spellAndGroupsSplitter.setSizes([half, half])

    def layoutWidgets(self):
        self.panelSplitter = Widgets.Splitter.Splitter(Qt.Vertical)
        self.entrySuggestionSplitter = Widgets.Splitter.Splitter(Qt.Horizontal)
        self.entrySuggestionSplitter.addWidget(self.state.entryPanel)
        self.spellAndGroupsSplitter = Widgets.Splitter.Splitter(Qt.Vertical)
        self.spellAndGroupsSplitter.addWidget(self.state.spellPanel)
        self.spellAndGroupsSplitter.addWidget(self.state.groupsPanel)
        self.entrySuggestionSplitter.addWidget(self.spellAndGroupsSplitter)
        self.entrySuggestionSplitter.setCollapsible(0, False)
        self.entrySuggestionSplitter.setCollapsible(1, True)
        self.entrySuggestionSplitter.setStretchFactor(0, 3)
        self.entrySuggestionSplitter.setStretchFactor(1, 1)
        self.panelSplitter.addWidget(self.entrySuggestionSplitter)
        self.panelSplitter.addWidget(self.state.viewFilteredPanel)
        self.panelSplitter.setCollapsible(0, False)
        self.panelSplitter.setCollapsible(0, False)

        self.viewSplitter = Widgets.Splitter.Splitter(Qt.Vertical)
        self.viewSplitter.addWidget(self.state.viewAllPanel)
        self.viewSplitter.setCollapsible(0, False)
        self.viewSplitter.addWidget(self.state.replacePanel)

        self.splitter = Widgets.Splitter.Splitter(Qt.Horizontal)
        self.splitter.addWidget(self.panelSplitter)
        self.splitter.addWidget(self.viewSplitter)
        self.splitter.setCollapsible(0, False)
        self.splitter.setCollapsible(1, False)
        self.setCentralWidget(self.splitter)

    def createActions(self):
        self.fileActions = Actions.File.Actions(self)
        self.fileMenu = self.menuBar().addMenu("&File")
        Lib.addActions(self.fileMenu, self.fileActions.forMenu())
        self.fileToolBar = self.addToolBar("File")
        self.fileToolBar.setObjectName("File")
        Lib.addActions(self.fileToolBar, self.fileActions.forToolbar())

        self.editActions = Actions.Edit.Actions(self)
        self.editMenu = self.menuBar().addMenu("&Edit")
        Lib.addActions(self.editMenu, self.editActions.forMenu())
        self.editToolBar = self.addToolBar("Edit")
        self.editToolBar.setObjectName("Edit")
        Lib.addActions(self.editToolBar, self.editActions.forToolbar())

        self.insertActions = Actions.Insert.Actions(self)
        self.insertMenu = self.menuBar().addMenu("Inse&rt")
        Lib.addActions(self.insertMenu, self.insertActions.forMenu())

        self.spellingActions = Actions.Spelling.Actions(self)
        self.spellingMenu = self.menuBar().addMenu("Spe&lling")
        Lib.addActions(self.spellingMenu, self.spellingActions.forMenu())
        self.spellingToolBar = self.addToolBar("Spelling")
        self.spellingToolBar.setObjectName("Spelling")
        Lib.addActions(self.spellingToolBar, self.spellingActions.forToolbar())

        self.formatActions = Actions.Format.Actions(self)
        self.formatMenu = self.menuBar().addMenu("F&ormat")
        Lib.addActions(self.formatMenu, self.formatActions.forMenu())
        self.formatToolBar = self.addToolBar("Format")
        self.formatToolBar.setObjectName("Format")
        Lib.addActions(self.formatToolBar, self.formatActions.forToolbar())

        self.addToolBarBreak()

        # Actions created earlier
        self.indexActions = Actions.Index.Actions(self)  # Menu added later
        self.indexToolBar = self.addToolBar("Index")
        self.indexToolBar.setObjectName("Index")
        Lib.addActions(self.indexToolBar, self.indexActions.forToolbar())

        self.gotoActions = Actions.Goto.Actions(self)
        self.gotoMenu = self.menuBar().addMenu("&Goto")
        Lib.addActions(self.gotoMenu, self.gotoActions.forMenu())
        # Goto toolbar is last

        # These actions are created in createWidgets() because two are
        # needed by the groups panel
        self.entryMenu = self.menuBar().addMenu("Entr&y")
        Lib.addActions(self.entryMenu, self.entryActions.forMenu())
        self.entryToolBar1 = self.addToolBar("Entry Add and Copy")
        self.entryToolBar1.setObjectName("Entry1")
        Lib.addActions(self.entryToolBar1, self.entryActions.forToolbar1())
        self.entryToolBar2 = self.addToolBar("Entry Cross-references")
        self.entryToolBar2.setObjectName("Entry2")
        Lib.addActions(self.entryToolBar2, self.entryActions.forToolbar2())
        self.entryToolBar3 = self.addToolBar("Entry Groups")
        self.entryToolBar3.setObjectName("Entry3")
        Lib.addActions(self.entryToolBar3, self.entryActions.forToolbar3())

        self.modifyActions = Actions.Modify.Actions(self)
        self.modifyMenu = self.menuBar().addMenu("&Modify")
        Lib.addActions(self.modifyMenu, self.modifyActions.forMenu())
        self.modifyToolBar = self.addToolBar("Modify")
        self.modifyToolBar.setObjectName("Modify")
        Lib.addActions(self.modifyToolBar, self.modifyActions.forToolbar())

        self.indexMenu = self.menuBar().addMenu("Inde&x")
        Lib.addActions(self.indexMenu, self.indexActions.forMenu())

        self.helpActions = Actions.Help.Actions(self)
        self.helpMenu = self.menuBar().addMenu("&Help")
        Lib.addActions(self.helpMenu, self.helpActions.forMenu())

        self.addToolBarBreak()

        self.gotoToolBar1 = self.addToolBar("Goto Filtered etc.")
        self.gotoToolBar1.setObjectName("Goto1")
        Lib.addActions(self.gotoToolBar1, self.gotoActions.forToolbar1())

        self.gotoToolBar2 = self.addToolBar("Goto First, Next, etc.")
        self.gotoToolBar2.setObjectName("Goto2")
        Lib.addActions(self.gotoToolBar2, self.gotoActions.forToolbar2())

        self.gotoToolBar4 = Widgets.AlphaBar.Bar()
        self.gotoToolBar4.setWindowTitle("Goto Letter")
        self.gotoToolBar4.setObjectName("Goto4")
        self.addToolBar(self.gotoToolBar4)

        self.gotoToolBar3 = self.addToolBar("Goto Bookmarks")
        self.gotoToolBar3.setObjectName("Goto3")
        Lib.addActions(self.gotoToolBar3, self.gotoActions.forToolbar3())
        self.bookmarksToolButton = QToolButton()
        self.bookmarksToolButton.setIcon(QIcon(":/bookmark.svg"))
        self.bookmarksToolButton.setPopupMode(QToolButton.InstantPopup)
        self.bookmarksToolButton.setToolTip("""\
<p><b>Goto→Bookmarks</b></p><p>Goto the bookmarked entry.""")
        self.gotoToolBar3.addWidget(self.bookmarksToolButton)

        for toolbar in (self.fileToolBar, self.editToolBar,
                        self.spellingToolBar, self.formatToolBar,
                        self.indexToolBar, self.entryToolBar1,
                        self.entryToolBar2, self.modifyToolBar,
                        self.gotoToolBar1, self.gotoToolBar2,
                        self.gotoToolBar4, self.gotoToolBar3):
            toolbar.setFloatable(False)

    def createConnections(self):
        QShortcut(QKeySequence(Qt.CTRL + Qt.Key_T), self,
                  self.state.viewAllPanel.gotoLineEdit.setFocus)
        self.state.viewAllPanel.view.selectedEidChanged.connect(
            self.state.updateUi)
        self.state.viewAllPanel.view.circledEidChanged.connect(
            self.state.updateUi)
        self.state.viewAllPanel.view.refreshed.connect(
            self.modifyActions.updateUi)
        self.state.viewFilteredPanel.view.refreshed.connect(
            self.entryActions.updateUi)
        self.state.viewFilteredPanel.view.refreshed.connect(
            self.modifyActions.updateUi)
        self.state.viewFilteredPanel.view.refreshed.connect(
            self.updateFilteredGotoActions)
        self.state.viewFilteredPanel.view.refreshed.connect(
            self.state.replacePanel.updateUi)
        self.state.model.changed.connect(self.state.updateUi)
        self.state.model.edited.connect(self.state.refreshEntry)
        self.state.model.can_undo.connect(self.indexActions.updateUndo)
        self.state.model.can_redo.connect(self.indexActions.updateRedo)
        self.state.model.group_changed.connect(
            self.state.groupsPanel.updateGroups)
        self.workTimer.timeout.connect(self.updateWorkTime)
        self.editActions.connectEditors()
        self.state.entryPanel.xrefList.itemDoubleClicked.connect(
            self.gotoActions.gotoXRef)
        self.state.entryPanel.xrefList.currentRowChanged.connect(
            self.updateXRefGotoActions)
        self.gotoToolBar4.orientationChanged.connect(
            self.gotoToolBar4.setOrientation)
        self.gotoToolBar4.clicked.connect(self.gotoActions.gotoPrefix)
        for menu in self.menuBar().findChildren(QMenu):
            for action in menu.actions():
                if bool(action.toolTip()):
                    action.hovered.connect(
                        lambda action=action: self.menuHovered(action))

    def menuHovered(self, action):
        settings = QSettings()
        if bool(
                int(
                    settings.value(Gopt.Key.ShowMenuToolTips,
                                   Gopt.Default.ShowMenuToolTips))):
            tip = action.toolTip()
            if tip:
                QToolTip.showText(QCursor.pos(), tip, self)

    def reportProgress(self, message):
        say(message)
        QApplication.processEvents()

    def updateToolTips(self):
        settings = QSettings()
        showToolTips = bool(
            int(
                settings.value(Gopt.Key.ShowMainWindowToolTips,
                               Gopt.Default.ShowMainWindowToolTips)))
        for widget, tip in self.tooltips:
            widget.setToolTip(tip if showToolTips else "")
        for panel in (self.state.viewAllPanel, self.state.replacePanel,
                      self.state.viewFilteredPanel, self.state.entryPanel,
                      self.state.spellPanel, self.state.groupsPanel):
            panel.updateToolTips(showToolTips)

    def createContextMenus(self):
        for action in (self.indexActions.undoAction,
                       self.indexActions.redoAction,
                       self.gotoActions.gotoFirstAction,
                       self.gotoActions.gotoLastAction,
                       self.entryActions.addSiblingAction,
                       self.entryActions.addChildAction,
                       self.entryActions.addTopAction,
                       self.entryActions.copyAction,
                       self.entryActions.moveAction,
                       self.entryActions.deleteAction,
                       self.entryActions.addXRefAction,
                       self.entryActions.circleAction,
                       self.entryActions.addToNormalGroupAction,
                       self.entryActions.addToLinkedGroupAction):
            self.state.viewAllPanel.view.addAction(action)
        for action in (self.gotoActions.gotoFilteredAction, ):
            self.state.viewFilteredPanel.view.addAction(action)
        for action in (self.entryActions.addXRefAction,
                       self.entryActions.changeXRefAction,
                       self.entryActions.deleteXRefAction):
            self.state.entryPanel.xrefList.addAction(action)
        self.state.entryPanel.xrefList.setContextMenuPolicy(
            Qt.ActionsContextMenu)
        for action in (self.entryActions.addToNormalGroupAction,
                       self.entryActions.addToLinkedGroupAction,
                       self.entryActions.removeFromGroupAction,
                       self.entryActions.setGroupAction,
                       self.entryActions.editGroupsAction):
            self.state.groupsPanel.groupsList.addAction(action)
        self.state.groupsPanel.groupsList.setContextMenuPolicy(
            Qt.ActionsContextMenu)
コード例 #41
0
ファイル: ui_common.py プロジェクト: realmhamdy/VisualScrape
 def __init__(self, spiderName, resumable=False, parent=None):
     super(SpiderToolButton, self).__init__(parent)
     self._drag_start = None
     button_play = QToolButton()
     button_play.setIcon(QIcon("play.png"))
     self.triggered.connect(
         button_play.triggered
     )  # clicking the outer button run the play functionality
     button_play.setIconSize(QSize(32, 32))
     button_resume = QToolButton()
     button_resume.setEnabled(resumable)
     button_resume.setIcon(QIcon("resume.png"))
     button_resume.setIconSize(QSize(32, 32))
     button_pause = QToolButton()
     button_pause.setIcon(QIcon("pause.png"))
     button_pause.setIconSize(QSize(32, 32))
     self.label_spidername = QLabel(spiderName)
     self.label_spidername.setStyleSheet(self.stylesheet_label_spidername)
     layout = QGridLayout()
     layout.addWidget(self.label_spidername, 0, 0)
     layout.addWidget(button_pause, 1, 1)
     layout.addWidget(button_resume, 1, 2)
     layout.addWidget(button_play, 1, 3)
     layout.setContentsMargins(10, 8, 10, 8)
     self.setLayout(layout)
コード例 #42
0
class Panel(QWidget):
    def __init__(self, state, parent=None):
        super().__init__(parent)
        self.state = state
        self.entry = None
        self.saf = Saf.AUTO
        self.peid = ROOT
        self.createWidgets()
        self.layoutWidgets()
        self.createConnections()
        self.showOrHideNotes()
        self.showOrHideSortAs()
        self.termEdit.setFocus()

    def createWidgets(self):
        self.helpButton = QToolButton()
        self.helpButton.setIcon(QIcon(":/help.svg"))
        self.helpButton.setFocusPolicy(Qt.NoFocus)
        self.tooltips.append((self.helpButton, "Help on the Entry panel."))
        self.addingLabel = Widgets.Label.HtmlLabel(CANCEL_ADD)
        self.addingLabel.hide()
        self.termLabel = QLabel("&Term")
        self.termEdit = Widgets.LineEdit.HtmlLineEdit(self.state)
        self.tooltips.append((self.termEdit, """\
<p><b>Term editor</b> (Alt+T)</p>
<p>The entry's term text styled (e.g., <b>bold</b>, <i>italic</i>), as
it should appear in the final index.</p>"""))
        self.spellHighlighter = Widgets.SpellHighlighter.Highlighter(
            self.state, self.termEdit.document())
        self.termLabel.setBuddy(self.termEdit)
        self.pagesLabel = QLabel("&Pages")
        self.pagesEdit = Widgets.LineEdit.HtmlPagesLineEdit(self.state,
                                                            maxLines=3)
        self.tooltips.append((self.pagesEdit, """\
<p><b>Pages editor</b> (Alt+P)</p>
<p>The entry's pages styled (e.g., <b>bold</b>, <i>italic</i>), as they
should appear in the final index.</p> <p>The pages are automatically
sorted, and exact duplicates are automatically removed.</p> <p>See also
<b>Index→Combine Overlapping Pages</b> and <b>Index→Renumber
Pages</b>.</p>"""))
        self.pagesLabel.setBuddy(self.pagesEdit)
        self.calcSortAsCheckBox = QCheckBox("&Automatically Calculate Sort As")
        self.tooltips.append((self.calcSortAsCheckBox, """\
<p><b>Automatically Calculate Sort As</b> (Alt+A)</p>
<p>This checkbox controls how the Sort As text is created.</p>
<p>If checked, {} will either automatically create the sort as
text, or will present some choices from which to choose the sort as
text, depending on the term text.</p>
<p>If unchecked, the sort as text should be entered
manually.</p>""".format(QApplication.applicationName())))
        self.calcSortAsCheckBox.setChecked(True)
        self.sortAsHelpButton = QToolButton()
        self.sortAsHelpButton.setIcon(QIcon(":/help.svg"))
        self.sortAsHelpButton.setFocusPolicy(Qt.NoFocus)
        self.tooltips.append(
            (self.sortAsHelpButton, "Help on the Sort As text."))
        self.sortAsEdit = Widgets.LineEdit.LineEdit(self.state)
        self.tooltips.append((self.sortAsEdit, """\
<p><b>Sort As editor</b> (Alt+S)</p>
<p>The entry's sort as text.</p>
<p>If the <b>Automatically Calculate Sort As</b> checkbox is unchecked,
manually enter the sort as text to use for sorting the entry.</p>
<p>Main entry's are sorted using the sort as text, so it is easy to
force a non-standard ordering by entering a custom sort as text.</p>
<p>Subentries are also sorted using the sort as text, but the first word
of a subentry will be ignored for sorting purposes if it is in the
Ignore Subentry Function words list (see <b>Index→Ignore Subentry
Function words</b>) <i>and</i> the <b>Index→Options, Rules,
Ignore Subenty Function Words</b> checkbox is checked for this
index.</p>"""))
        self.sortAsEdit.setEnabled(False)
        self.sortAsLabel = QLabel("&Sort As")
        self.sortAsLabel.setBuddy(self.sortAsEdit)
        self.sortAsLabel.setEnabled(False)
        self.xrefLabel = QLabel("&Cross-references")
        self.xrefList = Widgets.List.HtmlListWidget(self.state, minLines=4)
        self.tooltips.append((self.xrefList, """\
<p><b>Cross-references list</b> (Alt+C)</p>
<p>The list of the entry's see and see also cross-references, both
generic and to other entries.</p>
<p>To add a cross-reference to an entry, circle the <i>to</i> entry
(<b>Entry→Circle</b>), then go to the <i>from</i> entry and click
<img src=":/xref-add.svg" width={0} height={0}> or press
<b>Entry→Add Cross-reference</b> (See also the <b>Entry</b>
menu.)</p>""".format(TOOLTIP_IMAGE_SIZE)))
        self.xrefLabel.setBuddy(self.xrefList)
        self.notesLabel = QLabel("&Notes")
        self.notesEdit = Widgets.LineEdit.MultilineHtmlEdit(self.state)
        self.tooltips.append((self.notesEdit, """\
<p><b>Notes editor</b> (Alt+N)</p>
<p>The entry's notes.</p>
<p>The notes shown here are never output as part of
the index so may be freely used for any purpose.</p>
<p>If the notes facility isn't wanted, the notes can be hidden by
unchecking the <b>Index→Options, General, Show Notes</b>
checkbox.</p>"""))
        self.notesLabel.setBuddy(self.notesEdit)

    def layoutWidgets(self):
        form = QFormLayout()
        form.addRow(self.addingLabel)
        hbox = QHBoxLayout()
        hbox.addWidget(self.termEdit, 1)
        hbox.addWidget(self.helpButton)
        form.addRow(self.termLabel, hbox)
        form.addRow(self.pagesLabel, self.pagesEdit)
        hbox = QHBoxLayout()
        hbox.addWidget(self.calcSortAsCheckBox, 1)
        hbox.addWidget(self.sortAsHelpButton)
        form.addRow(hbox)
        form.addRow(self.sortAsLabel, self.sortAsEdit)
        vbox = QVBoxLayout()
        vbox.addLayout(form)
        vbox.addWidget(self.xrefLabel)
        vbox.addWidget(self.xrefList, 1)
        vbox.addWidget(self.notesLabel)
        vbox.addWidget(self.notesEdit, 1)
        self.setLayout(vbox)

    def createConnections(self):
        self.helpButton.clicked.connect(self.help)
        self.sortAsHelpButton.clicked.connect(
            lambda: self.help("xix_ref_sortas.html"))
        self.termEdit.textChanged.connect(self.termChanged)
        self.termEdit.cursorPositionChanged.connect(self.maybeSetSuggestions)
        self.termEdit.textChanged.connect(self.updateMode)
        self.termEdit.lostFocus.connect(self.maybeSave)
        self.termEdit.enterPressed.connect(
            lambda: self.tabAndMaybeSave(self.pagesEdit))
        self.pagesEdit.textChanged.connect(self.updateMode)
        self.pagesEdit.lostFocus.connect(self.maybeSave)
        self.pagesEdit.enterPressed.connect(
            lambda: self.tabAndMaybeSave(self.calcSortAsCheckBox))
        self.calcSortAsCheckBox.toggled.connect(self.calcSortAsToggled)
        self.sortAsEdit.textChanged.connect(self.updateMode)
        self.sortAsEdit.lostFocus.connect(self.maybeSave)
        self.sortAsEdit.enterPressed.connect(
            lambda: self.tabAndMaybeSave(self.xrefList))
        self.notesEdit.textChanged.connect(self.updateMode)
        self.notesEdit.lostFocus.connect(self.maybeSave)

    def help(self, page="xix_ref_panel_entry.html"):
        self.state.help(page)

    def tabAndMaybeSave(self, widget):
        self.maybeSave()
        widget.setFocus()

    def updateUi(self):
        enable = self.state.mode not in {ModeKind.NO_INDEX, ModeKind.CHANGE}
        self.setEnabled(enable)
        if enable:
            enable = (self.state.mode in {ModeKind.ADD, ModeKind.EDIT}
                      or not self.termEdit.isEmpty())
            for widget in (self.termEdit, self.pagesEdit,
                           self.calcSortAsCheckBox, self.xrefList,
                           self.notesEdit):
                widget.setEnabled(enable)
            self.sortAsEdit.setEnabled(
                enable and not self.calcSortAsCheckBox.isChecked())
            if self.state.mode is ModeKind.ADD:
                self.state.window.modeLabel.setText(
                    "<font color=green>Adding</font>")

    def updateDisplayFonts(self):
        for widget in (self.termEdit, self.sortAsEdit, self.pagesEdit,
                       self.notesEdit, self.xrefList):
            widget.updateDisplayFonts()

    def populateEditors(self, editors):
        editors |= {
            self.termEdit, self.sortAsEdit, self.pagesEdit, self.notesEdit
        }

    def maybeSave(self):
        if self.hasChanged():
            if not bool(self.sortAsEdit.toPlainText().strip()):
                sortas = self.state.model.sortBy(self.termEdit.toHtml(),
                                                 self.saf, self.peid
                                                 is not ROOT)
                self.sortAsEdit.setPlainText(sortas)
            self.state.save()

    def hasChanged(self):
        term = self.termEdit.toHtml()
        sortas = self.sortAsEdit.toPlainText().strip()
        pages = self.pagesEdit.toHtml()
        notes = self.notesEdit.toHtml()
        if self.entry is None:
            return bool(term or sortas or pages or notes)
        return (self.entry.term != term or self.entry.sortas != sortas
                or self.entry.pages != pages or self.entry.notes != notes
                or self.entry.saf != self.saf)

    def updateMode(self):
        if (self.state.mode not in {
                ModeKind.NO_INDEX, ModeKind.ADD, ModeKind.EDIT, ModeKind.CHANGE
        } and self.hasChanged()):
            self.state.setMode(ModeKind.EDIT)

    def clearForm(self):
        self.state.spellPanel.clearSuggestions()
        self.state.groupsPanel.clear()
        positions = Positions(self.termEdit.textCursor().position(),
                              self.sortAsEdit.textCursor().position(),
                              self.pagesEdit.textCursor().position(),
                              self.notesEdit.textCursor().position())
        self.termEdit.clear()
        self.calcSortAsCheckBox.setChecked(True)
        self.sortAsEdit.clear()
        self.pagesEdit.clear()
        self.xrefList.clear()
        self.notesEdit.clear()
        return positions

    def setEntry(self, entry):
        positions = self.clearForm()
        self.entry = entry
        if entry is not None:
            self.termEdit.setHtml(entry.term, positions.term)
            self.saf = entry.saf or Saf.AUTO
            self.calcSortAsCheckBox.setChecked(self.saf != Saf.CUSTOM)
            self.sortAsEdit.setPlainText(entry.sortas, positions.sortas)
            self.pagesEdit.setHtml(entry.pages, positions.pages)
            self.notesEdit.setHtml(entry.notes, positions.notes)
            for xref in list(self.state.model.xrefs(entry.eid)):
                kind = "See" if xref.kind is XrefKind.SEE else "See also"
                term = Lib.elidePatchHtml(self.state.model.termPath(
                    xref.to_eid),
                                          self.state,
                                          maxlen=None)
                item = QListWidgetItem("{} <i>{}</i> {}".format(
                    XREF_INDICATOR, kind, term))
                item.setData(Qt.UserRole, xref)
                self.xrefList.addItem(item)
            for xref in list(self.state.model.generic_xrefs(entry.eid)):
                kind = ("See (generic)" if xref.kind is XrefKind.SEE_GENERIC
                        else "See also (generic)")
                item = QListWidgetItem("{} <i>{}</i> {}".format(
                    XREF_INDICATOR, kind, xref.term))
                item.setData(Qt.UserRole, xref)
                self.xrefList.addItem(item)
            if self.xrefList.count():
                self.xrefList.setCurrentRow(0)
            self.state.updateGotoEids(entry.eid)
        self.state.groupsPanel.updateGroups()
        self.state.updateNavigationStatus()
        self.state.setMode(ModeKind.VIEW)

    @property
    def unknownWords(self):
        return self.spellHighlighter.unknownWords

    def termChanged(self):
        if self.addingLabel.isVisible():
            self.addingLabel.setText(CANCEL_ADD)
            text = self.termEdit.toPlainText()
            if bool(self.state.model):
                while text:
                    eid = self.state.model.firstForPrefix(text)
                    if eid is not None:
                        term = Lib.elidePatchHtml(self.state.model.term(eid),
                                                  self.state)
                        self.addingLabel.setText(CANCEL_ADD +
                                                 " and goto “{}”".format(term))
                        break
                    text = text[:-1]
        self.maybeSetSuggestions()

    def maybeSetSuggestions(self):
        word, _ = self.termEdit.wordAndPosition()
        if word:
            if self.termEdit.hasFocus():
                replacement = self.state.model.autoReplacementFor(word)
                if replacement is not None:
                    self.termEdit.replaceWord(replacement)
                    return
            self.state.spellPanel.populateSuggestions(word)
        else:
            self.state.spellPanel.clearSuggestions()

    def rememberWord(self):
        word = self.findNearestUnknownWord()
        if word:
            Spell.add(word, self.state.language.value)
            self.state.model.addSpellWord(word)
            self.spellHighlighter.rehighlight()

    def ignoreWord(self):
        word = self.findNearestUnknownWord()
        if word:
            self.spellHighlighter.wordsToIgnore.add(word)
            self.spellHighlighter.rehighlight()

    def findNearestUnknownWord(self):
        pos = self.termEdit.textCursor().position()
        where = -1
        unknownWord = None
        unknownWords = sorted(self.unknownWords)
        for i, word in unknownWords:
            if i > where and i <= pos:
                where = i
                unknownWord = word
            if i > pos:
                break
        if unknownWord is None and unknownWords:
            unknownWord = unknownWords[-1][1]
        return unknownWord

    def completeWithSuggested(self):
        index = self.state.spellPanel.currentRow()
        self.complete(index)

    def complete(self, i):
        item = self.state.spellPanel.item(i)
        if item:
            word = self.state.spellPanel.item(i).text()
            self.completeWord(word)

    def completeWord(self, word):
        word = COMPLETE_WORD_RX.sub("", word)
        if word:
            self.termEdit.replaceWord(word)

    def showOrHideNotes(self):
        settings = QSettings()
        visible = bool(
            int(settings.value(Gopt.Key.ShowNotes, Gopt.Default.ShowNotes)))
        self.notesLabel.setVisible(visible)
        self.notesEdit.setVisible(visible)

    def showOrHideSortAs(self):
        settings = QSettings()
        alwaysShowSortAs = bool(
            int(
                settings.value(Gopt.Key.AlwaysShowSortAs,
                               Gopt.Default.AlwaysShowSortAs)))
        editable = not self.calcSortAsCheckBox.isChecked()
        visible = alwaysShowSortAs or editable
        for widget in (self.sortAsLabel, self.sortAsEdit):
            widget.setVisible(visible)
            widget.setEnabled(editable)

    def calcSortAsToggled(self):
        self.showOrHideSortAs()
        self.updateMode()
        if self.calcSortAsCheckBox.isChecked():
            saf = self.saf if self.saf != Saf.CUSTOM else Saf.AUTO
            self.state.calculateSortAs(saf, force=True)
        else:
            self.saf = Saf.CUSTOM
コード例 #43
0
 def __init__(self, spiderName, resumable=False,parent=None):
   super(SpiderToolButton, self).__init__(parent)
   self._drag_start = None
   button_play = QToolButton()
   button_play.setIcon(QIcon("play.png"))
   self.triggered.connect(button_play.triggered) # clicking the outer button run the play functionality
   button_play.setIconSize(QSize(32, 32))
   button_resume = QToolButton()
   button_resume.setEnabled(resumable)
   button_resume.setIcon(QIcon("resume.png"))
   button_resume.setIconSize(QSize(32, 32))
   button_pause = QToolButton()
   button_pause.setIcon(QIcon("pause.png"))
   button_pause.setIconSize(QSize(32, 32))
   self.label_spidername = QLabel(spiderName)
   self.label_spidername.setStyleSheet(self.stylesheet_label_spidername)
   layout = QGridLayout()
   layout.addWidget(self.label_spidername, 0, 0)
   layout.addWidget(button_pause, 1,1)
   layout.addWidget(button_resume, 1, 2)
   layout.addWidget(button_play, 1, 3)
   layout.setContentsMargins(10, 8, 10, 8)
   self.setLayout(layout)
コード例 #44
0
def CreateFlatButton(action):
    """
	Create a custom flat button and style
	it so that it will look good on all platforms.
	"""

    toolButton = QToolButton()
    toolButton.setIcon(action.icon())
    toolButton.setText(action.text())
    toolButton.setAutoRaise(True)
    toolButton.setIconSize(QSize(32, 32))
    toolButton.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)
    if sys.platform.startswith('darwin'):
        # Bug for Mac: QToolButtons do not react to setAutoRaise so
        # can't be made flat when they are not used inside a toolbar.
        # Setting a custom style sheet with border to none fixes this.
        # But then it looses all its highlight and pressed visual cues
        # so some extra styling needs to be done to provide some nice
        # visual feedback on hover and pressed states.
        toolButton.setStyleSheet(
            "QToolButton {"
            "border: none;"
            "} "
            "QToolButton:hover {"
            "background-color: qradialgradient(cx: 0.5, cy: 0.5,"
            "fx: 0.5, fy: 0.5,"
            "radius: 0.5, "
            "stop: 0 rgba(255, 255, 255, 100), "
            "stop: 1 rgba(0, 0, 0, 0));"
            "}"
            "QToolButton:pressed {"
            "background-color: qradialgradient(cx: 0.5, cy: 0.5,"
            "fx: 0.5, fy: 0.5,"
            "radius: 0.5, "
            "stop: 0 rgba(255, 255, 255, 200), "
            "stop: 1 rgba(0, 0, 0, 0));"
            "}")
    font = QFont()
    font.setPixelSize(10)
    toolButton.setFont(font)

    # Connect the clicked signal to the action trigger
    def pushed():
        toolButton.action.triggered.emit()

    setattr(toolButton, "pushed", pushed)
    toolButton.clicked.connect(toolButton.pushed)
    setattr(toolButton, "action", action)

    return toolButton
コード例 #45
0
    def createWidgets(self):
        settings = QSettings()

        self.searchLabel = QLabel("Search For")
        self.searchLineEdit = QLineEdit()
        self.tooltips.append((self.searchLineEdit, """\
<p><b>Search For editor</b></p>
<p>The text or regular expression to search for.</p>"""))
        self.searchLabel.setBuddy(self.searchLineEdit)
        self.replaceLabel = QLabel("Replace With")
        self.replaceLineEdit = QLineEdit()
        self.tooltips.append((self.replaceLineEdit, """\
<p><b>Replace With editor</b></p>
<p>The replacement text (which may include backreferences, \\1, \\2,
etc., if a regular expression search is being made).</p>"""))
        self.replaceLabel.setBuddy(self.replaceLineEdit)

        self.allEntriesRadioButton = QRadioButton("All Entries")
        self.allEntriesRadioButton.setChecked(
            bool(int(settings.value("RP/All", 1))))
        self.tooltips.append((self.allEntriesRadioButton, """\
<p><b>All Entries</b></p>
<p>If checked, the search will consider every entry in the index.</p>"""))
        self.filteredEntriesRadioButton = QRadioButton("Filtered Entries")
        self.filteredEntriesRadioButton.setChecked(
            bool(int(settings.value("RP/Filtered", 0))))
        self.tooltips.append((self.filteredEntriesRadioButton, """\
<p><b>Filtered Entries</b></p>
<p>If checked, the search will consider only those entries that are in
the current filtered view.</p>"""))
        self.considerLabel = QLabel("Consider")
        self.scopeGroup = QButtonGroup()
        self.scopeGroup.addButton(self.allEntriesRadioButton)
        self.scopeGroup.addButton(self.filteredEntriesRadioButton)

        self.literalRadioButton = QRadioButton("Literal")
        self.literalRadioButton.setChecked(
            bool(int(settings.value("RP/Literal", 1))))
        self.tooltips.append((self.literalRadioButton, """<p><b>Literal</b></p>
<p>If checked, the <b>Search For</b> text will be searched for
literally.</p>"""))
        self.regexRadioButton = QRadioButton("Regex")
        self.regexRadioButton.setChecked(
            bool(int(settings.value("RP/Regex", 0))))
        self.tooltips.append((self.regexRadioButton, """<p><b>Regex</b></p>
<p>If checked, the <b>Search For</b> text will be searched for
as a regular expression pattern.</p>"""))
        self.matchAsGroup = QButtonGroup()
        self.matchAsGroup.addButton(self.literalRadioButton)
        self.matchAsGroup.addButton(self.regexRadioButton)
        self.ignoreCaseCheckBox = QCheckBox("Ignore Case")
        self.ignoreCaseCheckBox.setChecked(
            bool(int(settings.value("RP/ICase", 0))))
        self.tooltips.append((self.ignoreCaseCheckBox, """\
<p><b>Ignore Case</b></p>
<p>If checked, the <b>Search For</b> text will be searched for
case-insensitively.</p>"""))
        self.wholeWordsCheckBox = QCheckBox("Whole Words")
        self.wholeWordsCheckBox.setChecked(
            bool(int(settings.value("RP/WW", 0))))
        self.tooltips.append((self.wholeWordsCheckBox, """\
<p><b>Whole Words</b></p>
<p>If checked&mdash;and when <b>Literal</b> is checked&mdash;the
<b>Search For</b> text will be matched as whole words.</p>
<p>For example, “habit” will not match “habitat” when whole words is
checked.</p>
<p>(For regular expressions use \\b before and after each word to get
whole word matches.)</p>"""))

        self.replaceInLabel = QLabel("Look In")
        self.replaceInTermsCheckBox = QCheckBox("Terms")
        self.replaceInTermsCheckBox.setChecked(
            bool(int(settings.value("RP/Terms", 1))))
        self.tooltips.append((self.replaceInTermsCheckBox, """\
<p><b>Terms</b></p>
<p>If checked, the search will look in term texts.</p>"""))
        self.replaceInPagesCheckBox = QCheckBox("Pages")
        self.replaceInPagesCheckBox.setChecked(
            bool(int(settings.value("RP/Pages", 0))))
        self.tooltips.append((self.replaceInPagesCheckBox, """\
<p><b>Pages</b></p>
<p>If checked, the search will look in pages texts.</p>"""))
        self.replaceInNotesCheckBox = QCheckBox("Notes")
        self.replaceInNotesCheckBox.setChecked(
            bool(int(settings.value("RP/Notes", 0))))
        self.tooltips.append((self.replaceInNotesCheckBox, """\
<p><b>Notes</b></p>
<p>If checked, the search will look in notes texts.</p>"""))
        self.startButton = QPushButton(QIcon(":/edit-find.svg"),
                                       "Start Search")
        self.tooltips.append((self.startButton, """<p><b>Start Search</b></p>
<p>Start the search from the first entry in the index or the first entry
in the filtered view's entries.</p>"""))
        self.replaceButton = QPushButton(QIcon(":/edit-find-replace.svg"),
                                         "Replace")
        self.tooltips.append((self.replaceButton, """<p><b>Replace</b></p>
<p>Replace the highlighted text with the <b>Replace With</b> text (using
backreferences if they are in the replacement text and a <b>Regex</b>
search is underway), and then try to find the next matching text.</p>"""))
        self.skipButton = QPushButton(QIcon(":/skip.svg"), "S&kip")
        self.tooltips.append((self.skipButton, """<p><b>Skip</b></p>
<p>Skip the highlighted text and try to find the next matching
text.</p>"""))
        self.stopButton = QPushButton(QIcon(":/process-stop.svg"),
                                      "Stop Search")
        self.tooltips.append((self.stopButton, """<p><b>Stop Search</b></p>
<p>Stop the current search. This allows the search options to be
changed.</p>"""))
        self.closeButton = QToolButton()
        self.closeButton.setIcon(QIcon(":/hide.svg"))
        self.closeButton.setFocusPolicy(Qt.NoFocus)
        self.tooltips.append((self.closeButton, """<p><b>Hide</b></p>
<p>Hide the Search and Replace panel.</p>
<p>Press <b>Ctrl+H</b> or click <img src=":/edit-find-replace.svg"
width={0} height={0}> or click <b>Edit→Search and Replace</b> to show it
again.</p>""".format(TOOLTIP_IMAGE_SIZE)))
        self.helpButton = QToolButton()
        self.helpButton.setIcon(QIcon(":/help.svg"))
        self.helpButton.setFocusPolicy(Qt.NoFocus)
        self.tooltips.append(
            (self.helpButton, "Help on the Search and Replace panel."))
コード例 #46
0
    def setupUi(self):

        scene = QGraphicsScene(self)
        self.view = QGraphicsView(scene, self)
        self.view.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.view.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.view.setVisible(True)
        self.view.setInteractive(True)

        self.createPixmapIcon()

        self.mapWidget = MapWidget(self.mapManager)
        scene.addItem(self.mapWidget)
        self.mapWidget.setCenter(QGeoCoordinate(-8.1, -34.95))
        self.mapWidget.setZoomLevel(5)

        #...
        self.slider = QSlider(Qt.Vertical, self)
        self.slider.setTickInterval(1)
        self.slider.setTickPosition(QSlider.TicksBothSides)
        self.slider.setMaximum(self.mapManager.maximumZoomLevel())
        self.slider.setMinimum(self.mapManager.minimumZoomLevel())

        self.slider.valueChanged[int].connect(self.sliderValueChanged)
        self.mapWidget.zoomLevelChanged[float].connect(self.mapZoomLevelChanged)

        mapControlLayout = QVBoxLayout()

        self.mapWidget.mapTypeChanged.connect(self.mapTypeChanged)

        for mapType in self.mapWidget.supportedMapTypes():
            radio = QRadioButton(self)
            if mapType == QGraphicsGeoMap.StreetMap:
                radio.setText('Street')
            elif mapType == QGraphicsGeoMap.SatelliteMapDay:
                radio.setText('Sattelite')
            elif mapType == QGraphicsGeoMap.SatelliteMapNight:
                radio.setText('Sattelite - Night')
            elif mapType == QGraphicsGeoMap.TerrainMap:
                radio.setText('Terrain')

            if mapType == self.mapWidget.mapType():
                radio.setChecked(True)

            radio.toggled[bool].connect(self.mapTypeToggled)

            self.mapControlButtons.append(radio)
            self.mapControlTypes.append(mapType)
            mapControlLayout.addWidget(radio)

        self.latitudeEdit = QLineEdit()
        self.longitudeEdit = QLineEdit()

        formLayout = QFormLayout()
        formLayout.addRow('Latitude', self.latitudeEdit)
        formLayout.addRow('Longitude', self.longitudeEdit)

        self.captureCoordsButton = QToolButton()
        self.captureCoordsButton.setText('Capture coordinates')
        self.captureCoordsButton.setCheckable(True)

        self.captureCoordsButton.toggled[bool].connect(
                self.mapWidget.setMouseClickCoordQuery)
        self.mapWidget.coordQueryResult.connect(self.updateCoords)

        self.setCoordsButton = QPushButton()
        self.setCoordsButton.setText('Set coordinates')
        self.setCoordsButton.clicked.connect(self.setCoordsClicked)

        buttonLayout = QHBoxLayout()

        buttonLayout.addWidget(self.captureCoordsButton)
        buttonLayout.addWidget(self.setCoordsButton)

        coordControlLayout = QVBoxLayout()
        coordControlLayout.addLayout(formLayout)
        coordControlLayout.addLayout(buttonLayout)

        widget = QWidget(self)
        layout = QGridLayout()
        layout.setRowStretch(0, 1)
        layout.setRowStretch(1, 0)

        topLayout = QGridLayout()
        bottomLayout = QGridLayout()

        topLayout.setColumnStretch(0, 0)
        topLayout.setColumnStretch(1, 1)

        bottomLayout.setColumnStretch(0, 0)
        bottomLayout.setColumnStretch(1, 1)

        topLayout.addWidget(self.slider, 0, 0)
        topLayout.addWidget(self.view, 0, 1)

        bottomLayout.addLayout(mapControlLayout, 0, 0)
        bottomLayout.addLayout(coordControlLayout, 0, 1)

        layout.addLayout(topLayout, 0, 0)
        layout.addLayout(bottomLayout, 1, 0)

        self.layout = layout
        widget.setLayout(layout)
        self.setCentralWidget(widget)

        self.view.setContextMenuPolicy(Qt.CustomContextMenu)

        self.view.customContextMenuRequested.connect(self.customContextMenuRequest)
コード例 #47
0
ファイル: _Window.py プロジェクト: ra2003/xindex
    def createActions(self):
        self.fileActions = Actions.File.Actions(self)
        self.fileMenu = self.menuBar().addMenu("&File")
        Lib.addActions(self.fileMenu, self.fileActions.forMenu())
        self.fileToolBar = self.addToolBar("File")
        self.fileToolBar.setObjectName("File")
        Lib.addActions(self.fileToolBar, self.fileActions.forToolbar())

        self.editActions = Actions.Edit.Actions(self)
        self.editMenu = self.menuBar().addMenu("&Edit")
        Lib.addActions(self.editMenu, self.editActions.forMenu())
        self.editToolBar = self.addToolBar("Edit")
        self.editToolBar.setObjectName("Edit")
        Lib.addActions(self.editToolBar, self.editActions.forToolbar())

        self.insertActions = Actions.Insert.Actions(self)
        self.insertMenu = self.menuBar().addMenu("Inse&rt")
        Lib.addActions(self.insertMenu, self.insertActions.forMenu())

        self.spellingActions = Actions.Spelling.Actions(self)
        self.spellingMenu = self.menuBar().addMenu("Spe&lling")
        Lib.addActions(self.spellingMenu, self.spellingActions.forMenu())
        self.spellingToolBar = self.addToolBar("Spelling")
        self.spellingToolBar.setObjectName("Spelling")
        Lib.addActions(self.spellingToolBar, self.spellingActions.forToolbar())

        self.formatActions = Actions.Format.Actions(self)
        self.formatMenu = self.menuBar().addMenu("F&ormat")
        Lib.addActions(self.formatMenu, self.formatActions.forMenu())
        self.formatToolBar = self.addToolBar("Format")
        self.formatToolBar.setObjectName("Format")
        Lib.addActions(self.formatToolBar, self.formatActions.forToolbar())

        self.addToolBarBreak()

        # Actions created earlier
        self.indexActions = Actions.Index.Actions(self)  # Menu added later
        self.indexToolBar = self.addToolBar("Index")
        self.indexToolBar.setObjectName("Index")
        Lib.addActions(self.indexToolBar, self.indexActions.forToolbar())

        self.gotoActions = Actions.Goto.Actions(self)
        self.gotoMenu = self.menuBar().addMenu("&Goto")
        Lib.addActions(self.gotoMenu, self.gotoActions.forMenu())
        # Goto toolbar is last

        # These actions are created in createWidgets() because two are
        # needed by the groups panel
        self.entryMenu = self.menuBar().addMenu("Entr&y")
        Lib.addActions(self.entryMenu, self.entryActions.forMenu())
        self.entryToolBar1 = self.addToolBar("Entry Add and Copy")
        self.entryToolBar1.setObjectName("Entry1")
        Lib.addActions(self.entryToolBar1, self.entryActions.forToolbar1())
        self.entryToolBar2 = self.addToolBar("Entry Cross-references")
        self.entryToolBar2.setObjectName("Entry2")
        Lib.addActions(self.entryToolBar2, self.entryActions.forToolbar2())
        self.entryToolBar3 = self.addToolBar("Entry Groups")
        self.entryToolBar3.setObjectName("Entry3")
        Lib.addActions(self.entryToolBar3, self.entryActions.forToolbar3())

        self.modifyActions = Actions.Modify.Actions(self)
        self.modifyMenu = self.menuBar().addMenu("&Modify")
        Lib.addActions(self.modifyMenu, self.modifyActions.forMenu())
        self.modifyToolBar = self.addToolBar("Modify")
        self.modifyToolBar.setObjectName("Modify")
        Lib.addActions(self.modifyToolBar, self.modifyActions.forToolbar())

        self.indexMenu = self.menuBar().addMenu("Inde&x")
        Lib.addActions(self.indexMenu, self.indexActions.forMenu())

        self.helpActions = Actions.Help.Actions(self)
        self.helpMenu = self.menuBar().addMenu("&Help")
        Lib.addActions(self.helpMenu, self.helpActions.forMenu())

        self.addToolBarBreak()

        self.gotoToolBar1 = self.addToolBar("Goto Filtered etc.")
        self.gotoToolBar1.setObjectName("Goto1")
        Lib.addActions(self.gotoToolBar1, self.gotoActions.forToolbar1())

        self.gotoToolBar2 = self.addToolBar("Goto First, Next, etc.")
        self.gotoToolBar2.setObjectName("Goto2")
        Lib.addActions(self.gotoToolBar2, self.gotoActions.forToolbar2())

        self.gotoToolBar4 = Widgets.AlphaBar.Bar()
        self.gotoToolBar4.setWindowTitle("Goto Letter")
        self.gotoToolBar4.setObjectName("Goto4")
        self.addToolBar(self.gotoToolBar4)

        self.gotoToolBar3 = self.addToolBar("Goto Bookmarks")
        self.gotoToolBar3.setObjectName("Goto3")
        Lib.addActions(self.gotoToolBar3, self.gotoActions.forToolbar3())
        self.bookmarksToolButton = QToolButton()
        self.bookmarksToolButton.setIcon(QIcon(":/bookmark.svg"))
        self.bookmarksToolButton.setPopupMode(QToolButton.InstantPopup)
        self.bookmarksToolButton.setToolTip("""\
<p><b>Goto→Bookmarks</b></p><p>Goto the bookmarked entry.""")
        self.gotoToolBar3.addWidget(self.bookmarksToolButton)

        for toolbar in (self.fileToolBar, self.editToolBar,
                        self.spellingToolBar, self.formatToolBar,
                        self.indexToolBar, self.entryToolBar1,
                        self.entryToolBar2, self.modifyToolBar,
                        self.gotoToolBar1, self.gotoToolBar2,
                        self.gotoToolBar4, self.gotoToolBar3):
            toolbar.setFloatable(False)