def saveWindowPos(self, event): pos=self.parent.GetScreenPosition() size=self.parent.GetSizeTuple() lst=[] for i in range(self.list_ctrl.GetColumnCount()): lst.append(self.list_ctrl.GetColumnWidth(i)) cfgfl=CfgFile() cfgfl.setWindowSize(pos, size) cfgfl.setColWidth(lst)
def setupDialog(self, event): dlg=SetupDialog(self) dlg.setData(( self.server_ip, self.server_socket, self.load_row_count, self.alias_dict, self.bg_color, self.oc_color, self.fg_color)) if dlg.ShowModal()!=wx.ID_OK: dlg.Destroy() return data=dlg.getData() dlg.Destroy() server_ip, server_socket, load_row_count, alias_dict, bg_color, oc_color, fg_color=data reload_list_ctrl=restart_client=oc_color_changed=False if server_ip!=self.server_ip or server_socket!=self.server_socket: restart_client=True # IP-Adresse oder Socket vom Server geändert if load_row_count!=self.load_row_count or self.aliasDictCompare(alias_dict, self.alias_dict)!=True: reload_list_ctrl=True # Inhaltsverändernde Parameter für self.list_ctrl wurden geändert if oc_color!=self.oc_color: oc_color_changed=True # die Hintergrundfarbe für offene Verbindungen wurde geändert oc_color_merk=self.oc_color self.server_ip, self.server_socket, self.load_row_count, self.alias_dict, self.bg_color, self.oc_color, self.fg_color=data cfgfl=CfgFile() cfgfl.setSetupData(data) self.list_ctrl.SetBackgroundColour(self.bg_color) self.list_ctrl.SetTextColour(self.fg_color) self.alias_dict_fixed=self.fixAreaCode(self.alias_dict) if restart_client==True: wx.MessageBox("Der CallMonClient muss neu gestartet werden!", "Info", wx.OK|wx.ICON_INFORMATION) sys.exit() if reload_list_ctrl==True: self.fillListCtrl() # geänderte Aliasse oder Satzanzahl im ListCtrl korrigieren else: # wenn nicht ohnehin neu geladen wird if oc_color_changed==True: # und die Hintergrundfarbe für offene Verbindungen geändert wurde for i in range(self.list_ctrl.GetItemCount()): # über alle Sätze im list_ctrl if self.list_ctrl.GetItemBackgroundColour(i).GetAsString(wx.C2S_HTML_SYNTAX)==oc_color_merk: # Satz steht auf der alten Hintergrundfarbe für offene Verbindungen item=self.list_ctrl.GetItem(i) item.SetBackgroundColour(self.oc_color) # Farbe neu setzen self.list_ctrl.SetItem(item)
def __init__(self, parent, setup_data): wx.Panel.__init__(self, parent, wx.ID_ANY, style=wx.WANTS_CHARS) self.parent=parent self.server_ip, self.server_socket, self.load_row_count, self.alias_dict, self.bg_color, self.oc_color, self.fg_color=setup_data self.msgtyp=MsgTyp() self.crypto=MiniCryptoV2() self.notification_queue=Queue() self.list_ctrl=MyListCtrl(self, style=wx.LC_REPORT|wx.BORDER_SUNKEN|wx.LC_SORT_ASCENDING) self.list_ctrl.SetBackgroundColour(self.bg_color) self.list_ctrl.SetTextColour(self.fg_color) r=wx.LIST_FORMAT_RIGHT l=wx.LIST_FORMAT_LEFT self.colHdrList =["Datum/Zeit", "Richtung", "NS#", "Nebenstelle Name", "Nummer (int)", "Nummer (ext)", "Name (ext)", "Dauer"] self.colPosList =[l, l, r, l, l, r, l, r ] self.colLenList =[150, 70, 40, 150, 100, 100, 120, 70 ] cfgfl=CfgFile() colWidthList=cfgfl.getColWidth(self.colLenList) for i in range(len(self.colHdrList)): # Spalten anlegen self.list_ctrl.InsertColumn(i, self.colHdrList[i], self.colPosList[i], width=colWidthList[i]) listmix.ColumnSorterMixin.__init__(self, len(self.colHdrList)) self.list_ctrl.Bind(wx.EVT_LIST_COL_CLICK, self.OnColClick) # sortieren self.list_ctrl.Bind(wx.EVT_LIST_ITEM_RIGHT_CLICK, self.OnRightClick) # Kontextmenü self.list_ctrl.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnDblClick) # Doppelklick self.list_ctrl.Bind(wx.EVT_LIST_ITEM_FOCUSED, self.OnFocused) # links-Klick ("key-down") self.list_ctrl.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnSelected) # links-Klick (quasi "key-up") self.deselected=None sizer=wx.BoxSizer(wx.VERTICAL) sizer.Add(self.list_ctrl, 1, wx.EXPAND) self.SetSizer(sizer) sizer.Fit(self) self.list_ctrl.SetFocus() self.errMsg=u"Der CallMonServer auf %s:%d "%(self.server_ip, self.server_socket) self.OWN_AREA_CODE="" self.connectToCallMonitorServerLost=False if self.server_ip=="": self.setupDialog(0) return else: self.connectToCallMonitorServer() if self.connectToCallMonitorServerLost==True: wx.MessageBox(self.errMsg+"antwortet nicht korrekt!", "Fehler", wx.OK|wx.ICON_ERROR) return self.popup=PopupControl(self) self.OWN_AREA_CODE=self.get_OWN_AREA_CODE() self.alias_dict_fixed=self.fixAreaCode(self.alias_dict) self.itemDataMap={} self.fillListCtrl() self.Bind(wx.EVT_TIMER, self.on_timer) # self.notification_queue pollen self.timer=wx.Timer(self) self.updateIntervall=100 # 10 mal pro Sekunde sollte langen self.timer.Start(self.updateIntervall)
# mit einer 0 beginnen und fügt der Liste in diesem Fall die # Nummer nochmal mit vorangestellter Vorwahl zu. # # Beginnt die Telefonnummer in "alias_dict" mit der eigenen # Vorwahl, wird die Nummer nochmal ohne Vorwahl zugefügt. def fixAreaCode(self, alias_dict): if self.OWN_AREA_CODE=="": return(alias_dict) alias_dict_fixed={} for nr, nam in alias_dict.items(): alias_dict_fixed.update({nr:nam}) if nr[:1] in ("1", "2", "3", "4", "5", "6", "7", "8", "9"): # wenn Nummer nicht mit 0 beginnt (also ohne Vorwahl)... alias_dict_fixed.update({self.OWN_AREA_CODE+nr:nam}) # ...dann Nummer nochmal mit Vorwahl einfügen if nr[:len(self.OWN_AREA_CODE)]==self.OWN_AREA_CODE: # wenn Nummer mit der eigenen Vorwahl beginnt... alias_dict_fixed.update({nr[len(self.OWN_AREA_CODE):]:nam}) # ...dann Nummer nochmal ohne Vorwahl einfügen return(alias_dict_fixed) if __name__=='__main__': app=wx.App() cfgfl=CfgFile() pos, size=cfgfl.getWindowSize() data=cfgfl.getSetupData() del cfgfl frame=CallMonClientFrame(pos, size, data) frame.Show() app.MainLoop()