Advertisement
zaquest

Untitled

Apr 22nd, 2012
585
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.67 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. from gi.repository import Gtk, Gdk
  5. import os
  6.  
  7. class App(object):
  8.  
  9.     main_ui = os.path.join(os.path.dirname(__file__), 'gui.glade')
  10.  
  11.     def __init__(self):
  12.         self.builder = Gtk.Builder()
  13.         self.builder.add_from_file(self.main_ui)
  14.  
  15.         self.main_window.connect('destroy', self.quit)
  16.         self.mw_quit_button.connect('clicked', self.quit)
  17.  
  18.         self.mw_graph_editor_button.connect('clicked', self.show_window, self.graph_editor_window)
  19.         self.graph_editor_window.connect('delete-event', self.hide_window_delete)
  20.  
  21.         self.ge_menubar_file_quit.connect('activate', self.hide_window, self.graph_editor_window)
  22.         self.ge_toolbar_quit.connect('clicked', self.hide_window, self.graph_editor_window)
  23.  
  24.         self.ge_drawingarea.connect('motion-notify-event', self.pointer_motion)
  25.         self.ge_drawingarea.connect('motion-notify-event', self.show_coordinates)
  26.         self.ge_drawingarea.connect('draw', self.draw_callback)
  27.  
  28.         self.path = None
  29.         self.coord = (0, 0)
  30.         self.rgb = (0, 0, 0)
  31.  
  32.     def __getattr__(self, name):
  33.         obj = self.builder.get_object(name)
  34.         if not obj:
  35.             raise AttributeError("Object {0} has no attribute {1}".format(self, name))
  36.         setattr(self, name, obj)
  37.         return obj
  38.  
  39.     def draw_callback(self, drawingarea, cr):
  40.         if self.path:
  41.             cr.append_path(self.path)
  42.         cr.line_to(self.coord[0], self.coord[1])
  43.         cr.set_source_rgba(*self.rgb)
  44.         self.path = cr.copy_path_flat()
  45.         cr.stroke()
  46.  
  47.     def show_coordinates(self, window, event):
  48.         self.ge_mouse_coordinates.set_label('X: {0:.0f} Y: {1:.0f}'.format(event.x, event.y))
  49.  
  50.     def pointer_motion(self, widget, event):
  51.         if event.state & Gdk.ModifierType.BUTTON1_MASK:
  52.             self.draw(widget, event.x, event.y)
  53.         elif event.state & Gdk.ModifierType.BUTTON3_MASK:
  54.             self.draw(widget, event.x, event.y, True)
  55.  
  56.     def draw(self, widget, x, y, erase=False):
  57.         self.coord = (x,y)
  58.         if erase:
  59.             self.rgb = (256, 256, 256)
  60.         else:
  61.             self.rgb = (0, 0, 0)
  62.         widget.queue_draw()
  63.  
  64.     def show_window(self, widget, data):
  65.         data.show_all()
  66.  
  67.     def hide_window_delete(self, widget, event):
  68.         widget.hide()
  69.         return True
  70.  
  71.     def hide_window(self, widget, window):
  72.         window.hide()
  73.  
  74.     def run(self):
  75.         self.main_window.show_all()
  76.         Gtk.main()
  77.  
  78.     def quit(self, widget=None, data=None):
  79.         self.main_window.destroy()
  80.         Gtk.main_quit()
  81.  
  82.  
  83. if __name__ == "__main__":
  84.     app = App()
  85.     app.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement