diff --git a/hexrd/ui/config_dialog.py b/hexrd/ui/config_dialog.py index 467a9a22d..387c7bacd 100644 --- a/hexrd/ui/config_dialog.py +++ b/hexrd/ui/config_dialog.py @@ -1,3 +1,5 @@ +from PySide2.QtWidgets import QMessageBox + from hexrd.ui.hexrd_config import HexrdConfig from hexrd.ui.ui_loader import UiLoader @@ -18,9 +20,11 @@ def exec_(self): def update_gui(self): self.max_cpus_ui = self.max_cpus_config + self.font_size_ui = self.font_size_config def update_config(self): self.max_cpus_config = self.max_cpus_ui + self.font_size_config = self.font_size_ui def on_accepted(self): self.update_config() @@ -40,6 +44,14 @@ def max_cpus_ui(self, v): self.ui.max_cpus.setValue(v) + @property + def font_size_ui(self): + return self.ui.font_size.value() + + @font_size_ui.setter + def font_size_ui(self, v): + self.ui.font_size.setValue(v) + @property def max_cpus_config(self): return HexrdConfig().max_cpus @@ -47,3 +59,26 @@ def max_cpus_config(self): @max_cpus_config.setter def max_cpus_config(self, v): HexrdConfig().max_cpus = v + + @property + def font_size_config(self): + return HexrdConfig().font_size + + @font_size_config.setter + def font_size_config(self, v): + if self.font_size_config == v: + # Just return + return + + # Warn the user that they must restart the application for all + # widgets to be updated properly. + msg = ( + 'Upon changing the font size, many (but not all) widgets ' + 'will update immediately.\n\nTo ensure all widgets are updated, ' + 'please close the application normally via the "X" button in the ' + 'top corner of the main window, and then start the application ' + 'again.' + ) + QMessageBox.warning(self.ui, 'WARNING', msg) + + HexrdConfig().font_size = v diff --git a/hexrd/ui/hexrd_config.py b/hexrd/ui/hexrd_config.py index 40e50fe3b..734ba8256 100644 --- a/hexrd/ui/hexrd_config.py +++ b/hexrd/ui/hexrd_config.py @@ -7,6 +7,7 @@ from PySide2.QtCore import Signal, QCoreApplication, QObject, QSettings, QTimer import h5py +import matplotlib import numpy as np import yaml @@ -296,6 +297,9 @@ def __init__(self): self._previous_structureless_calibration_picks_data = None self.image_mode = constants.ViewType.raw + # Make sure that the matplotlib font size matches the application + self.font_size = self.font_size + self.setup_logging() default_conv = constants.DEFAULT_EULER_ANGLE_CONVENTION @@ -370,6 +374,7 @@ def _attributes_to_persist(self): ('config_calibration', None), ('config_indexing', None), ('config_image', None), + ('font_size', 11), ('images_dir', None), ('working_dir', None), ('hdf5_path', []), @@ -2316,6 +2321,25 @@ def set_tab_images(self, v): tab_images = property(tab_images, set_tab_images) + @property + def font_size(self): + return QCoreApplication.instance().font().pointSize() + + @font_size.setter + def font_size(self, v): + # Make sure this is an int + v = int(v) + + app = QCoreApplication.instance() + font = app.font() + font.setPointSize(v) + app.setFont(font) + + # Update the matplotlib font size too + if matplotlib.rcParams['font.size'] != v: + matplotlib.rcParams.update({'font.size': v}) + self.deep_rerender_needed.emit() + def set_euler_angle_convention(self, new_conv, convert_config=True): allowed_conventions = [ diff --git a/hexrd/ui/resources/ui/config_dialog.ui b/hexrd/ui/resources/ui/config_dialog.ui index 79aa7d6b1..f1c698294 100644 --- a/hexrd/ui/resources/ui/config_dialog.ui +++ b/hexrd/ui/resources/ui/config_dialog.ui @@ -7,13 +7,30 @@ 0 0 374 - 94 + 122 HEXRDGUI Configuration + + + + <html><head/><body><p>Limit the number of CPUs used for multiprocessing.</p></body></html> + + + Limit CPUs? + + + + + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + @@ -27,17 +44,7 @@ - - - - <html><head/><body><p>Limit the number of CPUs used for multiprocessing.</p></body></html> - - - Limit CPUs? - - - - + Qt::Vertical @@ -50,10 +57,26 @@ - - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + Font Size: + + + font_size + + + + + + + 1 + + + 10000 + + + 11 @@ -62,6 +85,7 @@ limit_cpus max_cpus + font_size