OSDN Git Service

Fix: spell miss of commit fbac42a0d137286b9320842ad465a42c6d28397c
[fukui-no-namari/fukui-no-namari.git] / src / FukuiNoNamari / thread_view.py
index 78a14da..7228b60 100644 (file)
@@ -36,7 +36,9 @@ class ThreadView(gtk.HBox):
 
         self.drawingarea.add_events(
             gtk.gdk.SCROLL_MASK |
-            gtk.gdk.POINTER_MOTION_MASK)
+            gtk.gdk.POINTER_MOTION_MASK |
+            gtk.gdk.BUTTON_PRESS_MASK |
+            gtk.gdk.BUTTON_RELEASE_MASK)
 
         self.adjustment.step_increment = 20
         self.drawingarea_prev_width = 0
@@ -46,16 +48,36 @@ class ThreadView(gtk.HBox):
         self.drawingarea.connect(
             "size-allocate", self.on_drawingarea_size_allocate)
         self.drawingarea.connect(
-            "button-press-event", self.on_drawingarea_button_press_event)
-        self.drawingarea.connect(
             "scroll-event", self.on_drawingarea_scroll_event)
         self.drawingarea.connect(
             "motion-notify-event", self.on_drawingrarea_motion_notify_event)
+        self.drawingarea.connect(
+            "button-press-event", self.on_drawingarea_button_press_event)
+        self.drawingarea.connect(
+            "button-release-event", self.on_drawingarea_button_release_event)
         self.vscrollbar.connect(
             "value-changed", self.on_vscrollbar_value_changed)
 
         self.initialize_buffer()
 
+        self.on_uri_clicked = self._on_uri_clicked
+
+        self.button1_pressed = False
+        self.current_pressed_uri = None
+            
+        self.popupmenu = None
+        self.menu_openuri = None
+        self.menu_copylinkaddress = None
+        self.menu_separator_link = None
+        self.menu_copyselection = None
+        self.menu_openasuri = None
+        self.menu_separator_selection = None
+
+        self.menud_uri = None
+
+    def _on_uri_clicked(self, uri):
+        print uri, "clicked!!!!"
+
     def initialize_buffer(self):
         self.pangolayout = []
 
@@ -210,25 +232,16 @@ class ThreadView(gtk.HBox):
         if self.adjustment.value < 0:
             self.adjustment.value = 0
 
-    def on_drawingarea_button_press_event(self, widget, event, data=None):
-        self.drawingarea.queue_draw()
-
     def on_vscrollbar_value_changed(self, widget, data=None):
         self.drawingarea.queue_draw()
 
     def on_drawingarea_scroll_event(self, widget, event, data=None):
-        if event.direction == gtk.gdk.SCROLL_UP:
-            self.adjustment.value -= 66.476200804
-            if self.adjustment.value < self.adjustment.lower:
-                self.adjustment.value = self.adjustment.lower
-        if event.direction == gtk.gdk.SCROLL_DOWN:
-            self.adjustment.value += 66.476200804
-            max_value = self.adjustment.upper - self.adjustment.page_size
-            if self.adjustment.value > max_value:
-                self.adjustment.value = max_value
-        self.prevent_adjustment_overflow()
+        self.vscrollbar.emit("scroll-event", event)
 
     def on_drawingrarea_motion_notify_event(self, widget, event, data=None):
+        if event.state & gtk.gdk.BUTTON1_MASK != gtk.gdk.BUTTON1_MASK:
+            self.button1_pressed = False
+
         cursor = ThreadView.regular_cursor
 
         uri, layout, index = self.ptrpos_to_uri(event.x, event.y)
@@ -239,3 +252,46 @@ class ThreadView(gtk.HBox):
                 cursor = ThreadView.hand_cursor
 
         self.drawingarea.window.set_cursor(cursor)
+
+    def on_drawingarea_button_press_event(self, widget, event, data=None):
+        if event.button == 1:
+            self.current_pressed_uri = None
+            self.button1_pressed = True
+            uri, layout, index = self.ptrpos_to_uri(event.x, event.y)
+            if uri is not None and layout is not None and index is not None:
+                self.current_pressed_uri = (uri, layout, index)
+        elif event.button == 3:
+            time = event.time
+            uri, layout, index = self.ptrpos_to_uri(event.x, event.y)
+            if uri is not None and layout is not None and index is not None:
+                self.menu_openuri.show()
+                self.menu_copylinkaddress.show()
+                self.menu_separator_link.show()
+                self.menu_openuri.uri = uri
+                self.menu_copylinkaddress.uri = uri
+            else:
+                self.menu_openuri.hide()
+                self.menu_copylinkaddress.hide()
+                self.menu_separator_link.hide()
+                self.menu_openuri.uri = None
+                self.menu_copylinkaddress.uri = None
+
+            self.menu_copyselection.hide()
+            self.menu_openasuri.hide()
+            self.menu_separator_selection.hide()
+
+            self.popupmenu.popup(None, None, None, event.button, time)
+            return True
+            
+
+    def on_drawingarea_button_release_event(self, widget, event, data=None):
+        if event.button == 1:
+            button1_pressed = self.button1_pressed
+            self.button1_pressed = False
+
+            if button1_pressed and self.current_pressed_uri is not None:
+                uri, layout, index = self.ptrpos_to_uri(event.x, event.y)
+                p_uri, p_layout, p_index = self.current_pressed_uri
+                self.current_preesed_uri = None
+                if uri == p_uri and layout == p_layout and index == p_index:
+                    self.on_uri_clicked(uri)