Added a quote symbol selection dialog
This commit is contained in:
+24
-21
@@ -169,27 +169,30 @@ class nwQuotes():
|
|||||||
Source: https://en.wikipedia.org/wiki/Quotation_mark
|
Source: https://en.wikipedia.org/wiki/Quotation_mark
|
||||||
"""
|
"""
|
||||||
|
|
||||||
SYMBOLS = [
|
SYMBOLS = {
|
||||||
"\u0022", # Quotation mark
|
"\u0027" : "Straight single quotation mark",
|
||||||
"\u0027", # Apostrophe
|
"\u0022" : "Straight double quotation mark",
|
||||||
"\u00ab", # Left-pointing double angle quotation mark
|
|
||||||
"\u00bb", # Right-pointing double angle quotation mark
|
"\u2018" : "Left single quotation mark",
|
||||||
"\u2018", # Left single quotation mark
|
"\u2019" : "Right single quotation mark",
|
||||||
"\u2019", # Right single quotation mark
|
"\u201a" : "Single low-9 quotation mark",
|
||||||
"\u201a", # Single low-9 quotation mark
|
"\u201b" : "Single high-reversed-9 quotation mark",
|
||||||
"\u201b", # Single high-reversed-9 quotation mark
|
"\u201c" : "Left double quotation mark",
|
||||||
"\u201c", # Left double quotation mark
|
"\u201d" : "Right double quotation mark",
|
||||||
"\u201d", # Right double quotation mark
|
"\u201e" : "Double low-9 quotation mark",
|
||||||
"\u201e", # Double low-9 quotation mark
|
"\u201f" : "Double high-reversed-9 quotation mark",
|
||||||
"\u201f", # Double high-reversed-9 quotation mark
|
"\u2e42" : "Double low-reversed-9 quotation mark",
|
||||||
"\u2039", # Single left-pointing angle quotation mark
|
|
||||||
"\u203a", # Single right-pointing angle quotation mark
|
"\u2039" : "Single left-pointing angle quotation mark",
|
||||||
"\u2e42", # Double low-reversed-9 quotation mark
|
"\u203a" : "Single right-pointing angle quotation mark",
|
||||||
"\u300c", # Left corner bracket
|
"\u00ab" : "Left-pointing double angle quotation mark",
|
||||||
"\u300d", # Right corner bracket
|
"\u00bb" : "Right-pointing double angle quotation mark",
|
||||||
"\u300e", # Left white corner bracket
|
|
||||||
"\u300f", # Right white corner bracket
|
"\u300c" : "Left corner bracket",
|
||||||
]
|
"\u300d" : "Right corner bracket",
|
||||||
|
"\u300e" : "Left white corner bracket",
|
||||||
|
"\u300f" : "Right white corner bracket",
|
||||||
|
}
|
||||||
|
|
||||||
# END Class nwQuotes
|
# END Class nwQuotes
|
||||||
|
|
||||||
|
|||||||
+100
-4
@@ -30,17 +30,17 @@
|
|||||||
import logging
|
import logging
|
||||||
import nw
|
import nw
|
||||||
|
|
||||||
from PyQt5.QtGui import QColor, QPalette, QPainter
|
from PyQt5.QtGui import QColor, QPalette, QPainter, QFontMetrics
|
||||||
from PyQt5.QtCore import (
|
from PyQt5.QtCore import (
|
||||||
Qt, QRect, QPoint, QSize, QRectF, QPropertyAnimation, pyqtProperty
|
Qt, QRect, QPoint, QSize, QRectF, QPropertyAnimation, pyqtProperty
|
||||||
)
|
)
|
||||||
from PyQt5.QtWidgets import (
|
from PyQt5.QtWidgets import (
|
||||||
QGridLayout, QLabel, QWidget, QVBoxLayout, QHBoxLayout, QSizePolicy,
|
QGridLayout, QLabel, QWidget, QVBoxLayout, QHBoxLayout, QSizePolicy,
|
||||||
QAbstractButton, QDialog, QTabWidget, QTabBar, QStyle,
|
QAbstractButton, QDialog, QTabWidget, QTabBar, QStyle, QDialogButtonBox,
|
||||||
QStylePainter, QStyleOptionTab
|
QStylePainter, QStyleOptionTab, QListWidget, QListWidgetItem, QFrame
|
||||||
)
|
)
|
||||||
|
|
||||||
from nw.constants import nwUnicode
|
from nw.constants import nwUnicode, nwQuotes
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -436,3 +436,99 @@ class VerticalTabBar(QTabBar):
|
|||||||
return
|
return
|
||||||
|
|
||||||
# END Class VerticalTabBar
|
# END Class VerticalTabBar
|
||||||
|
|
||||||
|
# =============================================================================================== #
|
||||||
|
# Quotes Dialog
|
||||||
|
# =============================================================================================== #
|
||||||
|
|
||||||
|
class QuotesDialog(QDialog):
|
||||||
|
|
||||||
|
def __init__(self, theParent=None, currentQuote="\""):
|
||||||
|
QDialog.__init__(self, parent=theParent)
|
||||||
|
|
||||||
|
self.mainConf = nw.CONFIG
|
||||||
|
|
||||||
|
self.outerBox = QVBoxLayout()
|
||||||
|
self.innerBox = QHBoxLayout()
|
||||||
|
self.labelBox = QVBoxLayout()
|
||||||
|
|
||||||
|
self.selectedQuote = currentQuote
|
||||||
|
|
||||||
|
qMetrics = QFontMetrics(self.font())
|
||||||
|
pxW = 7*qMetrics.boundingRectChar("M").width()
|
||||||
|
pxH = 7*qMetrics.boundingRectChar("M").height()
|
||||||
|
pxH = 7*qMetrics.boundingRectChar("M").height()
|
||||||
|
|
||||||
|
lblFont = self.font()
|
||||||
|
lblFont.setPointSizeF(4*lblFont.pointSizeF())
|
||||||
|
|
||||||
|
# Preview Label
|
||||||
|
self.previewLabel = QLabel(currentQuote)
|
||||||
|
self.previewLabel.setFont(lblFont)
|
||||||
|
self.previewLabel.setFixedSize(QSize(pxW, pxH))
|
||||||
|
self.previewLabel.setAlignment(Qt.AlignCenter)
|
||||||
|
self.previewLabel.setFrameStyle(QFrame.Box | QFrame.Plain)
|
||||||
|
|
||||||
|
# Quote Symbols
|
||||||
|
self.listBox = QListWidget()
|
||||||
|
self.listBox.itemSelectionChanged.connect(self._selectedSymbol)
|
||||||
|
|
||||||
|
minSize = 100
|
||||||
|
for sKey, sLabel in nwQuotes.SYMBOLS.items():
|
||||||
|
theText = "[ %s ] %s" % (sKey, sLabel)
|
||||||
|
minSize = max(minSize, qMetrics.boundingRect(theText).width())
|
||||||
|
qtItem = QListWidgetItem(theText)
|
||||||
|
qtItem.setData(Qt.UserRole, sKey)
|
||||||
|
self.listBox.addItem(qtItem)
|
||||||
|
if sKey == currentQuote:
|
||||||
|
self.listBox.setCurrentItem(qtItem)
|
||||||
|
|
||||||
|
self.listBox.setMinimumWidth(minSize + self.mainConf.pxInt(40))
|
||||||
|
self.listBox.setMinimumHeight(self.mainConf.pxInt(150))
|
||||||
|
|
||||||
|
# Buttons
|
||||||
|
self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
|
||||||
|
self.buttonBox.accepted.connect(self._doAccept)
|
||||||
|
self.buttonBox.rejected.connect(self._doReject)
|
||||||
|
|
||||||
|
# Assemble
|
||||||
|
self.labelBox.addWidget(self.previewLabel, 0, Qt.AlignTop)
|
||||||
|
self.labelBox.addStretch(1)
|
||||||
|
|
||||||
|
self.innerBox.addLayout(self.labelBox)
|
||||||
|
self.innerBox.addWidget(self.listBox)
|
||||||
|
|
||||||
|
self.outerBox.addLayout(self.innerBox)
|
||||||
|
self.outerBox.addWidget(self.buttonBox)
|
||||||
|
|
||||||
|
self.setLayout(self.outerBox)
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
##
|
||||||
|
# Slots
|
||||||
|
##
|
||||||
|
|
||||||
|
def _selectedSymbol(self):
|
||||||
|
"""Update the preview label and the selected quote style.
|
||||||
|
"""
|
||||||
|
selItems = self.listBox.selectedItems()
|
||||||
|
if selItems:
|
||||||
|
theSymbol = selItems[0].data(Qt.UserRole)
|
||||||
|
self.previewLabel.setText(theSymbol)
|
||||||
|
self.selectedQuote = theSymbol
|
||||||
|
return
|
||||||
|
|
||||||
|
def _doAccept(self):
|
||||||
|
"""Ok button clicked.
|
||||||
|
"""
|
||||||
|
self.accept()
|
||||||
|
return
|
||||||
|
|
||||||
|
def _doReject(self):
|
||||||
|
"""Cancel button clicked.
|
||||||
|
"""
|
||||||
|
self.reject()
|
||||||
|
return
|
||||||
|
|
||||||
|
# END Class QuotesDialog
|
||||||
|
|||||||
Reference in New Issue
Block a user