Esempio n. 1
0
File: ui.py Progetto: vosvos/foxycad
    def __init__(self, area):
        self._load_shape_on_init = None #"shapefiles/lt/keliai.shp"

        self._print_orientation = 1 # landscape
        self._print_settings = gtk.PrintSettings()
        try:
            self._print_settings.load_file("printer.settings")
        except:
            pass
        
        self.main_window = gtk.Window()
        
        vbox = gtk.VBox(False, 0)
        self.main_window.add(vbox)
        self.main_window.set_size_request(area.width, area.height)
        vbox.show()
        
        self.main_window.connect("destroy", self.destroy_event)

        self.draw_area = gtk.DrawingArea()
        #self.draw_area.set_size_request(200, 200)
        
        hbox = gtk.HBox(False, 1)
        vbox.pack_start(hbox, True, True, 0)
        hbox.pack_start(self.draw_area, True, True, 0)
        hbox.show()
        self.draw_area.show()
    
        self.draw_area.connect("expose-event", self.expose_event)
        self.draw_area.connect("configure_event", self.configure_event)

        # Event signals
        # http://www.pygtk.org/pygtk2tutorial/sec-EventHandling.html
        self.draw_area.connect("motion_notify_event", self.motion_notify_event)
        self.draw_area.connect("button_press_event", self.button_press_event)
        
        self.draw_area.connect("button_release_event", self.button_release_event)
        
        
        self.main_window.connect("key_press_event", self.key_press_event)

        #self.main_window.connect("leave_notify_event", self.leave_notify_event)
        #self.main_window.connect("enter_notify_event", self.leave_notify_event)
        #self.main_window.set_events(gtk.gdk.LEAVE_NOTIFY_MASK)
        
        self.draw_area.set_events(gtk.gdk.EXPOSURE_MASK
                            | gtk.gdk.BUTTON_PRESS_MASK
                            | gtk.gdk.BUTTON_RELEASE_MASK
                            | gtk.gdk.BUTTON3_MOTION_MASK 
                            | gtk.gdk.POINTER_MOTION_MASK
                            | gtk.gdk.POINTER_MOTION_HINT_MASK
                            #| gtk.gdk.ENTER_NOTIFY_MASK
                            #| gtk.gdk.LEAVE_NOTIFY_MASK
                            #| gtk.gdk.KEY_PRESS_MASK
                            )
                            
        vbox_toolbar = gtk.VBox(False, 1)
        vbox_toolbar.set_size_request(100, 0)
        hbox.pack_start(vbox_toolbar, False, False, 0)
        vbox_toolbar.show()

        zoom_in_button = gtk.Button("ZoomIn")
        vbox_toolbar.pack_start(zoom_in_button, False, False, 0)
        zoom_in_button.connect_object("clicked", self.zoom, 1)
        zoom_in_button.show()

        zoom_out_button = gtk.Button("ZoomOut")
        vbox_toolbar.pack_start(zoom_out_button, False, False, 0)
        zoom_out_button.connect_object("clicked", self.zoom, -1)
        zoom_out_button.show()

        center_button = gtk.Button("Center")
        vbox_toolbar.pack_start(center_button, False, False, 0)
        center_button.connect_object("clicked", self.center, None)
        center_button.show()

        valign0 = gtk.Alignment(0, 1, 0, 0)
        vbox_toolbar.pack_start(valign0)
        valign0.show()

        Invoker.set_button_event("enable", lambda button: button.set_sensitive(1))
        Invoker.set_button_event("disable", lambda button: button.set_sensitive(0))

        undo_button = gtk.Button("Undo")
        Invoker.set_button("undo", undo_button, disable=True)
        vbox_toolbar.pack_start(undo_button, False, False, 0)
        undo_button.connect_object("clicked", self.undo, None)
        undo_button.show()

        redo_button = gtk.Button("Redo")
        Invoker.set_button("redo", redo_button, disable=True)
        vbox_toolbar.pack_start(redo_button, False, False, 0)
        redo_button.connect_object("clicked", self.redo, None)
        redo_button.show()

        #Invoker.execute(Command(1))
        #Invoker.execute(Command(2))
        
        valign1 = gtk.Alignment(0, 1, 0, 0)
        vbox_toolbar.pack_start(valign1)
        valign1.show()
        
        detect_point_button = gtk.Button("Detect Point")
        vbox_toolbar.pack_start(detect_point_button, False, False, 0)
        detect_point_button.connect_object("clicked", self.set_tool, "detect_point")
        detect_point_button.show()

        select_object_button = gtk.Button("Move Shape")
        vbox_toolbar.pack_start(select_object_button, False, False, 0)
        select_object_button.connect_object("clicked", self.set_tool, "move_shape")
        select_object_button.show()
        
        valign2 = gtk.Alignment(0, 1, 0, 0)
        vbox_toolbar.pack_start(valign2)
        valign2.show()

        add_point_button = gtk.Button("Add Point")
        vbox_toolbar.pack_start(add_point_button, False, False, 0)
        add_point_button.connect_object("clicked", self.set_tool, "add_point")
        add_point_button.show()

        add_line_button = gtk.Button("Add Line")
        vbox_toolbar.pack_start(add_line_button, False, False, 0)
        add_line_button.connect_object("clicked", self.set_tool, "add_line")
        add_line_button.show()

        add_curve_button = gtk.Button("Add Curve")
        vbox_toolbar.pack_start(add_curve_button, False, False, 0)
        add_curve_button.connect_object("clicked", self.set_tool, "add_curve")
        add_curve_button.show()

        valign_line = gtk.Alignment(0, 1, 0, 0)
        vbox_toolbar.pack_start(valign_line)
        valign_line.show()
        
        load_file_button = gtk.Button("Load File")
        vbox_toolbar.pack_start(load_file_button, False, False, 0)
        #load_file_button.connect_object("clicked", self.load_file, "shapefiles/lt/gyvenvie.shp")
        #load_file_button.connect_object("clicked", self.load_file, "shapefiles/lt/reljefas.shp")
        #load_file_button.connect_object("clicked", self.load_file, "shapefiles/lt/keliai.shp")
        load_file_button.connect_object("clicked", self.load_file, "")
        #load_file_button.connect_object("clicked", self.load_file, "shapefiles/iceland/cultural_landmark-point.shp")
        load_file_button.show()

        clear_button = gtk.Button("Clear")
        vbox_toolbar.pack_start(clear_button, False, False, 0)
        clear_button.connect_object("clicked", self.clear, None)
        clear_button.show()

        save_button = gtk.Button("Save")
        vbox_toolbar.pack_start(save_button, False, False, 0)
        save_button.connect_object("clicked", self.save, "dump")
        save_button.show()
        
        redraw_button = gtk.Button("Redraw")
        vbox_toolbar.pack_start(redraw_button, False, False, 0)
        redraw_button.connect_object("clicked", self.redraw, "")
        redraw_button.show()

        valign3 = gtk.Alignment(0, 1, 0, 0)
        vbox_toolbar.pack_start(valign3)
        valign3.show()

        print_preview = gtk.Button("Preview A4")
        vbox_toolbar.pack_start(print_preview, False, False, 0)
        print_preview.connect_object("clicked", self.print_preview, "A4")
        print_preview.show()

        print_button = gtk.Button("Print")
        vbox_toolbar.pack_start(print_button, False, False, 0)
        print_button.connect_object("clicked", self.print_dialog, "")
        print_button.show()
        
        self.status_bar = gtk.Statusbar()
        self._status = "Ready"
        self.status_bar.push(1, self._status)
        vbox.pack_start(self.status_bar, False, False, 0)
        self.status_bar.show()
        #self.main_window.add(self.draw_area)
        #self.main_window.set_size_request(area.width, area.height)
        self.screen = GisGTK2Screen(self.draw_area)
        self.screen.add(ScreenText("@ FoxyCAD", SceenOverlay.BOTTOM_RIGHT, (-60, -5)))
        self.screen.add(ScreenCrosshair(SceenOverlay.CENTER))
        
        self.tools = Tools(self.screen) # tools dirbs tik su ekrano koordinatemis
        self.printer = Printer(self.screen) # viskas kas susije su paruosimu spausdinimui
        
        # As durnas, o mano vartotojai dar durnesni, todel viskas turi buti maximaliai aisku ir paprasta
        #self.canvas.setCoordinateCenter(("WGS", 54.7892, 24.7852)) # ten padesime kyziuka
        #self.canvas.setUnit("meters", 1) # rodysime liniuotes kastuose metrus
        #   @----10m----->@ su pelia traukiojma ir matom atstuma metrais
        
        #self.canvas.add_random_points(10000, gtk.gdk.Rectangle(0, 0, 6800, 4000))
        #self.canvas.add_random_points(100000, gtk.gdk.Rectangle(0, 0, 12000, 8000), generator=True) 
        self.main_window.show()   #show_all()