def make_layout(self): bspace=10 self.topbox.SetOrientation(wx.HORIZONTAL) self.controlbox = wx.BoxSizer(wx.VERTICAL) self.AddPlot() ## Create divider self.divider = Divider(self) self.divider.SetBackgroundColour(wx.Colour(200,200,200) ) self.topbox.Add(self.divider, 0, wx.EXPAND|wx.GROW) # Get PHY RX if hasattr(self.GetParent(), 'phy'): if hasattr(self.GetParent().phy, 'rx'): self.phyrx = self.GetParent().phy.rx """ Subchannel """ self.set_subchannel = lambda *args: None self.subchannel = 0 if hasattr(self.phyrx, 'lfb_subchannel'): self.subchannel = self.phyrx.lfb_subchannel() if hasattr(self.phyrx, 'set_lfb_subchannel'): self.set_subchannel = self.phyrx.set_lfb_subchannel box = wx.BoxSizer(wx.VERTICAL) self.make_label("Subchannel", box) self.fsubchannel = form.int_field(self, box, value=self.subchannel, \ callback=self.SetSubchannel) self.AddParam('subchannel', self.SetSubchannel) self.controlbox.Add(box, 0, wx.TOP, border=bspace) """ Period """ self.set_period = lambda *args: None self.period = 0 if hasattr(self.phyrx, 'lfb_period'): self.period = self.phyrx.lfb_period() if hasattr(self.phyrx, 'set_lfb_period'): self.set_period = self.phyrx.set_lfb_period box = wx.BoxSizer(wx.VERTICAL) self.make_label("Period", box) self.fperiod = form.int_field(self, box, value=self.period, \ callback=self.SetPeriod) self.AddParam('period', self.SetPeriod) self.controlbox.Add(box, 0, wx.TOP|wx.BOTTOM, border=bspace) """ Codebook """ self.set_codebook = lambda *args: None self.codebook = 0 if hasattr(self.phyrx, 'lfb_codebook'): self.codebook = self.phyrx.lfb_codebook() if hasattr(self.phyrx, 'set_lfb_codebook'): self.set_codebook = self.phyrx.set_lfb_codebook box = wx.BoxSizer(wx.HORIZONTAL) self.fcodebook = choicebox_field(self, box, \ value=MimoCSI.CODEBOOK_CHOICES[0], callback=self.SetCodebook, \ choices = MimoCSI.CODEBOOK_CHOICES) self.fcodebook.f.SetToolTipString("Set limited feedback codebook") self.AddParam('codebook', self.SetCodebook) self.controlbox.Add(box, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.TOP|wx.BOTTOM, border=bspace) """ Codebook Bits """ self.set_codebit = lambda *args: None self.codebits = 3 if hasattr(self.phyrx, 'lfb_codebits'): self.codebits = self.phyrx.lfb_codebits() if hasattr(self.phyrx, 'set_lfb_codebits'): self.set_codebits = self.phyrx.set_lfb_codebits box = wx.BoxSizer(wx.VERTICAL) self.make_label("Codebook Bits", box) self.fcodebits = form.int_field(self, box, value=self.codebits, \ callback=self.SetCodebits) self.AddParam('codebits', self.SetCodebits) self.controlbox.Add(box, 0, wx.TOP, border=bspace) self.AddParam('data', self.SetData) self.topbox.Add(self.controlbox, 0, wx.ALL, border=bspace)
def make_layout(self): bspace=10 self.topbox.SetOrientation(wx.HORIZONTAL) self.controlbox = wx.BoxSizer(wx.VERTICAL) self.AddPlot() ## Create divider self.divider = Divider(self) self.divider.SetBackgroundColour(wx.Colour(200,200,200) ) self.topbox.Add(self.divider, 0, wx.EXPAND|wx.GROW) # Get PHY RX if hasattr(self.GetParent(), 'phy'): if hasattr(self.GetParent().phy, 'rx'): self.phyrx = self.GetParent().phy.rx bspace = 5 """ Window Size """ self.set_window_size = lambda *args: None self.window_size = 0 if hasattr(self.phyrx, 'sa_window_size'): window_size = self.phyrx.sa_window_size() self.window_size = None print "[MIMOSELFADAPTATION] window size from phyrx = ", self.window_size if hasattr(self.phyrx, 'set_sa_window_size'): self.set_window_size = self.phyrx.set_sa_window_size box = wx.BoxSizer(wx.HORIZONTAL) self.make_label("Window Size", box, 42) self.fwindow_size = form.int_field(self, box, value=window_size, \ callback=self.SetSAWindowSize) self.AddParam('window size', self.SetSAWindowSize) self.controlbox.Add(box, 0, wx.ALIGN_LEFT|wx.BOTTOM|wx.LEFT|wx.RIGHT, border=bspace) """ Update Interval """ self.set_update_interval = lambda *args: None self.update_interval = 0 if hasattr(self.phyrx, 'sa_update_interval'): self.update_interval = self.phyrx.sa_update_interval() if hasattr(self.phyrx, 'set_sa_update_interval'): self.set_update_interval = self.phyrx.set_sa_update_interval box = wx.BoxSizer(wx.HORIZONTAL) self.make_label("Update Interval", box, 27) self.fupdate_interval = form.int_field(self, box, value=self.update_interval, \ callback=self.SetUpdateInterval) self.AddParam('update interval', self.SetUpdateInterval) self.controlbox.Add(box, 0, wx.ALIGN_LEFT|wx.BOTTOM|wx.LEFT|wx.RIGHT, border=bspace) """ PER and Tput Format """ self.fformat = {} fcount = 0 flabel = ["PER Format", "Tput Format"] foffset = [50, 47] for param in ['per', 'tput']: if param not in self.format: self.format[param] = MimoSelfAdaptation.FORMAT[fcount] box = wx.BoxSizer(wx.HORIZONTAL) self.make_label(flabel[fcount], box, foffset[fcount]) self.fformat[param] = choicebox_field(self, box, \ callback=lambda *args: self.SetFormat(param, *args), \ value=self.format[param], \ choices=MimoSelfAdaptation.FORMAT) self.fformat[param].f.SetToolTipString("Select Plot Format") self.controlbox.Add(box, 0, wx.ALIGN_LEFT|wx.BOTTOM|wx.LEFT|wx.RIGHT, border=bspace) fcount += 1 """ Database parameters """ self.set_dbsize = lambda *args: None self.set_errdbsize = lambda *args: None self.dbsize, self.errdbsize = 200, 100 if hasattr(self.phyrx, 'sa_dbsize'): self.dbsize = self.phyrx.sa_dbsize() if hasattr(self.phyrx, 'sa_errdbsize'): self.errdbsize = self.phyrx.sa_errdbsize() if hasattr(self.phyrx, 'set_sa_dbsize'): self.set_dbsize = self.phyrx.set_sa_dbsize if hasattr(self.phyrx, 'set_sa_errdbsize'): self.set_errdbsize = self.phyrx.set_sa_errdbsize self.controlbox.AddSpacer( (10,10) ) hbox = wx.BoxSizer(wx.HORIZONTAL) self.make_label("Database Size", hbox, 27) self.fdbsize = form.int_field(self, hbox, value=self.dbsize, \ callback=self.SetDbSize) self.controlbox.Add(hbox, 0, wx.ALIGN_LEFT|wx.LEFT|wx.RIGHT, border=bspace) hbox = wx.BoxSizer(wx.HORIZONTAL) self.make_label("Error Size", hbox, 57) self.ferrdbsize = form.int_field(self, hbox, value=self.errdbsize, \ callback=self.SetErrDbSize) self.controlbox.Add(hbox, 0, wx.ALIGN_LEFT|wx.BOTTOM|wx.LEFT|wx.RIGHT, border=bspace) self.AddParam('dbsize', self.SetDbSize) self.AddParam('errdbsize', self.SetErrDbSize) self.controlbox.AddSpacer( (10,10) ) """ Reset, Load, and Save Database """ self.load_database = lambda *args: None self.save_database = lambda *args: None if hasattr(self.phyrx, 'sa_load_database'): self.load_database = self.phyrx.sa_load_database if hasattr(self.phyrx, 'sa_save_database'): self.save_database = self.phyrx.sa_save_database id_reset, id_load, id_save = wx.NewId(), wx.NewId(), wx.NewId() self.reset_button = wx.Button(self, id_reset, "Reset") self.load_button = wx.Button(self, id_load, "Load") self.save_button = wx.Button(self, id_save, "Save") self.reset_button.SetToolTipString("Reset database from Database and Error Size parameters.") self.load_button.SetToolTipString( "Load database from a file.") self.save_button.SetToolTipString( "Save database to a file.") wx.EVT_BUTTON(self, id_reset, self.ResetDatabase) wx.EVT_BUTTON(self, id_load, self.LoadDatabase) wx.EVT_BUTTON(self, id_save, self.SaveDatabase) self.controlbox.Add(self.reset_button, 0, wx.ALIGN_CENTER|wx.LEFT|wx.RIGHT, border=bspace) self.controlbox.Add(self.load_button, 0, wx.ALIGN_CENTER|wx.LEFT|wx.RIGHT, border=bspace) self.controlbox.Add(self.save_button, 0, wx.ALIGN_CENTER|wx.BOTTOM|wx.LEFT|wx.RIGHT, border=bspace) self.AddParam('per', self.SetPER) self.AddParam('tput', self.SetThroughput) self.AddParam('addper', self.AddPER) self.AddParam('addtput', self.AddThroughput) self.AddParam('ratehist', self.SetRateHistogram) self.topbox.Add(self.controlbox, 0, wx.ALL, border=bspace) self.Fit() self.SetClientSize(self.topbox.GetSize()) self.SetParam('window size', window_size)