#coding=utf-8 import wx from Backend import Database,Customer class ID: """ An object that returns unique identifiers """ _ids = {} _n_ids = 1 @staticmethod def get_id(s_key): if ID._ids.__contains__(s_key): return ID._ids[s_key] else: ID._ids[s_key] = ID._n_ids ID._n_ids += 1 return ID._ids[s_key] class MainFrame(wx.Frame): """ The main frame of the GUI """ def __init__(self, control): wx.Frame.__init__(self, None) self.control = control self.SetTitle("Wx Test") self.CreateStatusBar() self.MakeMenu() self.splitter = wx.SplitterWindow(self, -1, style=wx.SP_BORDER) self.splitter.SetMinimumPaneSize(50) tree_panel = wx.Panel(self.splitter, -1) tree_box = wx.BoxSizer(wx.VERTICAL) sort_choices = ["Sort by first name", "Sort by last name"] sort_combo = wx.ComboBox(tree_panel,ID.get_id("sort_combo"), choices=sort_choices, style=wx.CB_SORT|wx.CB_READONLY, value=sort_choices[0]) #, (0,0), (-1,-1), choices=sort_choices, style=wx.CB_READONLY|wx.CB_SORT) tree_box.Add(sort_combo, 0, wx.EXPAND) self.tree = wx.ListCtrl(tree_panel, -1, style=wx.LC_REPORT) #wx.TreeCtrl(tree_panel, -1, wx.DefaultPosition, (-1,-1), wx.TR_HIDE_ROOT | wx.TR_NO_BUTTONS | wx.TR_NO_LINES) tree_box.Add(self.tree, 1, wx.EXPAND) self.tree.InsertColumn(0, "First Name") self.tree.InsertColumn(1, "Last Name") self.tree.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnSelChanged, id=ID.get_id("id_string")) #tree.SetColumnWidth(0, 70) #tree.SetColumnWidth(1, 70) #root = tree.AddRoot("Customers") tree_panel.SetSizer(tree_box) self.notebook = wx.Notebook(self.splitter, ID.get_id("notebook")) #,style=wx.NB_TOP) self.splitter.SplitVertically(tree_panel, self.notebook) self.Refresh() #def MakeEntryLabel(self def MakeCustomerPage(self, customer): """ Displays a customer's information in the GUI """ scroll = wx.ScrolledWindow(self.notebook) panel = wx.Panel(scroll, -1) return scroll def OnNewCustomer(self, event): c = Customer(" ", " ") #uninitialized customer person = self.control.findCustomer( (" ", " ") ) if len(person) > 0: dlg = wx.MessageDialog(self, "The customer already exists.", "Error", wx.OK|wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy() else: self.control.store(c) self.Refresh() def OnDelCustomer(self, event): ## c = #customer selected, to be filled in ## person = self.control.findCustomer( (c["first_name"], c["last_name"]) ) ## self.control.deleteCustomer(c) ## self.Refresh() pass def OnNewCar(self, customer): pass def OnDelCar(self, customer, licensePlate): pass def Refresh(self): self.tree.DeleteAllItems() ppl = self.control.findAllCustomers() for i in range(len(ppl)): person = ppl[i] self.tree.InsertStringItem(i, person[0]) self.tree.SetStringItem(i, 1, person[1]) def MakeMenu(self): filemenu = wx.Menu() new_submenu = wx.Menu() new_submenu.Append(ID.get_id("new_customer"), "Customer", "") new_submenu.Append(ID.get_id("new_car"), "Vehicle", "") filemenu.AppendMenu(ID.get_id("new"), "New ...", new_submenu) del_submenu = wx.Menu() del_submenu.Append(ID.get_id("del_customer"), "Customer", "") del_submenu.Append(ID.get_id("del_car"), "Vehicle", "") filemenu.AppendMenu(ID.get_id("del"), "Delete ...", new_submenu) filemenu.Append(ID.get_id("quit"), "&Quit\tCtrl-Q", "Quit") editmenu = wx.Menu() editmenu.Append(ID.get_id("undo"), "&Undo\tCtrl+Z", "Undo") editmenu.Append(ID.get_id("redo"), "&Redo\tCtrl+Shift+Z", "Redo") editmenu.AppendSeparator() editmenu.Append(ID.get_id("cut"), "&Cut\tCtrl+X", "Cut") editmenu.Append(ID.get_id("copy"), "&Copy\tCtrl+C", "Copy") editmenu.Append(ID.get_id("paste"), "&Paste\tCtrl+V", "Paste") menubar = wx.MenuBar() menubar.Append(filemenu, "&File") menubar.Append(editmenu, "&Edit") self.SetMenuBar(menubar) self.Bind(wx.EVT_MENU, self.OnQuit, id=ID.get_id("quit")) self.Bind(wx.EVT_MENU, self.OnNewCustomer, id=ID.get_id("new_customer")) self.Bind(wx.EVT_MENU, self.OnDelCustomer, id=ID.get_id("del_customer")) self.Bind(wx.EVT_MENU, self.OnNewCar, id=ID.get_id("new_customer")) self.Bind(wx.EVT_MENU, self.OnDelCar, id=ID.get_id("del_customer")) def OnSelChanged(self, event): item = event.GetItem() print item self.display.SetLabel(self.tree.GetItemText(item)) def OnQuit(self, event): self.Close() class Application(wx.App): def __init__(self): wx.App.__init__(self, 0) ## self.db = Database("records.db") ## self.frame = MainFrame(self) def OnInit(self): self.db = Database("records.db") self.frame = MainFrame(self) self.frame.Show(True) self.SetTopWindow(self.frame) return True #the following are Controller fuctions def addCar(self, c, car): return self.db.addCar(c, car) def delCar(self, c, plate): return self.db.delCar(c, plate) def store(self, c): return self.db.store(c) def deleteCustomer(self, c): return self.db.delete(c) def findCar(self, plate): return self.db.findCar(plate) def findCustomer(self, predTuple): #predlist in from (firstName, lastName) preds = (("first_name", predTuple[0]),("last_name", predTuple[1])) return self.db.find(preds) def findAllCustomers(self): return self.db.find( () ) if __name__ == "__main__": Application().MainLoop()