def InitDlg(self): self._btbox = DLGButtonPanel(self,style=wx.SUNKEN_BORDER) self.pnl_bcb = wx.Panel(self) self.cdb_label_list = WX_CDB.getColourList() self.cdb_info_list = WX_CDB.getColourInfoList() # bcb = BitmapComboBox(self.pnl_bcb,size=(140,-1)) size_h_w = 16 slidx=0 for c in self.color_list: idx = self.cdb_label_list.index(c.upper()) (r,g,b) = self.cdb_info_list[idx][1:] bmp = wx.EmptyBitmapRGBA(size_h_w, size_h_w,red=r,green=g,blue=b,alpha= wx.ALPHA_OPAQUE) bcb.Append(c, bmp, c) self.Bind(wx.EVT_COMBOBOX,self.OnCombo,bcb) if ( self.selected_color_label == c ): bcb.SetSelection( bcb.GetCount() -1)
def Configure(self, parent=None): if OptionsDialog.instance: OptionsDialog.instance.Raise() return OptionsDialog.instance = self text = Text config = eg.config self.useFixedFont = config.useFixedFont eg.TaskletDialog.__init__( self, parent=parent, title=text.Title, ) languageNames = eg.Translation.languageNames languageList = ["en_EN"] for item in os.listdir(eg.languagesDir): name, ext = os.path.splitext(item) if ext == ".py" and name in languageNames: languageList.append(name) languageList.sort() languageNameList = [languageNames[x] for x in languageList] notebook = wx.Notebook(self, -1) page1 = eg.Panel(notebook) notebook.AddPage(page1, text.Tab1) # page 1 controls startWithWindowsCtrl = page1.CheckBox( exists(join((eg.folderPath.Startup or ""), eg.APP_NAME + ".lnk")), text.StartWithWindows) if eg.folderPath.Startup is None: startWithWindowsCtrl.Enable(False) checkUpdateCtrl = page1.CheckBox(config.checkUpdate, text.CheckUpdate) checkPreReleaseCtrl = page1.CheckBox(config.checkPreRelease, text.CheckPreRelease) checkPreReleaseCtrl.Enable(config.checkUpdate) def OnCheckUpdateCheckBox(event): checkPreReleaseCtrl.Enable(event.IsChecked()) checkUpdateCtrl.Bind(wx.EVT_CHECKBOX, OnCheckUpdateCheckBox) confirmDeleteCtrl = page1.CheckBox(config.confirmDelete, text.confirmDelete) showTrayIconCtrl = page1.CheckBox(config.showTrayIcon, text.showTrayIcon) hideOnCloseCtrl = page1.CheckBox(config.hideOnClose, text.HideOnClose) memoryLimitCtrl = page1.CheckBox(config.limitMemory, text.limitMemory1) memoryLimitSpinCtrl = page1.SpinIntCtrl(config.limitMemorySize, min=4, max=999) def OnMemoryLimitCheckBox(dummyEvent): memoryLimitSpinCtrl.Enable(memoryLimitCtrl.IsChecked()) memoryLimitCtrl.Bind(wx.EVT_CHECKBOX, OnMemoryLimitCheckBox) OnMemoryLimitCheckBox(None) refreshEnvCtrl = page1.CheckBox(config.refreshEnv, text.refreshEnv) propResizeCtrl = page1.CheckBox(config.propResize, text.propResize) useFixedFontCtrl = page1.CheckBox(config.useFixedFont, text.UseFixedFont) def OnFixedFontBox(evt): self.UpdateFont(evt.IsChecked()) useFixedFontCtrl.Bind(wx.EVT_CHECKBOX, OnFixedFontBox) datestampCtrl = page1.TextCtrl(config.datestamp) datestampCtrl.SetToolTipString(text.DatestampHelp) datestampLabel = page1.StaticText(text.Datestamp) datestampLabel.SetToolTipString(text.DatestampHelp) datestampSzr = wx.BoxSizer(wx.HORIZONTAL) datestampSzr.AddMany( ((datestampLabel, 0, wx.ALIGN_CENTER_VERTICAL | wx.RIGHT, 5), (datestampCtrl, 1, wx.EXPAND))) def OnDatestampKillFocus(_): dt_fmt = datestampCtrl.GetValue() try: strftime(dt_fmt, localtime()) except ValueError: wx.MessageBox("Invalid format string!", "Error") datestampCtrl.SetBackgroundColour("pink") datestampCtrl.Refresh() wx.CallAfter(datestampCtrl.SetFocus) else: datestampCtrl.SetBackgroundColour( wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW)) datestampCtrl.Refresh() datestampCtrl.Bind(wx.EVT_KILL_FOCUS, OnDatestampKillFocus) languageChoice = BitmapComboBox(page1, style=wx.CB_READONLY) for name, code in zip(languageNameList, languageList): filename = os.path.join(eg.imagesDir, "flags", "%s.png" % code) if os.path.exists(filename): image = wx.Image(filename) image.Resize((16, 16), (0, 3)) bmp = image.ConvertToBitmap() languageChoice.Append(name, bmp) else: languageChoice.Append(name) languageChoice.SetSelection(languageList.index(config.language)) languageChoice.SetMinSize((150, -1)) buttonRow = eg.ButtonRow(self, (wx.ID_OK, wx.ID_CANCEL)) # construction of the layout with sizers flags = wx.ALIGN_CENTER_VERTICAL memoryLimitSizer = eg.HBoxSizer( (memoryLimitCtrl, 0, flags), (memoryLimitSpinCtrl, 0, flags), (page1.StaticText(text.limitMemory2), 0, flags | wx.LEFT, 2), ) startGroupSizer = wx.GridSizer(cols=1, vgap=2, hgap=2) startGroupSizer.AddMany(( (startWithWindowsCtrl, 0, flags), (checkUpdateCtrl, 0, flags), (checkPreReleaseCtrl, 0, flags | wx.LEFT, INDENT_WIDTH), (confirmDeleteCtrl, 0, flags), (showTrayIconCtrl, 0, flags), (hideOnCloseCtrl, 0, flags), (memoryLimitSizer, 0, flags), (refreshEnvCtrl, 0, flags), (propResizeCtrl, 0, flags), (useFixedFontCtrl, 0, flags), (datestampSzr, 0, flags), )) langGroupSizer = page1.VStaticBoxSizer( text.LanguageGroup, (languageChoice, 0, wx.LEFT | wx.RIGHT, INDENT_WIDTH), ) page1Sizer = eg.VBoxSizer( ((15, 7), 1), (startGroupSizer, 0, wx.EXPAND | wx.ALL, 5), ((15, 7), 1), (langGroupSizer, 0, wx.EXPAND | wx.ALL, 5), ) page1.SetSizer(page1Sizer) page1.SetAutoLayout(True) sizer = eg.VBoxSizer( (notebook, 1, wx.EXPAND | wx.TOP | wx.LEFT | wx.RIGHT, 5), (buttonRow.sizer, 0, wx.EXPAND), ) self.SetSizerAndFit(sizer) self.SetMinSize(self.GetSize()) notebook.ChangeSelection(0) oldLanguage = config.language while self.Affirmed(): config.checkUpdate = checkUpdateCtrl.GetValue() config.checkPreRelease = checkPreReleaseCtrl.GetValue() config.confirmDelete = confirmDeleteCtrl.GetValue() config.showTrayIcon = showTrayIconCtrl.GetValue() config.hideOnClose = hideOnCloseCtrl.GetValue() config.limitMemory = bool(memoryLimitCtrl.GetValue()) config.limitMemorySize = memoryLimitSpinCtrl.GetValue() config.refreshEnv = refreshEnvCtrl.GetValue() config.propResize = propResizeCtrl.GetValue() config.useFixedFont = useFixedFontCtrl.GetValue() config.datestamp = datestampCtrl.GetValue() config.language = languageList[languageChoice.GetSelection()] config.Save() self.SetResult() eg.Utils.UpdateStartupShortcut(startWithWindowsCtrl.GetValue()) if config.showTrayIcon: eg.taskBarIcon.Show() else: eg.taskBarIcon.Hide() if eg.mainFrame: eg.mainFrame.SetWindowStyleFlag() eg.mainFrame.logCtrl.SetDTLogging() if config.language != oldLanguage: wx.CallAfter(self.ShowLanguageWarning) OptionsDialog.instance = None
def _ColourMap(parent, hasProps, propObj, propVal, labels=None, **kwargs): """Creates and returns a combobox, allowing the user to change the value of the given :class:`.ColourMap` property value. :arg labels: A dictionary containing ``{name : label}`` mappings, defining a display name/label for each colour map. If not provided, the colour map ``name`` attribute is used as the display name. Can alternately be a function which accepts a colour map identifier name, and returns its display name. See also the :func:`_makeColourMapBitmap` function. """ import matplotlib.cm as mplcm # These are used by the inner-functions defined # below, and are dynamically updated when the # list of available colour maps change. I'm # storing each of them in a list, so the inner # functions will have access to updated versions. cmapKeys = [list(propObj.getColourMaps(hasProps))] cmapObjs = [list(map(mplcm.get_cmap, cmapKeys[0]))] # create the combobox cbox = BitmapComboBox(parent, style=wx.CB_READONLY | wx.CB_DROPDOWN) # OwnerDrawnComboBoxes seem to absorb mouse # events and, under OSX/cocoa at least, this # causes the currently selected item to # change. I don't want this. def wheel(ev): parent.GetEventHandler().ProcessEvent(ev) cbox.Bind(wx.EVT_MOUSEWHEEL, wheel) def widgetGet(): sel = cbox.GetSelection() if sel == -1: sel = 0 return cmapObjs[0][sel] def widgetSet(value): if value is not None: cbox.SetSelection(cmapObjs[0].index(value)) else: cbox.SetSelection(0) # Called when the list of available # colour maps changes - updates the # options displayed in the combobox def cmapsChanged(*a): selected = cbox.GetSelection() cmapKeys[0] = list(propObj.getColourMaps(hasProps)) cmapObjs[0] = list(map(mplcm.get_cmap, cmapKeys[0])) cbox.Clear() # Store the width of the biggest bitmap, # and the width of the biggest label. # the BitmapComboBox doesn't size itself # properly on all platforms, so we'll # do it manually, dammit maxBmpWidth = 0 maxLblWidth = 0 dc = wx.ClientDC(cbox) # Make a little bitmap for every colour # map, and add it to the combobox for cmap in cmapObjs[0]: # Labels can either be None if labels is None: name = cmap.name # Or a function elif hasattr(labels, '__call__'): name = labels(cmap.name) # Or a dictionary else: name = labels.get(cmap.name, cmap.name) bitmap = _makeColourMapBitmap(cmap) cbox.Append(name, bitmap) # use the DC to get the label size lblWidth = dc.GetTextExtent(name)[0] bmpWidth = bitmap.GetWidth() if bmpWidth > maxBmpWidth: maxBmpWidth = bmpWidth if lblWidth > maxLblWidth: maxLblWidth = lblWidth # Explicitly set the minimum size from # the maximum bitmap/label sizes, with # some extra to account for the drop # down button cbox.InvalidateBestSize() bestHeight = cbox.GetBestSize().GetHeight() cbox.SetMinSize((maxBmpWidth + maxLblWidth + 40, bestHeight)) cbox.SetSelection(selected) cbox.Refresh() # Initialise the combobox options cmapsChanged() # Make sure the combobox options are updated # when the property options change lName = 'ColourMap_ComboBox_{}'.format(id(cbox)) propVal.addAttributeListener(lName, cmapsChanged, weak=False) def onDestroy(ev): propVal.removeAttributeListener(lName) # Bind the combobox to the property _propBind(hasProps, propObj, propVal, cbox, evType=wx.EVT_COMBOBOX, widgetGet=widgetGet, widgetSet=widgetSet, widgetDestroy=onDestroy) # Set the initial combobox selection currentVal = propVal.get() if currentVal is None: currentVal = 0 else: currentVal = cmapObjs[0].index(currentVal) cbox.SetSelection(currentVal) return cbox