def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        try:
            default_colour = wx.SystemSettings.GetColour(wx.SYS_COLOUR_MENUBAR)
        except AttributeError:
            default_colour = wx.SystemSettings_GetColour(wx.SYS_COLOUR_MENUBAR)
        self.SetBackgroundColour(default_colour)

        # Fold panel and its style settings
        # FIXME: If we dont insert a value in size or if we set wx.DefaultSize,
        # the fold_panel doesnt show. This means that, for some reason, Sizer
        # is not working properly in this panel. It might be on some child or
        # parent panel. Perhaps we need to insert the item into the sizer also...
        # Study this.
        fold_panel = fpb.FoldPanelBar(self, -1, wx.DefaultPosition,
                                      wx.DefaultSize, 0, fpb.FPB_SINGLE_FOLD)

        # Fold panel style
        style = fpb.CaptionBarStyle()
        style.SetCaptionStyle(fpb.CAPTIONBAR_GRADIENT_V)
        style.SetFirstColour(default_colour)
        style.SetSecondColour(default_colour)

        # Fold 1 - Surface properties
        item = fold_panel.AddFoldPanel(_("Surface properties"), collapsed=True)
        fold_panel.ApplyCaptionStyle(item, style)
        fold_panel.AddFoldPanelWindow(item,
                                      SurfaceProperties(item),
                                      spacing=0,
                                      leftSpacing=0,
                                      rightSpacing=0)

        # Fold 2 - Surface tools
        item = fold_panel.AddFoldPanel(_("Advanced options"), collapsed=True)
        fold_panel.ApplyCaptionStyle(item, style)
        fold_panel.AddFoldPanelWindow(item,
                                      SurfaceTools(item),
                                      spacing=0,
                                      leftSpacing=0,
                                      rightSpacing=0)

        #fold_panel.AddFoldPanelWindow(item, QualityAdjustment(item), Spacing= 0,
        #                              leftSpacing=0, rightSpacing=0)
        #fold_panel.Expand(fold_panel.GetFoldPanel(1))

        self.fold_panel = fold_panel
        self.__bind_evt()

        # Panel sizer to expand fold panel
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(fold_panel, 1, wx.GROW | wx.EXPAND)
        sizer.Fit(self)

        self.SetSizer(sizer)
        self.Update()
        self.SetAutoLayout(1)

        fold_panel.Expand(fold_panel.GetFoldPanel(1))
        self.ResizeFPB()
        fold_panel.Expand(fold_panel.GetFoldPanel(0))
Exemple #2
0
	def csStyleSetup(self):
		# Style used for fold bar menu 

		csStyle = fpb.CaptionBarStyle()
		csStyle.SetFirstColour(wx.Colour("#36393e"))
		csStyle.SetSecondColour(wx.Colour("#36393e"))
		csStyle.SetCaptionColour("WHITE")
		csStyle.SetCaptionFont(wx.Font(9, wx.DEFAULT, wx.NORMAL, wx.BOLD))
		return csStyle
    def UpdatePanelContents(self, selected_node):
        self.DestroyChildren()

        if selected_node != None:

            panel_bar = fpb.FoldPanelBar(self, -1, agwStyle=fpb.FPB_VERTICAL)

            # fold_panel = panel_bar.AddFoldPanel(selected_node._label)
            # #thing = wx.TextCtrl(fold_panel, -1, size=(400, -1), style=wx.TE_MULTILINE)

            # selected_node

            # Node Properties UI
            selected_node.NodePanelUI(self, panel_bar)

            #thing2 = wx.TextCtrl(fold_panel2, -1, size=(400, -1), style=wx.TE_MULTILINE)

            #main_sizer.Add(st, flag=wx.EXPAND|wx.BOTH, border=20)
            #main_sizer.Add(panel_bar, 1, wx.EXPAND)

            self._mainSizer.Add(panel_bar, 1, wx.EXPAND | wx.ALL)

            style = fpb.CaptionBarStyle()
            style.SetCaptionFont(self.Parent.GetFont())
            style.SetCaptionColour(wx.Colour("#fff"))
            style.SetFirstColour(wx.Colour('#424242'))
            style.SetSecondColour(wx.Colour('#424242'))
            panel_bar.ApplyCaptionStyleAll(style)

        else:
            # Delete the window if the node is not selected
            self._mainSizer.Clear(delete_windows=True)

        self.AUIManager.Update()
        self.Parent.Refresh()
        self.Parent.Update()
Exemple #4
0
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        try:
            default_colour = wx.SystemSettings.GetColour(wx.SYS_COLOUR_MENUBAR)
        except AttributeError:
            default_colour = wx.SystemSettings_GetColour(wx.SYS_COLOUR_MENUBAR)
        self.SetBackgroundColour(default_colour)

        # Fold panel and its style settings
        # FIXME: If we dont insert a value in size or if we set wx.DefaultSize,
        # the fold_panel doesnt show. This means that, for some reason, Sizer
        # is not working properly in this panel. It might be on some child or
        # parent panel. Perhaps we need to insert the item into the sizer also...
        # Study this.
        #gbs = wx.GridBagSizer()

        #gbs.AddGrowableRow(0, 1)
        #gbs.AddGrowableCol(0, 1)

        #self.gbs = gbs

        self.last_size = None

        # Panel sizer to expand fold panel
        sizer = wx.BoxSizer(wx.VERTICAL)
        #sizer.Add(gbs, 1, wx.GROW|wx.EXPAND)
        self.SetSizer(sizer)

        fold_panel = fpb.FoldPanelBar(self, -1, wx.DefaultPosition,
                                      wx.DefaultSize, 0, fpb.FPB_SINGLE_FOLD)
        self.fold_panel = fold_panel

        # Fold panel style
        style = fpb.CaptionBarStyle()
        style.SetCaptionStyle(fpb.CAPTIONBAR_GRADIENT_V)
        style.SetFirstColour(default_colour)
        style.SetSecondColour(default_colour)

        # Fold 1 - Mask properties
        item = fold_panel.AddFoldPanel(_("Mask properties"), collapsed=True)
        self.mask_prop_panel = MaskProperties(item)

        fold_panel.ApplyCaptionStyle(item, style)
        fold_panel.AddFoldPanelWindow(item,
                                      self.mask_prop_panel,
                                      spacing=0,
                                      leftSpacing=0,
                                      rightSpacing=0)

        # Fold 2 - Advanced edition tools
        item = fold_panel.AddFoldPanel(_("Manual edition"), collapsed=True)
        etw = EditionTools(item)

        fold_panel.ApplyCaptionStyle(item, style)
        fold_panel.AddFoldPanelWindow(item,
                                      etw,
                                      spacing=0,
                                      leftSpacing=0,
                                      rightSpacing=0)
        self.__id_editor = item.GetId()
        self.last_panel_opened = None

        # Fold 3 - Watershed
        item = fold_panel.AddFoldPanel(_("Watershed"), collapsed=True)
        wtw = WatershedTool(item)

        fold_panel.ApplyCaptionStyle(item, style)
        fold_panel.AddFoldPanelWindow(item,
                                      wtw,
                                      spacing=0,
                                      leftSpacing=0,
                                      rightSpacing=0)
        self.__id_watershed = item.GetId()

        sizer.Add(fold_panel, 1, wx.EXPAND)

        fold_panel.Expand(fold_panel.GetFoldPanel(2))
        self.ResizeFPB()
        fold_panel.Expand(fold_panel.GetFoldPanel(0))

        sizer.Layout()
        self.Fit()

        self.fold_panel = fold_panel
        self.last_style = None

        self.__bind_evt()
        self.__bind_pubsub_evt()
Exemple #5
0
class main_controls(wx.Panel):
    def __init__(self, parent, config, pres, panel, iconfile):
        super(wx.Panel, self).__init__(panel)
        self.parent = parent
        self.config = config
        self.pres = pres
        self.backgroundchoices = self.config.backgroundchoices

        # Get a few tool bar icons
        tsize = (16, 16)
        try:
            self.open_bmp = wx.ArtProvider.GetBitmap(wx.ART_FILE_OPEN,
                                                     wx.ART_TOOLBAR, tsize)
            self.next_bmp = wx.ArtProvider.GetBitmap(wx.ART_GO_FORWARD,
                                                     wx.ART_TOOLBAR, tsize)
            self.report_bmp = wx.ArtProvider.GetBitmap(wx.ART_LIST_VIEW,
                                                       wx.ART_TOOLBAR, tsize)
            self.A_bmp = wx.ArtProvider.GetBitmap(wx.ART_HELP_SETTINGS,
                                                  wx.ART_TOOLBAR, tsize)
            try:
                self.ud_bmp = wx.Bitmap(
                    wx.Image(iconfile).Rescale(tsize[0], tsize[1]))
            except Exception, ex:
                self.ud_bmp = wx.ArtProvider.GetBitmap(wx.ART_HELP_SETTINGS,
                                                       wx.ART_TOOLBAR, tsize)
                print ex
        except Exception, ex:
            self.open_bmp = None
            self.next_bmp = None
            self.report_bmp = None
            self.A_bmp = None
            self.ud_bmp = None
            print ex

        # ..........................
        #
        # Sizers for Controls
        #
        # .............................
        sizercontrol = wx.BoxSizer(wx.VERTICAL)

        # Small Toolbar
        buttonsizer = wx.BoxSizer(wx.HORIZONTAL)
        bsize = (50, 25)
        self.openbutton = wx.BitmapButton(self, -1, self.open_bmp, size=bsize)
        self.procbutton = wx.BitmapButton(self, -1, self.next_bmp, size=bsize)
        self.procbutton.SetBackgroundColour(wx.Colour(150, 150, 255))
        self.udbutton = wx.BitmapButton(self, -1, self.ud_bmp, size=bsize)
        self.udbutton.SetBackgroundColour(wx.Colour(255, 255, 150))
        self.ppbutton = wx.BitmapButton(self, -1, self.report_bmp, size=bsize)
        self.ppbutton.SetBackgroundColour(wx.Colour(255, 150, 150))
        self.autobutton = wx.Button(self, -1, "All", size=bsize)  # self.A_bmp
        self.parent.Bind(wx.EVT_BUTTON, self.pres.on_open, self.openbutton)
        self.parent.Bind(wx.EVT_BUTTON, self.pres.on_dataprep_button,
                         self.procbutton)
        self.parent.Bind(wx.EVT_BUTTON, self.pres.on_unidec_button,
                         self.udbutton)
        self.parent.Bind(wx.EVT_BUTTON, self.pres.on_pick_peaks, self.ppbutton)
        self.parent.Bind(wx.EVT_BUTTON, self.pres.on_auto, self.autobutton)
        buttons = [
            self.openbutton, self.procbutton, self.udbutton, self.ppbutton,
            self.autobutton
        ]
        for button in buttons:
            buttonsizer.Add(button, 0, wx.EXPAND)
        sizercontrol.Add(buttonsizer, 0, wx.EXPAND)

        # Setting up main fold controls
        size1 = (75, -1)
        self.foldpanels = fpb.FoldPanelBar(self, -1, agwStyle=fpb.FPB_VERTICAL)
        style1 = fpb.CaptionBarStyle()
        style1b = fpb.CaptionBarStyle()
        style1c = fpb.CaptionBarStyle()
        style2 = fpb.CaptionBarStyle()
        style2b = fpb.CaptionBarStyle()
        style3 = fpb.CaptionBarStyle()
        style3b = fpb.CaptionBarStyle()

        bright = 150
        bright2 = 200
        style1.SetFirstColour(wx.Colour(bright, bright, 255))
        style1b.SetFirstColour(wx.Colour(bright2, bright2, 255))
        style1c.SetFirstColour(wx.Colour(bright2, 255, bright2))
        style2.SetFirstColour(wx.Colour(255, 255, bright))
        style2b.SetFirstColour(wx.Colour(255, 255, bright2))
        style3.SetFirstColour(wx.Colour(255, bright, bright))
        style3b.SetFirstColour(wx.Colour(255, bright2, bright2))

        bright3 = 255
        bright4 = 255
        style1.SetSecondColour(wx.Colour(bright3, bright3, 255))
        style1b.SetSecondColour(wx.Colour(bright4, bright4, 255))
        style1c.SetSecondColour(wx.Colour(bright4, 255, bright4))
        style2.SetSecondColour(wx.Colour(255, 255, bright3))
        style2b.SetSecondColour(wx.Colour(255, 255, bright4))
        style3.SetSecondColour(wx.Colour(255, bright3, bright3))
        style3b.SetSecondColour(wx.Colour(255, bright4, bright4))

        # Panel to set the data prep controls
        foldpanel1 = self.foldpanels.AddFoldPanel(caption="Data Processing",
                                                  collapsed=False,
                                                  cbstyle=style1)
        panel1 = wx.Panel(foldpanel1, -1)
        sizercontrol1 = wx.GridBagSizer(wx.VERTICAL)

        self.ctlminmz = wx.TextCtrl(panel1, value="", size=(50, -1))
        self.ctlmaxmz = wx.TextCtrl(panel1, value="", size=(60, -1))
        mzrange = wx.BoxSizer(wx.HORIZONTAL)
        mzrange.Add(wx.StaticText(panel1, label="m/z Range: "), 0,
                    wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT)
        mzrange.Add(self.ctlminmz)
        mzrange.Add(wx.StaticText(panel1, label=" to "), 0,
                    wx.ALIGN_CENTER_VERTICAL)
        mzrange.Add(self.ctlmaxmz)
        mzrange.Add(wx.StaticText(panel1, label=" Th "), 0,
                    wx.ALIGN_CENTER_VERTICAL)
        sizercontrol1.Add(mzrange, (0, 0), span=(1, 5))

        # self.subtypectl = wx.Choice(panel1, -1, choices=self.backgroundchoices)

        self.ctlbuff = wx.TextCtrl(panel1, value="", size=size1)
        # self.ctlsmooth = wx.TextCtrl(panel1, value="", size=size1)
        self.ctlbinsize = wx.TextCtrl(panel1, value="", size=size1)

        # sizercontrol1.Add(self.subtypectl, (1 + self.config.imflag, 0))
        sizercontrol1.Add(wx.StaticText(panel1,
                                        label="Background Subtraction: "),
                          (1, 0),
                          flag=wx.ALIGN_CENTER_VERTICAL)
        sizercontrol1.Add(self.ctlbuff, (1, 1))
        # sizercontrol1.Add(self.ctlsmooth, (2 + self.config.imflag * 2, 1))
        # sizercontrol1.Add(wx.StaticText(panel1, label="Gaussian Smoothing: "), (2 + self.config.imflag * 2, 0),
        #                  flag=wx.ALIGN_CENTER_VERTICAL)
        sizercontrol1.Add(self.ctlbinsize, (2, 1))
        sizercontrol1.Add(wx.StaticText(panel1, label="Bin Every: "), (2, 0),
                          flag=wx.ALIGN_CENTER_VERTICAL)

        self.ctldatanorm = wx.CheckBox(panel1, label="Normalize Data")
        sizercontrol1.Add(self.ctldatanorm, (3, 0),
                          flag=wx.ALIGN_CENTER_VERTICAL)

        self.dataprepbutton = wx.Button(panel1, -1, "Process Data")
        self.parent.Bind(wx.EVT_BUTTON, self.pres.on_dataprep_button,
                         self.dataprepbutton)
        sizercontrol1.Add(self.dataprepbutton, (4, 0),
                          span=(1, 2),
                          flag=wx.EXPAND)

        panel1.SetSizer(sizercontrol1)
        sizercontrol1.Fit(panel1)
        self.foldpanels.AddFoldPanelWindow(foldpanel1, panel1,
                                           fpb.FPB_ALIGN_WIDTH)
        self.foldpanels.AddFoldPanelWindow(foldpanel1,
                                           wx.StaticText(foldpanel1, -1, " "),
                                           fpb.FPB_ALIGN_WIDTH)

        # Panel for UniDec Parameters
        foldpanel2 = self.foldpanels.AddFoldPanel(caption="UniDec Parameters",
                                                  collapsed=False,
                                                  cbstyle=style2)
        panel2 = wx.Panel(foldpanel2, -1)
        sizercontrol2 = wx.GridBagSizer(wx.VERTICAL)

        self.ctlstartz = wx.TextCtrl(panel2, value="", size=(60, -1))
        self.ctlendz = wx.TextCtrl(panel2, value="", size=(60, -1))
        zrange = wx.BoxSizer(wx.HORIZONTAL)
        zrange.Add(wx.StaticText(panel2, label="Charge Range: "), 0,
                   wx.ALIGN_CENTER_VERTICAL)
        zrange.Add(self.ctlstartz)
        zrange.Add(wx.StaticText(panel2, label=" to "), 0,
                   wx.ALIGN_CENTER_VERTICAL)
        zrange.Add(self.ctlendz)

        self.ctlmasslb = wx.TextCtrl(panel2, value="", size=(60, -1))
        self.ctlmassub = wx.TextCtrl(panel2, value="", size=(70, -1))
        massrange = wx.BoxSizer(wx.HORIZONTAL)
        massrange.Add(wx.StaticText(panel2, label="Mass Range: "), 0,
                      wx.ALIGN_CENTER_VERTICAL)
        massrange.Add(self.ctlmasslb)
        massrange.Add(wx.StaticText(panel2, label=" to "), 0,
                      wx.ALIGN_CENTER_VERTICAL)
        massrange.Add(self.ctlmassub)
        massrange.Add(wx.StaticText(panel2, label=" Da  "), 0,
                      wx.ALIGN_CENTER_VERTICAL)

        self.ctlmassbins = wx.TextCtrl(panel2, value="", size=size1)
        self.ctlmzsig = wx.TextCtrl(panel2, value="", size=size1)
        self.ctlpsfun = wx.RadioBox(
            panel2,
            label="Peak Shape Function",
            choices=["Gaussian", "Lorentzian", "Split G/L"])
        self.rununidec = wx.Button(panel2, -1, "Run UniDec")
        self.parent.Bind(wx.EVT_BUTTON, self.pres.on_unidec_button,
                         self.rununidec)

        sizercontrol2.Add(zrange, (0, 0), span=(1, 2))
        sizercontrol2.Add(massrange, (1, 0), span=(1, 2))
        sizercontrol2.Add(self.ctlmassbins, (2 + self.config.imflag, 1),
                          span=(1, 2))
        sizercontrol2.Add(self.ctlmzsig, (3 + self.config.imflag * 2, 1),
                          span=(1, 2))
        sizercontrol2.Add(wx.StaticText(panel2,
                                        label="Sample Mass Every (Da): "),
                          (2 + self.config.imflag, 0),
                          flag=wx.ALIGN_CENTER_VERTICAL)
        sizercontrol2.Add(wx.StaticText(panel2, label="Peak FWHM (Th): "),
                          (3 + self.config.imflag * 2, 0),
                          flag=wx.ALIGN_CENTER_VERTICAL)
        sizercontrol2.Add(self.ctlpsfun, (4 + self.config.imflag * 3, 0),
                          span=(1, 2))
        sizercontrol2.Add(self.rununidec, (5 + self.config.imflag * 3, 0),
                          span=(1, 2),
                          flag=wx.EXPAND)

        panel2.SetSizer(sizercontrol2)
        sizercontrol2.Fit(panel2)
        self.foldpanels.AddFoldPanelWindow(foldpanel2, panel2,
                                           fpb.FPB_ALIGN_WIDTH)
        self.foldpanels.AddFoldPanelWindow(foldpanel2,
                                           wx.StaticText(foldpanel2, -1, " "),
                                           fpb.FPB_ALIGN_WIDTH)

        # Panel for Additional Restraints
        foldpanel2b = self.foldpanels.AddFoldPanel(
            caption="Additional Filters/Restraints",
            collapsed=True,
            cbstyle=style2b)
        panel2b = wx.Panel(foldpanel2b, -1)
        gbox2b = wx.GridBagSizer(wx.VERTICAL)

        self.ctlzzsig = wx.TextCtrl(panel2b, value="", size=size1)
        gbox2b.Add(wx.StaticText(panel2b, label="Charge Smooth Width: "),
                   (0, 0),
                   flag=wx.ALIGN_CENTER_VERTICAL)
        gbox2b.Add(self.ctlzzsig, (0, 1), flag=wx.ALIGN_CENTER_VERTICAL)

        self.ctlmolig = wx.TextCtrl(panel2b, value="", size=size1)
        gbox2b.Add(wx.StaticText(panel2b, label="Mass Difference (Da): "),
                   (1, 0),
                   flag=wx.ALIGN_CENTER_VERTICAL)
        gbox2b.Add(self.ctlmolig, (1, 1), flag=wx.ALIGN_CENTER_VERTICAL)

        self.ctlmsig = wx.TextCtrl(panel2b, value="", size=size1)
        gbox2b.Add(wx.StaticText(panel2b, label="Mass Smooth Width: "), (2, 0),
                   flag=wx.ALIGN_CENTER_VERTICAL)
        gbox2b.Add(self.ctlmsig, (2, 1), flag=wx.ALIGN_CENTER_VERTICAL)

        self.ctlnumit = wx.TextCtrl(panel2b, value='', size=size1)
        gbox2b.Add(wx.StaticText(panel2b, label='Maximum # of Iterations: '),
                   (8, 0),
                   flag=wx.ALIGN_CENTER_VERTICAL)
        gbox2b.Add(self.ctlnumit, (8, 1), flag=wx.ALIGN_CENTER_VERTICAL)

        self.ctlpoolflag = wx.RadioBox(
            panel2b,
            label="m/z to Mass Transformation",
            choices=["Integration", "Interpolation"])
        gbox2b.Add(self.ctlpoolflag, (7, 0),
                   span=(1, 2),
                   flag=wx.ALIGN_CENTER_VERTICAL)

        self.ctlorbimode = wx.CheckBox(panel2b, label="Charge Scaling Mode")
        gbox2b.Add(self.ctlorbimode, (5, 0), flag=wx.ALIGN_CENTER_VERTICAL)

        self.ctlisotopemode = wx.CheckBox(panel2b, label="Isotope Mode")
        gbox2b.Add(self.ctlisotopemode, (4, 0), flag=wx.ALIGN_CENTER_VERTICAL)

        self.ctlmanualassign = wx.CheckBox(panel2b, label="Manual Mode")
        self.parent.Bind(wx.EVT_CHECKBOX, self.on_check_manual,
                         self.ctlmanualassign)
        gbox2b.Add(self.ctlmanualassign, (4, 1), flag=wx.ALIGN_CENTER_VERTICAL)

        self.ctladductmass = wx.TextCtrl(panel2b, value='', size=size1)
        gbox2b.Add(self.ctladductmass, (9, 1), span=(1, 1))
        gbox2b.Add(wx.StaticText(panel2b, label="Adduct Mass (Da): "), (9, 0),
                   flag=wx.ALIGN_CENTER_VERTICAL)

        mlsizer = wx.BoxSizer(wx.HORIZONTAL)
        self.ctlmasslistflag = wx.CheckBox(panel2b, label="Mass List Window:")
        self.parent.Bind(wx.EVT_CHECKBOX, self.on_mass_list,
                         self.ctlmasslistflag)
        self.ctlmtabsig = wx.TextCtrl(panel2b, value="", size=(60, -1))
        mlsizer.Add(self.ctlmasslistflag, 0, wx.ALIGN_CENTER_VERTICAL)
        mlsizer.Add(self.ctlmtabsig, 0, wx.ALIGN_CENTER_VERTICAL)
        mlsizer.Add(wx.StaticText(panel2b, label=" Da "), 0,
                    wx.ALIGN_CENTER_VERTICAL)
        gbox2b.Add(mlsizer, (6, 0), span=(1, 2))

        sb = wx.StaticBox(panel2b, label='Native Charge Offset Range')
        sbs = wx.StaticBoxSizer(sb, orient=wx.HORIZONTAL)
        self.ctlminnativez = wx.TextCtrl(panel2b, value='', size=(75, -1))
        self.ctlmaxnativez = wx.TextCtrl(panel2b, value='', size=(75, -1))
        sbs.Add(self.ctlminnativez,
                flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
                border=5)
        sbs.Add(wx.StaticText(panel2b, label=' to '), 0,
                wx.ALIGN_CENTER_VERTICAL | wx.EXPAND)
        sbs.Add(self.ctlmaxnativez,
                flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
                border=5)
        gbox2b.Add(sbs, (3, 0), span=(1, 2), flag=wx.EXPAND)

        panel2b.SetSizer(gbox2b)
        gbox2b.Fit(panel2b)
        self.foldpanels.AddFoldPanelWindow(foldpanel2b, panel2b,
                                           fpb.FPB_ALIGN_WIDTH)
        self.foldpanels.AddFoldPanelWindow(foldpanel2b,
                                           wx.StaticText(foldpanel2b, -1, " "),
                                           fpb.FPB_ALIGN_WIDTH)

        # Panel for Peak Selection and Plotting
        foldpanel3 = self.foldpanels.AddFoldPanel(
            caption="Peak Selection, Extraction, and Plotting",
            collapsed=False,
            cbstyle=style3)
        panel3 = wx.Panel(foldpanel3, -1)

        sizercontrol3 = wx.GridBagSizer(wx.VERTICAL)
        self.ctlwindow = wx.TextCtrl(panel3, value="", size=size1)
        self.ctlthresh = wx.TextCtrl(panel3, value="", size=size1)
        self.ctlnorm = wx.RadioBox(panel3,
                                   label="Peak Normalization",
                                   choices=["None", "Max", "Total"])
        self.ctlnorm2 = wx.RadioBox(
            panel3,
            label="Extract Normalization",
            choices=["None", "Max", "Sum", "Peak Max", "Peak Sum"],
            majorDimension=3,
            style=wx.RA_SPECIFY_COLS)
        self.ctlextractwindow = wx.TextCtrl(panel3, value="", size=size1)

        self.ctlextract = wx.ComboBox(
            panel3,
            value="Height",
            choices=self.parent.extractchoices.values(),
            style=wx.CB_READONLY)

        self.plotbutton = wx.Button(panel3, -1, "Peak Detection/Extraction")
        self.plotbutton2 = wx.Button(panel3, -1, "Plot 2D Grids")
        self.parent.Bind(wx.EVT_BUTTON, self.pres.make2dplots,
                         self.plotbutton2)
        self.parent.Bind(wx.EVT_BUTTON, self.pres.on_pick_peaks,
                         self.plotbutton)

        sizercontrol3.Add(self.ctlwindow, (0, 1))
        sizercontrol3.Add(wx.StaticText(panel3, label="Picking Range (Da): "),
                          (0, 0),
                          flag=wx.ALIGN_CENTER_VERTICAL)
        sizercontrol3.Add(self.ctlthresh, (1, 1))
        sizercontrol3.Add(wx.StaticText(panel3, label="Picking Threshold: "),
                          (1, 0),
                          flag=wx.ALIGN_CENTER_VERTICAL)
        sizercontrol3.Add(self.ctlnorm, (2, 0), span=(1, 2), flag=wx.EXPAND)
        sizercontrol3.Add(wx.StaticText(panel3,
                                        label="How to Extract Peaks: "),
                          (3, 0),
                          flag=wx.ALIGN_CENTER_VERTICAL)
        sizercontrol3.Add(self.ctlextract, (3, 1), span=(1, 1), flag=wx.EXPAND)
        sizercontrol3.Add(self.ctlnorm2, (5, 0), span=(1, 2), flag=wx.EXPAND)
        sizercontrol3.Add(wx.StaticText(panel3, label="Extraction Window: "),
                          (4, 0),
                          flag=wx.ALIGN_CENTER_VERTICAL)
        sizercontrol3.Add(self.ctlextractwindow, (4, 1), span=(1, 1))
        sizercontrol3.Add(self.plotbutton, (6, 0), span=(1, 2), flag=wx.EXPAND)
        sizercontrol3.Add(self.plotbutton2, (7, 0),
                          span=(1, 2),
                          flag=wx.EXPAND)

        panel3.SetSizer(sizercontrol3)
        sizercontrol3.Fit(panel3)
        self.foldpanels.AddFoldPanelWindow(foldpanel3, panel3,
                                           fpb.FPB_ALIGN_WIDTH)
        self.foldpanels.AddFoldPanelWindow(foldpanel3,
                                           wx.StaticText(foldpanel3, -1, " "),
                                           fpb.FPB_ALIGN_WIDTH)

        # Plotting Parameters
        foldpanel3b = self.foldpanels.AddFoldPanel(
            caption="Additional Plotting Parameters",
            collapsed=True,
            cbstyle=style3b)
        panel3b = wx.Panel(foldpanel3b, -1)

        gbox3b = wx.GridBagSizer(wx.VERTICAL)
        gbox3b.Add(wx.StaticText(panel3b, label='2D Color Map: '), (0, 0),
                   flag=wx.ALIGN_CENTER_VERTICAL)
        self.ctl2dcm = wx.ComboBox(panel3b, wx.ID_ANY, style=wx.CB_READONLY)
        gbox3b.Add(wx.StaticText(panel3b, label='Peaks Color Map: '), (1, 0),
                   flag=wx.ALIGN_CENTER_VERTICAL)
        self.ctlpeakcm = wx.ComboBox(panel3b, wx.ID_ANY, style=wx.CB_READONLY)

        for mp in self.config.cmaps2:
            self.ctl2dcm.Append(mp)
        for mp in self.config.cmaps:
            self.ctlpeakcm.Append(mp)

        gbox3b.Add(self.ctl2dcm, (0, 1), flag=wx.ALIGN_CENTER_VERTICAL)
        gbox3b.Add(self.ctlpeakcm, (1, 1), flag=wx.ALIGN_CENTER_VERTICAL)

        self.ctldiscrete = wx.CheckBox(panel3b, label="Discrete Plot")
        gbox3b.Add(self.ctldiscrete, (2, 0), flag=wx.ALIGN_CENTER_VERTICAL)
        self.ctlpublicationmode = wx.CheckBox(panel3b,
                                              label="Publication Mode")
        gbox3b.Add(self.ctlpublicationmode, (2, 1),
                   flag=wx.ALIGN_CENTER_VERTICAL)
        self.ctlrawflag = wx.RadioBox(panel3b,
                                      label="",
                                      choices=["Reconvolved", "Raw Results"])
        gbox3b.Add(self.ctlrawflag, (3, 0), span=(1, 2), flag=wx.EXPAND)

        gbox3b.Add(wx.StaticText(panel3b, label="Marker Threshold: "), (4, 0),
                   flag=wx.ALIGN_CENTER_VERTICAL)
        gbox3b.Add(wx.StaticText(panel3b, label="Species Separation: "),
                   (5, 0),
                   flag=wx.ALIGN_CENTER_VERTICAL)
        self.ctlthresh2 = wx.TextCtrl(panel3b, value="", size=size1)
        self.ctlsep = wx.TextCtrl(panel3b, value="", size=size1)
        gbox3b.Add(self.ctlthresh2, (4, 1), flag=wx.ALIGN_CENTER_VERTICAL)
        gbox3b.Add(self.ctlsep, (5, 1), flag=wx.ALIGN_CENTER_VERTICAL)

        sb2 = wx.StaticBox(panel3b, label='Integration Range')
        sbs2 = wx.StaticBoxSizer(sb2, orient=wx.HORIZONTAL)
        self.ctlintlb = wx.TextCtrl(panel3b, value='', size=(75, -1))
        self.ctlintub = wx.TextCtrl(panel3b, value='', size=(75, -1))
        sbs2.Add(self.ctlintlb,
                 flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
                 border=5)
        sbs2.Add(wx.StaticText(panel3b, label=' to '),
                 0,
                 flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND)
        sbs2.Add(self.ctlintub,
                 flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
                 border=5)
        sbs2.Add(wx.StaticText(panel3b, label=' Da '),
                 0,
                 flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND)
        gbox3b.Add(sbs2, (6, 0), span=(1, 2), flag=wx.EXPAND)

        sb3 = wx.StaticBox(panel3b, label='Limits on # of Spectra')
        sbs3 = wx.StaticBoxSizer(sb3, orient=wx.HORIZONTAL)
        self.ctlcrossover = wx.TextCtrl(panel3b, value='', size=(75, -1))
        self.ctlnumtot = wx.TextCtrl(panel3b, value='', size=(75, -1))
        sbs3.Add(wx.StaticText(panel3b, label='If over'),
                 0,
                 flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND)
        sbs3.Add(self.ctlcrossover,
                 flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
                 border=5)
        sbs3.Add(wx.StaticText(panel3b, label=' plot only'),
                 0,
                 flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND)
        sbs3.Add(self.ctlnumtot,
                 flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
                 border=5)
        gbox3b.Add(sbs3, (7, 0), span=(1, 2), flag=wx.EXPAND)

        self.replotbutton = wx.Button(panel3b, -1, "Replot")
        self.parent.Bind(wx.EVT_BUTTON, self.pres.on_replot, self.replotbutton)
        gbox3b.Add(self.replotbutton, (8, 0), span=(1, 1), flag=wx.EXPAND)

        self.compositebutton = wx.Button(panel3b, -1, "Plot Composite")
        self.parent.Bind(wx.EVT_BUTTON, self.pres.on_plot_composite,
                         self.compositebutton)
        gbox3b.Add(self.compositebutton, (8, 1), span=(1, 1), flag=wx.EXPAND)

        panel3b.SetSizer(gbox3b)
        gbox3b.Fit(panel3b)
        self.foldpanels.AddFoldPanelWindow(foldpanel3b, panel3b,
                                           fpb.FPB_ALIGN_WIDTH)
        self.foldpanels.AddFoldPanelWindow(foldpanel3b,
                                           wx.StaticText(foldpanel3b, -1, " "),
                                           fpb.FPB_ALIGN_WIDTH)

        bright = 250
        foldpanel1.SetBackgroundColour(wx.Colour(bright, bright, 255))

        foldpanel2.SetBackgroundColour(wx.Colour(255, 255, bright))
        foldpanel2b.SetBackgroundColour(wx.Colour(255, 255, bright))

        foldpanel3.SetBackgroundColour(wx.Colour(255, bright, bright))
        foldpanel3b.SetBackgroundColour(wx.Colour(255, bright, bright))

        sizercontrol.SetMinSize((250 + self.config.imflag * 10, 0))

        # Add to top control sizer
        sizercontrol.Add(self.foldpanels, 1, wx.EXPAND)
        self.SetSizer(sizercontrol)
        sizercontrol.Fit(self)
        self.setup_tool_tips()