Esempio n. 1
0
    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))
Esempio n. 2
0
    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()
Esempio n. 3
0
    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")
Esempio n. 4
0
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)