All pastes #427021 Raw Edit

rcaskey

public text v1 · immutable
·published 2007-04-06 15:30 UTC
rendered paste body
#!/usr/bin/pythonimport goocanvasimport gtkclass Stack:    def __init__(self, canvas, x = 0, y = 0):    	self.dragging = False     	self.cards = []	self.x = 0	self.y = 0	self.canvas = canvas	self.root = canvas.get_root_item()	self.drawables = goocanvas.Group(parent = self.root)	self.drawables.set_canvas(self.canvas)        self.drawables.connect ("motion_notify_event", self.on_motion_notify)        self.drawables.connect ("button_press_event", self.on_button_press)        self.drawables.connect ("button_release_event", self.on_button_release)	self.parent_stack = False    def append(self, card):	self.cards.append(card)	if not card.drawables: card.draw(self.drawables)		else:	    # how can we just reparent this card instead of redrawing	    #card.drawables.remove()	    #card.draw(self.drawables)	    card.drawables.set_parent(self.drawables)	for x in self.cards:            x.drawables.translate(3,3)    def on_motion_notify (self, item, target, event):        if self.dragging and event.state and gtk.gdk.BUTTON1_MASK:            new_x = event.x            new_y = event.y            self.drawables.translate (new_x - self.drag_x, new_y - self.drag_y)	    adj = gtk.Adjustment(30,30,30,30,5,5)            #canvas.scrolled_win.get_hscrollbar().	    self.canvas.scrolled_win.set_hadjustment(adj)        return True    def on_button_press (self, item, target, event):        if event.button == 1:            fleur = gtk.gdk.Cursor (gtk.gdk.FLEUR)            if event.state & gtk.gdk.SHIFT_MASK:		drug = self	    else:		drug = Stack(self.canvas, self.x, self.y)		drug.append(self.cards[len(self.cards)-1])		drug.drawables.raise_(None)		drug.parent_stack = self            self.canvas.pointer_grab (drug.drawables,                                 gtk.gdk.POINTER_MOTION_MASK | gtk.gdk.BUTTON_RELEASE_MASK,                                 fleur,                                 event.time)	    drug.dragging = True	    drug.drag_x = event.x	    drug.drag_y = event.y    def on_button_release (self, item, target, event):        self.canvas.pointer_ungrab (self.drawables, event.time)        self.dragging = False 	if self.parent_stack:	    self.parent_stack.cards.pop()	    self.parent_stack = False	class Card:    width = 200    height = 300    border = 12     border_color = "gray"    background_color = "tan"    backside_color = "brown"    flipped = False     title = None    drawables = False     def __init__(self, title = None):	self.title = title    def draw(self, root):	self.drawables = goocanvas.Group(parent = root)	goocanvas.Rect (parent = self.drawables, x = 0, y = 0, width = self.width, height = self.height, fill_color = self.border_color)	if self.flipped:		goocanvas.Rect (parent = self.drawables, x = self.border, y = self.border, width = self.width - (2 * self.border), height = self.height - (2 * self.border), fill_color = self.backside_color)	else:		goocanvas.Rect (parent = self.drawables, x = self.border, y = self.border, width = self.width - (2 * self.border), height = self.height - (2 * self.border), fill_color = self.background_color)		if self.title is not None: text = goocanvas.Text(parent = self.drawables, text = self.title, x = self.border * 1.5, y = self.border * 1.5)def setup_canvas (canvas):        s = Stack(canvas)    for i in range(10):	    s.append(Card(title = "TEST " + str(i)))    s = Stack(canvas, 500, 500)    for i in range(10):	    s.append(Card(title = "TEST " + str(i)))def zoom_changed (adj, canvas):    canvas.set_scale (adj.get_value())def create_card_page ():    canvas = goocanvas.Canvas ()    canvas.set_size_request (600, 450)    canvas.set_bounds (0, 0, 1000, 1000)    vbox = gtk.VBox (False, 4)    vbox.set_border_width (4)    hbox = gtk.HBox (False, 4)    vbox.pack_start (hbox, False, False, 0)    w = gtk.Label ("Zoom:")    hbox.pack_start (w, False, False, 0)    adj = gtk.Adjustment (1.00, 0.05, 1.00, 0.05, 0.50, 0.50)    adj.connect("value_changed", zoom_changed, canvas)    w = gtk.SpinButton (adj, 0.0, 2)    w.set_size_request (50, -1)    hbox.pack_start (w, False, False, 0)    scrolled_win = gtk.ScrolledWindow ()    scrolled_win.set_shadow_type (gtk.SHADOW_IN)    vbox.add (scrolled_win)    canvas.scrolled_win = scrolled_win    scrolled_win.add (canvas)    setup_canvas (canvas)    return vboxdef main ():    v = create_card_page ()        w = gtk.Window()    w.connect("destroy", gtk.main_quit)       w.add(v)    w.show_all()        gtk.main()if __name__ == "__main__":    main()