def __init__(self,master=None, readonly=True,app=None): PrologFrame.__init__(self, master=master, text="", app=app, readonly=readonly) self.app = app app.pref.register_listener('filter highlights', self.colours_changed) self.colours_changed(app.colours.fil_colour) for fTag in ['dynamic', 'static']: self.text.tag_bind(fTag, "<Motion>", lambda _, fTag=fTag: self.mouse_over_filter_tag(fTag)) self.text.tag_bind(fTag, "<Leave>", lambda _, fTag=fTag: self.mouse_leave_filter_tag(fTag))
def __init__(self, master=None): self.app = master Pmw.NoteBook.__init__(self, self.app.bottom,createcommand=self.create_page) self.spec_page = self.add('Specialised File') self.memo_page = self.add('Memo Table') self.gx_page = self.add('Generating Extension') self.output_page = self.add('Output') self.console_page = self.add('Console') #self.new_terminal_page = self.add('Terminal 1') #spec file self.output_spec = PrologFrame(self.spec_page,"",app=self.app) self.output_spec.pack(side="bottom", fill="both", expand="yes") #memo file self.output_memo = PrologFrame(self.memo_page,"",app=self.app) self.output_memo.pack(side="bottom", fill="both", expand="yes") #gx file self.output_gx = PrologFrame(self.gx_page,"",app=self.app) self.output_gx.pack(side="bottom", fill="both", expand="yes") #output self.output_out = PrologFrame(self.output_page,"",app=self.app) self.output_out.pack(side="bottom", fill="both", expand="yes") #console self.output_console = PrologFrame(self.console_page,"", app=self.app) self.output_console.pack(side="bottom", fill="both", expand="yes") self.pack(side="bottom", fill="both", expand="yes") self.output_spec.text.tag_bind("nametag", "<Motion>", self.mouse_over) self.output_spec.text.tag_bind("nametag", "<Leave>", self.mouse_leave) self.terminal_pages = [] self.terminals = [] self.term_count = 0 self.create_new_terminal()
def __init__(self, master=None, text="", readonly=True, app=None): PrologFrame.__init__(self, master=master, text=text, readonly=readonly, app=app) self.app = app app.pref.register_listener('annotation highlights', self.annotation_colours_changed) self.colours_changed(app.colours.ann_colour) app.pref.register_listener('filter highlights', self.colours_changed) self.colours_changed(app.colours.fil_colour) for fTag in ['dynamic', 'static']: self.text.tag_bind(fTag, "<Motion>", lambda _, fTag=fTag: self.mouse_over_filter_tag(fTag)) self.text.tag_bind(fTag, "<Leave>", lambda _, fTag=fTag: self.mouse_leave_filter_tag(fTag)) self.text.tag_configure("unsafe", background="red") self.text.tag_configure("hide_nf", background="yellow") self.text.tag_configure("errorTag", background="red") self.last_annotation = "" self.annotation_tags = AnnotationColours.annotations self.annotation_colour = self.app.colours.ann_colour self.menu = {} self.annotation_menu = {"unfold":"call", "call":"call", "memo":"call", "rescall":"call", "ucall":"call", "mcall":"call", "unknown":"call", "semicall":"call", "online":"call", "if":"if", "resif":"if", "semif":"if", "logif":"logif", "reslogif":"logif", "findall":"findall", "resfindall":"findall", "resnot":"not", "not":"not", ";":"or", "resdisj":"or", "pp_cll":"pp_cll", "pp_mnf":"pp_mnf", "time_out":"time_out", "mnf":"mnf", "when":"when", "reswhen":"when", "semiwhen":"when", "gxspec":"module", "gx":"module", #"spec":"module", } self.text.bind("<Alt-n>", self.keyb_next_ann) self.text.bind("<Alt-p>", self.keyb_prev_ann) self.commands = [] if (sys.platform == "win32"): Menu_Key = "<Button-3>" else: Menu_Key = "<Button-1>" self.annotation_colours_changed(self.annotation_colour) for tag in self.annotation_tags: self.text.tag_bind(tag, "<Motion>", self.mouse_over_tag) self.text.tag_bind(tag, "<Leave>", self.mouse_leave_tag) self.text.tag_bind(tag, Menu_Key, self.mouse_click_tag) #self.text.tag_bind("hide_nf", Menu_Key, self.hidenf_click) self.text.tag_configure("unknown", background="black", foreground="white") #make call and rescall stand out as requested by mv self.text.tag_configure("call", underline=True) self.text.tag_configure("rescall", underline=True) self.text.tag_configure("unsafe", background="red", foreground="white")
class OutputBook(Pmw.NoteBook): def __init__(self, master=None): self.app = master Pmw.NoteBook.__init__(self, self.app.bottom,createcommand=self.create_page) self.spec_page = self.add('Specialised File') self.memo_page = self.add('Memo Table') self.gx_page = self.add('Generating Extension') self.output_page = self.add('Output') self.console_page = self.add('Console') #self.new_terminal_page = self.add('Terminal 1') #spec file self.output_spec = PrologFrame(self.spec_page,"",app=self.app) self.output_spec.pack(side="bottom", fill="both", expand="yes") #memo file self.output_memo = PrologFrame(self.memo_page,"",app=self.app) self.output_memo.pack(side="bottom", fill="both", expand="yes") #gx file self.output_gx = PrologFrame(self.gx_page,"",app=self.app) self.output_gx.pack(side="bottom", fill="both", expand="yes") #output self.output_out = PrologFrame(self.output_page,"",app=self.app) self.output_out.pack(side="bottom", fill="both", expand="yes") #console self.output_console = PrologFrame(self.console_page,"", app=self.app) self.output_console.pack(side="bottom", fill="both", expand="yes") self.pack(side="bottom", fill="both", expand="yes") self.output_spec.text.tag_bind("nametag", "<Motion>", self.mouse_over) self.output_spec.text.tag_bind("nametag", "<Leave>", self.mouse_leave) self.terminal_pages = [] self.terminals = [] self.term_count = 0 self.create_new_terminal() def create_page(self, pagename): if pagename.startswith("Terminal"): i = self.terminal_pages.index(pagename) page = self.page(self.index(pagename)) self.terminals[i] = TerminalFrame(page, app=self.app, id=pagename) self.terminals[i].pack(side="bottom", fill="both", expand="yes") self.app.update_completions() #self.selectpage(pagename) def get_console_stream(self): pass def write_to_console(self,string): self.output_console.text.config(state="normal") self.output_console.text.insert("end", string) self.output_console.text.config(state="disabled") def set_font(self, font): self.output_spec.text["font"] = font self.output_memo.text["font"] = font self.output_gx.text["font"] = font self.output_out.text["font"] = font def view_spec_output(self, filename): (root, ext) = os.path.splitext(filename) fast_idx = self.output_spec.load_source(root + ".spec") self.output_memo.load_source(root + ".memo") self.output_gx.load_source(root + ".gx") self.output_out.clear() funcs = self.get_spec_funcs() spec_lines = self.output_spec.text.get(1.0, 'end') pos = 0 while 1: id = next_id(spec_lines, pos) if id == (): break (start, end) = id pos = end (start_idx, end_idx) = fast_idx.get_two_tk_indices_same_line(start, end) self.output_spec.text.tag_add("nametag", start_idx, end_idx) def reset_output(self, gx=None): if gx is None: pass #self.output_gx.clear() elif os.path.exists(gx): self.output_gx.load_source(gx) else: self.output_gx.clear() self.output_memo.clear() self.output_spec.clear() self.output_out.clear() self.selectpage('Specialised File') def set_output_from_file(self, filename): self.output_out.load_source(filename) def set_output(self, text): self.output_out.set_text(text) def view_output(self): self.selectpage('Output') def get_spec_funcs(self): memo_text = self.output_memo.text.get(1.0, 'end').split('\n') funcs = {} for line in memo_text: if line.startswith('table'): (orig, i) = up_to_comma(line[6:]) (pattern, _) = up_to_comma(line[i + 7:]) i = pattern.find('(') if i > 0: name = pattern[:i] else: name = pattern funcs[name] = orig + " --> " + pattern self.funcs = funcs def get_tag_position(self, x, y): index = self.output_spec.text.index("@"+str(x)+","+str(y)+" + 1 char") return self.output_spec.text.tag_prevrange("nametag", index) start = None def mouse_over(self, event): (start, end) = self.get_tag_position(event.x, event.y) predicate = self.output_spec.text.get(start, end) #print "over " + start + ", " + end + " : " + predicate #print self.funcs[predicate] if self.start != start: self.app.balloon.configure(relmouse="both",yoffset=15) self.app.balloon._showBalloon(self.output_spec.text, self.funcs[predicate], False) self.start = start def mouse_leave(self, event): self.app.balloon.configure(relmouse="none",yoffset=1) self.app.balloon.withdraw() self.start = None def create_new_terminal(self): self.term_count += 1 self.terminal_pages.append('Terminal ' + str(self.term_count)) page = self.add(self.terminal_pages[-1]) self.terminals.append(None) def quit(self): for t in self.terminals: if t is not None: t.quit() def kill_terminal(self, term_str): i = self.terminal_pages.index(term_str) self.terminals[i].quit() self.delete(term_str) self.terminals.pop(i) self.terminal_pages.pop(i) def reset_completions(self): for t in self.terminals: if t is not None: t.reset_completions() def add_completions(self, completions): for t in self.terminals: if t is not None: t.add_completions(completions)