def __init__(self, parent, wid=-1, pos=(0, 0), size=wx.DefaultSize, style=wx.NO_BORDER): style = style | wx.NO_BORDER super(InfoLegend, self).__init__(parent, wid, pos, size, style) # Cannot be a constant because loading bitmaps only works after wx.App # has been created. self._type_to_icon = ( (MD_AT_AR, img.getBitmap("icon/ico_blending_ang.png")), (MD_AT_SPECTRUM, img.getBitmap("icon/ico_blending_spec.png")), (MD_AT_EM, img.getBitmap("icon/ico_blending_sem.png")), (MD_AT_OVV_TILES, img.getBitmap("icon/ico_blending_map.png")), (MD_AT_OVV_FULL, img.getBitmap("icon/ico_blending_navcam.png")), (MD_AT_HISTORY, img.getBitmap("icon/ico_blending_history.png")), (MD_AT_CL, img.getBitmap("icon/ico_blending_opt.png")), (MD_AT_FLUO, img.getBitmap("icon/ico_blending_opt.png")), (MD_AT_SLIT, img.getBitmap("icon/ico_blending_slit.png")), ) self.SetBackgroundColour(parent.GetBackgroundColour()) self.SetForegroundColour(parent.GetForegroundColour()) ### Create child windows # Merge slider # TODO: should be possible to use VAConnector self.merge_slider = Slider(self, wx.ID_ANY, 50, # val 0, 100, size=(100, 12), style=(wx.SL_HORIZONTAL | wx.SL_AUTOTICKS | wx.SL_TICKS | wx.NO_BORDER) ) self.merge_slider.SetBackgroundColour(parent.GetBackgroundColour()) self.merge_slider.SetForegroundColour(FG_COLOUR_DIS) # "#4d4d4d" self.merge_slider.SetToolTip("Merge ratio") self.bmp_slider_left = wx.StaticBitmap(self, wx.ID_ANY, img.getBitmap("icon/ico_blending_opt.png")) self.bmp_slider_right = wx.StaticBitmap(self, wx.ID_ANY, img.getBitmap("icon/ico_blending_sem.png")) # Horizontal Field Width text self.hfw_text = wx.TextCtrl(self, style=wx.NO_BORDER | wx.CB_READONLY) self.hfw_text.SetBackgroundColour(parent.GetBackgroundColour()) self.hfw_text.SetForegroundColour(parent.GetForegroundColour()) self.hfw_text.SetToolTip("Horizontal Field Width") # Magnification text self.magnification_text = wx.TextCtrl(self, style=wx.NO_BORDER | wx.CB_READONLY) self.magnification_text.SetBackgroundColour(parent.GetBackgroundColour()) self.magnification_text.SetForegroundColour(parent.GetForegroundColour()) self.magnification_text.SetToolTip("Magnification") # Z position text self.zPos_text = wx.TextCtrl(self, style=wx.NO_BORDER | wx.CB_READONLY) self.zPos_text.SetBackgroundColour(parent.GetBackgroundColour()) self.zPos_text.SetForegroundColour(parent.GetForegroundColour()) self.zPos_text.SetToolTip("Z Position") self.zPos_text.Hide() # Scale window self.scale_win = ScaleWindow(self) ## Child window layout # Sizer composition: # # +-------------------------------------------------------+ # | <Mag> | <HFW> | <Scale> | [Icon|Slider|Icon] | # +-------------------------------------------------------+ slider_sizer = wx.BoxSizer(wx.HORIZONTAL) # TODO: need to have the icons updated according to the streams type slider_sizer.Add( self.bmp_slider_left, 0, border=3, flag=wx.ALIGN_CENTER | wx.RIGHT) slider_sizer.Add( self.merge_slider, 1, flag=wx.ALIGN_CENTER | wx.EXPAND) slider_sizer.Add( self.bmp_slider_right, 0, border=3, flag=wx.ALIGN_CENTER | wx.LEFT) control_sizer = wx.BoxSizer(wx.HORIZONTAL) control_sizer.Add(self.magnification_text, 2, border=10, flag=wx.ALIGN_CENTER | wx.RIGHT | wx.EXPAND) control_sizer.Add(self.hfw_text, 2, border=10, flag=wx.ALIGN_CENTER | wx.RIGHT | wx.EXPAND) control_sizer.Add(self.scale_win, 3, border=10, flag=wx.ALIGN_CENTER | wx.RIGHT | wx.EXPAND) control_sizer.Add(self.zPos_text, 2, border=10, flag=wx.ALIGN_CENTER | wx.RIGHT | wx.EXPAND) control_sizer.Add(slider_sizer, 0, border=10, flag=wx.ALIGN_CENTER | wx.RIGHT) # border_sizer is needed to add a border around the legend border_sizer = wx.BoxSizer(wx.VERTICAL) border_sizer.Add(control_sizer, border=6, flag=wx.ALL | wx.EXPAND) self.SetSizerAndFit(border_sizer) ## Event binding # Dragging the slider should set the focus to the right view self.merge_slider.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown) self.merge_slider.Bind(wx.EVT_LEFT_UP, self.OnLeftUp) # Make sure that mouse clicks on the icons set the correct focus self.bmp_slider_left.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown) self.bmp_slider_right.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown) # Set slider to min/max self.bmp_slider_left.Bind(wx.EVT_LEFT_UP, parent.OnSliderIconClick) self.bmp_slider_right.Bind(wx.EVT_LEFT_UP, parent.OnSliderIconClick) self.hfw_text.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown) self.magnification_text.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown) self.zPos_text.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown)
def __init__(self, parent, wid=-1, pos=(0, 0), size=wx.DefaultSize, style=wx.NO_BORDER): style = style | wx.NO_BORDER super(InfoLegend, self).__init__(parent, wid, pos, size, style) self.SetBackgroundColour(parent.GetBackgroundColour()) self.SetForegroundColour(parent.GetForegroundColour()) ### Create child windows # Merge slider # TODO: should be possible to use VAConnector self.merge_slider = Slider( self, wx.ID_ANY, 50, # val 0, 100, size=(100, 12), style=(wx.SL_HORIZONTAL | wx.SL_AUTOTICKS | wx.SL_TICKS | wx.NO_BORDER)) self.merge_slider.SetBackgroundColour(parent.GetBackgroundColour()) self.merge_slider.SetForegroundColour("#4d4d4d") self.merge_slider.SetToolTipString("Merge ratio") self.bmp_slider_left = wx.StaticBitmap( self, wx.ID_ANY, imgdata.getico_blending_optBitmap()) self.bmp_slider_right = wx.StaticBitmap( self, wx.ID_ANY, imgdata.getico_blending_semBitmap()) # Scale window self.scale_win = ScaleWindow(self) # Horizontal Field Width text # TODO: allow the user to select/copy the text self.hfw_text = wx.StaticText(self) self.hfw_text.SetToolTipString("Horizontal Field Width") # Magnification text self.magnification_text = wx.StaticText(self) self.magnification_text.SetToolTipString("Magnification") # TODO more... # self.LegendWl = wx.StaticText(self.legend) # self.LegendWl.SetToolTipString("Wavelength") # self.LegendET = wx.StaticText(self.legend) # self.LegendET.SetToolTipString("Exposure Time") # self.LegendDwell = wx.StaticText(self.legend) # self.LegendSpot = wx.StaticText(self.legend) # self.LegendHV = wx.StaticText(self.legend) ## Child window layout # Sizer composition: # # +-------------------------------------------------------+ # | +----+-----+ | | | | +----+------+----+ | # | |Mag | HFW | | <> | <Scale> | <> | |Icon|Slider|Icon| | # | +----+-----+ | | | | +----+------+----+ | # +-------------------------------------------------------+ leftColSizer = wx.BoxSizer(wx.HORIZONTAL) leftColSizer.Add(self.magnification_text, border=10, flag=wx.ALIGN_CENTER | wx.RIGHT) leftColSizer.Add(self.hfw_text, border=10, flag=wx.ALIGN_CENTER) sliderSizer = wx.BoxSizer(wx.HORIZONTAL) # TODO: need to have the icons updated according to the streams type sliderSizer.Add(self.bmp_slider_left, border=3, flag=wx.ALIGN_CENTER | wx.RIGHT | wx.RESERVE_SPACE_EVEN_IF_HIDDEN) sliderSizer.Add(self.merge_slider, flag=wx.ALIGN_CENTER | wx.EXPAND | wx.RESERVE_SPACE_EVEN_IF_HIDDEN) sliderSizer.Add(self.bmp_slider_right, border=3, flag=wx.ALIGN_CENTER | wx.LEFT | wx.RESERVE_SPACE_EVEN_IF_HIDDEN) legendSizer = wx.BoxSizer(wx.HORIZONTAL) legendSizer.Add(leftColSizer, 0, flag=wx.EXPAND | wx.ALIGN_CENTER) legendSizer.AddStretchSpacer(1) legendSizer.Add(self.scale_win, 2, border=2, flag=wx.EXPAND | wx.ALIGN_CENTER | wx.RIGHT | wx.LEFT) legendSizer.AddStretchSpacer(1) legendSizer.Add(sliderSizer, 0, flag=wx.EXPAND | wx.ALIGN_CENTER) # legend_panel_sizer is needed to add a border around the legend legend_panel_sizer = wx.BoxSizer(wx.VERTICAL) legend_panel_sizer.Add(legendSizer, border=10, flag=wx.ALL | wx.EXPAND) self.SetSizerAndFit(legend_panel_sizer) ## Event binding # Dragging the slider should set the focus to the right view self.merge_slider.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown) self.merge_slider.Bind(wx.EVT_LEFT_UP, self.OnLeftUp) # Make sure that mouse clicks on the icons set the correct focus self.bmp_slider_left.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown) self.bmp_slider_right.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown) # Set slider to min/max self.bmp_slider_left.Bind(wx.EVT_LEFT_UP, parent.OnSliderIconClick) self.bmp_slider_right.Bind(wx.EVT_LEFT_UP, parent.OnSliderIconClick) self.hfw_text.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown) self.magnification_text.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown) # Explicitly set the self.SetMinSize((-1, 40))