2323 QApplication ,
2424 QFontDialog ,
2525 QInputDialog ,
26+ QMenu ,
2627 QMessageBox ,
2728 QTextBrowser ,
2829 QTextEdit ,
30+ QToolButton ,
2931 QToolTip ,
3032 QVBoxLayout ,
3133)
@@ -156,13 +158,29 @@ def __init__(self, parent, name=None, run_workbox=False, standalone=False):
156158 self .uiAutoCompleteCaseSensitiveACT .toggled .connect (self .setCaseSensitive )
157159
158160 self .uiSelectMonospaceFontACT .triggered .connect (
159- partial (self .selectFont , monospace = True )
161+ partial (self .selectFont , origFont = None , monospace = True )
160162 )
161163 self .uiSelectProportionalFontACT .triggered .connect (
162- partial (self .selectFont , proportional = True )
164+ partial (self .selectFont , origFont = None , proportional = True )
163165 )
164166 self .uiSelectAllFontACT .triggered .connect (
165- partial (self .selectFont , monospace = True , proportional = True )
167+ partial (self .selectFont , origFont = None , monospace = True , proportional = True )
168+ )
169+ self .uiSelectGuiFontsMENU .triggered .connect (
170+ partial (self .selectGuiFont , monospace = True , proportional = True )
171+ )
172+
173+ self .uiDecreaseCodeFontSizeACT .triggered .connect (
174+ partial (self .adjustFontSize , "Code" , - 1 )
175+ )
176+ self .uiIncreaseCodeFontSizeACT .triggered .connect (
177+ partial (self .adjustFontSize , "Code" , 1 )
178+ )
179+ self .uiDecreaseGuiFontSizeACT .triggered .connect (
180+ partial (self .adjustFontSize , "Gui" , - 1 )
181+ )
182+ self .uiIncreaseGuiFontSizeACT .triggered .connect (
183+ partial (self .adjustFontSize , "Gui" , 1 )
166184 )
167185
168186 # Setup ability to cycle completer mode, and create action for each mode
@@ -675,7 +693,17 @@ def getPrevCommand(self):
675693
676694 def wheelEvent (self , event ):
677695 """adjust font size on ctrl+scrollWheel"""
678- if event .modifiers () == Qt .KeyboardModifier .ControlModifier :
696+ mods = event .modifiers ()
697+ ctrl = Qt .KeyboardModifier .ControlModifier
698+ shift = Qt .KeyboardModifier .ShiftModifier
699+ alt = Qt .KeyboardModifier .AltModifier
700+
701+ # Assign mods by functionality. Using shift | alt for gui, because just shift or
702+ # just alt has existing functionality which also processes.
703+ code_font_mod = ctrl
704+ gui_font_mod = shift | alt
705+
706+ if mods == code_font_mod or mods == gui_font_mod :
679707 # WheelEvents can be emitted in a cluster, but we only want one at a time
680708 # (ie to change font size by 1, rather than 2 or 3). Let's bail if previous
681709 # font-resize wheel event was within a certain threshhold.
@@ -690,20 +718,43 @@ def wheelEvent(self, event):
690718 if hasattr (event , 'delta' ): # Qt4
691719 delta = event .delta ()
692720 else : # QT5
693- delta = event .angleDelta ().y ()
721+ # Also holding alt reverses the data in angleDelta (!?), so transpose to
722+ # get correct value
723+ angleDelta = event .angleDelta ()
724+ if mods == gui_font_mod :
725+ angleDelta = angleDelta .transposed ()
726+ delta = angleDelta .y ()
694727
695728 # convert delta to +1 or -1, depending
696729 delta = delta // abs (delta )
697730 minSize = 5
698731 maxSize = 50
699- font = self .console ().font ()
732+ if mods == code_font_mod :
733+ font = self .console ().font ()
734+ elif mods == gui_font_mod :
735+ font = self .font ()
700736 newSize = font .pointSize () + delta
701737 newSize = max (min (newSize , maxSize ), minSize )
702738
703- self .setFontSize (newSize )
739+ # If only ctrl was pressed, adjust code font size, otherwise adjust gui font
740+ # size
741+ if mods == code_font_mod :
742+ self .setFontSize (newSize )
743+ elif mods == gui_font_mod :
744+ self .setGuiFont (newSize = newSize )
704745 else :
705746 Window .wheelEvent (self , event )
706747
748+ def adjustFontSize (self , kind , delta ):
749+ if kind == "Code" :
750+ size = self .console ().font ().pointSize ()
751+ size += delta
752+ self .setFontSize (size )
753+ else :
754+ size = self .font ().pointSize ()
755+ size += delta
756+ self .setGuiFont (newSize = size )
757+
707758 def handleMenuHovered (self , action ):
708759 """Qt4 doesn't have a ToolTipsVisible method, so we fake it"""
709760 # Don't show if it's just the text of the action
@@ -721,15 +772,18 @@ def handleMenuHovered(self, action):
721772 menu = action .parent ()
722773 QToolTip .showText (QCursor .pos (), text , menu )
723774
724- def selectFont (self , monospace = False , proportional = False ):
775+ def selectFont (
776+ self , origFont = None , monospace = False , proportional = False , doGui = False
777+ ):
725778 """Present a QFontChooser dialog, offering, monospace, proportional, or all
726779 fonts, based on user choice. If a font is chosen, set it on the console and
727780 workboxes.
728781
729782 Args:
730783 action (QAction): menu action associated with chosen font
731784 """
732- origFont = self .console ().font ()
785+ if origFont is None :
786+ origFont = self .console ().font ()
733787 curFontFamily = origFont .family ()
734788
735789 if monospace and proportional :
@@ -750,9 +804,45 @@ def selectFont(self, monospace=False, proportional=False):
750804 newFont , okClicked = QFontDialog .getFont (origFont , self , title , options = options )
751805
752806 if okClicked :
753- self .console ().setConsoleFont (newFont )
754- self .setWorkboxFontBasedOnConsole ()
755- self .setEditorChooserFontBasedOnConsole ()
807+ if doGui :
808+ self .setGuiFont (newFont = newFont )
809+ else :
810+ self .console ().setConsoleFont (newFont )
811+ self .setWorkboxFontBasedOnConsole ()
812+ self .setEditorChooserFontBasedOnConsole ()
813+
814+ def selectGuiFont (self , monospace = True , proportional = True ):
815+ font = self .font ()
816+ self .selectFont (
817+ origFont = font , monospace = monospace , proportional = proportional , doGui = True
818+ )
819+
820+ def setGuiFont (self , newSize = None , newFont = None ):
821+ current = self .uiWorkboxTAB .currentWidget ()
822+ if not current :
823+ return
824+
825+ tabbar_class = current .tabBar ().__class__
826+ menubar_class = self .menuBar ().__class__
827+ label_class = self .uiStatusLBL .__class__
828+ children = self .findChildren (tabbar_class , QtCore .QRegExp (".*" ))
829+ children .extend (self .findChildren (menubar_class , QtCore .QRegExp (".*" )))
830+ children .extend (self .findChildren (label_class , QtCore .QRegExp (".*" )))
831+ children .extend (self .findChildren (QToolButton , QtCore .QRegExp (".*" )))
832+ children .extend (self .findChildren (QMenu , QtCore .QRegExp (".*" )))
833+ children .extend (self .findChildren (QToolTip , QtCore .QRegExp (".*" )))
834+
835+ for child in children :
836+ if newFont is None :
837+ newFont = child .font ()
838+ if newSize is None :
839+ newSize = newFont .pointSize ()
840+ newFont .setPointSize (newSize )
841+ child .setFont (newFont )
842+ # child.resize()
843+ self .setFont (newFont )
844+ QToolTip .setFont (newFont )
845+ # self.resize()
756846
757847 def setFontSize (self , newSize ):
758848 """Update the font size in the console and current workbox.
@@ -1037,7 +1127,22 @@ def keyPressEvent(self, event):
10371127 | Qt .KeyboardModifier .ControlModifier
10381128 | Qt .KeyboardModifier .ShiftModifier
10391129 ):
1040- pass
1130+
1131+ kind = None
1132+ if event .modifiers () & Qt .KeyboardModifier .ControlModifier :
1133+ kind = "Code"
1134+ elif event .modifiers () & Qt .KeyboardModifier .AltModifier :
1135+ kind = "Gui"
1136+
1137+ delta = None
1138+ if event .key () == Qt .Key .Key_Plus :
1139+ delta = 1
1140+ elif event .key () == Qt .Key .Key_Minus :
1141+ delta = - 1
1142+
1143+ if kind and delta :
1144+ self .adjustFontSize (kind , delta )
1145+
10411146 else :
10421147 super (LoggerWindow , self ).keyPressEvent (event )
10431148
@@ -1074,6 +1179,7 @@ def recordPrefs(self, manual=False):
10741179 'wordWrap' : self .uiWordWrapACT .isChecked (),
10751180 'clearBeforeRunning' : self .uiClearBeforeRunningACT .isChecked (),
10761181 'toolbarStates' : str (self .saveState ().toHex (), 'utf-8' ),
1182+ 'guiFont' : self .font ().toString (),
10771183 'consoleFont' : self .console ().font ().toString (),
10781184 'uiAutoSaveSettingssACT' : self .uiAutoSaveSettingssACT .isChecked (),
10791185 'uiAutoPromptACT' : self .uiAutoPromptACT .isChecked (),
@@ -1356,12 +1462,18 @@ def restorePrefs(self, skip_geom=False):
13561462 # Ensure the correct workbox stack page is shown
13571463 self .update_workbox_stack ()
13581464
1359- _font = pref .get ('consoleFont' , None )
1360- if _font :
1465+ fontStr = pref .get ('consoleFont' , None )
1466+ if fontStr :
13611467 font = QFont ()
1362- if QtCompat .QFont .fromString (font , _font ):
1468+ if QtCompat .QFont .fromString (font , fontStr ):
13631469 self .console ().setConsoleFont (font )
13641470
1471+ guiFontStr = pref .get ('guiFont' , None )
1472+ if guiFontStr :
1473+ guiFont = QFont ()
1474+ if guiFont .fromString (guiFontStr ):
1475+ self .setGuiFont (newFont = guiFont )
1476+
13651477 self .dont_ask_again = pref .get ('dont_ask_again' , [])
13661478
13671479 # Allow any plugins to restore their own preferences
0 commit comments