On Wed, 2011-02-09 at 08:38 -0500, Adam Tauno Williams wrote: 
> On Wed, 2011-02-09 at 13:09 +0100, Man Max wrote: 
> > Hello 
> > MY FIRST TEST
> > import shelve
> You import shelve
> > TEST 2 with textView
> > import shelve_whc as shelve
> You import "shelve_whc".  What is that?  I cannot run your test.

I don't have printv either;  when providing test it is best to make them
stand-alone and platform independent [you also create a path of D:\]

Attached is a copy of your test#2 that runs for me, but could you
explain how to test it - and should it open *three* windows when
started?
# pygtk version: Maik Hertha <[email protected]>
import gtk
import pango
import gobject
import shelve
import os
class test_affiche:
    def __init__(self,bufferr):
        self.window = gtk.Window()
        self.window.connect('destroy', lambda *w: gtk.main_quit())
        self.window.set_title(self.__class__.__name__+' clone')
        self.window.set_default_size(450, 450)
        self.window.set_border_width(0)
        
        view = gtk.TextView()
        view.set_buffer(bufferr)
        view.set_wrap_mode(gtk.WRAP_WORD) 
        sw = gtk.ScrolledWindow()
        sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
        self.window.add(sw)
        sw.add(view)
        self.window.show_all()
        
class HypertextDemo(gtk.Window):
    hovering_over_link = False
    hand_cursor = gtk.gdk.Cursor(gtk.gdk.HAND2)
    regular_cursor = gtk.gdk.Cursor(gtk.gdk.XTERM)
    def save(self,bufferr):
        save_file = os.path.abspath('essai.tvw')
        db = shelve.open(save_file,'c', protocol=2) 
        print type(buffer)
        db['cle']=bufferr
        db.close()
        print('sauvegarde ok')
        essai = test_affiche(bufferr)
        
    def load(self):
        save_file = os.path.abspath("essai.tvw")
        db = shelve.open(save_file,protocol=2) 
        conteneur = db['cle']
        essai3 = test_affiche(conteneur)
        db.close()
        
    def __init__(self, parent=None):
        gtk.Window.__init__(self)
        try:
            self.set_screen(parent.get_screen())
        except AttributeError:
            self.connect('destroy', lambda *w: gtk.main_quit())
        self.set_title(self.__class__.__name__)
        self.set_default_size(450, 450)
        self.set_border_width(0)
        view = gtk.TextView()
        view.set_wrap_mode(gtk.WRAP_WORD) 
        view.connect("key-press-event", self.key_press_event)
        view.connect("event-after", self.event_after)
        view.connect("motion-notify-event", self.motion_notify_event)
        view.connect("visibility-notify-event", self.visibility_notify_event)
        buffer = view.get_buffer()
        sw = gtk.ScrolledWindow()
        sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
        self.add(sw)
        sw.add(view)
        self.show_page(buffer, 1)
        self.show_all()
        self.save(view.get_buffer())
        self.load()
        
    # Links can be activated by pressing Enter.
    def key_press_event(self, text_view, event):
        if (event.keyval == gtk.gdk.Return or
            event.keyval == gtk.gdk.KP_Enter):
            buffer = text_view.get_buffer()
            iter = buffer.get_iter_at_mark(buffer.get_insert())
            self.follow_if_link(text_view, iter)
        return False
        
    # Links can also be activated by clicking.
    def event_after(self, text_view, event):
        if event.type != gtk.gdk.BUTTON_RELEASE:
            return False
        if event.button != 1:
            return False
        buffer = text_view.get_buffer()
        # we shouldn't follow a link if the user has selected something
        try:
            start, end = buffer.get_selection_bounds()
        except ValueError:
            # If there is nothing selected, None is return
            pass
        else:
            if start.get_offset() != end.get_offset():
                return False
        x, y = text_view.window_to_buffer_coords(gtk.TEXT_WINDOW_WIDGET,
            int(event.x), int(event.y))
        iter = text_view.get_iter_at_location(x, y)
        self.follow_if_link(text_view, iter)
        return False

    # Looks at all tags covering the position (x, y) in the text view,
    # and if one of them is a link, change the cursor to the "hands" cursor
    # typically used by web browsers.
    def set_cursor_if_appropriate(self, text_view, x, y):
        hovering = False
        buffer = text_view.get_buffer()
        iter = text_view.get_iter_at_location(x, y)
        tags = iter.get_tags()
        for tag in tags:
            page = tag.get_data("page")
            if page != 0:
                hovering = True
                break
        if hovering != self.hovering_over_link:
            self.hovering_over_link = hovering
        if self.hovering_over_link:
            text_view.get_window(gtk.TEXT_WINDOW_TEXT).set_cursor(self.hand_cursor)
        else:
            text_view.get_window(gtk.TEXT_WINDOW_TEXT).set_cursor(self.regular_cursor)
    # Update the cursor image if the pointer moved.
    def motion_notify_event(self, text_view, event):
        x, y = text_view.window_to_buffer_coords(gtk.TEXT_WINDOW_WIDGET,
            int(event.x), int(event.y))
        self.set_cursor_if_appropriate(text_view, x, y)
        text_view.window.get_pointer()
        return False
        
    # Also update the cursor image if the window becomes visible
    # (e.g. when a window covering it got iconified).
    def visibility_notify_event(self, text_view, event):
        wx, wy, mod = text_view.window.get_pointer()
        bx, by = text_view.window_to_buffer_coords(gtk.TEXT_WINDOW_WIDGET, wx, wy)
        self.set_cursor_if_appropriate (text_view, bx, by)
        return False
        
    def insert_link(self, buffer, iter, text, page):
        ''' Inserts a piece of text into the buffer, giving it the usual
            appearance of a hyperlink in a web browser: blue and underlined.
            Additionally, attaches some data on the tag, to make it recognizable
            as a link.
        '''
        tag = buffer.create_tag(None,
            foreground="blue", underline=pango.UNDERLINE_SINGLE)
        tag.set_data("page", page)
        buffer.insert_with_tags(iter, text, tag)

    def show_page(self, buffer, page):
        ''' Fills the buffer with text and interspersed links. In any real
            hypertext app, this method would parse a file to identify the links.
        '''
        buffer.set_text("", 0)
        iter = buffer.get_iter_at_offset(0)
        if page == 1:
            buffer.insert(iter, "Some text to show that simple ")
            self.insert_link(buffer, iter, "hypertext", 3)
            buffer.insert(iter, " can easily be realized with ")
            self.insert_link(buffer, iter, "tags", 2)
            buffer.insert(iter, ".")
            buffer.insert(iter, "\n")
            buffer.insert(iter, 'Inserts a piece of text into the buffer, giving it the usual'
            'appearance of a hyperlink in a web browser: blue and underlined.'
            'Additionally, attaches some data on the tag, to make it recognizable'
            'as a link')
            buffer.insert(iter, "\n")
            buffer.insert(iter, 'Inserts a piece of text into the buffer, giving it the usual'
            'appearance of a hyperlink in a web browser: blue and underlined.'
            'Additionally, attaches some data on the tag, to make it recognizable'
            'as a link')
        elif page == 2:
            buffer.insert(iter,
                "A tag is an attribute that can be applied to some range of text. "
                "For example, a tag might be called \"bold\" and make the text inside "
                "the tag bold. However, the tag concept is more general than that "
                "tags don't have to affect appearance. They can instead affect the "
                "behavior of mouse and key presses, \"lock\" a range of text so the "
                "user can't edit it, or countless other things.\n", -1)
            self.insert_link(buffer, iter, "Go back", 1)
        elif page == 3:
            tag = buffer.create_tag(None, weight=pango.WEIGHT_BOLD)
            buffer.insert_with_tags(iter, "hypertext:\n", tag)
            buffer.insert(iter,
                "machine-readable text that is not sequential but is organized "
                "so that related items of information are connected.\n")
            self.insert_link(buffer, iter, "Go back", 1)

    def follow_if_link(self, text_view, iter):
        ''' Looks at all tags covering the position of iter in the text view,
            and if one of them is a link, follow it by showing the page identified
            by the data attached to it.
        '''
        tags = iter.get_tags()
        for tag in tags:
            page = tag.get_data("page")
            if page != 0:
                self.show_page(text_view.get_buffer(), page)
                break
def main():
    
    HypertextDemo()
    gtk.main()
if __name__ == '__main__':
        
    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