[gnoduino] Find&replace support
- From: Lucian Langa <lucilanga src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnoduino] Find&replace support
- Date: Thu, 9 May 2013 23:24:34 +0000 (UTC)
commit df6d2bf1beab0b130b889bc4e91f49dad583bbff
Author: Lucian Langa <lucilanga gnome org>
Date: Fri May 10 01:21:30 2013 +0200
Find&replace support
src/srcview.py | 114 +++++++++++++++++++++++
src/ui.py | 18 ++++-
ui/main.ui | 276 +++++++++++++++++++++++++++++++++++++++++++++++++++-----
3 files changed, 383 insertions(+), 25 deletions(-)
---
diff --git a/src/srcview.py b/src/srcview.py
index 309d0ba..4c6ed0c 100644
--- a/src/srcview.py
+++ b/src/srcview.py
@@ -174,6 +174,120 @@ def findText(widget, event, data=None):
b.select_range(s, e)
view.scroll_to_iter(s,0)
+
+def replaceText(widget, event, data=None):
+ if event == -1 or (event.type == gtk.gdk.KEY_RELEASE and \
+ (gtk.gdk.keyval_name(event.keyval) == 'Return' or \
+ gtk.gdk.keyval_name(event.keyval) == 'KP_Enter')):
+ page = ui.getCurrentPage()
+ view = page.get_data("view")
+ b = view.get_buffer()
+ mark = b.get_insert()
+ iter = b.get_iter_at_mark(mark)
+ search = widget.get_text()
+ flags = 0
+ if data[0].get_active() == False:
+ flags = gtksourceview2.SEARCH_CASE_INSENSITIVE
+ backwards = False
+ if data[2].get_active() == True:
+ backwards = True
+ warp = False
+ if data[3].get_active() == True:
+ warp = True
+ if config.cur_iter == -1:
+ config.cur_iter = iter
+ sb = ui.getGui().get_object("statusbar1")
+ if warp:
+ try:
+ if backwards:
+ s, e = gtksourceview2.iter_backward_search( \
+ config.cur_iter, search, flags, limit=None)
+ config.cur_iter = s
+ else:
+ s, e = gtksourceview2.iter_forward_search( \
+ config.cur_iter, search, flags, limit=None)
+ config.cur_iter = e
+ except:
+ if backwards:
+ iter = b.get_iter_at_offset(-1)
+ config.cur_iter = iter
+ try:
+ s, e = gtksourceview2.iter_backward_search( \
+ config.cur_iter, search, flags, limit=None)
+ config.cur_iter = s
+ except: return
+ else:
+ iter = b.get_iter_at_offset(0)
+ config.cur_iter = iter
+ try:
+ s, e = gtksourceview2.iter_forward_search( \
+ config.cur_iter, search, flags=0, limit=None)
+ config.cur_iter = e
+ except: return
+ else:
+ if backwards:
+ try:
+ s, e = gtksourceview2.iter_backward_search( \
+ config.cur_iter, search, flags, limit=None)
+ config.cur_iter = s
+ except:
+ s = e = b.get_start_iter()
+ b.select_range(s, e)
+ misc.statusMessage(sb, _("'%s' not found.") % search)
+ return
+ else:
+ try:
+ s, e = gtksourceview2.iter_forward_search( \
+ config.cur_iter, search, flags, limit=None)
+ config.cur_iter = e
+ except:
+ s = e = b.get_end_iter()
+ b.select_range(s, e)
+ misc.statusMessage(sb, _("'%s' not found.") % search)
+ return
+ b.place_cursor(s)
+ b.select_range(s, e)
+ b.delete_selection(False, True)
+ b.insert_at_cursor(data[5].get_text())
+
+def replaceAll(widget, data=None):
+ page = ui.getCurrentPage()
+ view = page.get_data("view")
+ b = view.get_buffer()
+ mark = b.get_insert()
+ iter = b.get_iter_at_mark(mark)
+ search = widget.get_text()
+ flags = 0
+ if data[0].get_active() == False:
+ flags = gtksourceview2.SEARCH_CASE_INSENSITIVE
+ if config.cur_iter == -1:
+ config.cur_iter = iter
+ sb = ui.getGui().get_object("statusbar1")
+ s = b.get_start_iter()
+ b.begin_user_action()
+ b.place_cursor(s)
+ rpls=0
+ while config.cur_iter < b.get_end_iter():
+ try:
+ s, e = gtksourceview2.iter_forward_search( \
+ config.cur_iter, search, flags, limit=None)
+ config.cur_iter = e
+ except:
+ iter = b.get_iter_at_offset(0)
+ config.cur_iter = iter
+ try:
+ s, e = gtksourceview2.iter_forward_search( \
+ config.cur_iter, search, flags=0, limit=None)
+ config.cur_iter = e
+ except:
+ misc.statusMessage(sb, _("A total of %s replacements made.") % rpls)
+ return
+ rpls = rpls + 1
+ b.select_range(s, e)
+ b.delete_selection(False, True)
+ b.insert_at_cursor(data[5].get_text())
+ b.end_user_action()
+
def createsrcview(status, f=None):
sbuffer = gtksourceview2.Buffer()
if f:
diff --git a/src/ui.py b/src/ui.py
index f553333..8d742f1 100644
--- a/src/ui.py
+++ b/src/ui.py
@@ -257,6 +257,22 @@ def find(widget, data=None):
srcview.findText(find_text, -1, [gui.get_object(i) for i in cbs])
find.hide()
+def srpl(widget, data=None):
+ sr = gui.get_object("srfind")
+ srfind_text = gui.get_object("srfind-text")
+ srreplace_text = gui.get_object("srreplace-text")
+ srfind_text.select_region(0, -1)
+ cbs = ["srcheckbutton1", "srcheckbutton2","srcheckbutton3", "srcheckbutton4", "srfind-text",
"srreplace-text"]
+ srfind_text.connect("key-release-event", srcview.replaceText, [gui.get_object(i) for i in cbs])
+ srreplace_text.connect("key-release-event", srcview.replaceText, [gui.get_object(i) for i in cbs])
+ sr.set_default_response(gtk.RESPONSE_OK)
+ r = sr.run()
+ if r == 1:
+ srcview.replaceText(srfind_text, -1, [gui.get_object(i) for i in cbs])
+ if r == 2:
+ srcview.replaceAll(srfind_text, [gui.get_object(i) for i in cbs])
+ sr.hide()
+
def compile(widget, data=file):
cserial(None, 0, sctw)
page = getCurrentPage()
@@ -464,6 +480,7 @@ menus = [
("menu-save-as", csave_as, (ord('s'), gtk.gdk.CONTROL_MASK|gtk.gdk.SHIFT_MASK)),
("menu-quit", quit, (ord('q'), gtk.gdk.CONTROL_MASK)),
("menu-find", find, (ord('f'), gtk.gdk.CONTROL_MASK)),
+ ("menu-replace", srpl, (ord('h'), gtk.gdk.CONTROL_MASK)),
("menu-undo", undo, (ord('z'), gtk.gdk.CONTROL_MASK)),
("menu-redo", redo, (ord('z'), gtk.gdk.CONTROL_MASK|gtk.gdk.SHIFT_MASK)),
("menu-cut", cut, (ord('x'), gtk.gdk.CONTROL_MASK)),
@@ -485,7 +502,6 @@ def menu(gui):
accel, i[2][0], i[2][1], 0) for i in menus if i[2][0] != None]
mainwin.add_accel_group(accel)
gui.get_object("menu-find-next").set_sensitive(False)
- gui.get_object("menu-replace").set_sensitive(False)
def setupSpinner():
if gtk.pygtk_version >= (2,22,00):
diff --git a/ui/main.ui b/ui/main.ui
index 932ec62..b472717 100644
--- a/ui/main.ui
+++ b/ui/main.ui
@@ -11,7 +11,6 @@
<property name="comments" translatable="yes">GNOME Arduino IDE</property>
<property name="website">http://gnome.eu.org/evo/index.php/Gnoduino</property>
<property name="website_label" translatable="yes">gnoduino</property>
- <property name="translator-credits" translatable="yes">translator-credits</property>
<property name="license" translatable="yes"> gnoduino - Python Arduino IDE implementation
Copyright (C) 2010-2012 Lucian Langa
@@ -31,6 +30,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
</property>
<property name="authors">Lucian Langa <lucilanga gnome org>
Pascal de Bruijn <pmjdebruijn pcode nl></property>
+ <property name="translator_credits" translatable="yes">translator-credits</property>
<child internal-child="vbox">
<object class="GtkBox" id="dialog-vbox1">
<property name="visible">True</property>
@@ -76,7 +76,6 @@ Pascal de Bruijn <pmjdebruijn pcode nl></property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
- <property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
</object>
<packing>
@@ -92,7 +91,6 @@ Pascal de Bruijn <pmjdebruijn pcode nl></property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="receives_default">True</property>
- <property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
</object>
<packing>
@@ -135,7 +133,6 @@ Pascal de Bruijn <pmjdebruijn pcode nl></property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">●</property>
- <property name="invisible_char_set">True</property>
</object>
<packing>
<property name="expand">True</property>
@@ -174,7 +171,7 @@ Pascal de Bruijn <pmjdebruijn pcode nl></property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
+ <property name="xalign">0.5</property>
<property name="draw_indicator">True</property>
</object>
<packing>
@@ -190,7 +187,7 @@ Pascal de Bruijn <pmjdebruijn pcode nl></property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
+ <property name="xalign">0.5</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
</object>
@@ -207,7 +204,7 @@ Pascal de Bruijn <pmjdebruijn pcode nl></property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
+ <property name="xalign">0.5</property>
<property name="draw_indicator">True</property>
</object>
<packing>
@@ -223,7 +220,7 @@ Pascal de Bruijn <pmjdebruijn pcode nl></property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
+ <property name="xalign">0.5</property>
<property name="draw_indicator">True</property>
</object>
<packing>
@@ -265,6 +262,16 @@ Pascal de Bruijn <pmjdebruijn pcode nl></property>
<property name="step_increment">1</property>
<property name="page_increment">10</property>
</object>
+ <object class="GtkImage" id="image1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="stock">gtk-find</property>
+ </object>
+ <object class="GtkImage" id="image2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="stock">gtk-find-and-replace</property>
+ </object>
<object class="GtkAccelGroup" id="mainaccelgrp"/>
<object class="GtkDialog" id="preferences">
<property name="can_focus">False</property>
@@ -287,7 +294,6 @@ Pascal de Bruijn <pmjdebruijn pcode nl></property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
- <property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
</object>
<packing>
@@ -303,7 +309,6 @@ Pascal de Bruijn <pmjdebruijn pcode nl></property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
- <property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
</object>
<packing>
@@ -344,7 +349,7 @@ Pascal de Bruijn <pmjdebruijn pcode nl></property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
- <property name="use_action_appearance">False</property>
+ <property name="font">Sans 12</property>
<property name="use_font">True</property>
</object>
<packing>
@@ -358,7 +363,7 @@ Pascal de Bruijn <pmjdebruijn pcode nl></property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
- <property name="use_action_appearance">False</property>
+ <property name="font">Sans 12</property>
<property name="use_font">True</property>
</object>
<packing>
@@ -393,7 +398,7 @@ Pascal de Bruijn <pmjdebruijn pcode nl></property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
+ <property name="xalign">0.5</property>
<property name="draw_indicator">True</property>
</object>
<packing>
@@ -409,7 +414,7 @@ Pascal de Bruijn <pmjdebruijn pcode nl></property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
+ <property name="xalign">0.5</property>
<property name="draw_indicator">True</property>
</object>
<packing>
@@ -432,7 +437,6 @@ Pascal de Bruijn <pmjdebruijn pcode nl></property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
</object>
@@ -462,7 +466,6 @@ Pascal de Bruijn <pmjdebruijn pcode nl></property>
<object class="GtkFileChooserButton" id="sketchdir">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="orientation">vertical</property>
<property name="action">select-folder</property>
</object>
<packing>
@@ -506,7 +509,6 @@ Pascal de Bruijn <pmjdebruijn pcode nl></property>
<property name="can_focus">True</property>
<property name="tooltip_text" translatable="yes">Enter any supplementary path that compiler
will check for, separate them by semicolons. (eg /usr/share/gnoduino;/usr/local/share/gnoduino)</property>
<property name="invisible_char">●</property>
- <property name="invisible_char_set">True</property>
</object>
<packing>
<property name="expand">True</property>
@@ -528,6 +530,239 @@ Pascal de Bruijn <pmjdebruijn pcode nl></property>
<action-widget response="1">button3</action-widget>
</action-widgets>
</object>
+ <object class="GtkDialog" id="srfind">
+ <property name="can_focus">False</property>
+ <property name="border_width">5</property>
+ <property name="type_hint">normal</property>
+ <child internal-child="vbox">
+ <object class="GtkBox" id="srdialog-vbox3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">2</property>
+ <child internal-child="action_area">
+ <object class="GtkButtonBox" id="srdialog-action_area3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="layout_style">end</property>
+ <child>
+ <object class="GtkButton" id="srbutton2">
+ <property name="label">gtk-close</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="button5">
+ <property name="label" translatable="yes">Replace All</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="image">image2</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="srbutton4">
+ <property name="label">Find and replace</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="image">image1</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="srvbox5">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkTable" id="grid1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkEntry" id="srfind-text">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">●</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="srlabel2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Search for:</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="srlabel3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Replace with:</property>
+ </object>
+ <packing>
+ <property name="top_attach">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="srreplace-text">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">●</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <object class="GtkFrame" id="srframe1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkAlignment" id="sralignment1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkVBox" id="srvbox6">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">2</property>
+ <property name="homogeneous">True</property>
+ <child>
+ <object class="GtkCheckButton" id="srcheckbutton2">
+ <property name="label" translatable="yes">Match entire word only</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="srcheckbutton4">
+ <property name="label" translatable="yes">Wrap around</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="srcheckbutton1">
+ <property name="label" translatable="yes">Match case</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="srcheckbutton3">
+ <property name="label" translatable="yes">Search backwards</property>
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label_item">
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="0">srbutton2</action-widget>
+ <action-widget response="2">button5</action-widget>
+ <action-widget response="1">srbutton4</action-widget>
+ </action-widgets>
+ </object>
<object class="GtkWindow" id="top_win">
<property name="can_focus">False</property>
<child>
@@ -925,7 +1160,6 @@ Pascal de Bruijn <pmjdebruijn pcode nl></property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_markup">Verify/Compile</property>
- <property name="use_action_appearance">False</property>
<property name="is_important">True</property>
<property name="label" translatable="yes">Compile</property>
<property name="use_underline">True</property>
@@ -941,7 +1175,6 @@ Pascal de Bruijn <pmjdebruijn pcode nl></property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Upload</property>
- <property name="use_action_appearance">False</property>
<property name="label" translatable="yes">Upload</property>
<property name="use_underline">True</property>
</object>
@@ -966,7 +1199,6 @@ Pascal de Bruijn <pmjdebruijn pcode nl></property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">New</property>
- <property name="use_action_appearance">False</property>
<property name="label" translatable="yes">New</property>
<property name="use_underline">True</property>
</object>
@@ -981,7 +1213,6 @@ Pascal de Bruijn <pmjdebruijn pcode nl></property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Open</property>
- <property name="use_action_appearance">False</property>
<property name="label" translatable="yes">Open</property>
<property name="use_underline">True</property>
</object>
@@ -996,7 +1227,6 @@ Pascal de Bruijn <pmjdebruijn pcode nl></property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Save</property>
- <property name="use_action_appearance">False</property>
<property name="label" translatable="yes">Save</property>
<property name="use_underline">True</property>
</object>
@@ -1021,7 +1251,6 @@ Pascal de Bruijn <pmjdebruijn pcode nl></property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Serial Monitor</property>
- <property name="use_action_appearance">False</property>
<property name="label" translatable="yes">Serial Monitor</property>
<property name="use_underline">True</property>
</object>
@@ -1143,7 +1372,6 @@ Pascal de Bruijn <pmjdebruijn pcode nl></property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
- <property name="use_action_appearance">False</property>
</object>
<packing>
<property name="expand">True</property>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]