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.
@@ -1050,7 +1140,22 @@ def keyPressEvent(self, event):
10501140 | Qt .KeyboardModifier .ControlModifier
10511141 | Qt .KeyboardModifier .ShiftModifier
10521142 ):
1053- pass
1143+
1144+ kind = None
1145+ if event .modifiers () & Qt .Key .Key_Control :
1146+ kind = "Code"
1147+ elif event .modifiers () & Qt .Key .Key_Alt :
1148+ kind = "Gui"
1149+
1150+ delta = None
1151+ if event .key () & Qt .Key .Key_Plus :
1152+ delta = 1
1153+ elif event .key () & Qt .Key .Key_Minus :
1154+ delta = - 1
1155+
1156+ if kind and delta :
1157+ self .adjustFontSize (kind , delta )
1158+
10541159 else :
10551160 super (LoggerWindow , self ).keyPressEvent (event )
10561161
@@ -1087,6 +1192,7 @@ def recordPrefs(self, manual=False):
10871192 'wordWrap' : self .uiWordWrapACT .isChecked (),
10881193 'clearBeforeRunning' : self .uiClearBeforeRunningACT .isChecked (),
10891194 'toolbarStates' : str (self .saveState ().toHex (), 'utf-8' ),
1195+ 'guiFont' : self .font ().toString (),
10901196 'consoleFont' : self .console ().font ().toString (),
10911197 'uiAutoSaveSettingssACT' : self .uiAutoSaveSettingssACT .isChecked (),
10921198 'uiAutoPromptACT' : self .uiAutoPromptACT .isChecked (),
@@ -1369,12 +1475,18 @@ def restorePrefs(self, skip_geom=False):
13691475 # Ensure the correct workbox stack page is shown
13701476 self .update_workbox_stack ()
13711477
1372- _font = pref .get ('consoleFont' , None )
1373- if _font :
1478+ fontStr = pref .get ('consoleFont' , None )
1479+ if fontStr :
13741480 font = QFont ()
1375- if QtCompat .QFont .fromString (font , _font ):
1481+ if QtCompat .QFont .fromString (font , fontStr ):
13761482 self .console ().setConsoleFont (font )
13771483
1484+ guiFontStr = pref .get ('guiFont' , None )
1485+ if guiFontStr :
1486+ guiFont = QFont ()
1487+ if guiFont .fromString (guiFontStr ):
1488+ self .setGuiFont (newFont = guiFont )
1489+
13781490 self .dont_ask_again = pref .get ('dont_ask_again' , [])
13791491
13801492 # Allow any plugins to restore their own preferences
0 commit comments