OSDN Git Service

create popupmenu for threadview.
authorAiwota Programmer <aiwotaprog@tetteke.tk>
Tue, 11 Dec 2007 17:08:30 +0000 (02:08 +0900)
committerAiwota Programmer <aiwotaprog@tetteke.tk>
Tue, 11 Dec 2007 17:08:30 +0000 (02:08 +0900)
src/FukuiNoNamari/thread_view.py
src/FukuiNoNamari/thread_window.py
src/data/thread_window.glade

index 83f70be..320d6c9 100644 (file)
@@ -67,6 +67,16 @@ class ThreadView(gtk.HBox):
         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!!!!"
 
@@ -264,6 +274,29 @@ class ThreadView(gtk.HBox):
             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_drawingrarea_button_release_event(self, widget, event, data=None):
         if event.button == 1:
index 5a114f9..cd5caed 100644 (file)
@@ -152,6 +152,21 @@ class WinWrap(winwrapbase.WinWrapBase):
 
         self.threadview.on_uri_clicked = self.on_threadview_uri_clicked
 
+        self.threadview.popupmenu = self.widget_tree.get_widget(
+            "popup_threadview_menu")
+        self.threadview.menu_openuri = self.widget_tree.get_widget(
+            "popup_threadview_menu_openuri")
+        self.threadview.menu_copylinkaddress = self.widget_tree.get_widget(
+            "popup_threadview_menu_copylinkaddress")
+        self.threadview.menu_separator_link = self.widget_tree.get_widget(
+            "popup_threadview_menu_separator_link")
+        self.threadview.menu_copyselection = self.widget_tree.get_widget(
+            "popup_threadview_menu_copyselection")
+        self.threadview.menu_openasuri = self.widget_tree.get_widget(
+            "popup_threadview_menu_openasuri")
+        self.threadview.menu_separator_selection = self.widget_tree.get_widget(
+            "popup_threadview_menu_separator_selection")
+
         self.initialize_buffer()
 
         sigdic = {"on_refresh_activate": self.update,
@@ -168,6 +183,16 @@ class WinWrap(winwrapbase.WinWrapBase):
                   "on_add_bookmark_activate": self.on_add_bookmark_activate,
                   "on_manage_bookmarks_activate": \
                   self.on_manage_bookmarks_activate,
+                  "on_popup_threadview_menu_openuri_activate":
+                  self.on_popup_threadview_menu_openuri_activate,
+                  "on_popup_threadview_menu_copylinkaddress_activate":
+                  self.on_popup_threadview_menu_copylinkaddress_activate,
+                  "on_popup_threadview_menu_copyselection_activate":
+                  self.on_popup_threadview_menu_copyselection_activate,
+                  "on_popup_threadview_menu_openasuri_activate":
+                  self.on_popup_threadview_menu_openasuri_activate,
+                  "on_popup_threadview_menu_refresh_activate":
+                  self.on_popup_threadview_menu_refresh_activate,
                   "on_thread_window_destroy": self.on_thread_window_destroy}
         self.widget_tree.signal_autoconnect(sigdic)
 
@@ -261,6 +286,22 @@ class WinWrap(winwrapbase.WinWrapBase):
             # not supported, show with the web browser.
             gnome.url_show(uri)
             
+    def on_popup_threadview_menu_openuri_activate(self, widget):
+        self.on_threadview_uri_clicked(widget.uri)
+
+    def on_popup_threadview_menu_copylinkaddress_activate(self, widget):
+        clip = gtk.Clipboard()
+        clip.set_text(widget.uri, len(widget.uri))
+
+    def on_popup_threadview_menu_copyselection_activate(self, widget):
+        pass
+
+    def on_popup_threadview_menu_openasuri_activate(self, widget):
+        pass
+
+    def on_popup_threadview_menu_refresh_activate(self, widget):
+        self.update(widget)
+
     def http_get_dat(self, on_get_res):
         datfile_url = self.bbs_type.get_dat_uri()
 
index b4eef89..e3841ed 100644 (file)
       </widget>
     </child>
   </widget>
+  <widget class="GtkMenu" id="popup_threadview_menu">
+    <property name="visible">True</property>
+    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+    <child>
+      <widget class="GtkImageMenuItem" id="popup_threadview_menu_openuri">
+        <property name="visible">True</property>
+        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+        <property name="label" translatable="yes">_Open Link</property>
+        <property name="use_underline">True</property>
+        <signal name="activate" handler="on_popup_threadview_menu_openuri_activate"/>
+      </widget>
+    </child>
+    <child>
+      <widget class="GtkMenuItem" id="popup_threadview_menu_copylinkaddress">
+        <property name="visible">True</property>
+        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+        <property name="label" translatable="yes">_Copy Link Address</property>
+        <property name="use_underline">True</property>
+        <signal name="activate" handler="on_popup_threadview_menu_copylinkaddress_activate"/>
+      </widget>
+    </child>
+    <child>
+      <widget class="GtkSeparatorMenuItem" id="popup_threadview_menu_separator_link">
+        <property name="visible">True</property>
+        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+      </widget>
+    </child>
+    <child>
+      <widget class="GtkImageMenuItem" id="popup_threadview_menu_copyselection">
+        <property name="visible">True</property>
+        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+        <property name="label" translatable="yes">gtk-copy</property>
+        <property name="use_underline">True</property>
+        <property name="use_stock">True</property>
+        <signal name="activate" handler="on_popup_threadview_menu_copyselection_activate"/>
+      </widget>
+    </child>
+    <child>
+      <widget class="GtkMenuItem" id="popup_threadview_menu_openasuri">
+        <property name="visible">True</property>
+        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+        <property name="label" translatable="yes">Open Selection as URL</property>
+        <property name="use_underline">True</property>
+        <signal name="activate" handler="on_popup_threadview_menu_openasuri_activate"/>
+      </widget>
+    </child>
+    <child>
+      <widget class="GtkSeparatorMenuItem" id="popup_threadview_menu_separator_selection">
+        <property name="visible">True</property>
+        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+      </widget>
+    </child>
+    <child>
+      <widget class="GtkImageMenuItem" id="popup_threadview_menu_refresh">
+        <property name="visible">True</property>
+        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+        <property name="label" translatable="yes">gtk-refresh</property>
+        <property name="use_underline">True</property>
+        <property name="use_stock">True</property>
+        <signal name="activate" handler="on_popup_threadview_menu_refresh_activate"/>
+      </widget>
+    </child>
+  </widget>
 </glade-interface>