# !/usr/bin/env python
#
# border_config.py
"""
Dialog for configuring borders for charts.
"""
#
# Copyright (c) 2019-2020 Dominic Davis-Foster <dominic@davis-foster.co.uk>
#
# This file was originally part of GunShotMatch
# Copyright (c) 2019 Dominic Davis-Foster <dominic@davis-foster.co.uk>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.
#
# 3rd party
import wx # type: ignore
__all__ = ["border_config"]
# begin wxGlade: dependencies
# end wxGlade
# begin wxGlade: extracode
# end wxGlade
[docs]class border_config(wx.Dialog):
r"""
:param parent:
:param chromatogram_figure:
:param \*args:
:param \*\*kwds:
"""
def __init__(self, parent: wx.Window, chromatogram_figure, *args, **kwds):
self.chromatogram_figure = chromatogram_figure
args = (parent, ) + args
# begin wxGlade: border_config.__init__
kwds["style"] = kwds.get("style", 0) | wx.DEFAULT_DIALOG_STYLE
wx.Dialog.__init__(self, *args, **kwds)
self.main_panel = wx.Panel(self, wx.ID_ANY)
self.top_border_value = wx.SpinCtrlDouble(self.main_panel, wx.ID_ANY, "0.9", min=0.0, max=2.0)
self.top_border_value.SetDigits(3)
self.bottom_border_value = wx.SpinCtrlDouble(self.main_panel, wx.ID_ANY, "0.125", min=0.0, max=2.0)
self.bottom_border_value.SetDigits(3)
self.left_border_value = wx.SpinCtrlDouble(self.main_panel, wx.ID_ANY, "0.1", min=0.0, max=2.0)
self.left_border_value.SetDigits(3)
self.right_border_value = wx.SpinCtrlDouble(self.main_panel, wx.ID_ANY, "0.97", min=0.0, max=2.0)
self.right_border_value.SetDigits(3)
self.tight_layout_button = wx.Button(self.main_panel, wx.ID_ANY, "Tight Layout")
self.close_btn = wx.Button(self.main_panel, wx.ID_ANY, "Close")
self.__set_properties()
self.__do_layout()
self.Bind(wx.EVT_SPINCTRLDOUBLE, self.update_borders, self.top_border_value)
self.Bind(wx.EVT_TEXT, self.update_borders, self.top_border_value)
self.Bind(wx.EVT_TEXT_ENTER, self.update_borders, self.top_border_value)
self.Bind(wx.EVT_SPINCTRLDOUBLE, self.update_borders, self.bottom_border_value)
self.Bind(wx.EVT_TEXT, self.update_borders, self.bottom_border_value)
self.Bind(wx.EVT_TEXT_ENTER, self.update_borders, self.bottom_border_value)
self.Bind(wx.EVT_SPINCTRLDOUBLE, self.update_borders, self.left_border_value)
self.Bind(wx.EVT_TEXT, self.update_borders, self.left_border_value)
self.Bind(wx.EVT_TEXT_ENTER, self.update_borders, self.left_border_value)
self.Bind(wx.EVT_SPINCTRLDOUBLE, self.update_borders, self.right_border_value)
self.Bind(wx.EVT_TEXT, self.update_borders, self.right_border_value)
self.Bind(wx.EVT_TEXT_ENTER, self.update_borders, self.right_border_value)
self.Bind(wx.EVT_BUTTON, self.apply_tight_layout, self.tight_layout_button)
self.Bind(wx.EVT_BUTTON, self.close_dialog, self.close_btn)
# end wxGlade
def __set_properties(self) -> None:
# begin wxGlade: border_config.__set_properties
self.SetTitle("Configure Borders")
self.top_border_value.SetMinSize((120, -1))
self.top_border_value.SetIncrement(0.005)
self.bottom_border_value.SetMinSize((120, -1))
self.bottom_border_value.SetIncrement(0.005)
self.left_border_value.SetMinSize((120, -1))
self.left_border_value.SetIncrement(0.005)
self.right_border_value.SetMinSize((120, -1))
self.right_border_value.SetIncrement(0.005)
self.tight_layout_button.SetMinSize((120, -1))
# end wxGlade
def __do_layout(self) -> None:
# begin wxGlade: border_config.__do_layout
parent_sizer = wx.BoxSizer(wx.VERTICAL)
main_sizer = wx.BoxSizer(wx.VERTICAL)
spinner_grid = wx.FlexGridSizer(4, 2, 4, 7)
borders_label = wx.StaticText(self.main_panel, wx.ID_ANY, "Configure Borders")
borders_label.SetFont(wx.Font(12, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, 0, ''))
main_sizer.Add(borders_label, 0, wx.BOTTOM, 7)
top_border_label = wx.StaticText(self.main_panel, wx.ID_ANY, "Top: ")
spinner_grid.Add(top_border_label, 0, wx.ALIGN_CENTER_VERTICAL, 0)
spinner_grid.Add(self.top_border_value, 0, wx.ALIGN_CENTER_VERTICAL, 0)
bottom_border_label = wx.StaticText(self.main_panel, wx.ID_ANY, "Bottom: ")
spinner_grid.Add(bottom_border_label, 0, wx.ALIGN_CENTER_VERTICAL, 0)
spinner_grid.Add(self.bottom_border_value, 0, wx.ALIGN_CENTER_VERTICAL, 0)
left_border_label = wx.StaticText(self.main_panel, wx.ID_ANY, "Left: ")
spinner_grid.Add(left_border_label, 0, wx.ALIGN_CENTER_VERTICAL, 0)
spinner_grid.Add(self.left_border_value, 0, wx.ALIGN_CENTER_VERTICAL, 0)
right_border_label = wx.StaticText(self.main_panel, wx.ID_ANY, "Right: ")
spinner_grid.Add(right_border_label, 0, wx.ALIGN_CENTER_VERTICAL, 0)
spinner_grid.Add(self.right_border_value, 0, wx.ALIGN_CENTER_VERTICAL, 0)
main_sizer.Add(spinner_grid, 0, 0, 0)
main_sizer.Add(self.tight_layout_button, 0, wx.ALIGN_CENTER | wx.TOP, 5)
static_line_9 = wx.StaticLine(self.main_panel, wx.ID_ANY)
main_sizer.Add(static_line_9, 0, wx.BOTTOM | wx.EXPAND | wx.TOP, 5)
main_sizer.Add(self.close_btn, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT, 5)
self.main_panel.SetSizer(main_sizer)
parent_sizer.Add(self.main_panel, 1, wx.ALL | wx.EXPAND, 10)
self.SetSizer(parent_sizer)
parent_sizer.Fit(self)
self.Layout()
# end wxGlade
[docs] def update_borders(self, _) -> None: # wxGlade: border_config.<event_handler>
self.chromatogram_figure.subplots_adjust(
self.left_border_value.GetValue(),
self.bottom_border_value.GetValue(),
self.right_border_value.GetValue(),
self.top_border_value.GetValue()
)
self.chromatogram_figure.canvas.draw_idle()
[docs] def apply_tight_layout(self, _) -> None: # wxGlade: border_config.<event_handler>
self.chromatogram_figure.tight_layout()
self.chromatogram_figure.canvas.draw_idle()
# set SpinCtrls to new values
self.right_border_value.SetValue(self.chromatogram_figure.subplotpars.right)
self.left_border_value.SetValue(self.chromatogram_figure.subplotpars.left)
self.bottom_border_value.SetValue(self.chromatogram_figure.subplotpars.bottom)
self.top_border_value.SetValue(self.chromatogram_figure.subplotpars.top)
[docs] def close_dialog(self, _) -> None: # wxGlade: border_config.<event_handler>
self.Destroy()
# end of class border_config