1- from typing import List , Optional , Tuple , Union
1+ from typing import List , Optional , Tuple , Union , Dict
22from functools import lru_cache
33from xml .sax .saxutils import escape
44
2727from Orange .widgets .utils .state_summary import format_summary_details
2828from Orange .widgets .visualize .owscatterplotgraph import LegendItem
2929from Orange .widgets .visualize .utils .customizableplot import Updater , \
30- BaseParameterSetter as Setter
30+ CommonParameterSetter
3131from Orange .widgets .visualize .utils .plotutils import AxisItem , \
3232 HelpEventDelegate
3333from Orange .widgets .widget import OWWidget , Input , Output , Msg
@@ -65,40 +65,79 @@ def mouseClickEvent(self, ev):
6565 ev .accept ()
6666
6767
68- class BarPlotGraph ( gui . OWComponent , pg . PlotWidget , Setter ):
68+ class ParameterSetter ( CommonParameterSetter ):
6969 GRID_LABEL , SHOW_GRID_LABEL = "Gridlines" , "Show"
7070 DEFAULT_ALPHA_GRID , DEFAULT_SHOW_GRID = 80 , True
7171 BOTTOM_AXIS_LABEL , IS_VERTICAL_LABEL = "Bottom axis" , "Vertical tick text"
72- initial_settings = {
73- Setter .LABELS_BOX : {
74- Setter .FONT_FAMILY_LABEL : Updater .FONT_FAMILY_SETTING ,
75- Setter .TITLE_LABEL : Updater .FONT_SETTING ,
76- Setter .AXIS_TITLE_LABEL : Updater .FONT_SETTING ,
77- Setter .AXIS_TICKS_LABEL : Updater .FONT_SETTING ,
78- Setter .LEGEND_LABEL : Updater .FONT_SETTING ,
79- },
80- Setter .ANNOT_BOX : {
81- Setter .TITLE_LABEL : {Setter .TITLE_LABEL : ("" , "" )},
82- },
83- Setter .PLOT_BOX : {
84- GRID_LABEL : {
85- SHOW_GRID_LABEL : (None , True ),
86- Updater .ALPHA_LABEL : (range (0 , 255 , 5 ), DEFAULT_ALPHA_GRID ),
72+
73+ def __init__ (self , master ):
74+ self .grid_settings : Dict = None
75+ self .master : BarPlotGraph = master
76+ super ().__init__ ()
77+
78+ def update_setters (self ):
79+ self .grid_settings = {
80+ Updater .ALPHA_LABEL : self .DEFAULT_ALPHA_GRID ,
81+ self .SHOW_GRID_LABEL : self .DEFAULT_SHOW_GRID ,
82+ }
83+
84+ self .initial_settings = {
85+ self .LABELS_BOX : {
86+ self .FONT_FAMILY_LABEL : self .FONT_FAMILY_SETTING ,
87+ self .TITLE_LABEL : self .FONT_SETTING ,
88+ self .AXIS_TITLE_LABEL : self .FONT_SETTING ,
89+ self .AXIS_TICKS_LABEL : self .FONT_SETTING ,
90+ self .LEGEND_LABEL : self .FONT_SETTING ,
91+ },
92+ self .ANNOT_BOX : {
93+ self .TITLE_LABEL : {self .TITLE_LABEL : ("" , "" )},
8794 },
88- BOTTOM_AXIS_LABEL : {
89- IS_VERTICAL_LABEL : (None , True ),
95+ self .PLOT_BOX : {
96+ self .GRID_LABEL : {
97+ self .SHOW_GRID_LABEL : (None , True ),
98+ Updater .ALPHA_LABEL : (range (0 , 255 , 5 ),
99+ self .DEFAULT_ALPHA_GRID ),
100+ },
101+ self .BOTTOM_AXIS_LABEL : {
102+ self .IS_VERTICAL_LABEL : (None , True ),
103+ },
90104 },
91- },
92- }
105+ }
106+
107+ def update_grid (** settings ):
108+ self .grid_settings .update (** settings )
109+ self .master .showGrid (y = self .grid_settings [self .SHOW_GRID_LABEL ],
110+ alpha = self .grid_settings [Updater .ALPHA_LABEL ] / 255 )
111+
112+ def update_bottom_axis (** settings ):
113+ axis = self .master .getAxis ("bottom" )
114+ axis .setRotateTicks (settings [self .IS_VERTICAL_LABEL ])
115+
116+ self ._setters [self .PLOT_BOX ] = {
117+ self .GRID_LABEL : update_grid ,
118+ self .BOTTOM_AXIS_LABEL : update_bottom_axis ,
119+ }
120+
121+ @property
122+ def title_item (self ):
123+ return self .master .getPlotItem ().titleLabel
124+
125+ @property
126+ def axis_items (self ):
127+ return [value ["item" ] for value in
128+ self .master .getPlotItem ().axes .values ()]
129+
130+ @property
131+ def legend_items (self ):
132+ return self .master .legend .items
133+
134+
135+ class BarPlotGraph (gui .OWComponent , pg .PlotWidget ):
93136 selection_changed = Signal (list )
94137 bar_width = 0.8
95138
96139 def __init__ (self , master , parent = None ):
97140 gui .OWComponent .__init__ (self , master )
98- self .grid_settings = {
99- Updater .ALPHA_LABEL : self .DEFAULT_ALPHA_GRID ,
100- self .SHOW_GRID_LABEL : self .DEFAULT_SHOW_GRID ,
101- }
102141 self .selection = []
103142 self .master : OWBarPlot = master
104143 self .state : int = SELECT
@@ -115,14 +154,17 @@ def __init__(self, master, parent=None):
115154 self .hideAxis ("bottom" )
116155 self .getPlotItem ().buttonsHidden = True
117156 self .getPlotItem ().setContentsMargins (10 , 0 , 0 , 10 )
118- self .showGrid (y = self .DEFAULT_SHOW_GRID ,
119- alpha = self .DEFAULT_ALPHA_GRID / 255 )
120157 self .getViewBox ().setMouseMode (pg .ViewBox .PanMode )
121158 self .legend = self ._create_legend ()
122159
123160 self .tooltip_delegate = HelpEventDelegate (self .help_event )
124161 self .scene ().installEventFilter (self .tooltip_delegate )
125162
163+ self .parameter_setter = ParameterSetter (self )
164+
165+ self .showGrid (y = self .parameter_setter .DEFAULT_SHOW_GRID ,
166+ alpha = self .parameter_setter .DEFAULT_ALPHA_GRID / 255 )
167+
126168 def _create_legend (self ):
127169 legend = LegendItem ()
128170 legend .setParentItem (self .getViewBox ())
@@ -140,7 +182,8 @@ def update_legend(self):
140182 )
141183 self .legend .addItem (dot , escape (text ))
142184 self .legend .show ()
143- Updater .update_legend_font (self .legend .items , ** self .legend_settings )
185+ Updater .update_legend_font (self .legend .items ,
186+ ** self .parameter_setter .legend_settings )
144187
145188 def reset_graph (self ):
146189 self .clear ()
@@ -275,33 +318,6 @@ def help_event(self, ev: QGraphicsSceneHelpEvent):
275318 else :
276319 return False
277320
278- @property
279- def title_item (self ):
280- return self .getPlotItem ().titleLabel
281-
282- @property
283- def axis_items (self ):
284- return [value ["item" ] for value in self .getPlotItem ().axes .values ()]
285-
286- @property
287- def legend_items (self ):
288- return self .legend .items
289-
290- def update_setters (self ):
291- def update_grid (** settings ):
292- self .grid_settings .update (** settings )
293- self .showGrid (y = self .grid_settings [self .SHOW_GRID_LABEL ],
294- alpha = self .grid_settings [Updater .ALPHA_LABEL ] / 255 )
295-
296- def update_bottom_axis (** settings ):
297- axis = self .getAxis ("bottom" )
298- axis .setRotateTicks (settings [self .IS_VERTICAL_LABEL ])
299-
300- self ._setters [self .PLOT_BOX ] = {
301- self .GRID_LABEL : update_grid ,
302- self .BOTTOM_AXIS_LABEL : update_bottom_axis ,
303- }
304-
305321
306322class OWBarPlot (OWWidget ):
307323 name = "Bar Plot"
@@ -353,7 +369,9 @@ def __init__(self):
353369 self .__pending_selection = self .selection
354370
355371 self .setup_gui ()
356- VisualSettingsDialog (self , BarPlotGraph .initial_settings )
372+ VisualSettingsDialog (
373+ self , self .graph .parameter_setter .initial_settings
374+ )
357375
358376 def setup_gui (self ):
359377 self ._add_graph ()
@@ -613,7 +631,7 @@ def send_report(self):
613631 self .report_plot ()
614632
615633 def set_visual_settings (self , key : KeyType , value : ValueType ):
616- self .graph .set_parameter (key , value )
634+ self .graph .parameter_setter . set_parameter (key , value )
617635 self .visual_settings [key ] = value
618636
619637 def sizeHint (self ): # pylint: disable=no-self-use
0 commit comments