📄 logconf.py
字号:
self.focus_set() def hideControls(self): if self.listvisible: self.popup.withdraw() global _popup _popup = None self.listvisible = 0 if self.edititem: self.ph.setPropValue(self.editprop.name, self.editor.get()) self.itemconfig(self.valitems[self.editrow], text=self.editprop.getValueText()) self.delete(self.edititem) self.edititem = None if self.btnitem: self.delete(self.btnitem) self.btnitem = None def onClick(self, event): row = event.y / self.rowheight self.hideControls() if row < len(self.pnames): wid = int(self.cget('width')) hei = self.rowheight prop = self.props[row] if not self.ph.isReadonly(self.pnames[row]): self.editrow = row self.editprop = prop choices = prop.getChoices() if choices != None: val = prop.getValue() self.list.setContents(choices, val) self.listy = row * hei + self.rowheight self.btnitem = self.create_window(wid - hei, row * hei, width=hei, height=hei, window=self.button, anchor='nw', tags='button') else: self.editor.delete(0, END) self.editor.insert(0, prop.getValueText()) self.editor.select_range(0, END) self.edititem = self.create_window(self.namewidth + 1, row * hei, width=wid - self.namewidth, height = hei + 1, window=self.editor, anchor='nw', tags='editor') self.editor.focus_set() def onConfigure(self, event): self.hideControls() self.drawLines(event.width, event.height) self.configure(width=event.width, height=event.height) def onEdit(self): wid = int(self.cget('width')) #self.listitem = self.create_window(self.namewidth + 1, self.listy, width=wid - self.namewidth - 1, height = self.rowheight * 3, window=self.list, anchor='nw', tags='list') w = wid - self.namewidth - 1 h = self.rowheight * 5 x = self.winfo_rootx() + self.namewidth + 1 y = self.winfo_rooty() + self.listy s = "%dx%d+%d+%d" % (w, h, x, y) self.popup.deiconify() self.popup.lift() self.popup.focus_set() self.listvisible = 1 self.list.focus_set() #For some reason with 1.5.2 (Windows), making the geometry call #immediately following the assignment to s doesn't work. So we #do it here self.popup.geometry(s) global _popup _popup = self.popup def onListChange(self, val): self.ph.setPropValue(self.editprop.name, val) self.itemconfig(self.valitems[self.editrow], text=self.editprop.getValueText()) if type(val) != types.ListType: self.hideControls()class PropertyEditor(Frame): def __init__(self, parent, *args, **kwargs): Frame.__init__(self, parent) self.parent = parent nw = kwargs.get("namewidth", 120) rh = kwargs.get("rowheight", 16) wid = kwargs.get("width", 300) hei = kwargs.get("height", 60) self.header = PropertyHeader(self, namewidth=nw, rowheight=rh, height=14, highlightthickness=0) self.body = PropertyCanvas(self, namewidth=nw, rowheight=rh, width=wid, height=hei, background='white', highlightthickness=0) self.header.pack(side=TOP, fill=X) self.body.pack(side=BOTTOM, fill=BOTH, expand=1) def setPropertyHolder(self, ph): self.body.setPropertyHolder(ph)class ADUPanel(Frame): def __init__(self, parent): Frame.__init__(self, parent) self.parent = parent self.add = Button(self, text="New", command=parent.onAdd) self.add.pack(side=LEFT) #, fill=X, expand=1) self.rmv = Button(self, text="Delete", command=parent.onDelete) self.rmv.pack(side=LEFT) #, fill=X, expand=1) #self.upd = Button(self, text="Update", command=parent.onUpdate) #self.upd.pack(side=RIGHT, fill=X, expand=1)class ScrollList(Frame): def __init__(self, parent, *args, **kwargs): Frame.__init__(self, parent) self.parent = parent self.sb = Scrollbar(self, orient=VERTICAL) kwargs["yscrollcommand"] = self.sb.set self.list = apply(Listbox, (self,) + args, kwargs) self.sb.config(command=self.list.yview) self.sb.pack(side=RIGHT, fill=Y) self.list.pack(side=LEFT, fill=BOTH,expand=1)def sortqn(log1, log2): qn1 = log1.getQualifiedName() qn2 = log2.getQualifiedName() if qn1 == "(root)": rv = -1 elif qn2 == "(root)": rv = 1 else: rv = cmp(qn1, qn2) return rvdef sortn(obj1, obj2): return cmp(obj1.getPropValue("name"), obj2.getPropValue("name"))class LoggerPanel(Frame): def __init__(self, parent): Frame.__init__(self, parent) self.parent = parent label = Label(self, text="Loggers:") label.grid(row=0, column=0, sticky='w') self.slist = ScrollList(self, height=15, background='white') self.slist.list.bind('<ButtonRelease-1>', self.onListChange) self.slist.grid(row=1, column=0, sticky="nsew") self.adu = ADUPanel(self) self.adu.grid(row=2, column=0, sticky="we") label = Label(self, text="Properties of selected logger:") label.grid(row=3, column=0, sticky='w') self.pe = PropertyEditor(self, height=120, borderwidth=1) self.pe.grid(row=4, column=0, sticky='nsew') self.columnconfigure(0, weight=1) self.rowconfigure(1, weight=3) self.rowconfigure(4, weight=1) def setConfig(self, config): self.config = config #populate list of loggers llist = config.getLoggers() llist.sort(sortqn) self.slist.list.delete(0, END) self.pe.body.clear() self.names = [] for logger in llist: self.names.append(logger.getPropValue("name")) self.slist.list.insert(END, logger.getQualifiedName()) def onAdd(self): items = self.slist.list.curselection() if not len(items): showerror("No Parent Selected", "You haven't selected a parent logger.") else: idx = int(items[0]) parent = self.config.getLogger(self.names[idx]) log = self.config.getLogger(None) log.onChannelChanged = self.onChannelChanged log.setPropValue("parent", parent.getPropValue("name")) self.names.insert(1 + idx, log.getPropValue("name")) self.slist.list.insert(1 + idx, log.getQualifiedName()) self.slist.list.select_clear(0, END) self.slist.list.select_set(1 + idx) self.pe.setPropertyHolder(log) def onDelete(self): items = self.slist.list.curselection() if not len(items): showerror("No Item Selected", "You haven't selected anything to delete.") else: idx = int(items[0]) name = self.slist.list.get(idx) if name == "(root)": showerror("Root Item Selected", "You cannot delete the root logger.") else: resp = askyesno("Logger Deletion", "Are you sure you want to delete logger '%s'?" % name) if resp: #self.config.removeLogger(self.names[idx]) log = self.config.getLogger(self.names[idx]) log.deleted = 1 self.slist.list.delete(idx) del self.names[idx] self.pe.body.clear() def onChannelChanged(self, nm, chname): i = self.names.index(nm) sel = i while i < len(self.names): log = self.config.getLogger(self.names[i]) self.slist.list.delete(i) self.slist.list.insert(i, log.getQualifiedName()) i = i + 1 self.slist.list.select_clear(0, END) self.slist.list.select_set(sel) def onListChange(self, event): self.pe.body.hideControls() items = self.slist.list.curselection() idx = int(items[0]) name = self.names[idx] log = self.config.getLogger(name) self.pe.setPropertyHolder(log)class HandlerPanel(Frame): def __init__(self, parent): Frame.__init__(self, parent) self.parent = parent label = Label(self, text="Handlers:") label.grid(row=0, column=0, sticky='w') self.slist = ScrollList(self, height=6, background='white') self.slist.list.bind('<ButtonRelease-1>', self.onListChange) self.slist.grid(row=1, column=0, sticky="nsew") self.adu = ADUPanel(self) self.adu.grid(row=2, column=0, sticky="we") label = Label(self, text="Properties of selected handler:") label.grid(row=3, column=0, sticky='w') self.pe = PropertyEditor(self, height=90, borderwidth=1) self.pe.grid(row=4, column=0, sticky='nsew') self.columnconfigure(0, weight=1) self.rowconfigure(1, weight=1) self.rowconfigure(4, weight=1) def setConfig(self, config): self.config = config #populate list of handlers hlist = config.getHandlers() hlist.sort(sortn) self.slist.list.delete(0, END) self.pe.body.clear() for hand in hlist: hand.onPropListChanged = self.onPropListChanged self.slist.list.insert(END, hand.getPropValue("name")) def onAdd(self): self.pe.body.hideControls() hand = self.config.getHandler(None) self.slist.list.insert(END, hand.getProp("name").getValueText()) self.slist.list.select_clear(0, END) self.slist.list.select_set(END) hand.onPropListChanged = self.onPropListChanged self.pe.setPropertyHolder(hand) def onDelete(self): items = self.slist.list.curselection() if not len(items): showerror("No Item Selected", "You haven't selected anything to delete") else: name = self.slist.list.get(int(items[0])) log = self.config.handlerIsUsed(name) if log: showerror("Handler in use", "The handler '%s' is being used by logger '%s'"\ ", so it cannot be deleted." % ( name, log)) else: self.config.removeHandler(name) self.slist.list.delete(items) self.pe.body.clear() def onUpdate(self): print "handler update" def onListChange(self, event): self.pe.body.hideControls() items = self.slist.list.curselection() name = self.slist.list.get(int(items[0])) hand = self.config.getHandler(name) self.pe.setPropertyHolder(hand) def onPropListChanged(self, newhand): newhand.onPropListChanged = self.onPropListChanged self.pe.setPropertyHolder(newhand)class FormatterPanel(Frame): def __init__(self, parent): Frame.__init__(self, parent) self.parent = parent label = Label(self, text="Formatters:") label.grid(row=0, column=0, sticky='w') self.slist = ScrollList(self, height=4, background='white') self.slist.list.bind('<ButtonRelease-1>', self.onListChange) self.slist.grid(row=1, column=0, sticky="nsew") self.adu = ADUPanel(self) self.adu.grid(row=2, column=0, sticky="ew") label = Label(self, text="Properties of selected formatter:") label.grid(row=3, column=0, sticky='w') self.pe = PropertyEditor(self, height=60, borderwidth=1) self.pe.grid(row=4, column=0, sticky='nsew') self.columnconfigure(0, weight=1) self.rowconfigure(1, weight=1) self.rowconfigure(4, weight=1) def setConfig(self, config): self.config = config #populate list of formatters flist = config.getFormatters() flist.sort(sortn) self.slist.list.delete(0, END) self.pe.body.clear() for form in flist: self.slist.list.insert(END, form.getPropValue("name")) def onAdd(self): self.pe.body.hideControls() fmt = self.config.getFormatter(None) self.slist.list.insert(END, fmt.getProp("name").getValueText()) self.slist.list.select_clear(0, END) i = self.slist.list.size() self.slist.list.select_set(i - 1) self.pe.setPropertyHolder(fmt) def onDelete(self): self.pe.body.hideControls() items = self.slist.list.curselection() if not len(items): showerror("No Item Selected", "You haven't selected anything to delete") else: name = self.slist.list.get(int(items[0])) h = self.config.formatterIsUsed(name) if h: showerror("Formatter in use", "The formatter '%s' is being used by handler '%s'"\ ", so it cannot be deleted." % ( name, h)) else: self.config.removeFormatter(name) self.slist.list.delete(items) self.pe.body.clear() def onUpdate(self): self.pe.body.hideControls() def onListChange(self, event): self.pe.body.hideControls() items = self.slist.list.curselection() name = self.slist.list.get(int(items[0])) fmt = self.config.getFormatter(name) self.pe.setPropertyHolder(fmt)class FilterPanel(Frame): def __init__(self, parent): Frame.__init__(self, parent) self.parent = parent
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -