hi all,
please help me with little problem [ the big one for me right now :(]
i write little app [ texteditor , who not :) ]

from textview i call window popup with help. [pressing 'a' in test
prog ] and i have 2 questions.

1.) how i disable automatic Tab inserted after pasting text from popup ?
    use another key is solution but i want Tab as completer.

2.) it seems to same prob as in 1.) but how i disable moving cursor in
    textbuffer when popup window is active and i changing rows in
    treeview ? when i change type on WINDOW_TOPLEVEL my treeview has
    focus and i cannot write into buffer.

sorry for my noob questions. here is example.

import gtk

class Completer(gtk.Window):
    def __init__(self, parent, textview):
        gtk.Window.__init__(self, gtk.WINDOW_POPUP)
        self.set_size_request(200, 300)
        self.set_transient_for(parent)
        
        self.__sig1 = textview.connect('key-press-event', self.__keypress)
        self.txtview = textview
        
        self.store = gtk.ListStore(str)
        self.view  = gtk.TreeView(self.store)
        self.view.set_headers_visible(False)
        renderer   = gtk.CellRendererText()
        self.view.insert_column_with_attributes(-1, '', renderer, text=0)
        
        scroll = gtk.ScrolledWindow()
        scroll.set_policy(*(gtk.POLICY_AUTOMATIC,)*2)
        scroll.add(self.view)
        
        frame = gtk.Frame()
        frame.set_shadow_type(gtk.SHADOW_ETCHED_IN)
        frame.add(scroll)
        
        self.add(frame)
        
        for item in range(10):
            self.store.append([str(item)])   
            
        self.text = [str(x) for x in range(10)]
            
    def __keypress(self, widget, event):
        if event.string == 'a':
            self.__calc_coords()
            self.show_all()
        
        from gtk import keysyms as key
        if event.keyval in (key.Right, key.Left, key.Home, key.End, key.Escape):
            # jestlize bude stisknuta nejaka z techto klaves API okno se uzavre
            self.hide()
            return False

        elif event.keyval == key.Tab:
            # pastni do buferu hodnotu
            
self.txtview.get_buffer().insert_at_cursor(self.text[self.__get_selected()])
            self.hide()
            
        elif event.keyval == key.Up:
            self.__select_previous()
            
        elif event.keyval == key.Down:
            self.__select_next()
            
        else:
            # pokud vracim False prog pokracuje dal,
            # pokud True okno ma porad focus a nejde vkladat text
            #self.txtview.set_accepts_tab(False)
            return False
        
    def __select_previous(self):
        ' predesla polozka v completemenu '
        
        row = max(self.__get_selected() -1, 0)
        selection = self.view.get_selection()
        selection.unselect_all()
        selection.select_path(row)
        self.view.scroll_to_cell(row)
        return False
        
    def __get_selected(self):
        ' vraci aktualni polozku v treeview '
        
        selection = self.view.get_selection()
        try:
            oops = selection.get_selected_rows()[1][0][0]
            return oops
        except IndexError:
            return None
    
    def __select_next(self):
        ' skok na dalsi polozku v completemenu '
        row = min(self.__get_selected() + 1, len(self.store) - 1)
        selection = self.view.get_selection()
        selection.unselect_all()
        selection.select_path(row)
        self.view.scroll_to_cell(row)
        return False
    
    def __calc_coords(self):
        ' vypocte souradnice otevreni okna '
        
        from gtk import TEXT_WINDOW_TEXT
        # zjisti vysku a pozici kurzoru v bufferu
        cursor     = 
self.txtview.get_buffer().get_iter_at_mark(self.txtview.get_buffer().get_insert())
        rectangle  = self.txtview.get_iter_location(cursor)
        curx, cury = self.txtview.buffer_to_window_coords(TEXT_WINDOW_TEXT, 
rectangle.x, rectangle.y)
        curh       = rectangle.height
        
        # zjisti pozici a vysku textviewu
        win        = self.txtview.get_window(TEXT_WINDOW_TEXT)
        rectangle  = self.txtview.get_visible_rect()
        winx, winy = win.get_origin()
        winw, winh = rectangle.width, rectangle.height
        
        # spocitej kde se muze otevrit okno s napovedou
        posx, posy = winx + curx, winy + cury + curh
        self.move(posx, posy)
        
class Pokus(gtk.Window):
    def __init__(self):
        gtk.Window.__init__(self)
        self.connect('destroy', lambda x: gtk.main_quit())
        self.set_size_request(500, 400)
        view  = gtk.TextView()
        comp = Completer(self, view)
        scroll = gtk.ScrolledWindow()
        scroll.set_policy(*(gtk.POLICY_AUTOMATIC,)*2)
        scroll.set_border_width(2)
        scroll.add(view)
        self.add(scroll)
        self.show_all()
        
if __name__ == '__main__':
    APP = Pokus()
    gtk.main()
_______________________________________________
pygtk mailing list   [email protected]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://faq.pygtk.org/

Reply via email to