def __init__(self, parent, id): """Creates an instance of the colour chooser. Note that it is best to accept the given size of the colour chooser as it is currently not resizeable.""" wx.Panel.__init__(self, parent, id) self.basic_label = wx.StaticText(self, -1, _("Basic Colours:")) self.custom_label = wx.StaticText(self, -1, _("Custom Colours:")) self.add_button = wx.Button(self, self.idADD_CUSTOM, _("Add to Custom Colours")) self.Bind(wx.EVT_BUTTON, self.onAddCustom, self.add_button) # Since we're going to be constructing widgets that require some serious # computation, let's process any events (like redraws) right now wx.Yield() # Create the basic colours palette self.colour_boxs = [ ] colour_grid = wx.GridSizer(6, 8) for name in self.colour_names: new_id = wx.NewId() box = pycolourbox.PyColourBox(self, new_id) box.GetColourBox().Bind(wx.EVT_LEFT_DOWN, lambda x, b=box: self.onBasicClick(x, b)) self.colour_boxs.append(box) colour_grid.Add(box, 0, wx.EXPAND) # Create the custom colours palette self.custom_boxs = [ ] custom_grid = wx.GridSizer(2, 8) for wxcolour, slidepos in self.custom_colours: new_id = wx.NewId() custom = pycolourbox.PyColourBox(self, new_id) custom.GetColourBox().Bind(wx.EVT_LEFT_DOWN, lambda x, b=custom: self.onCustomClick(x, b)) custom.SetColour(wxcolour) custom_grid.Add(custom, 0, wx.EXPAND) self.custom_boxs.append(custom) csizer = wx.BoxSizer(wx.VERTICAL) csizer.Add((1, 25)) csizer.Add(self.basic_label, 0, wx.EXPAND) csizer.Add((1, 5)) csizer.Add(colour_grid, 0, wx.EXPAND) csizer.Add((1, 25)) csizer.Add(self.custom_label, 0, wx.EXPAND) csizer.Add((1, 5)) csizer.Add(custom_grid, 0, wx.EXPAND) csizer.Add((1, 5)) csizer.Add(self.add_button, 0, wx.EXPAND) self.palette = pypalette.PyPalette(self, -1) self.colour_slider = pycolourslider.PyColourSlider(self, -1) self.slider = wx.Slider( self, self.idSCROLL, 86, 0, self.colour_slider.HEIGHT - 1, style=wx.SL_VERTICAL, size=(15, self.colour_slider.HEIGHT) ) self.Bind(wx.EVT_COMMAND_SCROLL, self.onScroll, self.slider) psizer = wx.BoxSizer(wx.HORIZONTAL) psizer.Add(self.palette, 0, 0) psizer.Add((10, 1)) psizer.Add(self.colour_slider, 0, wx.ALIGN_CENTER_VERTICAL) psizer.Add(self.slider, 0, wx.ALIGN_CENTER_VERTICAL) # Register mouse events for dragging across the palette self.palette.Bind(wx.EVT_LEFT_DOWN, self.onPaletteDown) self.palette.Bind(wx.EVT_LEFT_UP, self.onPaletteUp) self.palette.Bind(wx.EVT_MOTION, self.onPaletteMotion) self.mouse_down = False self.solid = pycolourbox.PyColourBox(self, -1, size=(75, 50)) slabel = wx.StaticText(self, -1, _("Solid Colour")) ssizer = wx.BoxSizer(wx.VERTICAL) ssizer.Add(self.solid, 0, 0) ssizer.Add((1, 2)) ssizer.Add(slabel, 0, wx.ALIGN_CENTER_HORIZONTAL) hlabel = wx.StaticText(self, -1, _("H:")) self.hentry = wx.TextCtrl(self, -1) self.hentry.SetSize((40, -1)) slabel = wx.StaticText(self, -1, _("S:")) self.sentry = wx.TextCtrl(self, -1) self.sentry.SetSize((40, -1)) vlabel = wx.StaticText(self, -1, _("V:")) self.ventry = wx.TextCtrl(self, -1) self.ventry.SetSize((40, -1)) hsvgrid = wx.FlexGridSizer(1, 6, 2, 2) hsvgrid.AddMany ([ (hlabel, 0, wx.ALIGN_CENTER_VERTICAL), (self.hentry, 0, wx.FIXED_MINSIZE), (slabel, 0, wx.ALIGN_CENTER_VERTICAL), (self.sentry, 0, wx.FIXED_MINSIZE), (vlabel, 0, wx.ALIGN_CENTER_VERTICAL), (self.ventry, 0, wx.FIXED_MINSIZE), ]) rlabel = wx.StaticText(self, -1, _("R:")) self.rentry = wx.TextCtrl(self, -1) self.rentry.SetSize((40, -1)) glabel = wx.StaticText(self, -1, _("G:")) self.gentry = wx.TextCtrl(self, -1) self.gentry.SetSize((40, -1)) blabel = wx.StaticText(self, -1, _("B:")) self.bentry = wx.TextCtrl(self, -1) self.bentry.SetSize((40, -1)) lgrid = wx.FlexGridSizer(1, 6, 2, 2) lgrid.AddMany([ (rlabel, 0, wx.ALIGN_CENTER_VERTICAL), (self.rentry, 0, wx.FIXED_MINSIZE), (glabel, 0, wx.ALIGN_CENTER_VERTICAL), (self.gentry, 0, wx.FIXED_MINSIZE), (blabel, 0, wx.ALIGN_CENTER_VERTICAL), (self.bentry, 0, wx.FIXED_MINSIZE), ]) gsizer = wx.GridSizer(2, 1) gsizer.SetVGap (10) gsizer.SetHGap (2) gsizer.Add(hsvgrid, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER_HORIZONTAL) gsizer.Add(lgrid, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER_HORIZONTAL) hsizer = wx.BoxSizer(wx.HORIZONTAL) hsizer.Add(ssizer, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER_HORIZONTAL) hsizer.Add(gsizer, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER_HORIZONTAL) vsizer = wx.BoxSizer(wx.VERTICAL) vsizer.Add((1, 5)) vsizer.Add(psizer, 0, 0) vsizer.Add((1, 15)) vsizer.Add(hsizer, 0, wx.EXPAND) sizer = wx.BoxSizer(wx.HORIZONTAL) sizer.Add((5, 1)) sizer.Add(csizer, 0, wx.EXPAND) sizer.Add((10, 1)) sizer.Add(vsizer, 0, wx.EXPAND) self.SetAutoLayout(True) self.SetSizer(sizer) sizer.Fit(self) self.InitColours() self.UpdateColour(self.solid.GetColour())
def __init__(self, parent, id): """Creates an instance of the colour chooser. Note that it is best to accept the given size of the colour chooser as it is currently not resizeable.""" wx.Panel.__init__(self, parent, id) self.basic_label = wx.StaticText(self, -1, _("Basic Colours:")) self.custom_label = wx.StaticText(self, -1, _("Custom Colours:")) self.add_button = wx.Button(self, self.idADD_CUSTOM, _("Add to Custom Colours")) self.Bind(wx.EVT_BUTTON, self.onAddCustom, self.add_button) # Since we're going to be constructing widgets that require some serious # computation, let's process any events (like redraws) right now wx.Yield() # Create the basic colours palette self.colour_boxs = [] colour_grid = wx.GridSizer(6, 8) for name in self.colour_names: new_id = wx.NewId() box = pycolourbox.PyColourBox(self, new_id) box.GetColourBox().Bind(wx.EVT_LEFT_DOWN, lambda x, b=box: self.onBasicClick(x, b)) self.colour_boxs.append(box) colour_grid.Add(box, 0, wx.EXPAND) # Create the custom colours palette self.custom_boxs = [] custom_grid = wx.GridSizer(2, 8) for wxcolour, slidepos in self.custom_colours: new_id = wx.NewId() custom = pycolourbox.PyColourBox(self, new_id) custom.GetColourBox().Bind( wx.EVT_LEFT_DOWN, lambda x, b=custom: self.onCustomClick(x, b)) custom.SetColour(wxcolour) custom_grid.Add(custom, 0, wx.EXPAND) self.custom_boxs.append(custom) csizer = wx.BoxSizer(wx.VERTICAL) csizer.Add((1, 25)) csizer.Add(self.basic_label, 0, wx.EXPAND) csizer.Add((1, 5)) csizer.Add(colour_grid, 0, wx.EXPAND) csizer.Add((1, 25)) csizer.Add(self.custom_label, 0, wx.EXPAND) csizer.Add((1, 5)) csizer.Add(custom_grid, 0, wx.EXPAND) csizer.Add((1, 5)) csizer.Add(self.add_button, 0, wx.EXPAND) self.palette = pypalette.PyPalette(self, -1) self.colour_slider = pycolourslider.PyColourSlider(self, -1) self.slider = wx.Slider(self, self.idSCROLL, 86, 0, self.colour_slider.HEIGHT - 1, style=wx.SL_VERTICAL, size=(15, self.colour_slider.HEIGHT)) self.Bind(wx.EVT_COMMAND_SCROLL, self.onScroll, self.slider) psizer = wx.BoxSizer(wx.HORIZONTAL) psizer.Add(self.palette, 0, 0) psizer.Add((10, 1)) psizer.Add(self.colour_slider, 0, wx.ALIGN_CENTER_VERTICAL) psizer.Add(self.slider, 0, wx.ALIGN_CENTER_VERTICAL) # Register mouse events for dragging across the palette self.palette.Bind(wx.EVT_LEFT_DOWN, self.onPaletteDown) self.palette.Bind(wx.EVT_LEFT_UP, self.onPaletteUp) self.palette.Bind(wx.EVT_MOTION, self.onPaletteMotion) self.mouse_down = False self.solid = pycolourbox.PyColourBox(self, -1, size=(75, 50)) slabel = wx.StaticText(self, -1, _("Solid Colour")) ssizer = wx.BoxSizer(wx.VERTICAL) ssizer.Add(self.solid, 0, 0) ssizer.Add((1, 2)) ssizer.Add(slabel, 0, wx.ALIGN_CENTER_HORIZONTAL) hlabel = wx.StaticText(self, -1, _("H:")) self.hentry = wx.TextCtrl(self, -1) self.hentry.SetSize((40, -1)) slabel = wx.StaticText(self, -1, _("S:")) self.sentry = wx.TextCtrl(self, -1) self.sentry.SetSize((40, -1)) vlabel = wx.StaticText(self, -1, _("V:")) self.ventry = wx.TextCtrl(self, -1) self.ventry.SetSize((40, -1)) hsvgrid = wx.FlexGridSizer(1, 6, 2, 2) hsvgrid.AddMany([ (hlabel, 0, wx.ALIGN_CENTER_VERTICAL), (self.hentry, 0, wx.FIXED_MINSIZE), (slabel, 0, wx.ALIGN_CENTER_VERTICAL), (self.sentry, 0, wx.FIXED_MINSIZE), (vlabel, 0, wx.ALIGN_CENTER_VERTICAL), (self.ventry, 0, wx.FIXED_MINSIZE), ]) rlabel = wx.StaticText(self, -1, _("R:")) self.rentry = wx.TextCtrl(self, -1) self.rentry.SetSize((40, -1)) glabel = wx.StaticText(self, -1, _("G:")) self.gentry = wx.TextCtrl(self, -1) self.gentry.SetSize((40, -1)) blabel = wx.StaticText(self, -1, _("B:")) self.bentry = wx.TextCtrl(self, -1) self.bentry.SetSize((40, -1)) lgrid = wx.FlexGridSizer(1, 6, 2, 2) lgrid.AddMany([ (rlabel, 0, wx.ALIGN_CENTER_VERTICAL), (self.rentry, 0, wx.FIXED_MINSIZE), (glabel, 0, wx.ALIGN_CENTER_VERTICAL), (self.gentry, 0, wx.FIXED_MINSIZE), (blabel, 0, wx.ALIGN_CENTER_VERTICAL), (self.bentry, 0, wx.FIXED_MINSIZE), ]) gsizer = wx.GridSizer(2, 1) gsizer.SetVGap(10) gsizer.SetHGap(2) gsizer.Add(hsvgrid, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER_HORIZONTAL) gsizer.Add(lgrid, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER_HORIZONTAL) hsizer = wx.BoxSizer(wx.HORIZONTAL) hsizer.Add(ssizer, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER_HORIZONTAL) hsizer.Add(gsizer, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER_HORIZONTAL) vsizer = wx.BoxSizer(wx.VERTICAL) vsizer.Add((1, 5)) vsizer.Add(psizer, 0, 0) vsizer.Add((1, 15)) vsizer.Add(hsizer, 0, wx.EXPAND) sizer = wx.BoxSizer(wx.HORIZONTAL) sizer.Add((5, 1)) sizer.Add(csizer, 0, wx.EXPAND) sizer.Add((10, 1)) sizer.Add(vsizer, 0, wx.EXPAND) self.SetAutoLayout(True) self.SetSizer(sizer) sizer.Fit(self) self.InitColours() self.UpdateColour(self.solid.GetColour())