def _layout(self): self.select = wx.GridBagSizer(20, 5) #---------------------------- #---------Input maps--------- # Ask user for digital elevation model self.text1 = wx.StaticText(parent = self.panel, id = wx.ID_ANY, label = "INPUT : Elevation map (required)") self.select.Add(item = self.text1, flag = wx.LEFT, pos = (1,0), span = wx.DefaultSpan, border = 0) # Add the box for choosing the map self.select1 = gselect.Select(parent = self.panel, id = wx.ID_ANY, size = (250, -1), type = 'raster', multiple = False) self.select.Add(item = self.select1, pos = (2,0), span = wx.DefaultSpan) # binder self.select1.Bind(wx.EVT_TEXT, self.OnSelectElev) #---------------------------- # Ask user for Flow accumulation self.text2 = wx.StaticText(parent = self.panel, id = wx.ID_ANY, label = "INPUT/OUTPUT : Flow accumulation (required)") self.select.Add(item = self.text2, flag = wx.LEFT, pos = (3,0), span = wx.DefaultSpan) # Flow accum can be either existent or to be calculated # RadioButton self.hbox1 = wx.BoxSizer(wx.HORIZONTAL) self.cb1 = wx.RadioButton(parent = self.panel, id = wx.ID_ANY, label = "Custom (select existing map)", style = wx.RB_GROUP) self.hbox1.Add(item = self.cb1, flag = wx.LEFT) self.cb2 = wx.RadioButton(parent = self.panel, id = wx.ID_ANY, label = "Create by MFD algorithm") self.hbox1.Add(item = self.cb2, flag = wx.LEFT) self.cb3 = wx.RadioButton(parent = self.panel, id = wx.ID_ANY, label = "Create by SFD algorithm") self.hbox1.Add(item = self.cb3, flag = wx.LEFT) self.select.Add(item = self.hbox1, pos = (4,0)) # Box to insert name of acc map self.select2 = gselect.Select(parent = self.panel, id = wx.ID_ANY, size = (250, -1), type = 'raster', multiple = False) # select existing map self.select.Add(item = self.select2, pos = (5,0), span = wx.DefaultSpan) self.textOne = wx.TextCtrl(parent = self.panel, id = wx.ID_ANY, style = wx.TE_LEFT) self.select.Add(item = self.textOne, flag = wx.LEFT | wx.EXPAND, pos = (6,0), span = wx.DefaultSpan) # linking buttons and text self.texts = {"Custom (select existing map)": self.select2, "Create by MFD algorithm": self.textOne, "Create by SFD algorithm": self.textOne} self.selectedText = self.select2 # default is select existing map # Disable self.textOne.Enable(False) # RadioButton binders self.cb1.Bind(wx.EVT_RADIOBUTTON, self.OnSelectExistAcc) self.cb2.Bind(wx.EVT_RADIOBUTTON, self.OnSelectMFDAcc) self.cb3.Bind(wx.EVT_RADIOBUTTON, self.OnSelectSFDAcc) #---------------------------- # Ask user for Mask self.text3 = wx.StaticText(parent = self.panel, id = wx.ID_ANY, label = "INPUT : Mask (optional)") self.select.Add(item = self.text3, flag = wx.LEFT, pos = (7,0), span = wx.DefaultSpan) # Add the box for choosing the map self.select3 = gselect.Select(parent = self.panel, id = wx.ID_ANY, size = (250, -1), type = 'raster', multiple = False) self.select.Add(item = self.select3, pos = (8,0), span = wx.DefaultSpan) # binder self.select3.Bind(wx.EVT_TEXT, self.OnSelectMask) #---------------------------- # Ask user for threshold self.text4 = wx.StaticText(parent = self.panel, id = wx.ID_ANY, label = "INPUT : Threshold (required)") self.select.Add(item = self.text4, flag = wx.LEFT, pos = (9,0), span = wx.DefaultSpan) # Box to insert threshold self.txtTwo = wx.TextCtrl(parent = self.panel, id = wx.ID_ANY, style = wx.TE_LEFT) self.select.Add(item = self.txtTwo, flag = wx.LEFT, pos = (10,0), span = wx.DefaultSpan) # binder self.txtTwo.Bind(wx.EVT_TEXT, self.OnSelecTh) #---------------------------- #---------Output maps--------- # Flow direction map self.text5 = wx.StaticText(parent = self.panel, id = wx.ID_ANY, label = "OUTPUT : Flow direction map (required)") self.select.Add(item = self.text5, flag = wx.LEFT | wx.EXPAND, pos = (11,0), span = wx.DefaultSpan) # Box to insert name of new flow dir map (to be created) self.txtThr = wx.TextCtrl(parent = self.panel, id = wx.ID_ANY, style = wx.TE_LEFT) self.select.Add(item = self.txtThr, flag = wx.LEFT | wx.EXPAND, pos = (12,0), span = wx.DefaultSpan) # binder self.txtThr.Bind(wx.EVT_TEXT, self.OnSelecFd) #---------------------------- # Streams map self.text6 = wx.StaticText(parent = self.panel, id = wx.ID_ANY, label = "OUTPUT : Streams (required)") self.select.Add(item = self.text6, flag = wx.LEFT | wx.EXPAND, pos = (13,0), span = wx.DefaultSpan) # Box to insert name of new streams map (to be created) self.txtFou = wx.TextCtrl(parent = self.panel, id = wx.ID_ANY, style = wx.TE_LEFT) self.select.Add(item = self.txtFou, flag = wx.LEFT | wx.EXPAND, pos = (14,0), span = wx.DefaultSpan) # binder self.txtFou.Bind(wx.EVT_TEXT, self.OnSelecStr) #---------------------------- # Network map self.text7 = wx.StaticText(parent = self.panel, id = wx.ID_ANY, label = "OUTPUT : Network (required)") self.select.Add(item = self.text7, flag = wx.LEFT | wx.EXPAND, pos = (15,0), span = wx.DefaultSpan) # Box to insert name of new streams map (to be created) self.txtFiv = wx.TextCtrl(parent = self.panel, id = wx.ID_ANY, style = wx.TE_LEFT) self.select.Add(item = self.txtFiv, flag = wx.LEFT | wx.EXPAND, pos = (16,0), span = wx.DefaultSpan) # binder self.txtFiv.Bind(wx.EVT_TEXT, self.OnSelecNet) #---------------------------- self.panel.SetSizer(self.select) self.btnPanel = wx.Panel(self) #-------------Buttons------------- self.createButtonBar(self.btnPanel) self.sizer = wx.BoxSizer(wx.VERTICAL) self.sizer.Add(self.panel, 1, wx.EXPAND) self.sizer.Add(self.btnPanel, 0, wx.EXPAND) self.SetSizer(self.sizer)
def __init__(self, parent, Rinstance, controller, *args, **kwargs): wx.Panel.__init__(self, parent, *args, **kwargs) self.parent = parent self.border = 4 # 1. Input data InputBoxSizer = wx.StaticBoxSizer(wx.StaticBox(self, id=wx.ID_ANY, label=_("Input Data")), orient=wx.HORIZONTAL) flexSizer = wx.FlexGridSizer(cols=3, hgap=5, vgap=5) flexSizer.AddGrowableCol(1) flexSizer.Add(item=wx.StaticText(self, id=wx.ID_ANY, label=_("Point dataset:")), flag=wx.ALIGN_CENTER_VERTICAL) self.InputDataMap = gselect.VectorSelect(parent=self, ftype='points') self.InputDataMap.SetFocus() flexSizer.Add(item=self.InputDataMap, flag=wx.ALIGN_CENTER_VERTICAL) RefreshButton = wx.Button(self, id=wx.ID_REFRESH) RefreshButton.Bind(wx.EVT_BUTTON, self.OnButtonRefresh) flexSizer.Add(item=RefreshButton, flag=wx.ALIGN_CENTER_VERTICAL) flexSizer.Add(item=wx.StaticText(self, id=wx.ID_ANY, label=_("Numeric column:")), flag=wx.ALIGN_CENTER_VERTICAL) self.InputDataColumn = gselect.ColumnSelect(self, id=wx.ID_ANY) self.InputDataColumn.SetSelection(0) flexSizer.Add(item=self.InputDataColumn) self.InputDataMap.GetChildren()[0].Bind(wx.EVT_TEXT, self.OnInputDataChanged) InputBoxSizer.Add(item=flexSizer) # 2. Kriging. In book pages one for each R package. Includes variogram fit. KrigingSizer = wx.StaticBoxSizer( wx.StaticBox(self, id=wx.ID_ANY, label=_("Kriging")), wx.HORIZONTAL) self.RPackagesBook = FN.FlatNotebook( parent=self, id=wx.ID_ANY, style=FN.FNB_BOTTOM | FN.FNB_NO_NAV_BUTTONS | FN.FNB_FANCY_TABS | FN.FNB_NO_X_BUTTON) for Rpackage in [ "gstat" ]: # , "geoR"]: #@TODO: enable it if/when it'll be implemented. self.CreatePage(package=Rpackage, Rinstance=Rinstance, controller=controller) ## Command output. From menuform module, cmdPanel class self.goutput = goutput.GMConsole( parent=self, margin=False, pageid=self.RPackagesBook.GetPageCount(), notebook=self.RPackagesBook) self.goutputId = self.RPackagesBook.GetPageCount() self.outpage = self.RPackagesBook.AddPage(self.goutput, text=_("Command output")) self.RPackagesBook.SetSelection(0) KrigingSizer.Add(self.RPackagesBook, proportion=1, flag=wx.EXPAND) # 3. Output Parameters. OutputSizer = wx.StaticBoxSizer( wx.StaticBox(self, id=wx.ID_ANY, label=_("Output")), wx.HORIZONTAL) OutputParameters = wx.GridBagSizer(hgap=5, vgap=5) OutputParameters.AddGrowableCol(1) OutputParameters.Add(item=wx.StaticText( self, id=wx.ID_ANY, label=_("Name for the output raster map:")), flag=wx.ALIGN_CENTER_VERTICAL, pos=(0, 0)) self.OutputMapName = gselect.Select(parent=self, id=wx.ID_ANY, type='raster', mapsets=[grass.gisenv()['MAPSET']]) OutputParameters.Add(item=self.OutputMapName, flag=wx.EXPAND | wx.ALL, pos=(0, 1)) self.VarianceRasterCheckbox = wx.CheckBox( self, id=wx.ID_ANY, label=_("Export variance map as well: ")) self.VarianceRasterCheckbox.SetValue(state=True) OutputParameters.Add(item=self.VarianceRasterCheckbox, flag=wx.ALIGN_CENTER_VERTICAL, pos=(1, 0)) self.OutputVarianceMapName = gselect.Select( parent=self, id=wx.ID_ANY, type='raster', mapsets=[grass.gisenv()['MAPSET']]) self.VarianceRasterCheckbox.Bind(wx.EVT_CHECKBOX, self.OnVarianceCBChecked) OutputParameters.Add(item=self.OutputVarianceMapName, flag=wx.EXPAND | wx.ALL, pos=(1, 1)) self.OverwriteCheckBox = wx.CheckBox( self, id=wx.ID_ANY, label=_("Allow output files to overwrite existing files")) self.OverwriteCheckBox.SetValue( UserSettings.Get(group='cmd', key='overwrite', subkey='enabled')) OutputParameters.Add(item=self.OverwriteCheckBox, pos=(2, 0), span=(1, 2)) OutputSizer.Add(OutputParameters, proportion=0, flag=wx.EXPAND | wx.ALL, border=self.border) # 4. Run Button and Quit Button ButtonSizer = wx.BoxSizer(wx.HORIZONTAL) HelpButton = wx.Button(self, id=wx.ID_HELP) HelpButton.Bind(wx.EVT_BUTTON, self.OnHelpButton) QuitButton = wx.Button(self, id=wx.ID_EXIT) QuitButton.Bind(wx.EVT_BUTTON, self.OnCloseWindow) self.RunButton = wx.Button( self, id=wx.ID_ANY, label=_("&Run")) # no stock ID for Run button.. self.RunButton.Bind(wx.EVT_BUTTON, self.OnRunButton) self.RunButton.Enable( False ) # disable it on loading the interface, as input map is not set ButtonSizer.Add(HelpButton, proportion=0, flag=wx.ALIGN_LEFT | wx.ALL, border=self.border) ButtonSizer.Add(QuitButton, proportion=0, flag=wx.ALIGN_RIGHT | wx.ALL, border=self.border) ButtonSizer.Add(self.RunButton, proportion=0, flag=wx.ALIGN_RIGHT | wx.ALL, border=self.border) # Main Sizer. Add each child sizer as soon as it is ready. Sizer = wx.BoxSizer(wx.VERTICAL) Sizer.Add(InputBoxSizer, proportion=0, flag=wx.EXPAND | wx.ALL, border=self.border) Sizer.Add(KrigingSizer, proportion=1, flag=wx.EXPAND | wx.ALL, border=self.border) Sizer.Add(OutputSizer, proportion=0, flag=wx.EXPAND | wx.ALL, border=self.border) Sizer.Add(ButtonSizer, proportion=0, flag=wx.ALIGN_RIGHT | wx.ALL, border=self.border) self.SetSizerAndFit(Sizer)