def __init__(self, parent, frame, log): wxPanel.__init__(self, parent, -1) self.society = None self.hierarchy = None self.URL = None self.log = log self.frame = frame self.printData = wxPrintData() self.printData.SetPaperId(wxPAPER_LETTER) self.heatRange = {50:"PURPLE", 100:"BLUE", 125:"SEA GREEN", 150:"ORANGE", 1000:"RED" } #-------- self.box = wxBoxSizer(wxVERTICAL) self.canvas = AgentCanvas(self, frame, log) self.box.Add(self.canvas, 1, wxGROW) subbox = wxBoxSizer(wxHORIZONTAL) # ------ self.viewSocietyButton = wxButton(self, 11, "View Agents") EVT_BUTTON(self, 11, self.OnViewSociety) self.viewSocietyButton.SetBackgroundColour("BLUE") self.viewSocietyButton.SetForegroundColour("YELLOW") #~ self.viewSocietyButton.SetDefault() subbox.Add(self.viewSocietyButton, flag=wxALIGN_CENTER_VERTICAL | wxBOTTOM, border=20) # ------ EVT_AGENT_TASK_COUNT(self, self.AgentTaskCountUpdate) # ------ # ------ self.ZoomPlusButton = wxButton(self, 12, "+") EVT_BUTTON(self, 12, self.OnZoomPlus) self.ZoomPlusButton.SetBackgroundColour(wxGREEN) self.ZoomPlusButton.SetForegroundColour(wxWHITE) subbox.Add(self.ZoomPlusButton, flag=wxALIGN_CENTER_VERTICAL | wxBOTTOM, border=20) # ------ self.ZoomMinusButton = wxButton(self, 13, "-") EVT_BUTTON(self, 13, self.OnZoomMinus) self.ZoomMinusButton.SetBackgroundColour(wxRED) self.ZoomMinusButton.SetForegroundColour(wxWHITE) subbox.Add(self.ZoomMinusButton, flag=wxALIGN_CENTER_VERTICAL | wxBOTTOM, border=20) # ------ #~ self.viewServletButton = wxButton(self, 15, "Servlet Options") #~ EVT_BUTTON(self, 15, self.viewServletOptions) #~ self.viewServletButton.SetBackgroundColour(wxBLACK) #~ self.viewServletButton.SetForegroundColour(wxWHITE) #~ self.viewSocietyButton.SetDefault() #~ subbox.Add(self.viewServletButton, flag=wxALIGN_CENTER_VERTICAL | wxBOTTOM, border=20) # ------ self.testServletButton = wxButton(self, 16, "Agent Probes") EVT_BUTTON(self, 16, self.AgentTaskCountUpdate) self.testServletButton.SetBackgroundColour(wxCYAN) self.testServletButton.SetForegroundColour(wxBLACK) #~ self.viewSocietyButton.SetDefault() subbox.Add(self.testServletButton, flag=wxALIGN_CENTER_VERTICAL | wxBOTTOM, border=20) #~ EVT_SOCIETYCONTROLLER_TEST(self, self.EventUpdate) self.box.Add(subbox, 0, wxGROW) self.SetAutoLayout(True) self.SetSizer(self.box) self.bg_bmp = images.getGridBGBitmap() EVT_ERASE_BACKGROUND(self, self.OnEraseBackground)
def __init__(self, parent, frame, log): wx.Panel.__init__(self, parent, -1) self.society = None self.hierarchy = None self.URL = None self.log = log self.frame = frame self.printData = wx.PrintData() self.printData.SetPaperId(wx.PAPER_LETTER) self.heatRange = {50:"PURPLE", 100:"BLUE", 125:"SEA GREEN", 150:"ORANGE", 1000:"RED" } self.societyRunning = False #-------- self.box = wx.BoxSizer(wx.VERTICAL) self.canvas = AgentCanvas(self, frame, log) self.box.Add(self.canvas, 1, wx.GROW) subbox = wx.BoxSizer(wx.HORIZONTAL) # ------ self.ctrlSocietyButtonID = GLOBAL_WIDGET_ID_BASE+1 self.ctrlSocietyButton = wx.Button(self, self.ctrlSocietyButtonID , "Start") wx.EVT_BUTTON(self, self.ctrlSocietyButtonID, self.OnStartSociety) self.ctrlSocietyButton.SetBackgroundColour("BLACK") self.ctrlSocietyButton.SetForegroundColour("WHITE") #~ self.viewSocietyButton.SetDefault() subbox.Add(self.ctrlSocietyButton , flag=wx.ALIGN_CENTER_VERTICAL | wx.BOTTOM, border=20) # ------ self.viewSocietyButton = wx.Button(self, GLOBAL_WIDGET_ID_BASE+2, "View Agents") wx.EVT_BUTTON(self, GLOBAL_WIDGET_ID_BASE+2, self.OnViewSociety) self.viewSocietyButton.SetBackgroundColour("BLUE") self.viewSocietyButton.SetForegroundColour("YELLOW") #~ self.viewSocietyButton.SetDefault() subbox.Add(self.viewSocietyButton, flag=wx.ALIGN_CENTER_VERTICAL | wx.BOTTOM, border=20) # ------ self.Bind(EVT_AGENT_TASK_COUNT, self.AgentTaskCountUpdate) # ------ self.ZoomPlusButton = wx.Button(self, GLOBAL_WIDGET_ID_BASE+3, "+") wx.EVT_BUTTON(self, GLOBAL_WIDGET_ID_BASE+3, self.OnZoomPlus) self.ZoomPlusButton.SetBackgroundColour(wx.GREEN) self.ZoomPlusButton.SetForegroundColour(wx.WHITE) subbox.Add(self.ZoomPlusButton, flag=wx.ALIGN_CENTER_VERTICAL | wx.BOTTOM, border=20) # ------ self.ZoomMinusButton = wx.Button(self, GLOBAL_WIDGET_ID_BASE+4, "-") wx.EVT_BUTTON(self, GLOBAL_WIDGET_ID_BASE+4, self.OnZoomMinus) self.ZoomMinusButton.SetBackgroundColour(wx.RED) self.ZoomMinusButton.SetForegroundColour(wx.WHITE) subbox.Add(self.ZoomMinusButton, flag=wx.ALIGN_CENTER_VERTICAL | wx.BOTTOM, border=20) # ------ #~ self.viewServletButton = wxButton(self, 15, "Servlet Options") #~ wx.EVT_BUTTON(self, 15, self.viewServletOptions) #~ self.viewServletButton.SetBackgroundColour(wxBLACK) #~ self.viewServletButton.SetForegroundColour(wxWHITE) #~ self.viewSocietyButton.SetDefault() #~ subbox.Add(self.viewServletButton, flag=wxALIGN_CENTER_VERTICAL | wxBOTTOM, border=20) # ------ self.testServletButton = wx.Button(self, GLOBAL_WIDGET_ID_BASE+5, "Agent Probes") wx.EVT_BUTTON(self, GLOBAL_WIDGET_ID_BASE+5, self.AgentTaskCountUpdate) self.currTaskCount = None self.oldTaskCount = None self.testServletButton.SetBackgroundColour(wx.CYAN) self.testServletButton.SetForegroundColour(wx.BLACK) #~ self.viewSocietyButton.SetDefault() subbox.Add(self.testServletButton, flag=wx.ALIGN_CENTER_VERTICAL | wx.BOTTOM, border=20) #~ wx.EVT_SOCIETYCONTROLLER_TEST(self, self.EventUpdate) self.box.Add(subbox, 0, wx.GROW) self.SetAutoLayout(True) self.SetSizer(self.box) self.bg_bmp = images.getGridBGBitmap() wx.EVT_ERASE_BACKGROUND(self, self.OnEraseBackground) wx.EVT_WINDOW_DESTROY(self, self.OnDestroy) ogl.OGLInitialize()
class AgentViewer(wxPanel): def __init__(self, parent, frame, log): wxPanel.__init__(self, parent, -1) self.society = None self.hierarchy = None self.URL = None self.log = log self.frame = frame self.printData = wxPrintData() self.printData.SetPaperId(wxPAPER_LETTER) self.heatRange = {50:"PURPLE", 100:"BLUE", 125:"SEA GREEN", 150:"ORANGE", 1000:"RED" } #-------- self.box = wxBoxSizer(wxVERTICAL) self.canvas = AgentCanvas(self, frame, log) self.box.Add(self.canvas, 1, wxGROW) subbox = wxBoxSizer(wxHORIZONTAL) # ------ self.viewSocietyButton = wxButton(self, 11, "View Agents") EVT_BUTTON(self, 11, self.OnViewSociety) self.viewSocietyButton.SetBackgroundColour("BLUE") self.viewSocietyButton.SetForegroundColour("YELLOW") #~ self.viewSocietyButton.SetDefault() subbox.Add(self.viewSocietyButton, flag=wxALIGN_CENTER_VERTICAL | wxBOTTOM, border=20) # ------ EVT_AGENT_TASK_COUNT(self, self.AgentTaskCountUpdate) # ------ # ------ self.ZoomPlusButton = wxButton(self, 12, "+") EVT_BUTTON(self, 12, self.OnZoomPlus) self.ZoomPlusButton.SetBackgroundColour(wxGREEN) self.ZoomPlusButton.SetForegroundColour(wxWHITE) subbox.Add(self.ZoomPlusButton, flag=wxALIGN_CENTER_VERTICAL | wxBOTTOM, border=20) # ------ self.ZoomMinusButton = wxButton(self, 13, "-") EVT_BUTTON(self, 13, self.OnZoomMinus) self.ZoomMinusButton.SetBackgroundColour(wxRED) self.ZoomMinusButton.SetForegroundColour(wxWHITE) subbox.Add(self.ZoomMinusButton, flag=wxALIGN_CENTER_VERTICAL | wxBOTTOM, border=20) # ------ #~ self.viewServletButton = wxButton(self, 15, "Servlet Options") #~ EVT_BUTTON(self, 15, self.viewServletOptions) #~ self.viewServletButton.SetBackgroundColour(wxBLACK) #~ self.viewServletButton.SetForegroundColour(wxWHITE) #~ self.viewSocietyButton.SetDefault() #~ subbox.Add(self.viewServletButton, flag=wxALIGN_CENTER_VERTICAL | wxBOTTOM, border=20) # ------ self.testServletButton = wxButton(self, 16, "Agent Probes") EVT_BUTTON(self, 16, self.AgentTaskCountUpdate) self.testServletButton.SetBackgroundColour(wxCYAN) self.testServletButton.SetForegroundColour(wxBLACK) #~ self.viewSocietyButton.SetDefault() subbox.Add(self.testServletButton, flag=wxALIGN_CENTER_VERTICAL | wxBOTTOM, border=20) #~ EVT_SOCIETYCONTROLLER_TEST(self, self.EventUpdate) self.box.Add(subbox, 0, wxGROW) self.SetAutoLayout(True) self.SetSizer(self.box) self.bg_bmp = images.getGridBGBitmap() EVT_ERASE_BACKGROUND(self, self.OnEraseBackground) def OnEraseBackground(self, evt): pass def AgentTaskCountUpdate(self, evt): print >> sys.stdout, "AgentTaskCountUpdate" if self.societyReader is not None: print >> sys.stdout, "..." uniqueObjects = self.societyReader.readUniqueObjects(self.HOST, self.PORT) info = InformationPanel (140, 300, self.canvas, information=uniqueObjects) self.canvas.addShape(info, 100, 100, wxBLACK_PEN, wxBrush("LIGHT STEEL BLUE", wxSOLID), ' unique Objects', "Yellow" ) dc = wxClientDC(self.canvas) self.canvas.PrepareDC(dc) self.canvas.Redraw(dc) def OnZoomPlus(self, evt): if self.canvas.getSocietyStatus() == "active": print "OnZoomPlus" currentLevel = z.getLevel() + 1 z.setLevel(currentLevel) self.canvas.OrganizeAgents(boxWidth=z.viewLevelData[currentLevel]["BOXWIDTH"], boxHeight=z.viewLevelData[currentLevel]["BOXHEIGHT"], widthspacing=z.viewLevelData[currentLevel]["WIDTHSPACING"], heightspacing= z.viewLevelData[currentLevel]["HEIGHTSPACING"], fontSize=z.viewLevelData[currentLevel]["FONTSIZE"]) else: self.ErrorWindow() def OnZoomMinus(self, evt): if self.canvas.getSocietyStatus() == "active": print "OnZoomMinus" currentLevel = z.getLevel() - 1 z.setLevel(currentLevel) self.canvas.OrganizeAgents(boxWidth=z.viewLevelData[currentLevel]["BOXWIDTH"], boxHeight=z.viewLevelData[currentLevel]["BOXHEIGHT"], widthspacing=z.viewLevelData[currentLevel]["WIDTHSPACING"], heightspacing= z.viewLevelData[currentLevel]["HEIGHTSPACING"], fontSize=z.viewLevelData[currentLevel]["FONTSIZE"]) else: self.ErrorWindow() def OnViewSociety(self, evt): agentList = [] self.URL = None self.HOST = None self.PORT = None win = ProbeDlg(self,wxNewId(), self.log, "Society Ping", size=wxSize(400, 300),style = wxDEFAULT_DIALOG_STYLE) win.CenterOnScreen() val = win.ShowModal() if val == wxID_OK: self.log.WriteText("URLDlg OK\n") self.log.WriteText(self.URL) print "read...", self.URL, "host==", self.HOST,"port==", self.PORT societyreader = SocietyReader(self.URL) self.societyReader = societyreader print "societyreader:", societyreader agentList = societyreader.readAgents() self.log.WriteText(str(agentList)) self.canvas.CreateSociety(agentList) self.canvas.OrganizeAgents() else: self.log.WriteText("URLDlg Cancel\n") print "Society Viewed" #~ def viewSociety(self, generator_file): """ TODO """ #~ print "creating society from %s" % generator_file ### DEBUG -- remove this! #~ return ULHierarchy(uri='file:'+str(generator_file)) def loadFromURL(self, aURL): file = urllib.urlopen(aURL) #~ self.log.WriteText(aURL+"\n\n") #~ for line in self.file.readlines(): #~ self.log.WriteText(line) society = SocietyFactory(uri='hierarchy.xml').parse() if society is not None: #~ print society self.hierarchy = MilitaryHierarchy(society) self.canvas.CreateSocieties(self.hierarchy) self.canvas.OrganizeAgents() def OnEraseBackground(self, evt): dc = evt.GetDC() if not dc: dc = wxClientDC(self.GetClientWindow()) # tile the background bitmap sz = self.GetClientSize() w = self.bg_bmp.GetWidth() h = self.bg_bmp.GetHeight() x = 0 while x < sz.width: y = 0 while y < sz.height: dc.DrawBitmap(self.bg_bmp, x, y) y = y + h x = x + w #~ def viewSociety(self, generator_file): #~ return ULHierarchy(uri='file:'+str(generator_file)) def loadSociety(self, generator_file): """ This wants to be nicely integrated with the GUI, such that When you select the file, an animation starts (similar to a busy watch cursor) and when the society is complete, an wxEvent is sent to the GUI. see exmaples in other parts of the application. use SocietyFactoryServer instead of SocietyFactory """ m = re.compile('\.', re.IGNORECASE).split(str(generator_file)) baseName = str(m[0]) #~ print "creating society from %s" % baseName ### DEBUG -- remove this! self.log.WriteText("file:" + generator_file) return SocietyFactory("file:" + generator_file).parse() #---------------------------------------------------------------------- def OnCloseSociety(self,evt): if self.canvas.getSocietyStatus() == "active": self.canvas.MySocietyInit() print "Society Closed" else: self.ErrorWindow() #~ pass def viewServletOptions(self, evt): if self.canvas.getSocietyStatus() == "active": win = ServletProperties(self.canvas, -1, "Servlet Properties", size=wxSize(300, 400),style = wxDEFAULT_DIALOG_STYLE) win.CenterOnScreen() val = win.ShowModal() else: self.ErrorWindow() #~ pass def testServletPolling(self, evt): s = ServletDataReceiver("localhost", 8888) thread_id = thread.start_new_thread( s.serve, ()) self.ServletPoller() def ServletPoller(self): agentMap = dict.fromkeys(self.hierarchy.getAgents(), -1) aPeer = xmlrpclib.Server('http://localhost:8888') data = aPeer.initServerMethods(agentMap) limit = 0 for agent in agentMap.iterkeys(): limit += 1 if limit > 500: break tasks = aPeer.getGeneratedData(agent) print "iteration:", limit, agent, tasks evt = AgentTaskCountEvent((agent, tasks)) wxPostEvent(self, evt) def _ServletPoller(self): pass #~ def PlayRedraw(self, name): #~ shape = self.canvas.shapeDict[name] #~ shape.SetBrush(wxBrush(COLOURDB[r.randint(0, len(COLOURDB)) % len(COLOURDB )], wxCROSSDIAG_HATCH)) #~ dc = wxClientDC(self.canvas) #~ self.canvas.PrepareDC(dc) #~ self.canvas.Redraw(dc) def ErrorWindow(self): #~ def __init__(self, parent, ID, title, pos=wxDefaultPosition, size=wxDefaultSize, style=wxDEFAULT_DIALOG_STYLE): win = ServerNotRunning(self.canvas, -1, "Server Inactive", pos=wxDefaultPosition, size=wxSize(500, 100), style = wxDEFAULT_DIALOG_STYLE) #style = wxCAPTION | wxSYSTEM_MENU | wxTHICK_FRAME win.CenterOnScreen() val = win.ShowModal()
class AgentControllerViewer(wx.Panel): def __init__(self, parent, frame, log): wx.Panel.__init__(self, parent, -1) self.society = None self.hierarchy = None self.URL = None self.log = log self.frame = frame self.printData = wx.PrintData() self.printData.SetPaperId(wx.PAPER_LETTER) self.heatRange = {50:"PURPLE", 100:"BLUE", 125:"SEA GREEN", 150:"ORANGE", 1000:"RED" } self.societyRunning = False #-------- self.box = wx.BoxSizer(wx.VERTICAL) self.canvas = AgentCanvas(self, frame, log) self.box.Add(self.canvas, 1, wx.GROW) subbox = wx.BoxSizer(wx.HORIZONTAL) # ------ self.ctrlSocietyButtonID = GLOBAL_WIDGET_ID_BASE+1 self.ctrlSocietyButton = wx.Button(self, self.ctrlSocietyButtonID , "Start") wx.EVT_BUTTON(self, self.ctrlSocietyButtonID, self.OnStartSociety) self.ctrlSocietyButton.SetBackgroundColour("BLACK") self.ctrlSocietyButton.SetForegroundColour("WHITE") #~ self.viewSocietyButton.SetDefault() subbox.Add(self.ctrlSocietyButton , flag=wx.ALIGN_CENTER_VERTICAL | wx.BOTTOM, border=20) # ------ self.viewSocietyButton = wx.Button(self, GLOBAL_WIDGET_ID_BASE+2, "View Agents") wx.EVT_BUTTON(self, GLOBAL_WIDGET_ID_BASE+2, self.OnViewSociety) self.viewSocietyButton.SetBackgroundColour("BLUE") self.viewSocietyButton.SetForegroundColour("YELLOW") #~ self.viewSocietyButton.SetDefault() subbox.Add(self.viewSocietyButton, flag=wx.ALIGN_CENTER_VERTICAL | wx.BOTTOM, border=20) # ------ self.Bind(EVT_AGENT_TASK_COUNT, self.AgentTaskCountUpdate) # ------ self.ZoomPlusButton = wx.Button(self, GLOBAL_WIDGET_ID_BASE+3, "+") wx.EVT_BUTTON(self, GLOBAL_WIDGET_ID_BASE+3, self.OnZoomPlus) self.ZoomPlusButton.SetBackgroundColour(wx.GREEN) self.ZoomPlusButton.SetForegroundColour(wx.WHITE) subbox.Add(self.ZoomPlusButton, flag=wx.ALIGN_CENTER_VERTICAL | wx.BOTTOM, border=20) # ------ self.ZoomMinusButton = wx.Button(self, GLOBAL_WIDGET_ID_BASE+4, "-") wx.EVT_BUTTON(self, GLOBAL_WIDGET_ID_BASE+4, self.OnZoomMinus) self.ZoomMinusButton.SetBackgroundColour(wx.RED) self.ZoomMinusButton.SetForegroundColour(wx.WHITE) subbox.Add(self.ZoomMinusButton, flag=wx.ALIGN_CENTER_VERTICAL | wx.BOTTOM, border=20) # ------ #~ self.viewServletButton = wxButton(self, 15, "Servlet Options") #~ wx.EVT_BUTTON(self, 15, self.viewServletOptions) #~ self.viewServletButton.SetBackgroundColour(wxBLACK) #~ self.viewServletButton.SetForegroundColour(wxWHITE) #~ self.viewSocietyButton.SetDefault() #~ subbox.Add(self.viewServletButton, flag=wxALIGN_CENTER_VERTICAL | wxBOTTOM, border=20) # ------ self.testServletButton = wx.Button(self, GLOBAL_WIDGET_ID_BASE+5, "Agent Probes") wx.EVT_BUTTON(self, GLOBAL_WIDGET_ID_BASE+5, self.AgentTaskCountUpdate) self.currTaskCount = None self.oldTaskCount = None self.testServletButton.SetBackgroundColour(wx.CYAN) self.testServletButton.SetForegroundColour(wx.BLACK) #~ self.viewSocietyButton.SetDefault() subbox.Add(self.testServletButton, flag=wx.ALIGN_CENTER_VERTICAL | wx.BOTTOM, border=20) #~ wx.EVT_SOCIETYCONTROLLER_TEST(self, self.EventUpdate) self.box.Add(subbox, 0, wx.GROW) self.SetAutoLayout(True) self.SetSizer(self.box) self.bg_bmp = images.getGridBGBitmap() wx.EVT_ERASE_BACKGROUND(self, self.OnEraseBackground) wx.EVT_WINDOW_DESTROY(self, self.OnDestroy) ogl.OGLInitialize() def OnEraseBackground(self, evt): pass def AgentTaskCountUpdate(self, evt): # print >> sys.stdout, "AgentTaskCountUpdate" if self.societyReader is not None: self.oldTaskCount = self.currTaskCount self.currTaskCount = self.societyReader.readUniqueObjects(self.HOST, self.PORT) for o in self.currTaskCount.keys(): heat = 0 if self.oldTaskCount is None: heat = self.currTaskCount[o] elif self.oldTaskCount.get(o) is None: heat = self.currTaskCount[o] else: heat = int(self.currTaskCount[o]) - int(self.oldTaskCount[o]) self.computeHeat(o, heat) #~ info = InformationPanel (140, 300, self.canvas, information=uniqueObjects) #~ self.canvas.addShape(info, 100, 100, wxBLACK_PEN, wxBrush("LIGHT STEEL BLUE", wxSOLID), ' unique Objects', "Yellow" ) #~ dc = wxClientDC(self.canvas) #~ self.canvas.PrepareDC(dc) #~ self.canvas.Redraw(dc) else: print >> sys.stdout, "WTF???" def OnZoomPlus(self, evt): if self.canvas.getSocietyStatus() == "active": z.setLevel(z.getLevel() + 1) currentLevel = z.getLevel() self.canvas.OrganizeAgents(boxWidth=z.viewLevelData[currentLevel]["BOXWIDTH"], boxHeight=z.viewLevelData[currentLevel]["BOXHEIGHT"], pixelLevel=z.viewLevelData[currentLevel]["PIXELLEVEL"], fontSize=z.viewLevelData[currentLevel]["FONTSIZE"], theradius=z.viewLevelData[currentLevel]["RADIUS"]) else: self.ErrorWindow() def OnZoomMinus(self, evt): if self.canvas.getSocietyStatus() == "active": z.setLevel(z.getLevel()-1) currentLevel = z.getLevel() self.canvas.OrganizeAgents(boxWidth=z.viewLevelData[currentLevel]["BOXWIDTH"], boxHeight=z.viewLevelData[currentLevel]["BOXHEIGHT"], pixelLevel=z.viewLevelData[currentLevel]["PIXELLEVEL"], fontSize=z.viewLevelData[currentLevel]["FONTSIZE"], theradius=z.viewLevelData[currentLevel]["RADIUS"]) else: self.ErrorWindow() def OnStartSociety(self, evt): """ We are limited to localhost currently!!! """ self.NODE = None self.logfile = None win = CtrlDlg(self,wx.NewId(), self.log, "Start a Society", size=wx.Size(400, 300),style = wx.DEFAULT_DIALOG_STYLE) win.CenterOnScreen() val = win.ShowModal() if val != wx.ID_OK: return print "OK::", self.NODE rtn = self.startNode() if (rtn): self.societyRunning = True self.ctrlSocietyButton.SetBackgroundColour("WHITE") self.ctrlSocietyButton.SetForegroundColour("BLACK") self.ctrlSocietyButton.SetLabel("Stop") self.canvas.setSocietyActive() wx.EVT_BUTTON(self, self.ctrlSocietyButtonID, self.OnStopSociety) def OnStopSociety(self, evt): #~ signal.signal(signal.SIGINT|signal.SIG_DFL, self.spawnPID) if sys.platform[:3] in ('win', 'os2'): print 'must use WMI, Win32.all extensions' self.ctrlSocietyButton.SetBackgroundColour("BLACK") self.ctrlSocietyButton.SetForegroundColour("WHITE") self.ctrlSocietyButton.SetLabel("Start") wx.EVT_BUTTON(self, self.ctrlSocietyButtonID , self.OnStartSociety) def OnViewSociety(self, evt): agentList = [] self.URL = None self.HOST = None self.PORT = None win = ProbeDlg(self,wx.NewId(), self.log, "Society Ping", size=wx.Size(400, 300),style = wx.DEFAULT_DIALOG_STYLE) win.CenterOnScreen() val = win.ShowModal() if val == wx.ID_OK: self.log.WriteText("URLDlg OK\n") self.log.WriteText(self.URL) #~ print "read...", self.URL, "host==", self.HOST,"port==", self.PORT societyreader = SocietyReader(self.URL) self.societyReader = societyreader #~ print "societyreader:", societyreader agentList = societyreader.readAgents() if agentList is None: dlg = wx.MessageDialog(self.frame, "Society not up as yet. Try again in a few seconds", 'Non-fatal Error', wx.OK|wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy() else: self.log.WriteText(str(agentList)) self.canvas.CreateSociety(agentList) self.canvas.OrganizeAgents() else: self.log.WriteText("URLDlg Cancel\n") #~ print "Society Viewed" #~ def viewSociety(self, generator_file): """ TODO """ #~ print "creating society from %s" % generator_file ### DEBUG -- remove this! #~ return ULHierarchy(uri='file:'+str(generator_file)) def startNode(self): try: cip = os.environ['COUGAAR_INSTALL_PATH'] execstring = cip+os.sep+'bin'+os.sep+'cougaar' print "EXEC STRING:", execstring, self.NODE args = None if self.logfile is not None: args = (execstring, self.NODE, "> "+self.logfile) else: args = (execstring, self.NODE) self.spawnPID = os.spawnv(os.P_NOWAIT,execstring, args); #~ print 'spawned...',execstring , ' ID=', self.spawnPID except KeyError: dlg = wx.MessageDialog(self.frame, "set 'COUGAAR_INSTALL_PATH' as an environmental variable", 'Fatal Error', wx.OK|wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy() return False return True def computeHeat(self, agent, value): print "computeHeat:", agent, 'value:',value shape = self.canvas.shapeDict[str(agent)] # turn on the right color #~ color = self.computeColor(value) shape.SetBrush(wx.Brush(self.computeColor(value), wx.SOLID)) dc = wx.ClientDC(self.canvas) self.canvas.PrepareDC(dc) self.canvas.Redraw(dc) def computeColor(self, agentValue): red = green = blue = 0 agentValue = int(agentValue) agentValue = agentValue * 2 if agentValue <= 0: red = green = blue = 40 elif 0 <agentValue < 256: red = 0; green = agentValue; blue = 255 - agentValue elif 256 <= agentValue < 512: red = agentValue - 256; green = 255; blue = 0 elif 512 <= agentValue < 767: red = 255; green = 766 - agentValue; blue = 0 else: red = 255; green = 0; blue = 0 return wx.Colour(red, green, blue) def loadFromURL(self, aURL): file = urllib.urlopen(aURL) #~ self.log.WriteText(aURL+"\n\n") #~ for line in self.file.readlines(): #~ self.log.WriteText(line) society = SocietyFactory(uri='hierarchy.xml').parse() if society is not None: #~ print society self.hierarchy = MilitaryHierarchy(society) self.canvas.CreateSocieties(self.hierarchy) self.canvas.OrganizeAgents() def OnEraseBackground(self, evt): dc = evt.GetDC() if not dc: dc = wx.ClientDC(self.GetClientWindow()) # tile the background bitmap sz = self.GetClientSize() w = self.bg_bmp.GetWidth() h = self.bg_bmp.GetHeight() x = 0 while x < sz.width: y = 0 while y < sz.height: dc.DrawBitmap(self.bg_bmp, x, y) y = y + h x = x + w def OnDestroy(self, evt): # Do some cleanup print "agentController:OnDestroy - Check for running society and give option to terminate" if (self.societyRunning): dlg = wx.MessageDialog(self.frame, "A society is currently running. Would you like AWB to stop it before you exit? " + "If you choose 'No' it will remain running in the background", 'Non-fatal Error', wx.YES_NO|wx.ICON_ERROR) val = dlg.ShowModal() if (val == wx.ID_YES): self.stopSociety() dlg.Destroy() def loadSociety(self, generator_file): """ This wants to be nicely integrated with the GUI, such that When you select the file, an animation starts (similar to a busy watch cursor) and when the society is complete, an wxEvent is sent to the GUI. see exmaples in other parts of the application. use SocietyFactoryServer instead of SocietyFactory """ m = re.compile('\.', re.IGNORECASE).split(str(generator_file)) baseName = str(m[0]) #~ print "creating society from %s" % baseName ### DEBUG -- remove this! self.log.WriteText("file:" + generator_file) return SocietyFactory("file:" + generator_file).parse() def stopSociety(self): if (not self.societyRunning): return print "We still need code to stop a running society!" #---------------------------------------------------------------------- def OnCloseSociety(self,evt): if self.canvas.getSocietyStatus() == "active": self.canvas.MySocietyInit() print "Society Closed" else: self.ErrorWindow() #~ pass def viewServletOptions(self, evt): if self.canvas.getSocietyStatus() == "active": win = ServletProperties(self.canvas, -1, "Servlet Properties", size=wx.Size(300, 400),style = wx.DEFAULT_DIALOG_STYLE) win.CenterOnScreen() val = win.ShowModal() else: self.ErrorWindow() #~ pass def testServletPolling(self, evt): s = ServletDataReceiver("localhost", 8888) thread_id = thread.start_new_thread( s.serve, ()) self.ServletPoller() def ServletPoller(self): agentMap = dict.fromkeys(self.hierarchy.getAgents(), -1) aPeer = xmlrpclib.Server('http://localhost:8888') data = aPeer.initServerMethods(agentMap) limit = 0 for agent in agentMap.iterkeys(): limit += 1 if limit > 500: break tasks = aPeer.getGeneratedData(agent) #~ print "iteration:", limit, agent, tasks evt = AgentTaskCountEvent((agent, tasks)) wx.PostEvent(self, evt) def _ServletPoller(self): pass #~ def PlayRedraw(self, name): #~ shape = self.canvas.shapeDict[name] #~ shape.SetBrush(wxBrush(COLOURDB[r.randint(0, len(COLOURDB)) % len(COLOURDB )], wxCROSSDIAG_HATCH)) #~ dc = wxClientDC(self.canvas) #~ self.canvas.PrepareDC(dc) #~ self.canvas.Redraw(dc) def ErrorWindow(self): #~ def __init__(self, parent, ID, title, pos=wxDefaultPosition, size=wxDefaultSize, style=wxDEFAULT_DIALOG_STYLE): win = ServerNotRunning(self.canvas, -1, "Server Inactive", pos=wx.DefaultPosition, size=wx.Size(500, 100), style = wx.DEFAULT_DIALOG_STYLE) #style = wx.CAPTION | wx.SYSTEM_MENU | wx.THICK_FRAME win.CenterOnScreen() val = win.ShowModal()