예제 #1
0
 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)
예제 #2
0
  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)
예제 #3
0
  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)
예제 #4
0
  # 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()