예제 #1
0
 def setDataControl(self):
     if self.dataType == 1:
         # integer, use wx.SpinCtrl
         self.data_control = wx.SpinCtrl(self.parent,-1)
         self.data_control.SetRange(-2147483648,2147483647)
         # full Int range and not 0-100
         
         if self.dataType in self.control_memory.keys():
             self.data_control.SetValue(self.control_memory[self.dataType])
         else:
             self.data_control.SetValue(0)
         
         wx.EVT_SPINCTRL(self.parent,self.data_control.GetId(),self.valueChanged)
         wx.EVT_TEXT(self.parent,self.data_control.GetId(),self.valueChanged)
     elif self.dataType in [2,3]:
         # string, use a TextCtrl
         self.data_control = wx.TextCtrl(self.parent,-1)
         if self.dataType in self.control_memory.keys():
             self.data_control.SetValue(self.control_memory[self.dataType])
     elif self.dataType in[4,5]:
         # object and location - unsupported
         self.data_control = wx.StaticText(self.parent,-1,'Uneditable Data')
         if self.dataType in self.control_memory.keys():
             self.data_control.SetValue(self.control_memory[self.dataType])
     if self.data_control:
         self.Add(self.data_control,flag=wx.ALL,border=2)
     self.Layout()
     self.parent.propGrid.Layout()
예제 #2
0
    def init(self, parent):
        """ Finishes initializing the editor by creating the underlying toolkit
            widget.
        """
        factory = self.factory
        if not factory.low_name:
            self.low = factory.low

        if not factory.high_name:
            self.high = factory.high

        self.sync_value(factory.low_name, 'low', 'from')
        self.sync_value(factory.high_name, 'high', 'from')
        low = self.low
        high = self.high
        self.control = wx.SpinCtrl(parent,
                                   -1,
                                   self.str_value,
                                   min=low,
                                   max=high,
                                   initial=self.value)
        wx.EVT_SPINCTRL(parent, self.control.GetId(), self.update_object)
        if wx.VERSION < (3, 0):
            wx.EVT_TEXT(parent, self.control.GetId(), self.update_object)
        self.set_tooltip()
예제 #3
0
 def bind_event(self, function):
     def func_2(event):
         if self.is_active():
             function(event)
         event.Skip()
     wx.EVT_KILL_FOCUS(self.spin, func_2)
     if wx.Platform == '__WXMAC__' or self.immediate:
         wx.EVT_TEXT(self.spin, self.spin.GetId(), func_2)
         wx.EVT_SPINCTRL(self.spin, self.spin.GetId(), func_2)
예제 #4
0
 def __init__(self, parent, name):
     PPanel.__init__(self, parent, name)
     self.ID_SPIN_CTRL = wx.NewId()
     sizer = wx.BoxSizer()
     self.spin = wx.SpinCtrl(self, self.ID_SPIN_CTRL, size=(60, -1))
     self.spin.SetRange(0, 10000)  # min/max integers
     sizer.Add(self.spin)
     self.SetAutoLayout(True)
     self.SetSizerAndFit(sizer)
     wx.EVT_SPINCTRL(self, self.ID_SPIN_CTRL, self.OnChange)
예제 #5
0
	def SetupSpinCtrl(self):
			SpinCtrlID=wx.NewId()
			self.widget=wx.SpinCtrl(self,SpinCtrlID,size=self.button_size)
			self.widget.SetRange(self.obj_dict['min'],self.obj_dict['max'])
			self.widget.SetValue(int(self.obj_dict['value']))
			self.sbsizer.Add(self.widget)
			wx.EVT_SPINCTRL(self.widget,SpinCtrlID,self.SpinCtrlCB)
			
			label_str=''
			self.label=wx.StaticText(self,wx.NewId(),label_str,size=self.button_size)
			self.label.SetLabel(`self.obj_dict['value']`)
			self.sbsizer.Add(self.label)
예제 #6
0
    def _bindEvents(self):
        wx.EVT_BUTTON(self.viewerFrame, self.viewerFrame.showControlsButtonId,
                      self._handlerShowControls)
        wx.EVT_BUTTON(self.viewerFrame, self.viewerFrame.resetCameraButtonId,
                      lambda e: self._resetCamera())

        wx.EVT_SPINCTRL(self.controlFrame,
                        self.controlFrame.pairNumberSpinCtrlId,
                        self._handlerPairNumberSpinCtrl)
        wx.EVT_BUTTON(self.controlFrame, self.controlFrame.transformButtonId,
                      self._handlerTransformButton)
        wx.EVT_BUTTON(self.controlFrame, self.controlFrame.registerButtonId,
                      self._handlerRegisterButton)
예제 #7
0
 def __init__(self, FileName):
     wx.Dialog.__init__(self, None, title="Importing a CSV file",\
             size=(600,470))
     self.FileName = FileName
     self.decider = wx.Notebook(self, -1, pos=(10,0), \
             size=(580,240), style=wx.NB_TOP)
     self.p1 = PanelDelimiter(self.decider, self.FileName.fileName)
     self.p2 = PanelFixedWidth(self.decider, self.FileName.fileName)
     self.decider.AddPage(self.p1, "Delimited files")
     self.decider.AddPage(self.p2, "Fixed width files")
     t1 = wx.StaticText(self, -1, label="Import from row:", pos=(245, 250))
     self.headerRow = wx.CheckBox(self, 760, " Header on first row", \
             pos=(430,250))
     self.dataRow = wx.SpinCtrl(self,766,min=1,max=100, initial=1, \
             pos=(365,250),size=(50,-1))
     self.dataRow.SetValue(1)
     self.buttonImport = wx.Button(self,763,"Import", \
             pos=(500,400),size=(70,-1))
     self.buttonImport.SetDefault()
     self.buttonCancel = wx.Button(self,764,"Cancel", \
             pos=(405,400),size=(70,-1))
     self.grid = gridlib.Grid(self, -1, size=(560, 100), pos=(20, 290))
     #self.grid.HideRowLabels()
     self.MaxRows = 100
     self.MaxCols = 8
     self.grid.SetColLabelSize(16)
     self.grid.SetRowLabelSize(40)
     self.grid.SetDefaultColSize(60)
     self.grid.CreateGrid(self.MaxRows, self.MaxCols)
     for i in range(8):
         self.grid.SetRowSize(i, 16)
         self.grid.SetColLabelValue(i, " ")
     self.gridFont = wx.Font(10, wx.MODERN, wx.NORMAL, wx.NORMAL)
     self.grid.SetDefaultCellFont(self.gridFont)
     lineEndChoices = [
         'Not sure', '\\n (Unix)', '\\r\\n (Windows)', '\\r (old Mac)'
     ]
     t3 = wx.StaticText(self, -1, "Line ending:", pos=(20, 250))
     self.lineEnd = wx.Choice(self, 765,pos=(105,248),size=(120,-1),\
             choices = lineEndChoices)
     self.AttemptPreview()
     # It seems odd but it seems better for all events to be routed to the same method
     wx.EVT_CHECKBOX(self, 760, self.AttemptPreview)
     wx.EVT_TEXT(self, 761, self.AttemptPreview)
     wx.EVT_TEXT(self, 762, self.AttemptPreview)
     wx.EVT_BUTTON(self, 764, self.CancelButton)
     wx.EVT_BUTTON(self, 763, self.ImportButton)
     wx.EVT_CHOICE(self, 765, self.AttemptPreview)
     wx.EVT_SPINCTRL(self, 766, self.AttemptPreview)
예제 #8
0
    def __init__(self, MainFrame):

        # Create data table window
        wx.Frame.__init__(self,
                          None,
                          wx.ID_ANY,
                          title="Data Entry",
                          style=wx.DEFAULT_FRAME_STYLE | wx.RESIZE_BORDER)
        self.MainFrame = MainFrame

        # Panel: Data Entry
        PanelDataEntry = wx.Panel(self, wx.ID_ANY)
        sizerPanelDataEntry = wx.BoxSizer(wx.HORIZONTAL)

        # Panel: Data Sheet (XLS-style)
        PanelSheet = wx.Panel(PanelDataEntry, wx.ID_ANY)
        sizerPanelSheet = wx.BoxSizer(wx.VERTICAL)
        sizerPanelSheet.AddSpacer(5)

        # Panel: Cell content field at top of data sheet
        PanelCellContent = wx.Panel(PanelSheet, wx.ID_ANY)
        sizerPanelCellContent = wx.BoxSizer(wx.HORIZONTAL)
        sizerPanelCellContent.AddSpacer(10)
        TextContentCell = wx.StaticText(PanelCellContent,
                                        wx.ID_ANY,
                                        label='Cell Content:',
                                        style=wx.ALIGN_LEFT)
        sizerPanelCellContent.Add(TextContentCell, 0, wx.EXPAND)
        sizerPanelCellContent.AddSpacer(3)
        self.CellContentTxt = wx.TextCtrl(PanelCellContent,
                                          wx.ID_ANY,
                                          value="",
                                          size=(861, 23),
                                          style=wx.TE_READONLY)
        sizerPanelCellContent.Add(self.CellContentTxt, 0, wx.EXPAND)
        PanelCellContent.SetSizer(sizerPanelCellContent)
        sizerPanelSheet.Add(PanelCellContent)
        sizerPanelSheet.AddSpacer(5)

        # Grid: XLS (XLS-style)
        self.Sheet = wx.grid.Grid(PanelSheet)

        # Specify gird relevant variables
        self.factorNames = []
        self.factorLevels = []
        self.Sheet.nRow = 30
        self.Sheet.nCol = 11
        self.Sheet.content4undo = [0, 0, '']
        self.Sheet.filePath = ''

        # Creating the grid object (specify label names)
        self.Sheet.CreateGrid(self.Sheet.nRow, self.Sheet.nCol)
        self.Sheet.SetColLabelValue(0, "Subject")
        for i in xrange(1, self.Sheet.nCol):
            self.Sheet.SetColLabelValue(i, "F%d" % i)

        # Create the grid object
        sizerPanelSheet.Add(self.Sheet)
        PanelSheet.SetSizer(sizerPanelSheet)
        sizerPanelDataEntry.Add(PanelSheet, 0, wx.EXPAND)
        sizerPanelDataEntry.AddSpacer(10)

        # Panel: Button field below table
        PanelButton = wx.Panel(self, wx.ID_ANY)
        sizerButton = wx.BoxSizer(wx.HORIZONTAL)
        sizerButton.AddSpacer(10)
        # Number of Rows Field
        TextInserRow = wx.StaticText(PanelButton,
                                     wx.ID_ANY,
                                     label="Number of &Rows: ")
        sizerButton.Add(TextInserRow, 0, wx.ALIGN_CENTRE)
        self.Sheet.nRow = self.Sheet.GetNumberRows()
        self.Row = wx.SpinCtrl(PanelButton,
                               1,
                               str(self.Sheet.nRow),
                               size=(75, 25),
                               min=1,
                               max=1000,
                               style=wx.SP_ARROW_KEYS)
        sizerButton.Add(self.Row, 0, wx.EXPAND)
        sizerButton.AddSpacer(20)
        # Number of Columns Field
        TextInserCol = wx.StaticText(PanelButton,
                                     wx.ID_ANY,
                                     label="Number of &Columns: ")
        sizerButton.Add(TextInserCol, 0, wx.ALIGN_CENTRE)
        self.Sheet.nCol = self.Sheet.GetNumberCols()
        self.Col = wx.SpinCtrl(PanelButton,
                               2,
                               str(self.Sheet.nCol),
                               size=(75, 25),
                               min=1,
                               max=1000,
                               style=wx.SP_ARROW_KEYS)
        sizerButton.Add(self.Col, 0, wx.EXPAND)
        sizerButton.AddSpacer(20)
        # Define Import Button
        ButtonImport = wx.Button(PanelButton,
                                 wx.ID_ANY,
                                 size=(135, 25),
                                 label="&Import CSV Table")
        sizerButton.Add(ButtonImport, 0, wx.EXPAND)
        sizerButton.AddSpacer(20)
        # Define Save Button
        ButtonSave = wx.Button(PanelButton,
                               wx.ID_ANY,
                               size=(135, 25),
                               label="&Save Table as CSV")
        sizerButton.Add(ButtonSave, 0, wx.EXPAND)
        sizerButton.AddSpacer(20)
        # Define Factor Button
        ButtonDefineFactor = wx.Button(PanelButton,
                                       wx.ID_ANY,
                                       size=(135, 25),
                                       label="&Define Factor")
        sizerButton.Add(ButtonDefineFactor, 0, wx.EXPAND)
        sizerButton.AddSpacer(20)

        # Resize everything and create the window
        PanelButton.SetSizerAndFit(sizerButton)
        sizerFrame = wx.BoxSizer(wx.VERTICAL)
        sizerFrame.Add(PanelDataEntry, 0, wx.EXPAND)
        sizerFrame.AddSpacer(5)
        sizerFrame.Add(PanelButton, 0, wx.EXPAND)
        sizerFrame.AddSpacer(5)
        PanelDataEntry.SetSizer(sizerPanelDataEntry)
        self.SetSizerAndFit(sizerFrame)

        # Specification of events
        wx.EVT_SPINCTRL(self, self.Row.Id, self.modifyRow)
        wx.EVT_SPINCTRL(self, self.Col.Id, self.modifyCol)
        wx.EVT_BUTTON(self, ButtonDefineFactor.Id, self.defineFactor)
        wx.EVT_BUTTON(self, ButtonSave.Id, self.exportData)
        wx.EVT_BUTTON(self, ButtonImport.Id, self.importData)
        self.Bind(wx.EVT_CLOSE, self.onClose)
        self.Bind(wx.grid.EVT_GRID_SELECT_CELL, self.onCellSelected)
        self.Bind(wx.EVT_CHAR_HOOK, self.onKeyDown)

        # Specify grid events
        self.Sheet.Bind(wx.grid.EVT_GRID_LABEL_RIGHT_CLICK,
                        self.onLabelRightClick)
        self.Bind(wx.grid.EVT_GRID_CELL_RIGHT_CLICK, self.onCellRightClick)

        # Drag and Drop Function
        dropTarget = GridFileDropTarget(self)
        self.Sheet.SetDropTarget(dropTarget)
        self.Sheet.EnableDragRowSize()
        self.Sheet.EnableDragColSize()

        # Fill in table if dataset already exists
        if self.MainFrame.Dataset != {}:
            self.loadDataset()
예제 #9
0
    def __init__(self, parent, key, val, global_config, env):
        if DEBUG: print key, val
        self.parent = parent
        self.env = env
        self.key = key
        self.val = val
        self.global_config = global_config
        self.env = env

        WIDGET_W = global_config['CONFIG_WIDGET_W']['value']
        WIDGET_H = global_config['CONFIG_WIDGET_H']['value']
        self.wsize = wx.Size(WIDGET_W, WIDGET_H)

        self.sbox = wx.StaticBox(self.parent, -1, key, style=wx.BORDER_STATIC)
        self.sbox.SetWindowStyle(wx.BORDER_NONE)

        self.sizer = wx.StaticBoxSizer(self.sbox, wx.HORIZONTAL)
        self.widget = None
        self.label = None
        self.defaultB = None
        self.showColourDialogB = None
        self.defaultBID = wx.NewId()
        self.set = 0
        self.bmp = None

        #every CfgCtrlObj has a defaultB:
        self.defaultB = wx.Button(self.parent,
                                  self.defaultBID,
                                  "Default",
                                  size=self.wsize)

        if self.val['wtype'] == 'wx.ComboBox':
            cbID = wx.NewId()
            cb = wx.ComboBox(self.parent, cbID, size=self.wsize, choices=[])
            for idx in range(len(self.val['default'])):
                cb.Append(self.val['default'][idx])
            cb.SetValue(self.val['value'])
            self.widget = cb

            #self.widget.SetValue(self.val['value'])
            self.sizer.Add(self.widget)
            wx.EVT_COMBOBOX(self.parent, cbID, self.comboCB)

            if self.val['icon']:
                #in this version, if icon, then actor.
                fname = os.path.abspath(
                    os.path.join(self.env.sitepkgdir, global_config['APPNAME'],
                                 'Actors', self.val['value'], 'icon.gif'))
                gif = wx.Image(fname, wx.BITMAP_TYPE_GIF).ConvertToBitmap()
                self.bmp = wx.StaticBitmap(
                    self.parent, -1, gif)  #,size=wx.Size(WIDGET_W,WIDGET_W)
                self.sizer.Add(self.bmp)
            else:
                self.label = wx.StaticText(self.parent,
                                           wx.NewId(),
                                           '',
                                           size=self.wsize)
                self.sizer.Add(self.label)

            wx.EVT_BUTTON(self.defaultB, self.defaultBID, self.defaultCB)

        elif self.val['wtype'] == 'wx.TextCtrl':
            self.widget = wx.TextCtrl(self.parent,
                                      wx.NewId(),
                                      style=self.val['style'],
                                      size=self.wsize)
            self.widget.SetValue(self.val['value'])
            self.widget.SetLabel(self.val['descr'])
            self.sizer.Add(self.widget)

            label_str = ''
            self.label = wx.StaticText(self.parent,
                                       wx.NewId(),
                                       label_str,
                                       size=self.wsize)
            self.sizer.Add(self.label)

            wx.EVT_BUTTON(self.defaultB, self.defaultBID, self.defaultCB)

        elif self.val['wtype'] == 'wx.ImageDialog':
            ImgBrowserID = wx.NewId()
            self.widget = ib.ImageDialog(
                self.parent,
                self.val['path'],
            )

            ibID = wx.NewId()
            self.ibB = wx.Button(self.parent,
                                 ibID,
                                 "ImageDialog",
                                 size=self.wsize)
            self.sizer.Add(self.ibB)
            wx.EVT_BUTTON(self.ibB, ibID, self.imagedialogCB)

            label_str = ''
            self.label = wx.StaticText(self.parent,
                                       wx.NewId(),
                                       label_str,
                                       size=self.wsize)
            self.label.SetLabel(self.val['value'])
            self.sizer.Add(self.label)

            wx.EVT_BUTTON(self.defaultB, self.defaultBID, self.defaultCB)

        elif self.val['wtype'] == 'wx.FileDialog':

            FileDialogID = wx.NewId()
            self.widget = wx.FileDialog(
                self.parent,
                message="Choose file",
                defaultDir=self.val['path'],
            )

            fdID = wx.NewId()
            self.fdB = wx.Button(self.parent,
                                 fdID,
                                 "ShowDialog",
                                 size=self.wsize)
            self.sizer.Add(self.fdB)
            wx.EVT_BUTTON(self.fdB, fdID, self.filedialogCB)

            label_str = ''
            self.label = wx.StaticText(self.parent,
                                       wx.NewId(),
                                       label_str,
                                       size=self.wsize)
            self.label.SetLabel(self.val['value'])
            self.sizer.Add(self.label)

            wx.EVT_BUTTON(self.defaultB, self.defaultBID, self.defaultCB)

        elif self.val['wtype'] == 'wx.CheckBox':
            CheckBoxID = wx.NewId()
            self.widget = wx.CheckBox(self.parent,
                                      CheckBoxID,
                                      "",
                                      size=self.wsize)
            self.widget.SetValue(int(self.val['value']))
            self.sizer.Add(self.widget)
            wx.EVT_CHECKBOX(self.widget, CheckBoxID, self.checkboxCB)

            label_str = ''
            self.label = wx.StaticText(self.parent,
                                       wx.NewId(),
                                       label_str,
                                       size=self.wsize)
            self.label.SetLabel( ` self.val['value'] `)
            self.sizer.Add(self.label)

            wx.EVT_BUTTON(self.defaultB, self.defaultBID, self.defaultCB)

            self.checkboxCB(None)  #to set the label after label exists

        elif self.val['wtype'] == 'wx.SpinCtrl':
            SpinCtrlID = wx.NewId()
            self.widget = wx.SpinCtrl(self.parent, SpinCtrlID, size=self.wsize)
            self.widget.SetRange(self.val['min'], self.val['max'])
            self.widget.SetValue(int(self.val['value']))
            self.sizer.Add(self.widget)
            wx.EVT_SPINCTRL(self.widget, SpinCtrlID, self.spinctrlCB)

            label_str = ''
            self.label = wx.StaticText(self.parent,
                                       wx.NewId(),
                                       label_str,
                                       size=self.wsize)
            self.label.SetLabel( ` self.val['value'] `)
            self.sizer.Add(self.label)

            wx.EVT_BUTTON(self.defaultB, self.defaultBID, self.defaultCB)

        elif self.val['wtype'] == 'wx.ColourDialog':

            self.widget = wx.ColourDialog(self.parent)
            self.widget.GetColourData().SetChooseFull(True)
            self.widget.GetColourData().SetColour(
                wx.Colour(self.val['value'][0], self.val['value'][1],
                          self.val['value'][2]))

            showColourDialogBID = wx.NewId()
            self.showColourDialogB = wx.Button(self.parent,
                                               showColourDialogBID,
                                               "ShowDialog",
                                               size=self.wsize)
            self.showColourDialogB.SetBackgroundColour(
                self.widget.GetColourData().GetColour().Get())
            self.sizer.Add(self.showColourDialogB)
            wx.EVT_BUTTON(self.showColourDialogB, showColourDialogBID,
                          self.showColourDialogCB)

            label_str = ''
            self.label = wx.StaticText(self.parent,
                                       wx.NewId(),
                                       label_str,
                                       size=self.wsize)
            self.label.SetLabel( ` self.val['value'] `)
            self.sizer.Add(self.label)

            self.defaultB.SetBackgroundColour(self.val['default'])
            wx.EVT_BUTTON(self.defaultB, self.defaultBID, self.defaultCB)

        elif self.val['wtype'] == 'wx.Slider':

            self.widget = wx.Slider(self.parent,
                                    wx.NewId(),
                                    int(self.val['value'] *
                                        self.val['divisor']),
                                    int(self.val['min']),
                                    int(self.val['max']),
                                    style=self.val['style'],
                                    size=self.wsize)

            self.sizer.Add(self.widget)

            sliderID = wx.NewId()
            div = self.val['divisor']
            if div == 1.: label_str = "%.0f" % (self.val['value'])
            if div == 10.: label_str = "%.1f" % (self.val['value'])
            if div == 100.: label_str = "%.2f" % (self.val['value'])
            if div == 1000.: label_str = "%.3f" % (self.val['value'])
            if div == 10000.: label_str = "%.4f" % (self.val['value'])

            self.label = wx.StaticText(self.parent,
                                       sliderID,
                                       label_str,
                                       size=self.wsize)
            self.sizer.Add(self.label)

            wx.EVT_BUTTON(self.defaultB, self.defaultBID, self.defaultCB)
            wx.EVT_SCROLL(self.widget, self.sliderCB)

        self.sizer.Add(self.defaultB)
        if self.val.has_key('tooltip'):
            if DEBUG: print self.val
            self.defaultB.SetToolTip(wx.ToolTip(self.val['tooltip']))
예제 #10
0
 def __init__(self, URL):
     wx.Dialog.__init__(self, None, title="Scraping a web page",\
             size=(600,380))
     self.URL = URL
     # ensure URL is a valid URL
     # TODO
     # page is retrieved
     try:
         request = requests.get(self.URL)
         page = request.text
     except:
         page = None
     # page is parsed and tables extracted
     if not page:
         self.URL = None
         self.Close()
     else:
         parser = HTMLParser.HTMLParser()
         soup = BS.BeautifulSoup(page)
         self.tables = soup.findAll('table')
         # user selects which table to import
         # table & data are imported
         ID_WINDOW_CLOSE = wx.NewId()
         help_text = "These are all the tables in the web page you just entered. "
         t1 = wx.StaticText(self, -1, label=help_text, pos=(20, 10))
         t1.Wrap(545)
         t2 = wx.StaticText(self,
                            -1,
                            label="Import from row:",
                            pos=(20, 50))
         self.headerRow = wx.CheckBox(self, 760, " Header on first row", \
                 pos=(210,50))
         self.dataRow = wx.SpinCtrl(self,766,min=1,max=100, initial=1, \
                 pos=(140,49),size=(50,-1))
         self.dataRow.SetValue(1)
         self.buttonImport = wx.Button(self,763,"Import", \
                 pos=(500,310),size=(70,-1))
         self.buttonImport.SetDefault()
         self.buttonCancel = wx.Button(self,764,"Cancel", \
                 pos=(405,310),size=(70,-1))
         self.worksheets = wx.aui.AuiNotebook(self, -1, pos=(20,90), \
                 size=(560,210),style=wx.NB_TOP|wx.aui.AUI_NB_WINDOWLIST_BUTTON)
         self.MaxRows = 100
         self.MaxCols = 40
         self.gridFont = wx.Font(10, wx.MODERN, wx.NORMAL, wx.NORMAL)
         self.grids = []
         for idx, table in enumerate(self.tables):
             caption = table.find('caption')
             if caption == None:
                 caption = 'table %04.f' % (idx)
             # set attributes to hold headers & stats
             variableNames = []
             gridData = []
             # get number cols, rows
             headings = table.findAll('th')
             for heading in headings:
                 val = heading.text
                 val = parser.unescape(val)
                 variableNames.append(val)
             rows = table.findAll('tr')
             ncols = 0
             nrows = len(rows)
             for row in rows:
                 line = []
                 cols = row.findAll('td')
                 if len(cols) > ncols:
                     ncols = len(cols)
                 for col in cols:
                     line.append(col.text)
                 gridData.append(line)
             self.grids.append(Grid(self.worksheets, -1))
             self.grids[idx].HideRowLabels()
             self.grids[idx].SetColLabelSize(16)
             self.grids[idx].SetRowLabelSize(40)
             self.grids[idx].SetDefaultColSize(60)
             self.grids[idx].CreateGrid(nrows + 10, ncols + 10)
             for i in range(ncols):
                 self.grids[idx].SetColLabelValue(i, " ")
             for i in range(nrows):
                 self.grids[idx].SetRowSize(i, 16)
             self.grids[idx].SetDefaultCellFont(self.gridFont)
             if caption == None:
                 caption = 'table %04.f' % (idx)
             headings = table.findAll('th')
             for idxhead, heading in enumerate(headings):
                 self.grids[idx].SetColLabelValue(idxhead, heading.text)
             self.worksheets.AddPage(self.grids[idx], caption)
             for idx_row in range(len(gridData)):
                 for idx_col in range(len(gridData[idx_row])):
                     val = unicode(gridData[idx_row][idx_col])
                     val = parser.unescape(val)
                     self.grids[idx].SetCellValue(idx_row, idx_col, val)
         # It seems odd but it seems better for all events to be routed to the same method
         wx.EVT_CHECKBOX(self, 760, self.AdjustGrid)
         wx.EVT_SPINCTRL(self, 766, self.AdjustGrid)
         wx.EVT_BUTTON(self, 764, self.CancelButton)
         wx.EVT_BUTTON(self, 763, self.ImportButton)
예제 #11
0
    def makeControlForProp(self, prop, parent):
        '''Make a wxWindows control for the given NWN property and add
        it to the given parent wxWindow.'''
        control = None
        typeSpec = prop.getSpec()
        type = typeSpec[0]
        if type == 'CExoLocString':
            control = CExoLocStringControl(typeSpec, prop, self,
                                           self.defaultlang)
        elif type == 'CExoString':
            if len(typeSpec) > 1:
                if typeSpec[1] != 'FactionName':
                    control = self.makeCustomChoiceControl(
                        typeSpec, prop, parent)
                else:
                    control = wx.TextCtrl(parent,-1,prop.getValue(),wx.DefaultPosition,\
                                                        (250,24),style=wx.TE_PROCESS_ENTER)
                    wx.EVT_TEXT_ENTER(self, control.GetId(), self.controlUsed)
            else:
                control = wx.TextCtrl(parent, -1, prop.getValue(),
                                      wx.DefaultPosition, (250, 24))
                wx.EVT_TEXT(self, control.GetId(), self.controlUsed)
#				self.Bind(wx.EVT_TEXT,self,self.controlUsed,id=control.GetId())
        elif type == 'Percentage':
            control = wx.SpinCtrl(parent, -1)
            control.SetRange(0, 100)
            control.SetValue(prop.getValue())
            wx.EVT_SPINCTRL(self, control.GetId(), self.controlUsed)
            #control.SetTickFreq(5,0)
        elif type == 'Boolean':
            control = wx.CheckBox(parent, -1, '')
            control.SetValue(prop.getValue())
            wx.EVT_CHECKBOX(self, control.GetId(), self.controlUsed)
        elif type == 'Integer':
            min = 0
            max = 100
            if len(typeSpec) > 1:
                maxMin = typeSpec[1].split('-')
                min = int(maxMin[0])
                max = int(maxMin[1])
            control = wx.SpinCtrl(parent, -1)
            control.SetRange(min, max)
            try:
                control.SetValue(prop.getValue())
            except OverflowError:
                # I got that with some factions that have 0xFFFFFFFF as parents
                # and as they shouldn't be edited anyway..
                control.SetValue(-1)
                control.Disable()
            wx.EVT_SPINCTRL(self, control.GetId(), self.controlUsed)
            wx.EVT_TEXT(self, control.GetId(), self.controlUsed)
        elif type == "ResRef":
            control = self.makeResRefControl(typeSpec, prop, parent)
        elif type == "BGRColour":
            blue = prop.getValue() >> 16
            green = (prop.getValue() >> 8) & (0xff)
            red = prop.getValue() & (0xff)
            control = GenButton(parent, -1, '', wx.DefaultPosition,
                                wx.Size(40, 40))
            control.SetBezelWidth(0)
            control.SetForegroundColour(wx.Colour(red, green, blue))
            control.SetBackgroundColour(wx.Colour(red, green, blue))
            wx.EVT_BUTTON(self, control.GetId(), self.handleColourButton)
        elif type == "List":
            if typeSpec[1] == 'HAKs':
                control = HAKListControl(prop, parent)
            elif typeSpec[1] == 'Vars':
                control = VarListControl(prop, parent)
        elif type == "CheckList":
            choices = []
            #            if typeSpec[1] == 'HAKs':
            #                choices = [x['Mod_Hak'].lower()
            #                           for x in prop.getValue()]
            #                choices.extend([x.split('.')[0].lower() for x in
            #                                neverglobals.getResourceManager().getHAKFileNames()
            #                                if x.split('.')[0].lower() not in choices])
            control = wx.CheckListBox(parent, -1, wx.DefaultPosition,
                                      (200, 200), choices)
            for i in range(len(choices)):
                control.Check(i, False)
#            for n in prop.getValue():
#                control.Check(choices.index(n['Mod_Hak'].lower()))
            wx.EVT_CHECKLISTBOX(self, control.GetId(), self.controlUsed)
        elif type == '2daIndex':
            twoda = neverglobals.getResourceManager().getResourceByName(
                typeSpec[1])
            choices = []
            col = typeSpec[2]
            if typeSpec[3] == 'strref':
                for i in xrange(twoda.getRowCount()):
                    entry = 'invalid'
                    try:
                        entry = neverglobals.getResourceManager().\
                                    getDialogString(int(twoda.getEntry(i,col)))
                    except ValueError:
                        if len(typeSpec) > 4:
                            entry = twoda.getEntry(i, typeSpec[4])
                    choices.append(entry)
            else:
                choices = [
                    twoda.getEntry(i, col) for i in xrange(twoda.getRowCount())
                ]
            if typeSpec[1] in [
                    'ambientmusic.2da', 'ambientsound.2da', 'soundset.2da'
            ]:
                # may be used for other 2das in the future
                control = SoundControl(prop, parent, choices, typeSpec[1])
            else:
                control = wx.Choice(parent,
                                    -1,
                                    choices=[cleanstr(s) for s in choices])
            control.SetSelection(prop.getValue())

        elif type == 'Portrait':
            p = neverglobals.getResourceManager().getPortraitByIndex(
                prop.getValue(), 's')
            if p:
                control = wx.BitmapButton(parent, -1,
                                          WxUtils.bitmapFromImage(p))
                wx.EVT_BUTTON(self, control.GetId(), self.handlePortraitButton)
            else:
                logger.error('unknown portrait index:' + str(prop.getValue()))
                import Image, ImageDraw, ImageFont
                image = Image.new("1", (32, 64))
                font = ImageFont.load_default()
                draw = ImageDraw.Draw(image)
                draw.text((3, 3), "portrait not found", font=font)
                control = wx.BitmapButton(parent, -1,
                                          WxUtils.bitmapFromImage(image))
                wx.EVT_BUTTON(self, control.GetId(), self.handlePortraitButton)
        if control:
            label = wx.StaticText(self, -1, prop.getName().split('.')[-1])
        else:
            label = None
        return (label, PropControl(control))
예제 #12
0
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Panel.__init__(self,
                          id=wxID_PANEL,
                          name='Zplots',
                          parent=prnt,
                          pos=wx.Point(0, 0),
                          size=wx.Size(604, 349),
                          style=wx.TAB_TRAVERSAL)
        self._init_utils()
        self.SetClientSize(wx.Size(596, 315))

        self.Color = wx.Choice(choices=[
            'black', 'white', 'red', 'green', 'blue', 'cyan', 'magenta',
            'yellow'
        ],
                               id=wxID_PANELCOLOR,
                               name='Color',
                               parent=self,
                               pos=wx.Point(512, 0),
                               size=wx.Size(80, 21),
                               style=0,
                               validator=wx.DefaultValidator)
        wx.EVT_CHOICE(self.Color, wxID_PANELCOLOR, self.OnColorChoice)

        self.LineType = wx.Choice(
            choices=['solid', 'dash', 'dot', 'dashdot', 'dashdotdot', 'none'],
            id=wxID_PANELLINETYPE,
            name='LineType',
            parent=self,
            pos=wx.Point(512, 24),
            size=wx.Size(80, 21),
            style=0,
            validator=wx.DefaultValidator)
        wx.EVT_CHOICE(self.LineType, wxID_PANELLINETYPE, self.OnLinetypeChoice)

        self.Marker = wx.TextCtrl(id=wxID_PANELMARKER,
                                  name='Marker',
                                  parent=self,
                                  pos=wx.Point(560, 72),
                                  size=wx.Size(22, 22),
                                  style=wx.TE_PROCESS_ENTER,
                                  value='A')
        wx.EVT_TEXT_ENTER(self.Marker, wxID_PANELMARKER,
                          self.OnMarkerTextEnter)

        self.staticText1 = wx.StaticText(id=wxID_PANELSTATICTEXT1,
                                         label='Marker',
                                         name='staticText1',
                                         parent=self,
                                         pos=wx.Point(516, 74),
                                         size=wx.Size(39, 16),
                                         style=0)

        self.staticText2 = wx.StaticText(id=wxID_PANELSTATICTEXT2,
                                         label='Size',
                                         name='staticText2',
                                         parent=self,
                                         pos=wx.Point(516, 50),
                                         size=wx.Size(24, 16),
                                         style=0)

        #        self.Size = wx.SpinCtrl(id=wxID_PANELSIZE, initial=1, max=10, min=1,
        #              name='Size', parent=self, pos=wx.Point(550, 48),
        #              size=wx.Size(40,22), style=wx.SP_ARROW_KEYS)
        #        wx.EVT_SPINCTRL(self.Size, wxID_PANELSIZE, self.OnSizeSpinctrl)

        self.MarkerSize = wx.SpinCtrl(id=wxID_PANELMARKERSIZE,
                                      initial=1,
                                      max=10,
                                      min=1,
                                      name='MarkerSize',
                                      parent=self,
                                      pos=wx.Point(550, 96),
                                      size=wx.Size(40, 22),
                                      style=wx.SP_ARROW_KEYS)
        wx.EVT_SPINCTRL(self.MarkerSize, wxID_PANELMARKERSIZE,
                        self.OnMarkersizeSpinctrl)

        self.staticText3 = wx.StaticText(id=wxID_PANELSTATICTEXT3,
                                         label='Size',
                                         name='staticText3',
                                         parent=self,
                                         pos=wx.Point(516, 98),
                                         size=wx.Size(24, 16),
                                         style=0)

        self.Marks = wx.CheckBox(id=wxID_PANELMARKS,
                                 label='',
                                 name='Marks',
                                 parent=self,
                                 pos=wx.Point(496, 71),
                                 size=wx.Size(20, 20),
                                 style=0)
        self.Marks.SetValue(false)
        wx.EVT_CHECKBOX(self.Marks, wxID_PANELMARKS, self.OnMarksCheckbox)
예제 #13
0
    def __init__(self, *args, **kwargs):
        super(IntegerField, self).__init__(*args, **kwargs)

        wx.EVT_SPINCTRL(self, wx.ID_ANY, self.OnChange)
예제 #14
0
        def __init__(self,
                     parent,
                     id,
                     file,
                     data,
                     isValidCallback=None,
                     pos=wx.DefaultPosition,
                     size=wx.DefaultSize,
                     style=wx.TAB_TRAVERSAL,
                     name="ImportWizardPanel"):
            wx.Panel.__init__(self, parent, id, pos, size, style, name)
            self.SetAutoLayout(True)
            mainSizer = wx.FlexGridSizer(4, 1, gap=wx.Size(0, 0))
            self.SetSizer(mainSizer)
            mainSizer.AddGrowableCol(0)

            self.initialized = False
            self.data = data
            self.isValidCallback = isValidCallback
            self.Validate = (isValidCallback
                             and self.Validate) or self.BuildPreview

            dlg = wx.ProgressDialog(_("Import Wizard"),
                                    _("Analyzing %s... Please wait.") % file,
                                    3, parent,
                                    wx.PD_APP_MODAL | wx.PD_AUTO_HIDE)
            textQualifier = guessTextQualifier(data)
            dlg.Update(1)
            newdata = organizeIntoLines(data,
                                        textQualifier=textQualifier,
                                        limit=100)
            dlg.Update(2)
            delimiter = guessDelimiter(newdata, textQualifier=textQualifier)
            dlg.Update(3)
            dlg.Destroy()

            # -------------
            msg = (_(
                "This screen lets you set the delimiters your data contains.\n"
                "You can see how your data is affected in the preview below."))
            message1 = wx.StaticText(self, -1, msg)

            # -------------
            delimiterBox = wx.BoxSizer(wx.HORIZONTAL)
            delimStaticBox = wx.StaticBox(self, -1, _("Delimiters"))
            delimStaticSizer = wx.StaticBoxSizer(delimStaticBox, wx.VERTICAL)
            delimGridSizer = wx.FlexGridSizer(2, 3, gap=wx.Size(0, 0))

            delims = {
                _('Tab'): '\t',
                _('Semicolon'): ';',
                _('Comma'): ',',
                _('Space'): ' ',
            }

            self.delimChecks = {}

            for label, value in list(delims.items()):
                self.delimChecks[value] = wx.CheckBox(self, -1, label)
                delimGridSizer.Add(self.delimChecks[value], 0, wx.ALL, 3)
                wx.EVT_CHECKBOX(self, self.delimChecks[value].GetId(),
                                self.Validate)

            otherSizer = wx.BoxSizer(wx.HORIZONTAL)

            self.delimChecks['Other'] = wx.CheckBox(self, -1, _('Other:'))
            wx.EVT_CHECKBOX(self, self.delimChecks['Other'].GetId(),
                            self.Validate)

            self.otherDelim = wx.TextCtrl(self, -1, size=(20, -1))
            wx.EVT_TEXT(self, self.otherDelim.GetId(), self.OnCustomDelim)

            if delimiter in self.delimChecks:
                self.delimChecks[delimiter].SetValue(True)
            elif delimiter is not None:
                self.delimChecks['Other'].SetValue(wx.T)
                self.otherDelim.SetValue(delimiter)

            otherSizer.AddMany([
                (self.delimChecks['Other'], 0, wx.ALL, 3),
                (self.otherDelim, 0, wx.ALIGN_CENTER),
            ])

            delimGridSizer.Add(otherSizer)
            delimStaticSizer.Add(delimGridSizer, 1, wx.EXPAND)
            delimOtherSizer = wx.BoxSizer(wx.VERTICAL)
            self.consecutiveDelimsAs1 = wx.CheckBox(
                self, -1, _("Treat consecutive delimiters as one"))
            self.consecutiveDelimsAs1.Enable(False)
            tqSizer = wx.BoxSizer(wx.HORIZONTAL)
            self.textQualifierChoice = wx.Choice(self,
                                                 -1,
                                                 choices=['"', "'", "{None}"])
            wx.EVT_CHOICE(self, self.textQualifierChoice.GetId(),
                          self.BuildPreview)
            if textQualifier is not None:
                self.textQualifierChoice.SetStringSelection(textQualifier)
            else:
                self.textQualifierChoice.SetStringSelection('{None}')

            tqSizer.AddMany([
                (wx.StaticText(self, -1, _("Text qualifier:")), 0,
                 wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL),
                (self.textQualifierChoice, 0,
                 wx.ALL | wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 5),
            ])

            delimOtherSizer.AddMany([
                (self.consecutiveDelimsAs1, 1, wx.EXPAND | wx.ALL, 5),
                (tqSizer, 1, wx.ALL | wx.ALIGN_CENTER, 5),
            ])

            delimiterBox.AddMany([
                (delimStaticSizer, 0, wx.ALIGN_CENTER),
                (delimOtherSizer, 0, wx.ALIGN_CENTER),
            ])

            delimStaticBox.Fit()

            # -------------
            self.displayRows = 6
            previewSettingsBox = wx.BoxSizer(wx.HORIZONTAL)
            self.hasHeaderRow = wx.CheckBox(self, -1, _("First row is header"))
            wx.EVT_CHECKBOX(self, self.hasHeaderRow.GetId(), self.BuildPreview)

            if wx.Platform in ('__WX.WXGTK__', '__WX.WXMSW__'):
                # wx.SpinCtrl causes seg fault under GTK when <enter> is hit in text - use wx.SpinButton instead
                self.previewRowsText = wx.TextCtrl(self,
                                                   -1,
                                                   str(self.displayRows),
                                                   size=(30, -1),
                                                   style=wx.TE_PROCESS_ENTER)
                h = self.previewRowsText.GetSize().height
                self.previewRows = wx.SpinButton(self,
                                                 -1,
                                                 size=(-1, h),
                                                 style=wx.SP_VERTICAL)
                self.previewRows.SetRange(self.displayRows, 100)
                self.previewRows.SetValue(self.displayRows)
                wx.EVT_SPIN(self, self.previewRows.GetId(),
                            self.OnSpinPreviewRows)
                wx.EVT_TEXT_ENTER(self, self.previewRowsText.GetId(),
                                  self.OnTextPreviewRows)
            else:
                self.previewRows = wx.SpinCtrl(self,
                                               -1,
                                               str(self.displayRows),
                                               min=self.displayRows,
                                               max=100,
                                               size=(50, -1))
                wx.EVT_SPINCTRL(self, self.previewRows.GetId(),
                                self.BuildPreview)

            previewSettingsBox.AddMany([
                (self.hasHeaderRow, 1, wx.ALL | wx.EXPAND, 5),
                (wx.StaticText(self, -1, _("Preview")), 0,
                 wx.WEST | wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL, 10),
            ])
            if wx.Platform in ('__WX.WXGTK__', '__WX.WXMSW__'):
                previewSettingsBox.Add(self.previewRowsText, 0,
                                       wx.ALIGN_CENTER | wx.ALL, 3)
            previewSettingsBox.AddMany([
                (self.previewRows, 0, wx.ALIGN_CENTER | wx.ALL, 3),
                (wx.StaticText(self, -1, _("rows")), 0,
                 wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL),
            ])

            # -------------
            if delimiter is not None:
                previewData = importDSV(newdata[:self.displayRows],
                                        textQualifier=textQualifier,
                                        delimiter=delimiter,
                                        errorHandler=padRow)
                hasHeaders = guessHeaders(previewData)
                self.hasHeaderRow.SetValue(hasHeaders)

                cols = len(previewData[0])
            else:
                previewData = []
                hasHeaders = 0
                cols = 1

            previewStaticBox = wx.StaticBox(self, -1, _("Data Preview"))
            previewStaticSizer = wx.StaticBoxSizer(previewStaticBox,
                                                   wx.VERTICAL)
            self.preview = wx.grid.Grid(self, -1)
            self.preview.CreateGrid(self.displayRows, cols)
            #self.preview.SetDefaultRowSize(self.preview.GetCharHeight() + 4, rue)
            self.preview.EnableEditing(False)
            self.preview.SetColLabelSize(0)
            self.preview.SetRowLabelSize(0)
            self.preview.SetMargins(1, 0)
            self.initialized = True
            self.BuildPreview()

            rowheight = self.preview.GetRowSize(0) + 2
            self.preview.SetSize((-1, rowheight * self.displayRows))
            previewStaticSizer.Add(self.preview, 0, wx.ALL | wx.EXPAND, 5)

            # -------------
            mainSizer.AddMany([(message1, 0, wx.ALL, 5),
                               (delimiterBox, 0, wx.ALL, 5),
                               (previewSettingsBox, 0, wx.ALL, 5),
                               (previewStaticSizer, 0, wx.ALL | wx.EXPAND, 5)])

            self.Layout()
            self.Fit()
예제 #15
0
    def __init__(self, parent, port=None):
        ToolPane.__init__(self, parent, port)
        # default data
        self.signs = "+" * 18
        self.curpose = ""
        self.ikChoice = ""
        self.optChoice = ""

        self.sizer = wx.GridBagSizer(10, 10)

        # IK styles/Config
        temp = wx.StaticBox(self, -1, 'IK Config')
        temp.SetFont(wx.Font(10, wx.DEFAULT, wx.NORMAL, wx.BOLD))
        configBox = wx.StaticBoxSizer(temp, orient=wx.VERTICAL)
        configSizer = wx.GridBagSizer(5, 5)
        configSizer.Add(wx.StaticText(self, -1, "IK Type:"), (0, 0),
                        wx.GBSpan(1, 1), wx.ALIGN_CENTER_VERTICAL | wx.TOP, 10)
        self.ikType = wx.ComboBox(self,
                                  self.ID_IKTYPE,
                                  choices=iKmodels.keys())
        configSizer.Add(self.ikType, (0, 1), wx.GBSpan(1, 1), wx.TOP, 10)

        # IK Option (typical # of legs or # of DOF)
        hbox = wx.BoxSizer(wx.HORIZONTAL)
        self.optLabel = wx.StaticText(self, -1, "# of Legs:")
        configSizer.Add(self.optLabel, (1, 0), wx.GBSpan(1, 1),
                        wx.ALIGN_CENTER_VERTICAL)
        self.ikOpt = wx.ComboBox(self, self.ID_IKOPT, choices=["4", "6"])
        configSizer.Add(self.ikOpt, (1, 1))
        configBox.Add(configSizer)
        self.sizer.Add(configBox, (0, 1), wx.GBSpan(1, 1), wx.EXPAND)

        # Actions buttons
        temp = wx.StaticBox(self, -1, 'Actions')
        temp.SetFont(wx.Font(10, wx.DEFAULT, wx.NORMAL, wx.BOLD))
        actionBox = wx.StaticBoxSizer(temp, orient=wx.VERTICAL)
        actionSizer = wx.GridBagSizer(5, 5)

        actionSizer.Add(wx.StaticText(self, -1, "Capture Limits:"), (0, 0),
                        wx.GBSpan(1, 1), wx.ALIGN_CENTER_VERTICAL)
        actionSizer.Add(wx.StaticText(self, -1, "Capture Neutral:"), (1, 0),
                        wx.GBSpan(1, 1), wx.ALIGN_CENTER_VERTICAL)
        actionSizer.Add(wx.StaticText(self, -1, "Set/Test Signs:"), (2, 0),
                        wx.GBSpan(1, 1), wx.ALIGN_CENTER_VERTICAL)

        actionSizer.Add(wx.Button(self, self.BT_LIMITS, 'Capture'), (0, 1))
        actionSizer.Add(wx.Button(self, self.BT_NEUTRAL, 'Capture'), (1, 1))
        self.signButton = wx.Button(self, self.BT_SIGN, 'Go')
        actionSizer.Add(self.signButton, (2, 1))

        actionBox.Add(actionSizer)
        self.sizer.Add(actionBox, (1, 1), wx.GBSpan(1, 1), wx.EXPAND)

        # NUKE Label
        nukeIt = wx.StaticText(self, -1, "NUKE: Get Your IK On")
        nukeIt.SetFont(wx.Font(15, wx.DEFAULT, wx.NORMAL, wx.BOLD, wx.ITALIC))
        self.sizer.Add(nukeIt, (2, 0), wx.GBSpan(1, 2),
                       wx.ALIGN_CENTER_VERTICAL)

        # Buttons
        hbox = wx.BoxSizer(wx.HORIZONTAL)
        gaitBut = wx.Button(self, -1, 'Gait Builder')
        gaitBut.Disable()
        hbox.Add(gaitBut)
        viewBut = wx.Button(self, -1, 'Viewer/Tuner')
        viewBut.Disable()
        hbox.Add(viewBut)
        hbox.Add(wx.Button(self, self.BT_DRIVE, 'Test Drive'))
        hbox.Add(wx.Button(self, self.BT_EXPORT, 'Export'))
        self.sizer.Add(hbox, (2, 2), wx.GBSpan(1, 1), wx.ALIGN_CENTER)

        # Load Data (if possible)
        self.loadData()
        self.SetSizer(self.sizer)
        self.SetAutoLayout(1)
        self.sizer.Fit(self)

        # event handling
        wx.EVT_BUTTON(self, self.BT_LIMITS, self.doLimits)
        wx.EVT_BUTTON(self, self.BT_NEUTRAL, self.doNeutral)
        wx.EVT_BUTTON(self, self.BT_SIGN, self.doSignTest)
        wx.EVT_BUTTON(self, self.BT_DRIVE, self.doWalkTest)
        wx.EVT_BUTTON(self, self.BT_EXPORT, self.doExport)

        wx.EVT_COMBOBOX(self, self.ID_IKTYPE, self.doIKType)
        wx.EVT_COMBOBOX(self, self.ID_IKOPT, self.doIkOpt)
        wx.EVT_SPINCTRL(self, self.ID_ANY, self.save)
예제 #16
0
파일: text.py 프로젝트: jreeder/avoplot
    def __init__(self, parent, text_objects):
        wx.Panel.__init__(self, parent, wx.ID_ANY)
        self.__text_objects = text_objects
        self.mpl_figure = text_objects[0].get_figure()
        
        hsizer = wx.BoxSizer(wx.HORIZONTAL)
        grid_sizer = wx.FlexGridSizer(cols=2, vgap=5)
        
        #create a list of available truetype fonts on this system
        self.avail_fonts = sorted(list(set([f.name for f in matplotlib.font_manager.fontManager.ttflist])))
        
        #create a font selection listbox
        self.font_selector = wx.ListBox(self, wx.ID_ANY, choices=self.avail_fonts)
        hsizer.Add(self.font_selector, 1, wx.ALIGN_TOP | wx.ALIGN_LEFT | wx.ALL,
                   border=10)
        
        #set the initial font selection to that of the text object
        cur_fonts = list(set([t.get_fontname() for t in text_objects]))
        if len(cur_fonts) == 1:
            self.font_selector.SetSelection(self.avail_fonts.index(cur_fonts[0]))
        
        #create a colour picker button
        text = wx.StaticText(self, -1, "Colour:  ")
        grid_sizer.Add(text, 0, wx.ALIGN_CENTRE_VERTICAL | wx.ALIGN_RIGHT)
        
        wx.EVT_LISTBOX(self, self.font_selector.GetId(), self.on_font_selection)
        
        #set the colour picker's initial value to that of the text object
        prev_cols = [matplotlib.colors.colorConverter.to_rgb(t.get_color()) for t in text_objects]
        #TODO - what if the text objects have different colors
        prev_col = (255 * prev_cols[0][0], 255 * prev_cols[0][1], 255 * prev_cols[0][2])
        self.colour_picker = wx.ColourPickerCtrl(self, -1, prev_col)
        grid_sizer.Add(self.colour_picker, 0 ,
                          wx.ALIGN_CENTRE_VERTICAL | wx.ALIGN_LEFT)
        
        wx.EVT_COLOURPICKER_CHANGED(self, self.colour_picker.GetId(), self.on_font_colour)
        
        
        #create a font size control and set the initial value to that of the text
        text = wx.StaticText(self, -1, "Size:  ")
        grid_sizer.Add(text, 0, wx.ALIGN_CENTRE_VERTICAL | wx.ALIGN_RIGHT)
        prev_size = [t.get_size() for t in text_objects][0]
        #TODO - what if the text objects have different sizes
        self.size_ctrl = wx.SpinCtrl(self, wx.ID_ANY, min=4, max=100,
                                     initial=prev_size)
        grid_sizer.Add(self.size_ctrl, 0 , wx.ALIGN_CENTRE_VERTICAL | wx.ALIGN_LEFT)
        
        wx.EVT_SPINCTRL(self, self.size_ctrl.GetId(), self.on_font_size)
        
        #create a drop-down box for specifying font weight       
        self.possible_weights = ['ultralight', 'light', 'normal', 'regular',
                                 'book', 'medium', 'roman', 'semibold',
                                 'demibold', 'demi', 'bold', 'heavy',
                                 'extra bold', 'black']

        text = wx.StaticText(self, -1, "Weight:  ")
        grid_sizer.Add(text, 0, wx.ALIGN_CENTRE_VERTICAL | wx.ALIGN_RIGHT)

        self.weight_ctrl = wx.Choice(self, wx.ID_ANY, choices=self.possible_weights)
        
        grid_sizer.Add(self.weight_ctrl, 0, wx.ALIGN_CENTRE_VERTICAL | wx.ALIGN_LEFT)

        wx.EVT_CHOICE(self, self.weight_ctrl.GetId(), self.on_font_weight)
        
        #set the initial font weight selection to that of the text, this is a 
        #bit tricky since get_weight can return an integer or a string
        cur_weight = [t.get_weight() for t in text_objects][0]
        #TODO - what if the text objects have different weights
        if not type(cur_weight) is str:
            idx = int(round(cur_weight / 1000.0 * len(self.possible_weights), 0))
        else:
            idx = self.possible_weights.index(cur_weight)
        self.weight_ctrl.SetSelection(idx)
        
        
        #create a drop down box for specifying font style
        self.possible_styles = ['normal', 'italic', 'oblique']

        text = wx.StaticText(self, -1, "Style:  ")
        grid_sizer.Add(text, 0, wx.ALIGN_CENTRE_VERTICAL | wx.ALIGN_RIGHT)

        self.style_ctrl = wx.Choice(self, wx.ID_ANY, choices=self.possible_styles)
        
        grid_sizer.Add(self.style_ctrl, 0 , wx.ALIGN_CENTRE_VERTICAL | wx.ALIGN_LEFT)
        
        wx.EVT_CHOICE(self, self.style_ctrl.GetId(), self.on_font_style)
        
        #set the initial font style selection to that of the text
        cur_style = [t.get_style() for t in text_objects][0]
        #TODO - what if the text objects have different styles
        idx = self.possible_styles.index(cur_style)
        self.style_ctrl.SetSelection(idx)    
        
        #create a drop down box for selecting font stretch
        self.possible_stretches = ['ultra-condensed', 'extra-condensed',
                                 'condensed', 'semi-condensed', 'normal',
                                 'semi-expanded', 'expanded', 'extra-expanded',
                                 'ultra-expanded']
        
        text = wx.StaticText(self, -1, "Stretch:  ")
        grid_sizer.Add(text, 0, wx.ALIGN_CENTRE_VERTICAL | wx.ALIGN_RIGHT)

        self.stretch_ctrl = wx.Choice(self, wx.ID_ANY, choices=self.possible_stretches)
        
        grid_sizer.Add(self.stretch_ctrl, 0 , wx.ALIGN_CENTRE_VERTICAL | wx.ALIGN_LEFT)
        
        wx.EVT_CHOICE(self, self.stretch_ctrl.GetId(), self.on_font_stretch)
        
        #set the initial font stretch selection to that of the text, this is a 
        #bit tricky since get_weight can return an integer or a string
        cur_stretch = [t.get_stretch() for t in text_objects][0]
        #TODO - what if the text objects have different stretches
        if not type(cur_stretch) is str:
            idx = int(round(cur_stretch / 1000.0 * len(self.possible_stretches), 0))
        else:
            idx = self.possible_stretches.index(cur_stretch)
        self.stretch_ctrl.SetSelection(idx)
        
        
        hsizer.Add(grid_sizer, 1, wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT | wx.ALL,
                   border=10)
        
        self.SetSizer(hsizer)
        hsizer.Fit(self)
        self.SetAutoLayout(True)
예제 #17
0
    def optic_flow_panel_init(self):
        """
        Initializes the optic flow notebook page of the GUI
        """
        self.optic_flow_panel = xrc.XRCCTRL(self.notebook, Optic_Flow_PANEL)

        # Setup optic flow panel controls
        self.optic_flow_enable_box = xrc.XRCCTRL(self.optic_flow_panel,
                                                 Optic_Flow_Enable_CHECKBOX)
        self.num_row_spin_ctrl = xrc.XRCCTRL(self.optic_flow_panel,
                                             Num_Row_SPINCTRL)
        self.num_col_spin_ctrl = xrc.XRCCTRL(self.optic_flow_panel,
                                             Num_Col_SPINCTRL)
        self.window_size_spin_ctrl = xrc.XRCCTRL(self.optic_flow_panel,
                                                 Window_Size_SPINCTRL)
        self.poll_int_text_ctrl = xrc.XRCCTRL(self.optic_flow_panel,
                                              Poll_Interval_TEXTCTRL)
        self.horiz_space_slider = xrc.XRCCTRL(self.optic_flow_panel,
                                              Horiz_Space_SLIDER)
        self.horiz_position_slider = xrc.XRCCTRL(self.optic_flow_panel,
                                                 Horiz_Position_SLIDER)
        self.vert_space_slider = xrc.XRCCTRL(self.optic_flow_panel,
                                             Vert_Space_SLIDER)
        self.vert_position_slider = xrc.XRCCTRL(self.optic_flow_panel,
                                                Vert_Position_SLIDER)

        # Setup events for optic flow panel controls
        wx.EVT_CHECKBOX(self.optic_flow_enable_box,
                        xrc.XRCID(Optic_Flow_Enable_CHECKBOX),
                        self.on_optic_flow_enable)
        wx.EVT_SPINCTRL(self.num_row_spin_ctrl, xrc.XRCID(Num_Row_SPINCTRL),
                        self.on_num_row_spin_ctrl)
        wx.EVT_SPINCTRL(self.num_col_spin_ctrl, xrc.XRCID(Num_Col_SPINCTRL),
                        self.on_num_col_spin_ctrl)
        wx.EVT_SPINCTRL(self.window_size_spin_ctrl,
                        xrc.XRCID(Window_Size_SPINCTRL),
                        self.on_window_size_spin_ctrl)
        wx.EVT_TEXT_ENTER(self.poll_int_text_ctrl,
                          xrc.XRCID(Poll_Interval_TEXTCTRL),
                          self.on_poll_int_text_enter)
        wx.EVT_SLIDER(self.horiz_space_slider, xrc.XRCID(Horiz_Space_SLIDER),
                      self.on_horiz_space_slider)
        wx.EVT_SLIDER(self.horiz_position_slider,
                      xrc.XRCID(Horiz_Position_SLIDER),
                      self.on_horiz_position_slider)
        wx.EVT_SLIDER(self.vert_space_slider, xrc.XRCID(Vert_Space_SLIDER),
                      self.on_vert_space_slider)
        wx.EVT_SLIDER(self.vert_position_slider,
                      xrc.XRCID(Vert_Position_SLIDER),
                      self.on_vert_position_slider)

        # Set default values for optic flow panel
        self.optic_flow_enable = OPTIC_FLOW_DEFAULTS['opticflow_enable']
        self.optic_flow_enable_box.SetValue(self.optic_flow_enable)

        self.poll_int = OPTIC_FLOW_DEFAULTS['poll_int']
        self.poll_int_text_ctrl.SetValue(str(self.poll_int))

        self.wnd = OPTIC_FLOW_DEFAULTS['wnd']
        self.window_size_spin_ctrl.SetValue(self.wnd)

        self.num_row = OPTIC_FLOW_DEFAULTS['num_row']
        self.num_row_spin_ctrl.SetValue(self.num_row)

        self.num_col = OPTIC_FLOW_DEFAULTS['num_col']
        self.num_col_spin_ctrl.SetValue(self.num_col)

        self.horiz_space = OPTIC_FLOW_DEFAULTS['horiz_space']
        set_slider_value(self.horiz_space_slider, self.horiz_space)

        self.horiz_pos = OPTIC_FLOW_DEFAULTS['horiz_pos']
        set_slider_value(self.horiz_position_slider, self.horiz_pos)

        self.vert_space = OPTIC_FLOW_DEFAULTS['vert_space']
        set_slider_value(self.vert_space_slider, self.vert_space)

        self.vert_pos = OPTIC_FLOW_DEFAULTS['vert_pos']
        set_slider_value(self.vert_position_slider, self.vert_pos)
예제 #18
0
    def __init__(self, parent, titles, cfg, cfgGl):
        wx.Dialog.__init__(self,
                           parent,
                           -1,
                           "Title pages",
                           style=wx.DEFAULT_DIALOG_STYLE)

        self.titles = titles
        self.cfg = cfg
        self.cfgGl = cfgGl

        # whether some events are blocked
        self.block = False

        self.setPage(0)

        vsizer = wx.BoxSizer(wx.VERTICAL)

        self.pageLabel = wx.StaticText(self, -1, "")
        vsizer.Add(self.pageLabel, 0, wx.ADJUST_MINSIZE)

        hsizer = wx.BoxSizer(wx.HORIZONTAL)

        tmp = wx.Button(self, -1, "Add")
        hsizer.Add(tmp)
        wx.EVT_BUTTON(self, tmp.GetId(), self.OnAddPage)
        gutil.btnDblClick(tmp, self.OnAddPage)

        self.delPageBtn = wx.Button(self, -1, "Delete")
        hsizer.Add(self.delPageBtn, 0, wx.LEFT, 10)
        wx.EVT_BUTTON(self, self.delPageBtn.GetId(), self.OnDeletePage)
        gutil.btnDblClick(self.delPageBtn, self.OnDeletePage)

        self.moveBtn = wx.Button(self, -1, "Move")
        hsizer.Add(self.moveBtn, 0, wx.LEFT, 10)
        wx.EVT_BUTTON(self, self.moveBtn.GetId(), self.OnMovePage)
        gutil.btnDblClick(self.moveBtn, self.OnMovePage)

        self.nextBtn = wx.Button(self, -1, "Next")
        hsizer.Add(self.nextBtn, 0, wx.LEFT, 10)
        wx.EVT_BUTTON(self, self.nextBtn.GetId(), self.OnNextPage)
        gutil.btnDblClick(self.nextBtn, self.OnNextPage)

        vsizer.Add(hsizer, 0, wx.TOP, 5)

        vsizer.Add(wx.StaticLine(self, -1), 0, wx.EXPAND | wx.TOP | wx.BOTTOM,
                   10)

        hsizer = wx.BoxSizer(wx.HORIZONTAL)

        vsizer2 = wx.BoxSizer(wx.VERTICAL)

        tmp = wx.StaticText(self, -1, "Strings:")
        vsizer2.Add(tmp)

        self.stringsLb = wx.ListBox(self, -1, size=(200, 150))
        vsizer2.Add(self.stringsLb)

        hsizer2 = wx.BoxSizer(wx.HORIZONTAL)

        self.addBtn = gutil.createStockButton(self, "Add")
        hsizer2.Add(self.addBtn)
        wx.EVT_BUTTON(self, self.addBtn.GetId(), self.OnAddString)
        gutil.btnDblClick(self.addBtn, self.OnAddString)

        self.delBtn = gutil.createStockButton(self, "Delete")
        hsizer2.Add(self.delBtn, 0, wx.LEFT, 10)
        wx.EVT_BUTTON(self, self.delBtn.GetId(), self.OnDeleteString)
        gutil.btnDblClick(self.delBtn, self.OnDeleteString)

        vsizer2.Add(hsizer2, 0, wx.TOP, 5)

        hsizer.Add(vsizer2)

        self.previewCtrl = TitlesPreview(self, self, self.cfg)
        util.setWH(self.previewCtrl, 150, 150)
        hsizer.Add(self.previewCtrl, 1, wx.EXPAND | wx.LEFT, 10)

        vsizer.Add(hsizer, 0, wx.EXPAND)

        hsizer = wx.BoxSizer(wx.HORIZONTAL)

        hsizer.Add(wx.StaticText(self, -1, "Text:"), 0,
                   wx.ALIGN_CENTER_VERTICAL)
        self.textEntry = wx.TextCtrl(self,
                                     -1,
                                     style=wx.TE_MULTILINE | wx.TE_DONTWRAP,
                                     size=(200, 75))
        hsizer.Add(self.textEntry, 1, wx.LEFT, 10)
        wx.EVT_TEXT(self, self.textEntry.GetId(), self.OnMisc)

        vsizer.Add(hsizer, 0, wx.EXPAND | wx.TOP, 20)

        # TODO: should use FlexGridSizer, like headersdlg, to get neater
        # layout

        hsizerTop = wx.BoxSizer(wx.HORIZONTAL)

        vsizer2 = wx.BoxSizer(wx.VERTICAL)

        hsizer = wx.BoxSizer(wx.HORIZONTAL)

        hsizer.Add(wx.StaticText(self, -1, "Alignment:"), 0,
                   wx.ALIGN_CENTER_VERTICAL)
        self.alignCombo = wx.ComboBox(self, -1, style=wx.CB_READONLY)

        for it in [("Left", util.ALIGN_LEFT), ("Center", util.ALIGN_CENTER),
                   ("Right", util.ALIGN_RIGHT)]:
            self.alignCombo.Append(it[0], it[1])

        hsizer.Add(self.alignCombo, 0, wx.LEFT, 10)
        wx.EVT_COMBOBOX(self, self.alignCombo.GetId(), self.OnMisc)

        vsizer2.Add(hsizer, 0, wx.TOP, 5)

        hsizer = wx.BoxSizer(wx.HORIZONTAL)

        hsizer.Add(wx.StaticText(self, -1, "X / Y Pos (mm):"), 0,
                   wx.ALIGN_CENTER_VERTICAL)
        self.xEntry = wx.TextCtrl(self, -1)
        hsizer.Add(self.xEntry, 0, wx.LEFT, 10)
        wx.EVT_TEXT(self, self.xEntry.GetId(), self.OnMisc)
        self.yEntry = wx.TextCtrl(self, -1)
        hsizer.Add(self.yEntry, 0, wx.LEFT, 10)
        wx.EVT_TEXT(self, self.yEntry.GetId(), self.OnMisc)

        vsizer2.Add(hsizer, 0, wx.TOP, 5)

        hsizer = wx.BoxSizer(wx.HORIZONTAL)

        hsizer.Add(wx.StaticText(self, -1, "Font / Size:"), 0,
                   wx.ALIGN_CENTER_VERTICAL)
        self.fontCombo = wx.ComboBox(self, -1, style=wx.CB_READONLY)

        for it in [("Courier", pml.COURIER), ("Helvetica", pml.HELVETICA),
                   ("Times-Roman", pml.TIMES_ROMAN)]:
            self.fontCombo.Append(it[0], it[1])

        hsizer.Add(self.fontCombo, 0, wx.LEFT, 10)
        wx.EVT_COMBOBOX(self, self.fontCombo.GetId(), self.OnMisc)

        self.sizeEntry = wx.SpinCtrl(self, -1, size=(50, -1))
        self.sizeEntry.SetRange(4, 288)
        wx.EVT_SPINCTRL(self, self.sizeEntry.GetId(), self.OnMisc)
        wx.EVT_KILL_FOCUS(self.sizeEntry, self.OnKillFocus)
        hsizer.Add(self.sizeEntry, 0, wx.LEFT, 10)

        vsizer2.Add(hsizer, 0, wx.TOP, 10)

        hsizerTop.Add(vsizer2)

        bsizer = wx.StaticBoxSizer(wx.StaticBox(self, -1, "Style"),
                                   wx.HORIZONTAL)

        vsizer2 = wx.BoxSizer(wx.VERTICAL)

        # wxGTK adds way more space by default than wxMSW between the
        # items, have to adjust for that
        pad = 0
        if misc.isWindows:
            pad = 5

        self.addCheckBox("Bold", self, vsizer2, pad)
        self.addCheckBox("Italic", self, vsizer2, pad)
        self.addCheckBox("Underlined", self, vsizer2, pad)

        bsizer.Add(vsizer2)

        hsizerTop.Add(bsizer, 0, wx.LEFT, 20)

        vsizer.Add(hsizerTop, 0, wx.TOP, 10)

        hsizer = wx.BoxSizer(wx.HORIZONTAL)

        hsizer.Add((1, 1), 1)

        self.previewBtn = gutil.createStockButton(self, "Preview")
        hsizer.Add(self.previewBtn)

        cancelBtn = gutil.createStockButton(self, "Cancel")
        hsizer.Add(cancelBtn, 0, wx.LEFT, 10)

        okBtn = gutil.createStockButton(self, "OK")
        hsizer.Add(okBtn, 0, wx.LEFT, 10)

        vsizer.Add(hsizer, 0, wx.EXPAND | wx.TOP, 20)

        util.finishWindow(self, vsizer)

        wx.EVT_BUTTON(self, self.previewBtn.GetId(), self.OnPreview)
        wx.EVT_BUTTON(self, cancelBtn.GetId(), self.OnCancel)
        wx.EVT_BUTTON(self, okBtn.GetId(), self.OnOK)

        wx.EVT_LISTBOX(self, self.stringsLb.GetId(), self.OnStringsLb)

        # list of widgets that are specific to editing the selected string
        self.widList = [
            self.textEntry, self.xEntry, self.alignCombo, self.yEntry,
            self.fontCombo, self.sizeEntry, self.boldCb, self.italicCb,
            self.underlinedCb
        ]

        self.updateGui()

        self.textEntry.SetFocus()
예제 #19
0
    def __init__(self, parent):
        myStyle = wx.MINIMIZE_BOX | wx.CAPTION | wx.ALIGN_CENTER | \
         wx.ALIGN_CENTER_VERTICAL | wx.TAB_TRAVERSAL | wx.STAY_ON_TOP
        wx.Frame.__init__(self,
                          parent,
                          -1,
                          _("Pregnancy Calculator"),
                          style=myStyle)

        # initialization of variables used in the control & calculation
        self.xfer_cal_date_to = LMP_FIELD  # controls which variable (LMP or Ultrasound) a calendar event changes
        # (if == 0): {calendar selection modifies LMP}
        # (if == 1): {calendar selection modifies Ultrasound Date}

        self.ustxt = wx.DateTime_Today(
        )  # avoids problem - one would have if the user clicked on
        # ultrasound date
        # BONUS: makes the preg. calculator useful for EDC calcs given
        # 	a date and the gestation time

        # get icon
        if __name__ == '__main__':
            png_fname = os.path.join('..', 'bitmaps', 'preg_calculator.png')
        else:
            from Gnumed.pycommon import gmGuiBroker
            gb = gmGuiBroker.GuiBroker()
            png_fname = os.path.join(gb['gnumed_dir'], 'bitmaps',
                                     'preg_calculator.png')
        icon = wx.Icon()
        icon.LoadFile(png_fname, wx.BITMAP_TYPE_PNG)
        self.SetIcon(icon)

        szr_rc = wx.lib.rcsizer.RowColSizer()

        #------------------------------
        # sizer holding the 'LMP' stuff
        #------------------------------
        label = wx.StaticText(self, -1, _("LMP"), size=(50, 20))  #label Lmp
        label.SetFont(wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL, False, ''))
        label.SetForegroundColour(wx.Colour(0, 0, 0))

        self.txt_lmp = wx.TextCtrl(self, -1, "",
                                   size=(100, 20))  # text for lmp
        self.txt_lmp.SetFont(
            wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL, False, ''))
        self.txt_lmp.SetToolTip(
            wx.ToolTip(
                _("Click on calendar to enter the last menstrual period date"))
        )
        #tiplmp=self.txt_lmp.GetToolTip()

        szr_row1 = wx.BoxSizer(wx.HORIZONTAL)
        szr_row1.Add(self.txt_lmp, 1, wx.EXPAND | wx.ALL, 2)
        wx.EVT_SET_FOCUS(self.txt_lmp, self.OnSetFocus_lmp)

        szr_lmp = wx.BoxSizer(wx.HORIZONTAL)
        szr_lmp.Add(label, 1, 0, 0)
        szr_lmp.Add((10, 1), 0, 0)
        szr_rc.Add(szr_lmp, flag=wx.EXPAND, row=0, col=1)
        szr_rc.Add(szr_row1, flag=wx.EXPAND, row=0, col=2, colspan=5)
        #------------------------------
        # sizer holding the 'Gest.' stuff
        #------------------------------
        label = wx.StaticText(self, -1, _("Gest."), size=(50, 20))
        label.SetFont(wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL, False, ''))
        label.SetForegroundColour(wx.Colour(0, 0, 0))

        self.txtgest = wx.TextCtrl(self, -1, "", size=(100, 20))
        self.txtgest.Enable(False)
        self.txtgest.SetFont(
            wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL, False, ''))
        self.txtgest_szr = wx.BoxSizer(wx.HORIZONTAL)
        self.txtgest_szr.Add(self.txtgest, 1, wx.EXPAND | wx.ALL, 2)

        szr_gest = wx.BoxSizer(wx.HORIZONTAL)
        szr_gest.Add(label, 1, 0, 0)
        szr_gest.Add((10, 1), 0, 0)
        szr_rc.Add(szr_gest, flag=wx.EXPAND, row=1, col=1)
        szr_rc.Add(self.txtgest_szr, flag=wx.EXPAND, row=1, col=2, colspan=5)

        #------------------------------
        # sizer holding the 'EDC' stuff
        #------------------------------
        label = wx.StaticText(self, -1, _("EDC"), size=(50, 20))
        label.SetFont(wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL, False, ''))
        label.SetForegroundColour(wx.Colour(0, 0, 0))

        self.txtedc = wx.TextCtrl(self, -1, "", size=(100, 20))
        self.txtedc.Enable(False)
        self.txtedc.SetFont(
            wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL, False, ''))
        szr_txtedc = wx.BoxSizer(wx.HORIZONTAL)
        szr_txtedc.Add(self.txtedc, 1, wx.EXPAND | wx.ALL, 2)
        szr_edc = wx.BoxSizer(wx.HORIZONTAL)
        szr_edc.Add(label, 1, 0, 0)
        szr_edc.Add((10, 1), 0, 0)
        szr_rc.Add(szr_edc, flag=wx.EXPAND, row=2, col=1)
        szr_rc.Add(szr_txtedc, flag=wx.EXPAND, row=2, col=2, colspan=5)

        #------------------------------
        # "Ultrasound Scan" label
        #------------------------------
        us_label = wx.StaticText(self,
                                 -1,
                                 _("18 Week Ultrasound Scan"),
                                 size=(200, 20))
        us_label.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD, False, ''))
        us_label.SetForegroundColour(wx.Colour(50, 50, 204))
        szr_backgrnd_18WkScanDue = wx.BoxSizer(wx.VERTICAL)
        szr_backgrnd_18WkScanDue.Add((1, 3), 0)
        szr_backgrnd_18WkScanDue.Add(us_label, 1, wx.EXPAND, 1)
        szr_rc.Add(szr_backgrnd_18WkScanDue,
                   flag=wx.ALIGN_CENTRE_HORIZONTAL,
                   row=3,
                   col=2,
                   colspan=5)
        #------------------------------
        # sizer holding the 'Due' stuff
        #------------------------------
        label = wx.StaticText(self, -1, _("Due"), size=(100, 20))
        label.SetFont(wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL, False, ''))
        label.SetForegroundColour(wx.Colour(0, 0, 0))

        self.txtdue = wx.TextCtrl(self, -1, "", size=(100, 20))
        self.txtdue.Enable(False)
        self.txtdue.SetFont(
            wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL, False, ''))
        self.szr_txtdue = wx.BoxSizer(wx.HORIZONTAL)
        self.szr_txtdue.Add(self.txtdue, 1, wx.EXPAND | wx.ALL, 2)
        szr_due = wx.BoxSizer(wx.HORIZONTAL)
        szr_due.Add(label, 1, 0, 0)
        szr_due.Add((10, 1), 0, 0)
        szr_rc.Add(szr_due, flag=wx.EXPAND, row=4, col=1)
        szr_rc.Add(self.szr_txtdue, flag=wx.EXPAND, row=4, col=2, colspan=5)

        #------------------------------
        # "Ultrasound Scan - Revised EDC" label
        #------------------------------
        rev_edc_label = wx.StaticText(self,
                                      -1,
                                      _("Ultrasound Scan - Revised EDC"),
                                      size=(300, 20))
        rev_edc_label.SetFont(
            wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD, False, ''))
        rev_edc_label.SetForegroundColour(wx.Colour(50, 50, 204))
        szr_backgrnd_RevEDCLabel = wx.BoxSizer(wx.VERTICAL)
        szr_backgrnd_RevEDCLabel.Add((1, 3), 0)
        szr_backgrnd_RevEDCLabel.Add(rev_edc_label, 1, wx.EXPAND, 1)
        szr_rc.Add(szr_backgrnd_RevEDCLabel,
                   flag=wx.ALIGN_CENTRE_HORIZONTAL,
                   row=5,
                   col=2,
                   colspan=5)

        #------------------------------
        # sizer holding the 'newedc' stuff
        #------------------------------
        label1 = wx.StaticText(self, -1, _("Scan Date"), size=(25, 20))
        label1.SetFont(wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL, False, ''))
        label1.SetForegroundColour(wx.Colour(0, 0, 0))
        self.txtdate = wx.TextCtrl(self, -1, "", size=(25, 20))
        self.txtdate.SetFont(
            wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL, False, ''))
        self.txtdate.SetToolTip(
            wx.ToolTip(
                _("Click on this field and then the ultrasound scan date on the calendar"
                  )))
        #tipdue=self.txtdate.GetToolTip()
        #wx.ToolTip_Enable(1)
        self.szr_txtdate = wx.BoxSizer(wx.HORIZONTAL)
        self.szr_txtdate.Add(self.txtdate, 1, wx.EXPAND | wx.ALL, 2)
        wx.EVT_SET_FOCUS(self.txtdate, self.OnSetFocus_USDate)

        szr_label1 = wx.BoxSizer(wx.HORIZONTAL)
        szr_label1.Add(label1, 1, 0, 0)
        szr_label1.Add((10, 1), 0, 0)
        szr_rc.Add(szr_label1, flag=wx.EXPAND, row=6, col=1)
        szr_rc.Add(self.szr_txtdate, flag=wx.EXPAND, row=6, col=2, colspan=5)

        #------------------------------

        label2 = wx.StaticText(self, -1, _("Weeks"), size=(25, 20))
        label2.SetFont(wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL, False, ''))
        label2.SetForegroundColour(wx.Colour(0, 0, 0))
        self.txtweeks = wx.SpinCtrl(self, -1, value="0", min=0, max=42)
        wx.EVT_SPINCTRL(self.txtweeks, self.txtweeks.GetId(),
                        self.EvtText_calcnewedc)
        self.txtweeks.SetFont(
            wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL, False, ''))
        self.szr_txtweeks = wx.BoxSizer(wx.HORIZONTAL)
        self.szr_txtweeks.Add(self.txtweeks, 1, wx.EXPAND | wx.ALL, 2)

        label3 = wx.StaticText(self, -1, _("Days"), size=(25, 20))
        label3.SetFont(wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL, False, ''))
        label3.SetForegroundColour(wx.Colour(0, 0, 0))
        self.txtdays = wx.SpinCtrl(self, -1, value="0", min=0, max=6)
        wx.EVT_SPINCTRL(self.txtdays, self.txtdays.GetId(),
                        self.EvtText_calcnewedc)
        self.txtdays.SetFont(
            wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL, False, ''))
        self.szr_txtdays = wx.BoxSizer(wx.HORIZONTAL)
        self.szr_txtdays.Add(self.txtdays, 1, wx.EXPAND | wx.ALL, 2)

        szr_label2 = wx.BoxSizer(wx.HORIZONTAL)
        szr_label2.Add(label2, 1, wx.ALIGN_CENTRE_VERTICAL, 0)
        szr_label2.Add((10, 1), 0, 0)
        szr_label3 = wx.BoxSizer(wx.HORIZONTAL)
        szr_label3.Add((10, 1), 0, 0)
        szr_label3.Add(label3, 1, wx.ALIGN_CENTRE_VERTICAL, 0)
        szr_label3.Add((10, 1), 0, 0)
        szr_rc.Add(szr_label2, flag=wx.EXPAND, row=7, col=1)
        szr_rc.Add(self.szr_txtweeks, flag=wx.EXPAND, row=7, col=2, colspan=2)
        szr_rc.Add(szr_label3, flag=wx.EXPAND, row=7, col=4)
        szr_rc.Add(self.szr_txtdays, flag=wx.EXPAND, row=7, col=5, colspan=2)

        #------------------------------
        # sizer holding the new (or revised) 'EDC' stuff
        #------------------------------
        label = wx.StaticText(self, -1, _("Rev EDC"), size=(100, 20))
        label.SetFont(wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL, False, ''))
        label.SetForegroundColour(wx.Colour(0, 0, 0))

        self.txtnewedc = wx.TextCtrl(self, -1, "", size=(100, 20))
        self.txtnewedc.Enable(False)
        self.txtnewedc.SetFont(
            wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL, False, ''))
        self.szr_txtnewedc = wx.BoxSizer(wx.HORIZONTAL)
        self.szr_txtnewedc.Add(self.txtnewedc, 1, wx.EXPAND | wx.ALL, 2)
        szr_label = wx.BoxSizer(wx.HORIZONTAL)
        szr_label.Add(label, 1, 0, 0)
        szr_label.Add((10, 1), 0, 0)
        szr_rc.Add(szr_label, flag=wx.EXPAND, row=8, col=1)
        szr_rc.Add(self.szr_txtnewedc, flag=wx.EXPAND, row=8, col=2, colspan=5)
        self.btnPrint = wx.Button(self, 1011, _('&Print'))
        self.btnSave = wx.Button(self, 1011, _('&Save'))
        szr_buttons = wx.BoxSizer(wx.HORIZONTAL)
        szr_buttons.Add(self.btnPrint, 0, wx.EXPAND)
        szr_buttons.Add(self.btnSave, 0, wx.EXPAND)
        szr_rc.Add(szr_buttons, flag=wx.EXPAND, row=9, col=3, colspan=4)
        #------------------------------
        # Sizer holding stuff on the right
        #------------------------------
        szr_main_rt = wx.BoxSizer(wx.VERTICAL)
        szr_main_rt.Add(szr_rc)
        wx.EVT_BUTTON(self, 1010, self.EvtReset)
        wx.EVT_BUTTON(self, 1011, self.EvtPrint)
        wx.EVT_BUTTON(self, 1012, self.EvtSave)
        #------------------------------
        # Add calendar (stuff on the left)
        #------------------------------
        self.lmp_cal = wx.calendar.CalendarCtrl(self,
                                                ID_LMP,
                                                style=wx.RAISED_BORDER)
        wx.calendar.EVT_CALENDAR_SEL_CHANGED(self.lmp_cal, ID_LMP,
                                             self.OnCalcByLMP)

        szr_main_lf = wx.BoxSizer(wx.VERTICAL)
        szr_main_lf.Add(self.lmp_cal, 0, wx.ALIGN_CENTRE_HORIZONTAL)
        btn_reset = wx.Button(self, 1010, _('&Reset'))
        #szr_main_lf.Add(5,0,5)
        szr_main_lf.Add(btn_reset, 0, wx.EXPAND)

        #--------------------------------------
        # Super-sizer holds all the stuff above
        #--------------------------------------
        szr_main_top = wx.BoxSizer(wx.HORIZONTAL)
        szr_main_top.Add(szr_main_lf, 0, 0)
        szr_main_top.Add((15, 0), 0, 0)
        szr_main_top.Add(szr_main_rt, 0, 0)
        #szr_main_top.Add(15,1,0,0)

        #------------------------------
        # Put everything together in one big sizer
        #------------------------------
        szr_main = wx.BoxSizer(wx.HORIZONTAL)
        szr_main.Add(szr_main_top, 1, wx.EXPAND | wx.ALL, 10)
        self.SetSizer(szr_main)
        self.SetAutoLayout(1)
        szr_main.Fit(self)

        wx.EVT_CLOSE(self, self.OnClose)
예제 #20
0
    def __init__(self, parent, ID, title):
        wx.Frame.__init__(self, parent, ID, title, wx.DefaultPosition,
                          wx.DefaultSize)

        self.dicepool = dicepool.dicepool()
        self.config = wx.Config.Get()

        pan = wx.Panel(self, -1)
        ts = wx.BoxSizer(wx.VERTICAL)
        ts.Add(pan, 1, wx.EXPAND | wx.ALL)
        self.SetSizer(ts)

        root = wx.BoxSizer(wx.HORIZONTAL)

        controls = wx.BoxSizer(wx.VERTICAL)

        poolbox = wx.BoxSizer(wx.HORIZONTAL)
        poolbox.Add(wx.StaticText(pan, -1, _("Dice pool:")), 0,
                    wx.ALIGN_CENTER_VERTICAL)
        self.poolctl = wx.SpinCtrl(pan, DIEROLLER_POOL, u"",
                                   wx.DefaultPosition, wx.DefaultSize, 0, 1,
                                   99)
        self.poolctl.SetValue(self.dicepool.pool)
        poolbox.Add(self.poolctl, 1, wx.ALIGN_CENTER_VERTICAL)
        controls.Add(poolbox, 1, wx.EXPAND)

        facebox = wx.BoxSizer(wx.HORIZONTAL)
        facebox.Add(wx.StaticText(pan, -1, _("Die faces:")), 0,
                    wx.ALIGN_CENTER_VERTICAL)
        self.facectl = wx.SpinCtrl(pan, DIEROLLER_FACES, u"",
                                   wx.DefaultPosition, wx.DefaultSize, 0, 2,
                                   99)
        self.facectl.SetValue(self.dicepool.faces)
        facebox.Add(self.facectl, 1, wx.ALIGN_CENTER_VERTICAL)
        controls.Add(facebox, 1, wx.EXPAND)

        rngbox = wx.BoxSizer(wx.VERTICAL)
        rngbox.Add(
            wx.StaticText(pan, -1, _("Pseudo-random number generator:")), 0)
        self.rngctl = wx.Choice(pan, DIEROLLER_RNG, wx.DefaultPosition,
                                wx.DefaultSize,
                                headerdata.SF_DIEROLLER_RNGSTRINGS)
        rngstring = self.config.Read(headerdata.SF_CONFIGKEY_RNG,
                                     headerdata.SF_CONFIGDEFAULT_RNG)
        self.dicepool.setrng(rngstring)
        self.rngctl.SetStringSelection(rngstring)
        rngbox.Add(self.rngctl, 1, wx.EXPAND)
        controls.Add(rngbox, 0, wx.EXPAND)

        self.tabctl = wx.CheckBox(pan, DIEROLLER_TAB, _("Tabulate"))
        self.tabctl.SetValue(self.dicepool.tabulate)
        controls.Add(self.tabctl, 0, wx.EXPAND)

        self.botchctl = wx.CheckBox(pan, DIEROLLER_BOTCH, _("Botches"))
        self.botchctl.SetValue(self.dicepool.botch)
        controls.Add(self.botchctl, 0, wx.EXPAND)

        self.doublectl = wx.CheckBox(pan, DIEROLLER_DOUBLE, _("Double"))
        self.doublectl.SetValue(self.dicepool.double)
        controls.Add(self.doublectl, 0, wx.EXPAND)

        diffbox = wx.BoxSizer(wx.HORIZONTAL)
        self.difflabel = wx.StaticText(pan, -1, _("Difficulty:"))
        diffbox.Add(self.difflabel, 0, wx.ALIGN_CENTER_VERTICAL)
        self.diffctl = wx.SpinCtrl(pan, DIEROLLER_DIFF, u"",
                                   wx.DefaultPosition, wx.DefaultSize, 0, 1,
                                   self.dicepool.faces, 6)
        diffbox.Add(self.diffctl, 1, wx.ALIGN_CENTER_VERTICAL)
        controls.Add(diffbox, 1, wx.EXPAND)

        roll = wx.Button(pan, DIEROLLER_ROLL, _("Roll"))
        controls.Add(roll, 0, wx.EXPAND)

        root.Add(controls, 1, wx.EXPAND)

        results = wx.BoxSizer(wx.VERTICAL)

        self.resultbox = wx.TextCtrl(pan, -1, u"", wx.DefaultPosition,
                                     wx.DefaultSize,
                                     wx.TE_MULTILINE | wx.TE_READONLY)
        results.Add(self.resultbox, 2, wx.EXPAND)

        finalbox = wx.BoxSizer(wx.HORIZONTAL)
        self.finallabel = wx.StaticText(pan, -1, _("Final score:"))
        finalbox.Add(self.finallabel, 1, wx.ALIGN_CENTER_VERTICAL)
        self.finalscore = wx.StaticText(pan, -1, u"")
        finalbox.Add(self.finalscore, 1)
        results.Add(finalbox, 0, wx.EXPAND)

        successbox = wx.BoxSizer(wx.VERTICAL)
        successlabelbox = wx.BoxSizer(wx.HORIZONTAL)
        self.successtag = wx.StaticText(pan, -1, _("Successes:"))
        successlabelbox.Add(self.successtag, 1, wx.ALIGN_LEFT)
        self.successlabel = wx.StaticText(pan, -1,
                                          "0/" + str(self.dicepool.pool))
        successlabelbox.Add(self.successlabel, 0, wx.ALIGN_RIGHT)
        successbox.Add(successlabelbox, 0, wx.EXPAND)
        self.successgauge = wx.Gauge(pan, -1, self.dicepool.pool)
        successbox.Add(self.successgauge, 0, wx.EXPAND)
        results.Add(successbox, 0, wx.EXPAND)

        failurebox = wx.BoxSizer(wx.VERTICAL)
        failurelabelbox = wx.BoxSizer(wx.HORIZONTAL)
        self.failuretag = wx.StaticText(pan, -1, _("Failures:"))
        failurelabelbox.Add(self.failuretag, 1, wx.ALIGN_LEFT)
        self.failurelabel = wx.StaticText(pan, -1,
                                          "0/" + str(self.dicepool.pool))
        failurelabelbox.Add(self.failurelabel, 0, wx.ALIGN_RIGHT)
        failurebox.Add(failurelabelbox, 0, wx.EXPAND)
        self.failuregauge = wx.Gauge(pan, -1, self.dicepool.pool)
        failurebox.Add(self.failuregauge, 0, wx.EXPAND)
        results.Add(failurebox, 0, wx.EXPAND)

        botchbox = wx.BoxSizer(wx.VERTICAL)
        botchlabelbox = wx.BoxSizer(wx.HORIZONTAL)
        self.botchtag = wx.StaticText(pan, -1, _("Botches:"))
        botchlabelbox.Add(self.botchtag, 1, wx.ALIGN_LEFT)
        self.botchlabel = wx.StaticText(pan, -1,
                                        "0/" + str(self.dicepool.pool))
        botchlabelbox.Add(self.botchlabel, 0, wx.ALIGN_RIGHT)
        botchbox.Add(botchlabelbox, 0, wx.EXPAND)
        self.botchgauge = wx.Gauge(pan, -1, self.dicepool.pool)
        botchbox.Add(self.botchgauge, 0, wx.EXPAND)
        results.Add(botchbox, 0, wx.EXPAND)

        close = wx.Button(pan, DIEROLLER_CLOSE, u"Close")
        results.Add(close, 0, wx.EXPAND)

        root.Add(results, 1, wx.EXPAND)

        pan.SetSizer(root)
        self.Fit()
        self.Centre(wx.BOTH)

        self.freshen()

        wx.EVT_BUTTON(self, DIEROLLER_CLOSE, self.onclose)
        wx.EVT_BUTTON(self, DIEROLLER_ROLL, self.onroll)
        wx.EVT_SPINCTRL(self, DIEROLLER_POOL, self.onpool)
        wx.EVT_SPINCTRL(self, DIEROLLER_FACES, self.onfaces)
        wx.EVT_CHOICE(self, DIEROLLER_RNG, self.onrng)
        wx.EVT_SPINCTRL(self, DIEROLLER_DIFF, self.ondiff)
        wx.EVT_CHECKBOX(self, DIEROLLER_BOTCH, self.onbotch)
        wx.EVT_CHECKBOX(self, DIEROLLER_TAB, self.ontab)
        wx.EVT_CHECKBOX(self, DIEROLLER_DOUBLE, self.ondouble)
예제 #21
0
파일: dvh.py 프로젝트: tparpaite/dicompyler
    def Init(self, res):
        """Method called after the panel has been initialized."""

        self.guiDVH = guidvh.guiDVH(self)
        res.AttachUnknownControl('panelDVH', self.guiDVH.panelDVH, self)

        # Initialize the Constraint selector controls
        self.lblType = XRCCTRL(self, 'lblType')
        self.choiceConstraint = XRCCTRL(self, 'choiceConstraint')
        self.txtConstraint = XRCCTRL(self, 'txtConstraint')
        self.sliderConstraint = XRCCTRL(self, 'sliderConstraint')
        self.lblResultType = XRCCTRL(self, 'lblResultType')
        self.lblConstraintUnits = XRCCTRL(self, 'lblConstraintUnits')
        self.lblConstraintTypeUnits = XRCCTRL(self, 'lblConstraintTypeUnits')

        # Initialize the result labels
        self.lblConstraintType = XRCCTRL(self, 'lblConstraintType')
        self.lblResultDivider = XRCCTRL(self, 'lblResultDivider')
        self.lblConstraintPercent = XRCCTRL(self, 'lblConstraintPercent')

        # Modify the control and font size on Mac
        controls = [
            self.lblType, self.choiceConstraint, self.sliderConstraint,
            self.lblResultType, self.lblConstraintUnits,
            self.lblConstraintPercent, self.lblConstraintType,
            self.lblConstraintTypeUnits, self.lblResultDivider
        ]
        # Add children of composite controls to modification list
        compositecontrols = [self.txtConstraint]
        for control in compositecontrols:
            for child in control.GetChildren():
                controls.append(child)
        # Add the constraint static box to the modification list
        controls.append(self.lblType.GetContainingSizer().GetStaticBox())

        if guiutil.IsMac():
            font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
            font.SetPointSize(10)
            for control in controls:
                control.SetWindowVariant(wx.WINDOW_VARIANT_SMALL)
                control.SetFont(font)

        # Adjust the control size for the result value labels
        te = self.lblType.GetTextExtent('0')
        self.lblConstraintUnits.SetMinSize((te[0] * 10, te[1]))
        self.lblConstraintPercent.SetMinSize((te[0] * 6, te[1]))
        self.Layout()

        # Bind ui events to the proper methods
        wx.EVT_CHOICE(self, XRCID('choiceConstraint'),
                      self.OnToggleConstraints)
        wx.EVT_SPINCTRL(self, XRCID('txtConstraint'), self.OnChangeConstraint)
        wx.EVT_COMMAND_SCROLL_THUMBTRACK(self, XRCID('sliderConstraint'),
                                         self.OnChangeConstraint)
        wx.EVT_COMMAND_SCROLL_CHANGED(self, XRCID('sliderConstraint'),
                                      self.OnChangeConstraint)
        self.Bind(wx.EVT_WINDOW_DESTROY, self.OnDestroy)

        # Initialize variables
        self.structures = {}  # structures from initial DICOM data
        self.checkedstructures = {}  # structures that need to be shown
        self.dvhs = {}  # raw dvhs from initial DICOM data
        self.dvhdata = {}  # dict of dvh constraint functions
        self.dvharray = {}  # dict of dvh data processed from dvhdata
        self.dvhscaling = {}  # dict of dvh scaling data
        self.plan = {}  # used for rx dose
        self.structureid = 1  # used to indicate current constraint structure

        # Set up pubsub
        pub.subscribe(self.OnUpdatePatient, 'patient.updated.parsed_data')
        pub.subscribe(self.OnStructureCheck, 'structures.checked')
        pub.subscribe(self.OnStructureSelect, 'structure.selected')
예제 #22
0
    def __init__(self, *args, **kwds):
        # begin wxGlade: MyFrame.__init__
        kwds["style"] = wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)

        # Menu Bar
        self.frame_1_menubar = wx.MenuBar()
        self.SetMenuBar(self.frame_1_menubar)
        wxglade_tmp_menu = wx.Menu()
        self.Exit = wx.MenuItem(wxglade_tmp_menu, ID_EXIT, "Exit", "Exit",
                                wx.ITEM_NORMAL)
        wxglade_tmp_menu.AppendItem(self.Exit)
        self.frame_1_menubar.Append(wxglade_tmp_menu, "File")
        # Menu Bar end
        self.panel_1 = wx.Panel(self, -1)
        self.button_1 = wx.Button(self, ID_BUTTON_1, "LSB")
        self.button_2 = wx.Button(self, ID_BUTTON_2, "USB")
        self.button_3 = wx.Button(self, ID_BUTTON_3, "AM")
        self.button_4 = wx.Button(self, ID_BUTTON_4, "CW")
        self.button_5 = wx.ToggleButton(self, ID_BUTTON_5, "Upper")
        self.slider_fcutoff_hi = wx.Slider(self,
                                           ID_SLIDER_1,
                                           0,
                                           -15798,
                                           15799,
                                           style=wx.SL_HORIZONTAL
                                           | wx.SL_LABELS)
        self.button_6 = wx.ToggleButton(self, ID_BUTTON_6, "Lower")
        self.slider_fcutoff_lo = wx.Slider(self,
                                           ID_SLIDER_2,
                                           0,
                                           -15799,
                                           15798,
                                           style=wx.SL_HORIZONTAL
                                           | wx.SL_LABELS)
        self.panel_5 = wx.Panel(self, -1)
        self.label_1 = wx.StaticText(self, -1, " Band\nCenter")
        self.text_ctrl_1 = wx.TextCtrl(self, ID_TEXT_1, "")
        self.panel_6 = wx.Panel(self, -1)
        self.panel_7 = wx.Panel(self, -1)
        self.panel_2 = wx.Panel(self, -1)
        self.button_7 = wx.ToggleButton(self, ID_BUTTON_7, "Freq")
        self.slider_3 = wx.Slider(self, ID_SLIDER_3, 3000, 0, 6000)
        self.spin_ctrl_1 = wx.SpinCtrl(self, ID_SPIN_1, "", min=0, max=100)
        self.button_8 = wx.ToggleButton(self, ID_BUTTON_8, "Vol")
        self.slider_4 = wx.Slider(self, ID_SLIDER_4, 0, 0, 500)
        self.slider_5 = wx.Slider(self, ID_SLIDER_5, 0, 0, 20)
        self.button_9 = wx.ToggleButton(self, ID_BUTTON_9, "Time")
        self.button_11 = wx.Button(self, ID_BUTTON_11, "Rew")
        self.button_10 = wx.Button(self, ID_BUTTON_10, "Fwd")
        self.panel_3 = wx.Panel(self, -1)
        self.label_2 = wx.StaticText(self, -1, "PGA               ")
        self.panel_4 = wx.Panel(self, -1)
        self.panel_8 = wx.Panel(self, -1)
        self.panel_9 = wx.Panel(self, -1)
        self.label_3 = wx.StaticText(self, -1, "AM Sync\nCarrier")
        self.slider_6 = wx.Slider(self,
                                  ID_SLIDER_6,
                                  50,
                                  0,
                                  200,
                                  style=wx.SL_HORIZONTAL | wx.SL_LABELS)
        self.label_4 = wx.StaticText(self, -1, "Antenna Tune")
        self.slider_7 = wx.Slider(self,
                                  ID_SLIDER_7,
                                  1575,
                                  950,
                                  2200,
                                  style=wx.SL_HORIZONTAL | wx.SL_LABELS)
        self.panel_10 = wx.Panel(self, -1)
        self.button_12 = wx.ToggleButton(self, ID_BUTTON_12, "Auto Tune")
        self.button_13 = wx.Button(self, ID_BUTTON_13, "Calibrate")
        self.button_14 = wx.Button(self, ID_BUTTON_14, "Reset")
        self.panel_11 = wx.Panel(self, -1)
        self.panel_12 = wx.Panel(self, -1)

        self.__set_properties()
        self.__do_layout()
        # end wxGlade

        parser = OptionParser(option_class=eng_option)
        parser.add_option("",
                          "--address",
                          type="string",
                          default="addr=192.168.10.2",
                          help="Address of UHD device, [default=%default]")
        parser.add_option("-c",
                          "--ddc-freq",
                          type="eng_float",
                          default=3.9e6,
                          help="set Rx DDC frequency to FREQ",
                          metavar="FREQ")
        parser.add_option(
            "-s",
            "--samp-rate",
            type="eng_float",
            default=256e3,
            help="set sample rate (bandwidth) [default=%default]")
        parser.add_option("-a",
                          "--audio_file",
                          default="",
                          help="audio output file",
                          metavar="FILE")
        parser.add_option("-r",
                          "--radio_file",
                          default="",
                          help="radio output file",
                          metavar="FILE")
        parser.add_option("-i",
                          "--input_file",
                          default="",
                          help="radio input file",
                          metavar="FILE")
        parser.add_option(
            "-O",
            "--audio-output",
            type="string",
            default="",
            help="audio output device name. E.g., hw:0,0, /dev/dsp, or pulse")

        (options, args) = parser.parse_args()

        self.usrp_center = options.ddc_freq
        input_rate = options.samp_rate
        self.slider_range = input_rate * 0.9375
        self.f_lo = self.usrp_center - (self.slider_range / 2)
        self.f_hi = self.usrp_center + (self.slider_range / 2)
        self.af_sample_rate = 32000
        fir_decim = long(input_rate / self.af_sample_rate)

        # data point arrays for antenna tuner
        self.xdata = []
        self.ydata = []

        self.tb = gr.top_block()

        # radio variables, initial conditions
        self.frequency = self.usrp_center
        # these map the frequency slider (0-6000) to the actual range
        self.f_slider_offset = self.f_lo
        self.f_slider_scale = 10000
        self.spin_ctrl_1.SetRange(self.f_lo, self.f_hi)
        self.text_ctrl_1.SetValue(str(int(self.usrp_center)))
        self.slider_5.SetValue(0)
        self.AM_mode = False

        self.slider_3.SetValue(
            (self.frequency - self.f_slider_offset) / self.f_slider_scale)
        self.spin_ctrl_1.SetValue(int(self.frequency))

        POWERMATE = True
        try:
            self.pm = powermate.powermate(self)
        except:
            sys.stderr.write("Unable to find PowerMate or Contour Shuttle\n")
            POWERMATE = False

        if POWERMATE:
            powermate.EVT_POWERMATE_ROTATE(self, self.on_rotate)
            powermate.EVT_POWERMATE_BUTTON(self, self.on_pmButton)
        self.active_button = 7

        # command line options
        if options.audio_file == "": SAVE_AUDIO_TO_FILE = False
        else: SAVE_AUDIO_TO_FILE = True
        if options.radio_file == "": SAVE_RADIO_TO_FILE = False
        else: SAVE_RADIO_TO_FILE = True
        if options.input_file == "": self.PLAY_FROM_USRP = True
        else: self.PLAY_FROM_USRP = False

        if self.PLAY_FROM_USRP:
            self.src = uhd.usrp_source(device_addr=options.address,
                                       io_type=uhd.io_type.COMPLEX_FLOAT32,
                                       num_channels=1)
            self.src.set_samp_rate(input_rate)
            input_rate = self.src.get_samp_rate()

            self.src.set_center_freq(self.usrp_center, 0)
            self.tune_offset = 0

        else:
            self.src = gr.file_source(gr.sizeof_short, options.input_file)
            self.tune_offset = 2200  # 2200 works for 3.5-4Mhz band

            # convert rf data in interleaved short int form to complex
            s2ss = gr.stream_to_streams(gr.sizeof_short, 2)
            s2f1 = gr.short_to_float()
            s2f2 = gr.short_to_float()
            src_f2c = gr.float_to_complex()
            self.tb.connect(self.src, s2ss)
            self.tb.connect((s2ss, 0), s2f1)
            self.tb.connect((s2ss, 1), s2f2)
            self.tb.connect(s2f1, (src_f2c, 0))
            self.tb.connect(s2f2, (src_f2c, 1))

        # save radio data to a file
        if SAVE_RADIO_TO_FILE:
            radio_file = gr.file_sink(gr.sizeof_short, options.radio_file)
            self.tb.connect(self.src, radio_file)

# 2nd DDC
        xlate_taps = gr.firdes.low_pass ( \
           1.0, input_rate, 16e3, 4e3, gr.firdes.WIN_HAMMING )
        self.xlate = gr.freq_xlating_fir_filter_ccf ( \
           fir_decim, xlate_taps, self.tune_offset, input_rate )

        # Complex Audio filter
        audio_coeffs = gr.firdes.complex_band_pass(
            1.0,  # gain
            self.af_sample_rate,  # sample rate
            -3000,  # low cutoff
            0,  # high cutoff
            100,  # transition
            gr.firdes.WIN_HAMMING)  # window
        self.slider_fcutoff_hi.SetValue(0)
        self.slider_fcutoff_lo.SetValue(-3000)

        self.audio_filter = gr.fir_filter_ccc(1, audio_coeffs)

        # Main +/- 16Khz spectrum display
        self.fft = fftsink2.fft_sink_c(self.panel_2,
                                       fft_size=512,
                                       sample_rate=self.af_sample_rate,
                                       average=True,
                                       size=(640, 240))

        # AM Sync carrier
        if AM_SYNC_DISPLAY:
            self.fft2 = fftsink.fft_sink_c(self.tb,
                                           self.panel_9,
                                           y_per_div=20,
                                           fft_size=512,
                                           sample_rate=self.af_sample_rate,
                                           average=True,
                                           size=(640, 240))

        c2f = gr.complex_to_float()

        # AM branch
        self.sel_am = gr.multiply_const_cc(0)
        # the following frequencies turn out to be in radians/sample
        # gr.pll_refout_cc(alpha,beta,min_freq,max_freq)
        # suggested alpha = X, beta = .25 * X * X
        pll = gr.pll_refout_cc(.5, .0625,
                               (2. * math.pi * 7.5e3 / self.af_sample_rate),
                               (2. * math.pi * 6.5e3 / self.af_sample_rate))
        self.pll_carrier_scale = gr.multiply_const_cc(complex(10, 0))
        am_det = gr.multiply_cc()
        # these are for converting +7.5kHz to -7.5kHz
        # for some reason gr.conjugate_cc() adds noise ??
        c2f2 = gr.complex_to_float()
        c2f3 = gr.complex_to_float()
        f2c = gr.float_to_complex()
        phaser1 = gr.multiply_const_ff(1)
        phaser2 = gr.multiply_const_ff(-1)

        # filter for pll generated carrier
        pll_carrier_coeffs = gr.firdes.complex_band_pass(
            2.0,  # gain
            self.af_sample_rate,  # sample rate
            7400,  # low cutoff
            7600,  # high cutoff
            100,  # transition
            gr.firdes.WIN_HAMMING)  # window

        self.pll_carrier_filter = gr.fir_filter_ccc(1, pll_carrier_coeffs)

        self.sel_sb = gr.multiply_const_ff(1)
        combine = gr.add_ff()

        #AGC
        sqr1 = gr.multiply_ff()
        intr = gr.iir_filter_ffd([.004, 0], [0, .999])
        offset = gr.add_const_ff(1)
        agc = gr.divide_ff()

        self.scale = gr.multiply_const_ff(0.00001)
        dst = audio.sink(long(self.af_sample_rate), options.audio_output)

        if self.PLAY_FROM_USRP:
            self.tb.connect(self.src, self.xlate, self.fft)
        else:
            self.tb.connect(src_f2c, self.xlate, self.fft)

        self.tb.connect(self.xlate, self.audio_filter, self.sel_am,
                        (am_det, 0))
        self.tb.connect(self.sel_am, pll, self.pll_carrier_scale,
                        self.pll_carrier_filter, c2f3)
        self.tb.connect((c2f3, 0), phaser1, (f2c, 0))
        self.tb.connect((c2f3, 1), phaser2, (f2c, 1))
        self.tb.connect(f2c, (am_det, 1))
        self.tb.connect(am_det, c2f2, (combine, 0))
        self.tb.connect(self.audio_filter, c2f, self.sel_sb, (combine, 1))

        if AM_SYNC_DISPLAY:
            self.tb.connect(self.pll_carrier_filter, self.fft2)

        self.tb.connect(combine, self.scale)
        self.tb.connect(self.scale, (sqr1, 0))
        self.tb.connect(self.scale, (sqr1, 1))
        self.tb.connect(sqr1, intr, offset, (agc, 1))
        self.tb.connect(self.scale, (agc, 0))
        self.tb.connect(agc, dst)

        if SAVE_AUDIO_TO_FILE:
            f_out = gr.file_sink(gr.sizeof_short, options.audio_file)
            sc1 = gr.multiply_const_ff(64000)
            f2s1 = gr.float_to_short()
            self.tb.connect(agc, sc1, f2s1, f_out)

        self.tb.start()

        # for mouse position reporting on fft display
        self.fft.win.Bind(wx.EVT_LEFT_UP, self.Mouse)
        # and left click to re-tune
        self.fft.win.Bind(wx.EVT_LEFT_DOWN, self.Click)

        # start a timer to check for web commands
        if WEB_CONTROL:
            self.timer = UpdateTimer(self, 1000)  # every 1000 mSec, 1 Sec

        wx.EVT_BUTTON(self, ID_BUTTON_1, self.set_lsb)
        wx.EVT_BUTTON(self, ID_BUTTON_2, self.set_usb)
        wx.EVT_BUTTON(self, ID_BUTTON_3, self.set_am)
        wx.EVT_BUTTON(self, ID_BUTTON_4, self.set_cw)
        wx.EVT_BUTTON(self, ID_BUTTON_10, self.fwd)
        wx.EVT_BUTTON(self, ID_BUTTON_11, self.rew)
        wx.EVT_BUTTON(self, ID_BUTTON_13, self.AT_calibrate)
        wx.EVT_BUTTON(self, ID_BUTTON_14, self.AT_reset)
        wx.EVT_TOGGLEBUTTON(self, ID_BUTTON_5, self.on_button)
        wx.EVT_TOGGLEBUTTON(self, ID_BUTTON_6, self.on_button)
        wx.EVT_TOGGLEBUTTON(self, ID_BUTTON_7, self.on_button)
        wx.EVT_TOGGLEBUTTON(self, ID_BUTTON_8, self.on_button)
        wx.EVT_TOGGLEBUTTON(self, ID_BUTTON_9, self.on_button)
        wx.EVT_SLIDER(self, ID_SLIDER_1, self.set_filter)
        wx.EVT_SLIDER(self, ID_SLIDER_2, self.set_filter)
        wx.EVT_SLIDER(self, ID_SLIDER_3, self.slide_tune)
        wx.EVT_SLIDER(self, ID_SLIDER_4, self.set_volume)
        wx.EVT_SLIDER(self, ID_SLIDER_5, self.set_pga)
        wx.EVT_SLIDER(self, ID_SLIDER_6, self.am_carrier)
        wx.EVT_SLIDER(self, ID_SLIDER_7, self.antenna_tune)
        wx.EVT_SPINCTRL(self, ID_SPIN_1, self.spin_tune)

        wx.EVT_MENU(self, ID_EXIT, self.TimeToQuit)
예제 #23
0
 def _bind_event_spin(self, function):
     wx.EVT_KILL_FOCUS(self.spin, function)
     if wx.Platform == '__WXMAC__':
         wx.EVT_TEXT(self.spin, self.spin.GetId(), function)
         wx.EVT_SPINCTRL(self.spin, self.spin.GetId(), function)
예제 #24
0
    def __init__(self, parent, headers, cfg, cfgGl, applyFunc):
        wx.Dialog.__init__(self,
                           parent,
                           -1,
                           "Headers",
                           style=wx.DEFAULT_DIALOG_STYLE)

        self.headers = headers
        self.cfg = cfg
        self.cfgGl = cfgGl
        self.applyFunc = applyFunc

        # whether some events are blocked
        self.block = False

        self.hdrIndex = -1
        if len(self.headers.hdrs) > 0:
            self.hdrIndex = 0

        vsizer = wx.BoxSizer(wx.VERTICAL)

        hsizer = wx.BoxSizer(wx.HORIZONTAL)

        hsizer.Add(wx.StaticText(self, -1, "Empty lines after headers:"), 0,
                   wx.ALIGN_CENTER_VERTICAL)

        self.elinesEntry = wx.SpinCtrl(self, -1)
        self.elinesEntry.SetRange(0, 5)
        wx.EVT_SPINCTRL(self, self.elinesEntry.GetId(), self.OnMisc)
        wx.EVT_KILL_FOCUS(self.elinesEntry, self.OnKillFocus)
        hsizer.Add(self.elinesEntry, 0, wx.LEFT, 10)

        vsizer.Add(hsizer)

        vsizer.Add(wx.StaticLine(self, -1), 0, wx.EXPAND | wx.TOP | wx.BOTTOM,
                   10)

        tmp = wx.StaticText(self, -1, "Strings:")
        vsizer.Add(tmp)

        self.stringsLb = wx.ListBox(self, -1, size=(200, 100))
        vsizer.Add(self.stringsLb, 0, wx.EXPAND)

        hsizer = wx.BoxSizer(wx.HORIZONTAL)

        self.addBtn = gutil.createStockButton(self, "Add")
        hsizer.Add(self.addBtn)
        wx.EVT_BUTTON(self, self.addBtn.GetId(), self.OnAddString)
        gutil.btnDblClick(self.addBtn, self.OnAddString)

        self.delBtn = gutil.createStockButton(self, "Delete")
        hsizer.Add(self.delBtn, 0, wx.LEFT, 10)
        wx.EVT_BUTTON(self, self.delBtn.GetId(), self.OnDeleteString)
        gutil.btnDblClick(self.delBtn, self.OnDeleteString)

        vsizer.Add(hsizer, 0, wx.TOP, 5)

        hsizer = wx.BoxSizer(wx.HORIZONTAL)

        hsizer.Add(wx.StaticText(self, -1, "Text:"), 0,
                   wx.ALIGN_CENTER_VERTICAL)

        self.textEntry = wx.TextCtrl(self, -1)
        hsizer.Add(self.textEntry, 1, wx.LEFT, 10)
        wx.EVT_TEXT(self, self.textEntry.GetId(), self.OnMisc)

        vsizer.Add(hsizer, 0, wx.EXPAND | wx.TOP, 20)

        vsizer.Add(
            wx.StaticText(self, -1,
                          "'${PAGE}' will be replaced by the page number."), 0,
            wx.ALIGN_CENTER | wx.TOP, 5)

        hsizerTop = wx.BoxSizer(wx.HORIZONTAL)

        gsizer = wx.FlexGridSizer(3, 2, 5, 0)

        gsizer.Add(wx.StaticText(self, -1, "Header line:"), 0,
                   wx.ALIGN_CENTER_VERTICAL)

        self.lineEntry = wx.SpinCtrl(self, -1)
        self.lineEntry.SetRange(1, 5)
        wx.EVT_SPINCTRL(self, self.lineEntry.GetId(), self.OnMisc)
        wx.EVT_KILL_FOCUS(self.lineEntry, self.OnKillFocus)
        gsizer.Add(self.lineEntry)

        gsizer.Add(wx.StaticText(self, -1, "X offset (characters):"), 0,
                   wx.ALIGN_CENTER_VERTICAL | wx.RIGHT, 10)

        self.xoffEntry = wx.SpinCtrl(self, -1)
        self.xoffEntry.SetRange(-100, 100)
        wx.EVT_SPINCTRL(self, self.xoffEntry.GetId(), self.OnMisc)
        wx.EVT_KILL_FOCUS(self.xoffEntry, self.OnKillFocus)
        gsizer.Add(self.xoffEntry)

        gsizer.Add(wx.StaticText(self, -1, "Alignment:"), 0,
                   wx.ALIGN_CENTER_VERTICAL)
        self.alignCombo = wx.ComboBox(self, -1, style=wx.CB_READONLY)

        for it in [("Left", util.ALIGN_LEFT), ("Center", util.ALIGN_CENTER),
                   ("Right", util.ALIGN_RIGHT)]:
            self.alignCombo.Append(it[0], it[1])

        gsizer.Add(self.alignCombo)
        wx.EVT_COMBOBOX(self, self.alignCombo.GetId(), self.OnMisc)

        hsizerTop.Add(gsizer)

        bsizer = wx.StaticBoxSizer(wx.StaticBox(self, -1, "Style"),
                                   wx.HORIZONTAL)

        vsizer2 = wx.BoxSizer(wx.VERTICAL)

        # wxGTK adds way more space by default than wxMSW between the
        # items, have to adjust for that
        pad = 0
        if misc.isWindows:
            pad = 5

        self.addCheckBox("Bold", self, vsizer2, pad)
        self.addCheckBox("Italic", self, vsizer2, pad)
        self.addCheckBox("Underlined", self, vsizer2, pad)

        bsizer.Add(vsizer2)

        hsizerTop.Add(bsizer, 0, wx.LEFT, 40)

        vsizer.Add(hsizerTop, 0, wx.TOP, 20)

        hsizer = wx.BoxSizer(wx.HORIZONTAL)

        hsizer.Add((1, 1), 1)

        previewBtn = gutil.createStockButton(self, "Preview")
        hsizer.Add(previewBtn)

        applyBtn = gutil.createStockButton(self, "Apply")
        hsizer.Add(applyBtn, 0, wx.LEFT, 10)

        cancelBtn = gutil.createStockButton(self, "Cancel")
        hsizer.Add(cancelBtn, 0, wx.LEFT, 10)

        okBtn = gutil.createStockButton(self, "OK")
        hsizer.Add(okBtn, 0, wx.LEFT, 10)

        vsizer.Add(hsizer, 0, wx.EXPAND | wx.TOP, 20)

        util.finishWindow(self, vsizer)

        wx.EVT_BUTTON(self, previewBtn.GetId(), self.OnPreview)
        wx.EVT_BUTTON(self, applyBtn.GetId(), self.OnApply)
        wx.EVT_BUTTON(self, cancelBtn.GetId(), self.OnCancel)
        wx.EVT_BUTTON(self, okBtn.GetId(), self.OnOK)

        wx.EVT_LISTBOX(self, self.stringsLb.GetId(), self.OnStringsLb)

        # list of widgets that are specific to editing the selected string
        self.widList = [
            self.textEntry, self.xoffEntry, self.alignCombo, self.lineEntry,
            self.boldCb, self.italicCb, self.underlinedCb
        ]

        self.updateGui()

        self.textEntry.SetFocus()
예제 #25
0
 def __init__(self, FileName):
     wx.Dialog.__init__(self, None, title="Importing a spreadsheet file",\
             size=(600,380))
     self.FileName = FileName
     self.excel = ['.xls','.xlsx']
     self.loo   = ['.ods']
     extension = os.path.splitext(self.FileName.fileName)[1]
     if extension.lower() in self.excel:
         self.ftype = "excel"
     elif extension.lower() in self.loo:
         self.ftype = "libre"
     else:
         self.ftype = None
     if not self.ftype:
         self.CancelButton(None)
     help_text = "Salstat can load files from Excel and LibreOffice/OpenOffice. "
     t1 = wx.StaticText(self, -1, label=help_text, pos=(20,10))
     t1.Wrap(545)
     t2 = wx.StaticText(self,-1,label="Import from row:",pos=(20,50))
     self.headerRow = wx.CheckBox(self, 760, " Header on first row", \
             pos=(210,50))
     self.dataRow = wx.SpinCtrl(self,766,min=1,max=100, initial=1, \
             pos=(140,49),size=(50,-1))
     self.dataRow.SetValue(1)
     self.buttonImport = wx.Button(self,763,"Import", \
             pos=(500,310),size=(70,-1))
     self.buttonImport.SetDefault()
     self.buttonCancel = wx.Button(self,764,"Cancel", \
             pos=(405,310),size=(70,-1))
     self.worksheets = wx.aui.AuiNotebook(self, -1, pos=(20,90), \
             size=(560,210),style=wx.NB_TOP|wx.aui.AUI_NB_WINDOWLIST_BUTTON)
     self.MaxRows = 100
     self.MaxCols = 40
     self.gridFont = wx.Font(10, wx.MODERN, wx.NORMAL, wx.NORMAL)
     if self.ftype == "excel":
         self.workbook = xlrd.open_workbook(self.FileName.fileName)
         sheets = self.workbook.sheets()
     elif self.ftype == "libre":
         self.workbook = ezodf.opendoc(self.FileName.fileName)
         sheets = self.workbook.sheets
     self.grids = []
     for idx, sheet in enumerate(sheets):
         self.grids.append(Grid(self.worksheets, -1))
         self.grids[idx].HideRowLabels()
         self.grids[idx].SetColLabelSize(16)
         self.grids[idx].SetRowLabelSize(40)
         self.grids[idx].SetDefaultColSize(60)
         self.grids[idx].CreateGrid(self.MaxRows,self.MaxCols)
         for i in range(self.MaxCols):
             self.grids[idx].SetColLabelValue(i, " ")
         for i in range(self.MaxRows):
             self.grids[idx].SetRowSize(i,16)
         self.grids[idx].SetDefaultCellFont(self.gridFont)
         self.worksheets.AddPage(self.grids[idx],sheet.name)
         if self.ftype == 'excel':
             nrows = sheet.nrows
             ncols = sheet.ncols
         elif self.ftype == 'libre':
             nrows = sheet.nrows()
             ncols = sheet.ncols()
         self.grids[idx].ResizeGrid(ncols, nrows)
         for idx_row in range(nrows):
             for idx_col in range(ncols):
                 if self.ftype == 'excel':
                     val = unicode(sheet.cell(idx_row, idx_col).value)
                 elif self.ftype == 'libre':
                     val = unicode(sheet[idx_row, idx_col].value)
                 self.grids[idx].SetCellValue(idx_row, idx_col, val)
     # It seems odd but it seems better for all events to be routed to the same method
     wx.EVT_CHECKBOX(self, 760, self.AdjustGrid)
     wx.EVT_SPINCTRL(self, 766, self.AdjustGrid)
     wx.EVT_BUTTON(self, 764, self.CancelButton)
     wx.EVT_BUTTON(self, 763, self.ImportButton)