Abbreviated toolbar symbols and add tooltips
This commit is contained in:
parent
43bbe971eb
commit
6cae652643
2 changed files with 118 additions and 60 deletions
|
|
@ -1,3 +1,12 @@
|
||||||
|
# 0.1.3
|
||||||
|
|
||||||
|
* Fix bold toggle
|
||||||
|
* Improvements to preview size in search results
|
||||||
|
* Make URLs highlighted and clickable (Ctrl+click)
|
||||||
|
* Explain the purpose of the encryption key for first-time use
|
||||||
|
* Support saving the encryption key to the settings file to avoid being prompted (off by default)
|
||||||
|
* Abbreviated toolbar symbols to keep things tidier. Add tooltips
|
||||||
|
|
||||||
# 0.1.2
|
# 0.1.2
|
||||||
|
|
||||||
* Switch from Markdown to HTML via QTextEdit, with a toolbar
|
* Switch from Markdown to HTML via QTextEdit, with a toolbar
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from PySide6.QtCore import Signal, Qt
|
from PySide6.QtCore import Signal, Qt
|
||||||
from PySide6.QtGui import QAction
|
from PySide6.QtGui import QAction, QKeySequence, QFont, QFontDatabase
|
||||||
from PySide6.QtWidgets import QToolBar
|
from PySide6.QtWidgets import QToolBar
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -18,82 +18,131 @@ class ToolBar(QToolBar):
|
||||||
|
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
super().__init__("Format", parent)
|
super().__init__("Format", parent)
|
||||||
self._build_actions()
|
|
||||||
self.setObjectName("Format")
|
self.setObjectName("Format")
|
||||||
|
self.setToolButtonStyle(Qt.ToolButtonTextOnly)
|
||||||
|
self._build_actions()
|
||||||
|
self._apply_toolbar_styles()
|
||||||
|
|
||||||
def _build_actions(self):
|
def _build_actions(self):
|
||||||
# Bold
|
self.actBold = QAction("Bold", self)
|
||||||
bold = QAction("Bold", self)
|
self.actBold.setShortcut(QKeySequence.Bold)
|
||||||
bold.setShortcut("Ctrl+B")
|
self.actBold.triggered.connect(self.boldRequested)
|
||||||
bold.triggered.connect(self.boldRequested)
|
|
||||||
|
|
||||||
italic = QAction("Italic", self)
|
self.actItalic = QAction("Italic", self)
|
||||||
italic.setShortcut("Ctrl+I")
|
self.actItalic.setShortcut(QKeySequence.Italic)
|
||||||
italic.triggered.connect(self.italicRequested)
|
self.actItalic.triggered.connect(self.italicRequested)
|
||||||
|
|
||||||
underline = QAction("Underline", self)
|
self.actUnderline = QAction("Underline", self)
|
||||||
underline.setShortcut("Ctrl+U")
|
self.actUnderline.setShortcut(QKeySequence.Underline)
|
||||||
underline.triggered.connect(self.underlineRequested)
|
self.actUnderline.triggered.connect(self.underlineRequested)
|
||||||
|
|
||||||
strike = QAction("Strikethrough", self)
|
self.actStrike = QAction("Strikethrough", self)
|
||||||
strike.setShortcut("Ctrl+-")
|
self.actStrike.setShortcut("Ctrl+-")
|
||||||
strike.triggered.connect(self.strikeRequested)
|
self.actStrike.triggered.connect(self.strikeRequested)
|
||||||
|
|
||||||
code = QAction("<code>", self)
|
self.actCode = QAction("Inline code", self)
|
||||||
code.setShortcut("Ctrl+`")
|
self.actCode.setShortcut("Ctrl+`")
|
||||||
code.triggered.connect(self.codeRequested)
|
self.actCode.triggered.connect(self.codeRequested)
|
||||||
|
|
||||||
# Headings
|
# Headings
|
||||||
h1 = QAction("H1", self)
|
self.actH1 = QAction("Heading 1", self)
|
||||||
h1.setShortcut("Ctrl+1")
|
self.actH2 = QAction("Heading 2", self)
|
||||||
h2 = QAction("H2", self)
|
self.actH3 = QAction("Heading 3", self)
|
||||||
h2.setShortcut("Ctrl+2")
|
self.actNormal = QAction("Normal text", self)
|
||||||
h3 = QAction("H3", self)
|
self.actH1.setShortcut("Ctrl+1")
|
||||||
h3.setShortcut("Ctrl+3")
|
self.actH2.setShortcut("Ctrl+2")
|
||||||
normal = QAction("Normal", self)
|
self.actH3.setShortcut("Ctrl+3")
|
||||||
normal.setShortcut("Ctrl+P")
|
self.actNormal.setShortcut("Ctrl+N")
|
||||||
|
self.actH1.triggered.connect(lambda: self.headingRequested.emit(24))
|
||||||
h1.triggered.connect(lambda: self.headingRequested.emit(24))
|
self.actH2.triggered.connect(lambda: self.headingRequested.emit(18))
|
||||||
h2.triggered.connect(lambda: self.headingRequested.emit(18))
|
self.actH3.triggered.connect(lambda: self.headingRequested.emit(14))
|
||||||
h3.triggered.connect(lambda: self.headingRequested.emit(14))
|
self.actNormal.triggered.connect(lambda: self.headingRequested.emit(0))
|
||||||
normal.triggered.connect(lambda: self.headingRequested.emit(0))
|
|
||||||
|
|
||||||
# Lists
|
# Lists
|
||||||
bullets = QAction("• Bullets", self)
|
self.actBullets = QAction("Bulleted list", self)
|
||||||
bullets.triggered.connect(self.bulletsRequested)
|
self.actBullets.triggered.connect(self.bulletsRequested)
|
||||||
numbers = QAction("1. Numbered", self)
|
self.actNumbers = QAction("Numbered list", self)
|
||||||
numbers.triggered.connect(self.numbersRequested)
|
self.actNumbers.triggered.connect(self.numbersRequested)
|
||||||
|
|
||||||
# Alignment
|
# Alignment
|
||||||
left = QAction("Align Left", self)
|
self.actAlignL = QAction("Align left", self)
|
||||||
center = QAction("Align Center", self)
|
self.actAlignC = QAction("Align center", self)
|
||||||
right = QAction("Align Right", self)
|
self.actAlignR = QAction("Align right", self)
|
||||||
|
self.actAlignL.triggered.connect(lambda: self.alignRequested.emit(Qt.AlignLeft))
|
||||||
left.triggered.connect(
|
self.actAlignC.triggered.connect(
|
||||||
lambda: self.alignRequested.emit(Qt.AlignmentFlag.AlignLeft)
|
lambda: self.alignRequested.emit(Qt.AlignHCenter)
|
||||||
)
|
)
|
||||||
center.triggered.connect(
|
self.actAlignR.triggered.connect(
|
||||||
lambda: self.alignRequested.emit(Qt.AlignmentFlag.AlignHCenter)
|
lambda: self.alignRequested.emit(Qt.AlignRight)
|
||||||
)
|
|
||||||
right.triggered.connect(
|
|
||||||
lambda: self.alignRequested.emit(Qt.AlignmentFlag.AlignRight)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
self.addActions(
|
self.addActions(
|
||||||
[
|
[
|
||||||
bold,
|
self.actBold,
|
||||||
italic,
|
self.actItalic,
|
||||||
underline,
|
self.actUnderline,
|
||||||
strike,
|
self.actStrike,
|
||||||
code,
|
self.actCode,
|
||||||
h1,
|
self.actH1,
|
||||||
h2,
|
self.actH2,
|
||||||
h3,
|
self.actH3,
|
||||||
normal,
|
self.actNormal,
|
||||||
bullets,
|
self.actBullets,
|
||||||
numbers,
|
self.actNumbers,
|
||||||
left,
|
self.actAlignL,
|
||||||
center,
|
self.actAlignC,
|
||||||
right,
|
self.actAlignR,
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def _apply_toolbar_styles(self):
|
||||||
|
self._style_letter_button(self.actBold, "B", bold=True)
|
||||||
|
self._style_letter_button(self.actItalic, "I", italic=True)
|
||||||
|
self._style_letter_button(self.actUnderline, "U", underline=True)
|
||||||
|
self._style_letter_button(self.actStrike, "S", strike=True)
|
||||||
|
|
||||||
|
# Monospace look for code; use a fixed font
|
||||||
|
code_font = QFontDatabase.systemFont(QFontDatabase.FixedFont)
|
||||||
|
self._style_letter_button(self.actCode, "</>", custom_font=code_font)
|
||||||
|
|
||||||
|
# Headings
|
||||||
|
self._style_letter_button(self.actH1, "H1")
|
||||||
|
self._style_letter_button(self.actH2, "H2")
|
||||||
|
self._style_letter_button(self.actH3, "H3")
|
||||||
|
self._style_letter_button(self.actNormal, "N")
|
||||||
|
|
||||||
|
# Lists
|
||||||
|
self._style_letter_button(self.actBullets, "•")
|
||||||
|
self._style_letter_button(self.actNumbers, "1.")
|
||||||
|
|
||||||
|
# Alignment
|
||||||
|
self._style_letter_button(self.actAlignL, "L")
|
||||||
|
self._style_letter_button(self.actAlignC, "C")
|
||||||
|
self._style_letter_button(self.actAlignR, "R")
|
||||||
|
|
||||||
|
def _style_letter_button(
|
||||||
|
self,
|
||||||
|
action: QAction,
|
||||||
|
text: str,
|
||||||
|
*,
|
||||||
|
bold: bool = False,
|
||||||
|
italic: bool = False,
|
||||||
|
underline: bool = False,
|
||||||
|
strike: bool = False,
|
||||||
|
custom_font: QFont | None = None,
|
||||||
|
):
|
||||||
|
btn = self.widgetForAction(action)
|
||||||
|
if not btn:
|
||||||
|
return
|
||||||
|
btn.setText(text)
|
||||||
|
f = custom_font if custom_font is not None else QFont(btn.font())
|
||||||
|
if custom_font is None:
|
||||||
|
f.setBold(bold)
|
||||||
|
f.setItalic(italic)
|
||||||
|
f.setUnderline(underline)
|
||||||
|
f.setStrikeOut(strike)
|
||||||
|
btn.setFont(f)
|
||||||
|
|
||||||
|
# Keep accessibility/tooltip readable
|
||||||
|
btn.setToolTip(action.text())
|
||||||
|
btn.setAccessibleName(action.text())
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue