/Users/maurits/Documents/studie/afstuderen/biosphere/python/biosphere/gui.py

Go to the documentation of this file.
00001 import wx
00002 import wx.lib.scrolledpanel as scrolled
00003 import io
00004 import webbrowser
00005 import time
00006 
00007 from types import *
00008 from gui_complex import *
00009 from gui_modules import *
00010 from gui_servers import *
00011 
00012 
00013 
00014 class MainWindow(wx.Frame):
00015     def __init__(self, parent, title):
00016         wx.Frame.__init__(self, parent, -1, title)
00017         
00018         # variables related to Bio-SPHERE
00019         self.connconn = io.BiosphereConnector()
00020         self.defsdefs = None
00021         
00022         self.pmpm = PrefManager()
00023         
00024         # the main screen is divided in multiple tabs:
00025         notebook = wx.Notebook(self, -1, style=wx.BK_TOP)
00026         self.simple_request_panelsimple_request_panel = SimpleRequestPanel(notebook, self.connconn)
00027         notebook.AddPage(self.simple_request_panelsimple_request_panel, 'Atomic Request')
00028         self.complex_request_panelcomplex_request_panel = ComplexRequestPanel(notebook, self.connconn)
00029         notebook.AddPage(self.complex_request_panelcomplex_request_panel, 'Complex Request')
00030         self.module_panelmodule_panel = ModulePanel(notebook, self.connconn)
00031         notebook.AddPage(self.module_panelmodule_panel, 'Modules')
00032         self.server_panelserver_panel = ServerPanel(notebook)
00033         notebook.AddPage(self.server_panelserver_panel, 'Servers')
00034         
00035         # create menu bar and set event handlers for them:
00036         self.MakeMenuMakeMenu()
00037 
00038         # misc. initializations:
00039         self.CreateStatusBar()
00040         self.SetStandardStatusTextSetStandardStatusText()
00041         self.CenterOnScreen()
00042         self.SetMinSize((640,480))
00043         self.Maximize()
00044         self.Show()
00045     
00046     def SetStandardStatusText(self):
00047         s = 'Not connected'
00048         if 'last-opened' in self.pmpm.prefs:
00049             s = s + ', last opened: %s' % self.pmpm.prefs['last-opened']
00050         self.SetStatusText(s)
00051     
00052     def MakeMenu(self):
00053         menubar = wx.MenuBar()
00054         
00055         # file menu:
00056         fmenu = wx.Menu()
00057         self.connectmenuconnectmenu = fmenu.Append(-1, 'Connect\tCtrl+K', 'Connect to a Bio-SPHERE daemon.')
00058         self.Bind(wx.EVT_MENU, self.OnConnectOnConnect, self.connectmenuconnectmenu)
00059         
00060         self.disconnectmenudisconnectmenu = fmenu.Append(-1, 'Disconnect\tCtrl+Shift+K', 'Disconnect from the Bio-SPHERE daemon')
00061         self.Bind(wx.EVT_MENU, self.OnDisconnectOnDisconnect, self.disconnectmenudisconnectmenu)
00062         self.disconnectmenudisconnectmenu.Enable(False)
00063         
00064         self.refreshmenurefreshmenu = fmenu.Append(-1, 'Refresh\tF5')
00065         self.Bind(wx.EVT_MENU, self.OnRefreshOnRefresh, self.refreshmenurefreshmenu)
00066         self.refreshmenurefreshmenu.Enable(False)
00067         
00068         fmenu.AppendSeparator()
00069         m = fmenu.Append(-1, 'Open\tCtrl+O')
00070         m = fmenu.Append(-1, 'Save\tCtrl+S')
00071         m.Enable(False)
00072         self.Bind(wx.EVT_MENU, self.OnSaveOnSave, m)
00073         fmenu.AppendSeparator()
00074         m = fmenu.Append(-1, 'Quit\tCtrl+Q')
00075         self.Bind(wx.EVT_MENU, self.OnExitOnExit, m)
00076         if "__WXMAC__" in wx.PlatformInfo:
00077             wx.App.SetMacExitMenuItemId(m.GetId())
00078         menubar.Append(fmenu, '&File')
00079         
00080         # edit menu
00081         emenu = wx.Menu()
00082         m = emenu.Append(-1, 'Cut\tCtrl+X')
00083         m.Enable(False)
00084         m = emenu.Append(-1, 'Copy\tCtrl+C')
00085         m.Enable(False)
00086         m = emenu.Append(-1, 'Paste\tCtrl+V')
00087         m.Enable(False)
00088         emenu.AppendSeparator()
00089         m = emenu.Append(-1, 'Preferences\tCtrl+,')
00090         self.Bind(wx.EVT_MENU, self.OnPreferencesOnPreferences, m)
00091         if "__WXMAC__" in wx.PlatformInfo:
00092             wx.App.SetMacPreferencesMenuItemId(m.GetId())
00093         menubar.Append(emenu, '&Edit')
00094         
00095         # help menu.
00096         hmenu = wx.Menu()
00097         m = hmenu.Append(-1, '&About Bio-SPHERE','Information about Bio-SPHERE')
00098         self.Bind(wx.EVT_MENU, self.OnAboutOnAbout, m)
00099         if "__WXMAC__" in wx.PlatformInfo:
00100             wx.App.SetMacAboutMenuItemId(m.GetId())
00101         m = hmenu.Append(-1, 'Help', 'Help about this program')
00102         m = hmenu.Append(-1, 'Website', 'Go to the website of Bio-SPHERE')
00103         self.Bind(wx.EVT_MENU, self.OnWebsiteOnWebsite, m)
00104         menubar.Append(hmenu,'&Help')
00105         
00106         self.SetMenuBar(menubar)
00107     
00108     def OnExit(self, event):
00109         self.pmpm.prefs['last-opened'] = time.strftime('%a, %d %b %Y %H:%M:%S')
00110         self.pmpm.save()
00111         self.Close()
00112     
00113     def OnRefresh(self, event):
00114         self.defsdefs = self.connconn.GetServices()
00115         self.simple_request_panelsimple_request_panel.SetDefs(self.defsdefs)
00116         self.complex_request_panelcomplex_request_panel.SetDefs(self.defsdefs)
00117         if not self.defsdefs:
00118             self.SetStatusText('Could not retrieve service definitions')
00119             self.defsdefs = None
00120             self.DisableDisconnectMenuDisableDisconnectMenu()
00121     
00122     def OnAbout(self, event):
00123         pass
00124     
00125     def OnSave(self, event):
00126         pass
00127     
00128     def OnConnect(self, event):
00129         dlg = ConnectDialog(self, self.pm)
00130         v = dlg.ShowModal()
00131         if v == wx.ID_OK:
00132             host = dlg.host.GetValue()
00133             port = dlg.port.GetValue()
00134             if host and port:
00135                 self.conn.SetAddress('%s:%s' % (host, port))
00136                 self.defs = self.conn.GetServices()
00137                 self.SetStatusText('Connected to: %s:%s' % (host, port))
00138                 self.DisableConnectMenu()
00139                 self.simple_request_panel.SetDefs(self.defs)
00140                 self.complex_request_panel.SetDefs(self.defs)
00141                 
00142         dlg.Destroy()
00143     
00144     def DisableConnectMenu(self):
00145         self.disconnectmenudisconnectmenu.Enable(True)
00146         self.refreshmenurefreshmenu.Enable(True)
00147         self.connectmenuconnectmenu.Enable(False)
00148     
00149     def DisableDisconnectMenu(self):
00150         self.disconnectmenudisconnectmenu.Enable(False)
00151         self.refreshmenurefreshmenu.Enable(False)
00152         self.connectmenuconnectmenu.Enable(True)
00153     
00154     def OnDisconnect(self, event):
00155         self.SetStandardStatusTextSetStandardStatusText()
00156         self.defsdefs = None
00157         self.simple_request_panelsimple_request_panel.SetDefs(None)
00158         self.complex_request_panelcomplex_request_panel.SetDefs(None)
00159         self.DisableDisconnectMenuDisableDisconnectMenu()
00160     
00161     def OnPreferences(self, event):
00162         dlg = PreferencesDialog(self, self.pmpm)
00163         v = dlg.ShowModal()
00164         dlg.Destroy()
00165     
00166     def OnWebsite(self, event):
00167         webbrowser.open('http://biosphere.sf.net')
00168         
00169 
00170 
00171 class SimpleRequestPanel(scrolled.ScrolledPanel):
00172     """The main window that has different tabs for the different
00173     subtasks.
00174     """
00175     
00176     def __init__(self, parent, connector):
00177         scrolled.ScrolledPanel.__init__(self, parent)
00178         
00179         self.connectorconnector = connector
00180         self.InitLayoutInitLayout()
00181         self.ClearDefinitionsClearDefinitions()
00182         
00183         self.Bind(wx.EVT_SIZE, self.OnResizeOnResize, self)
00184     
00185     def OnResize(self, event):
00186         self.mainboxmainbox.Layout()
00187         self.Refresh()
00188     
00189     def InitLayout(self):
00190         self.mainboxmainbox = wx.BoxSizer(wx.VERTICAL)
00191         
00192         firstrow = wx.BoxSizer(wx.HORIZONTAL)
00193         firstrow.Add(self.InitServicesPartInitServicesPart(), 0,
00194                      wx.EXPAND|wx.ALIGN_TOP|wx.ALL, 5)
00195         firstrow.Add(self.InitRequestsPartInitRequestsPart(), 1,
00196                      wx.EXPAND|wx.ALIGN_TOP|wx.ALL, 5)
00197         
00198         secondrow = wx.BoxSizer(wx.HORIZONTAL)
00199         secondrow.Add(self.InitResponsePartInitResponsePart(), 1,
00200                       wx.EXPAND|wx.ALL, 5)
00201         
00202         self.mainboxmainbox.Add(firstrow, 0,
00203                     wx.EXPAND|wx.ALIGN_TOP)
00204         self.mainboxmainbox.Add(secondrow, 1,
00205                     wx.EXPAND|wx.ALIGN_BOTTOM)
00206         self.SetSizer(self.mainboxmainbox)
00207         self.SetAutoLayout(1)
00208         self.SetupScrolling()
00209     
00210     def InitServicesPart(self):
00211         """Initialize the static box with the service selector
00212         inside."""
00213         box = wx.StaticBox(self, -1, 'Service Selector')
00214         boxsizer = wx.StaticBoxSizer(box, wx.HORIZONTAL)
00215                 
00216         sizer = wx.BoxSizer(wx.VERTICAL)
00217         sizer.Add(wx.StaticText(self, -1, "Services:"), 0, wx.ALL, 5)
00218         self.servicesservices = wx.ListBox(self, -1, (-1, -1), (180, 350),
00219                                    [], wx.LB_SINGLE)
00220         sizer.Add(self.servicesservices, 0, wx.EXPAND|wx.ALL, 5)
00221         boxsizer.Add(sizer, 0, wx.EXPAND)
00222         self.Bind(wx.EVT_LISTBOX, self.OnServiceSelectedOnServiceSelected, self.servicesservices)
00223         
00224         sizer = wx.BoxSizer(wx.VERTICAL)
00225         sizer.Add(wx.StaticText(self, -1, "Ports:"), 0, wx.ALL, 5)
00226         self.portsports = wx.ListBox(self, -1, (-1, -1), (180, 350),
00227                                 [], wx.LB_SINGLE)
00228         sizer.Add(self.portsports, 0, wx.EXPAND|wx.ALL, 5)
00229         boxsizer.Add(sizer, 0, wx.EXPAND)
00230         self.Bind(wx.EVT_LISTBOX, self.OnPortSelectedOnPortSelected, self.portsports)
00231         
00232         sizer = wx.BoxSizer(wx.VERTICAL)
00233         sizer.Add(wx.StaticText(self, -1, "Operations:"), 0, wx.ALL, 5)
00234         self.operationsoperations = wx.ListBox(self, -1, (-1, -1), (180, 350),
00235                                    [], wx.LB_SINGLE)
00236         sizer.Add(self.operationsoperations, 0, wx.EXPAND|wx.ALL, 5)
00237         boxsizer.Add(sizer, 0, wx.EXPAND)
00238         self.Bind(wx.EVT_LISTBOX, self.OnOperationSelectedOnOperationSelected, self.operationsoperations)
00239         
00240         return boxsizer
00241     
00242     def InitRequestsPart(self):
00243         box = wx.StaticBox(self, -1, 'Request Maker')
00244         boxsizer = wx.StaticBoxSizer(box, wx.VERTICAL)
00245         
00246         self.requestpanelrequestpanel = RequestPanel(self, self.connectorconnector)
00247         self.requestpanelrequestpanel.SetMinSize((200, 100))
00248         boxsizer.Add(self.requestpanelrequestpanel, 1, wx.ALIGN_LEFT|wx.EXPAND)
00249         
00250         return boxsizer
00251     
00252     def InitResponsePart(self):
00253         box = wx.StaticBox(self, -1, 'Response Viewer')
00254         boxsizer = wx.StaticBoxSizer(box, wx.VERTICAL)
00255         
00256         self.responsepanelresponsepanel = ResponsePanel(self)
00257         self.SetMinSize((200, 100))
00258         boxsizer.Add(self.responsepanelresponsepanel, 1, wx.ALIGN_LEFT|wx.EXPAND)
00259         
00260         panel = scrolled
00261         
00262         return boxsizer
00263     
00264     def SetDefs(self, defs):
00265         self.ClearDefinitionsClearDefinitions()
00266         self.ClearServiceListsClearServiceLists()
00267         self.requestpanelrequestpanel.MakeEmpty()
00268         self.responsepanelresponsepanel.MakeEmpty()
00269         self.defsdefs = defs
00270         
00271         if self.defsdefs:
00272             svclist = []
00273             for svc in self.defsdefs.services:
00274                 svclist.append(svc.name)
00275             self.servicesservices.Set(svclist)
00276         self.Refresh()
00277 
00278     def OnServiceSelected(self, event):
00279         self.portsports.Clear()
00280         self.operationsoperations.Clear()
00281         self.requestpanelrequestpanel.MakeEmpty()
00282         self.responsepanelresponsepanel.MakeEmpty()
00283         if self.defsdefs and event.IsSelection():
00284             sel = event.GetString()
00285             for s in self.defsdefs.services:
00286                 if s.name == sel:
00287                     self.selected_serviceselected_service = s
00288                     self.portsports.Set([pt.name for pt in s.ports])
00289                     break
00290     
00291     def OnPortSelected(self, event):
00292         self.operationsoperations.Clear()
00293         self.requestpanelrequestpanel.MakeEmpty()
00294         self.responsepanelresponsepanel.MakeEmpty()
00295         if self.selected_serviceselected_service and event.IsSelection():
00296             sel = event.GetString()
00297             for p in self.selected_serviceselected_service.ports:
00298                 if p.name == sel:
00299                     self.selected_portselected_port = p
00300                     self.operationsoperations.Set([op.name for op in p.type.operations])
00301                     break
00302             
00303     
00304     def OnOperationSelected(self, event):
00305         self.requestpanelrequestpanel.MakeEmpty()
00306         self.responsepanelresponsepanel.MakeEmpty()
00307         if self.selected_portselected_port and event.IsSelection():
00308             sel = event.GetString()
00309             for op in self.selected_portselected_port.type.operations:
00310                 if op.name == sel:
00311                     self.selected_operationselected_operation = op
00312                     self.requestpanelrequestpanel.MakeRequest(self.selected_serviceselected_service,
00313                                                   self.selected_portselected_port,
00314                                                   self.selected_operationselected_operation)
00315 
00316     def ClearDefinitions(self):
00317         self.defsdefs = None
00318         self.selected_serviceselected_service = None
00319         self.selected_portselected_port = None
00320         self.selected_operationselected_operation = None
00321         self.ClearServiceListsClearServiceLists()
00322     
00323     def ClearServiceLists(self):
00324         self.servicesservices.Clear()
00325         self.operationsoperations.Clear()
00326         self.portsports.Clear()
00327 
00328 
00329 class RequestPanel(scrolled.ScrolledPanel):
00330     """This panel enables the user to make request to the biosphere
00331     daemon
00332     """
00333     
00334     def __init__(self, parent, connector):
00335         scrolled.ScrolledPanel.__init__(self, parent, -1)
00336         self.connectorconnector = connector
00337         self.serviceservice = None
00338         self.portport = None
00339         self.operationoperation = None
00340         
00341         self.sizersizer = wx.BoxSizer(wx.VERTICAL)
00342         self.MakeEmptyMakeEmpty()
00343         self.SetSizer(self.sizersizer)
00344         self.SetAutoLayout(1)
00345         self.SetupScrolling(scroll_x=False)
00346     
00347     def MakeEmpty(self):
00348         """Empty all the fields managed by the sizer and set
00349         a static text.
00350         """
00351         
00352         self.fieldsfields = None
00353         self.fielddatafielddata = None
00354         self.serviceservice = None
00355         self.portport = None
00356         self.operationoperation = None
00357         
00358         self.sizersizer.Clear(True)
00359         self.sizersizer.Add(wx.StaticText(self, -1, "Select service, port and operation first"),
00360                   0, wx.ALIGN_CENTER|wx.ALIGN_TOP|wx.ALL, 5)
00361         self.sizersizer.Layout()
00362         self.Refresh()
00363     
00364     def MakeRequest(self, service, port, operation):
00365         """Create the fields for the request."""
00366         
00367         self.serviceservice = service
00368         self.portport = port
00369         self.operationoperation = operation
00370         
00371         self.sizersizer.Clear(True)
00372         if len(operation.input.parts) > 0:
00373             self.sizersizer.Add(wx.StaticText(self, -1, "Please input message parts:"),
00374                            0, wx.ALIGN_CENTER|wx.ALIGN_TOP|wx.ALL, 5)
00375         else:
00376             self.sizersizer.Add(wx.StaticText(self, -1, "Press submit to make the request:"),
00377                            0, wx.ALIGN_CENTER|wx.ALIGN_TOP|wx.ALL, 5)
00378         
00379         # Make input fields for parts:
00380         self.fieldsfields = []
00381         self.fielddatafielddata = []
00382         for part in operation.input.parts:
00383             f = self.MakeInputFieldMakeInputField(part.name, part.type.name)
00384             self.sizersizer.Add(f[0], 0, wx.GROW|wx.ALIGN_LEFT|wx.ALL, 5)
00385             self.fieldsfields.append(f[1])
00386             self.fielddatafielddata.append((part.name, part.type.name))
00387         
00388         btn = wx.Button(self, 2001, 'Submit Request')
00389         btn.SetDefault()
00390         self.Bind(wx.EVT_BUTTON, self.OnRequestSubmitOnRequestSubmit, id=2001)
00391         self.sizersizer.Add(btn, 0, wx.ALIGN_BOTTOM|wx.ALIGN_RIGHT, 5)
00392         
00393         self.sizersizer.Layout()
00394     
00395     def MakeInputField(self, fieldname, fieldtypename):
00396         box = wx.BoxSizer(wx.HORIZONTAL)
00397         label = wx.StaticText(self, -1, '%s (%s)' % (fieldname, fieldtypename))
00398         box.Add(label, 0, wx.ALIGN_TOP|wx.ALL, 5)
00399         
00400         if fieldtypename == 'bs_string':
00401             text = wx.TextCtrl(self, -1, '', size=(100,50),
00402                                style=wx.TE_MULTILINE|wx.TE_PROCESS_ENTER)
00403         else:
00404             text = wx.TextCtrl(self, -1, '', size=(100,-1))
00405         
00406         box.Add(text, 1, wx.ALIGN_CENTRE|wx.ALL, 5)
00407         return (box, text)
00408     
00409     def GatherFields(self):
00410         """Make a list of all the inputted info."""
00411         result = []
00412         for i in range(0, len(self.fielddatafielddata)):
00413             result.append((self.fielddatafielddata[i][0],
00414                            self.fielddatafielddata[i][1],
00415                            self.fieldsfields[i].GetValue()))
00416         return result
00417     
00418     def OnRequestSubmit(self, event):
00419         """Create the request and send it to the daemon."""
00420         
00421         self.GetParent().responsepanel.MakeEmpty()
00422         
00423         input = bs_message_instance(self.operationoperation.input.name)
00424         for f in self.GatherFieldsGatherFields():
00425             type = bs_data_type(f[1])
00426             part = bs_part_instance(f[0], type, f[2])
00427             input.parts.append(part)
00428         request = bs_service_request(self.serviceservice.name,
00429                                     self.portport.name,
00430                                     self.operationoperation.name,
00431                                     input)
00432         response = self.connectorconnector.RequestService(request)
00433         if response == None:
00434             if self.connectorconnector.error != None:
00435                 print "%d %s" % self.connectorconnector.error
00436             else:
00437                 print 'there was no error reported by the connector.'
00438         else:
00439             self.GetParent().responsepanel.DisplayResponse(response)
00440 
00441 
00442 class ResponsePanel(scrolled.ScrolledPanel):
00443     def __init__(self, parent):
00444         scrolled.ScrolledPanel.__init__(self, parent, -1)
00445 
00446         self.responseresponse = None
00447 
00448         self.sizersizer = wx.BoxSizer(wx.VERTICAL)
00449         self.MakeEmptyMakeEmpty()
00450         self.SetSizer(self.sizersizer)
00451         self.SetAutoLayout(1)
00452         self.SetupScrolling(scroll_x=False)
00453         
00454         self.Bind(wx.EVT_SIZE, self.OnResizeOnResize, self)
00455     
00456     def OnResize(self, event):
00457         self.DisplayResponseDisplayResponse()
00458     
00459     def MakeEmpty(self):
00460         self.sizersizer.Clear(True)
00461         self.sizersizer.Add(wx.StaticText(self, -1, 'Service response will displayed here.'),
00462                   0, wx.ALIGN_LEFT|wx.ALIGN_TOP|wx.ALL, 5)
00463         self.sizersizer.Layout()
00464     
00465     def DisplayResponse(self, response=None):
00466         self.sizersizer.Clear(True)
00467         
00468         if self.responseresponse:
00469             response = self.responseresponse
00470         elif response:
00471             self.responseresponse = response
00472         else:
00473             text = wx.StaticText(self, -1, 'Service response will displayed here.')
00474             text.SetForegroundColour('Black')
00475             self.sizersizer.Add(text, 0, wx.ALL, 5)
00476             self.sizersizer.Layout()
00477             return
00478         
00479         header = 'Response of %s:%s:%s service request:' % (response.service, response.port, response.operation)
00480         txt = wx.StaticText(self, -1, header)
00481         self.sizersizer.Add(txt, 0, wx.ALL, 5)
00482         
00483         if response.output != None:
00484             for part in response.output.parts:
00485                 self.PrintPartPrintPart(part)
00486         elif response.fault != None:
00487             for part in response.fault.parts:
00488                 self.PrintPartPrintPart(part, 'Red')
00489         else:
00490             text = wx.StaticText(self, -1, 'Service response is empty')
00491             text.SetForegroundColour('Red')
00492             self.sizersizer.Add(text, 1, wx.ALL, 5)
00493         
00494         self.sizersizer.Layout()
00495     
00496     def PrintPart(self, part, color='Black'):
00497         text = '%s (%s): %s' % (part.name, part.type.name, part.data)
00498         lbl = wx.StaticText(self, -1, text)
00499         lbl.SetForegroundColour(color)
00500         lbl.Wrap(self.GetSizeTuple()[0] - 20)
00501         self.sizersizer.Add(lbl, 0, wx.EXPAND|wx.ALL, 5)
00502 
00503 
00504 class PrefManager:
00505     def __init__(self):
00506         self.prefsprefs = {}
00507         
00508         try:
00509             file = open('prefs')
00510         except IOError:
00511             self.set_defaultset_default()
00512             self.savesave()
00513             return
00514         
00515         for line in file:
00516             l = line.split()
00517             if len(l) > 1:
00518                 self.prefsprefs[l[0]] = ' '.join(l[1:])
00519         file.close()
00520     
00521     def set_default(self):
00522         self.prefsprefs = {'default-host': 'localhost',
00523                       'default-port': '2915'}
00524                 
00525     def save(self):
00526         file = open('prefs', 'w')
00527         for key in self.prefsprefs.keys():
00528             file.write('%s %s\n' % (key, self.prefsprefs[key]))
00529         file.close()
00530 
00531 
00532 class PreferencesDialog(wx.Dialog):
00533     def __init__(self, parent, pm):
00534         wx.Dialog.__init__(self, parent, -1, 'Preferences')
00535         
00536         self.pmpm = pm
00537         sizer = wx.GridSizer(4, 2)
00538         
00539         sizer.Add(wx.StaticText(self, -1, 'Default host:'), 0, wx.EXPAND|wx.ALL, 5)
00540         self.hosthost = wx.TextCtrl(self, -1, self.get_valget_val('default-host'), size=(150, -1))
00541         sizer.Add(self.hosthost, 1, wx.ALL, 5)
00542         
00543         sizer.Add(wx.StaticText(self, -1, 'Default port:'), 0, wx.EXPAND|wx.ALL, 5)
00544         self.portport = wx.TextCtrl(self, -1, self.get_valget_val('default-port'), size=(150, -1))
00545         sizer.Add(self.portport, 1, wx.ALL, 5)
00546         
00547         sizer.Add((20, -1), 1)
00548         button = wx.Button(self, -1, 'Save')
00549         button.SetDefault()
00550         sizer.Add(button, 0, wx.ALIGN_LEFT|wx.ALL, 5)
00551         self.Bind(wx.EVT_BUTTON, self.OnSaveOnSave, button)
00552         
00553         self.SetSizer(sizer)
00554         sizer.Fit(self)
00555         self.CenterOnScreen()
00556         
00557     def OnSave(self, event):
00558         self.pmpm.prefs['default-host'] = self.hosthost.GetValue()
00559         self.pmpm.prefs['default-port'] = self.portport.GetValue()
00560         self.pmpm.save()
00561         self.Close()
00562     
00563     def get_val(self, str):
00564         if str in self.pmpm.prefs:
00565             return self.pmpm.prefs[str]
00566         else:
00567             return ''
00568 
00569 
00570 class ConnectDialog(wx.Dialog):
00571     def __init__(self, parent, pm):
00572         wx.Dialog.__init__(self, parent, -1, 'Connect to Server')
00573         
00574         self.pmpm = pm
00575         sizer = wx.GridSizer(4, 2)
00576         
00577         sizer.Add(wx.StaticText(self, -1, 'Host:'), 0, wx.EXPAND|wx.ALL, 5)
00578         self.hosthost = wx.TextCtrl(self, -1, self.get_valget_val('default-host'), size=(150, -1))
00579         sizer.Add(self.hosthost, 1, wx.ALL, 5)
00580         
00581         sizer.Add(wx.StaticText(self, -1, 'Port:'), 0, wx.EXPAND|wx.ALL, 5)
00582         self.portport = wx.TextCtrl(self, -1, self.get_valget_val('default-port'), size=(150, -1))
00583         sizer.Add(self.portport, 1, wx.ALL, 5)
00584         
00585         button = wx.Button(self, wx.ID_CANCEL, 'Cancel')
00586         sizer.Add(button, 0, wx.ALIGN_RIGHT|wx.ALL, 5)
00587         button = wx.Button(self, wx.ID_OK, 'Connect')
00588         button.SetDefault()
00589         sizer.Add(button, 0, wx.ALIGN_LEFT|wx.ALL, 5)
00590         
00591         self.SetSizer(sizer)
00592         sizer.Fit(self)
00593         self.CenterOnScreen()
00594     
00595     def get_val(self, str):
00596         # retrieve the named preference or return empty string:
00597         if str in self.pmpm.prefs:
00598             return self.pmpm.prefs[str]
00599         else:
00600             return ''
00601 

Generated on Tue Jul 17 09:50:53 2007 for Bio-SPHERE by  doxygen 1.5.1