summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsamr7 <samr7@126591fb-c623-4b62-a76d-97a8e4f34109>2008-12-23 20:51:35 +0000
committersamr7 <samr7@126591fb-c623-4b62-a76d-97a8e4f34109>2008-12-23 20:51:35 +0000
commit29c9219b80f70e88e5e1f70f3ed6a42b62ef9307 (patch)
treeee6cf7870c1d032cb7acbd9cd0755216f2bc1774
parenta50d988cb2420fbeca743b0663949ebe79f8b5cf (diff)
downloadnohands-29c9219b80f70e88e5e1f70f3ed6a42b62ef9307.tar.gz
Checkpoint hfconsole overhaul.
git-svn-id: http://nohands.svn.sourceforge.net/svnroot/nohands/trunk@78 126591fb-c623-4b62-a76d-97a8e4f34109
-rw-r--r--data/Makefile.am13
-rw-r--r--data/agconnect.pngbin0 -> 3055 bytes
-rw-r--r--data/audioconnect.pngbin0 -> 2287 bytes
-rw-r--r--data/battery-0.pngbin0 -> 577 bytes
-rw-r--r--data/battery-1.pngbin0 -> 482 bytes
-rw-r--r--data/battery-2.pngbin0 -> 469 bytes
-rw-r--r--data/battery-3.pngbin0 -> 474 bytes
-rw-r--r--data/battery-4.pngbin0 -> 453 bytes
-rw-r--r--data/battery-5.pngbin0 -> 344 bytes
-rw-r--r--data/contacts.pngbin0 -> 1993 bytes
-rw-r--r--data/dialpad.pngbin0 -> 1856 bytes
-rw-r--r--data/dsp-sidebar.pngbin3096 -> 0 bytes
-rw-r--r--data/hangup.pngbin0 -> 967 bytes
-rw-r--r--data/hfconsole.glade5212
-rwxr-xr-xdata/hfconsole.in1542
-rw-r--r--data/holdcall.pngbin0 -> 945 bytes
-rw-r--r--data/icon.pngbin0 -> 1176 bytes
-rw-r--r--data/iconsrc/agconnect.svg216
-rw-r--r--data/iconsrc/audioconnect.svg117
-rw-r--r--data/iconsrc/battery-0.svg125
-rw-r--r--data/iconsrc/battery-1.svg125
-rw-r--r--data/iconsrc/battery-2.svg125
-rw-r--r--data/iconsrc/battery-3.svg125
-rw-r--r--data/iconsrc/battery-4.svg125
-rw-r--r--data/iconsrc/battery-5.svg120
-rw-r--r--data/iconsrc/contacts.svg112
-rw-r--r--data/iconsrc/dialpad.svg90
-rw-r--r--data/iconsrc/handset.svg230
-rw-r--r--data/iconsrc/hangup.svg84
-rw-r--r--data/iconsrc/holdcall.svg84
-rw-r--r--data/iconsrc/logomain.svg114
-rw-r--r--data/iconsrc/message.svg86
-rw-r--r--data/iconsrc/mute.svg646
-rw-r--r--data/iconsrc/noag.svg213
-rw-r--r--data/iconsrc/nobt.svg101
-rw-r--r--data/iconsrc/pickup.svg102
-rw-r--r--data/iconsrc/redial.svg107
-rw-r--r--data/iconsrc/signal-0.svg68
-rw-r--r--data/iconsrc/signal-1.svg75
-rw-r--r--data/iconsrc/signal-2.svg82
-rw-r--r--data/iconsrc/signal-3.svg89
-rw-r--r--data/iconsrc/signal-4.svg96
-rw-r--r--data/iconsrc/signal-5.svg106
-rw-r--r--data/iconsrc/signal-none.svg72
-rw-r--r--data/iconsrc/signal-proto.svg195
-rw-r--r--data/iconsrc/signal.svg73
-rw-r--r--data/iconsrc/swapcall.svg85
-rw-r--r--data/iconsrc/tel-cell.svg211
-rw-r--r--data/message.pngbin0 -> 893 bytes
-rw-r--r--data/mute.pngbin0 -> 2293 bytes
-rw-r--r--data/noag.pngbin0 -> 2410 bytes
-rw-r--r--data/nobt.pngbin0 -> 1430 bytes
-rw-r--r--data/pickup.pngbin0 -> 1224 bytes
-rw-r--r--data/redial.pngbin0 -> 1929 bytes
-rw-r--r--data/signal-0.pngbin0 -> 497 bytes
-rw-r--r--data/signal-1.pngbin0 -> 756 bytes
-rw-r--r--data/signal-2.pngbin0 -> 837 bytes
-rw-r--r--data/signal-3.pngbin0 -> 918 bytes
-rw-r--r--data/signal-4.pngbin0 -> 921 bytes
-rw-r--r--data/signal-5.pngbin0 -> 968 bytes
-rw-r--r--data/signal-none.pngbin0 -> 1009 bytes
-rw-r--r--data/signal.pngbin0 -> 1124 bytes
-rw-r--r--data/swapcall.pngbin0 -> 1832 bytes
-rw-r--r--data/tel-cell.pngbin0 -> 3025 bytes
-rw-r--r--hfpd/objects.cpp2
65 files changed, 8968 insertions, 2000 deletions
diff --git a/data/Makefile.am b/data/Makefile.am
index 62a8f33..efb28ce 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -9,8 +9,17 @@ $(service_DATA): $(service_in_files) Makefile
@sed -e "s|\@bindir\@|$(bindir)|" $< > $@
endif
-# Glade XML file
-glade_DATA = hfconsole.glade dsp-sidebar.png
+# Glade XML files
+hfconsole_IMAGES = icon.png agconnect.png audioconnect.png \
+ contacts.png dialpad.png tel-cell.png \
+ battery-0.png battery-1.png battery-2.png battery-3.png \
+ battery-4.png battery-5.png \
+ mute.png nobt.png noag.png message.png \
+ pickup.png redial.png hangup.png holdcall.png swapcall.png \
+ signal-0.png signal-1.png signal-2.png signal-3.png signal-4.png \
+ signal-5.png signal.png signal-none.png
+
+glade_DATA = hfconsole.glade $(hfconsole_IMAGES)
gladedir = $(datadir)/hfconsole
bin_PROGRAMS = hfconsole
diff --git a/data/agconnect.png b/data/agconnect.png
new file mode 100644
index 0000000..5900680
--- /dev/null
+++ b/data/agconnect.png
Binary files differ
diff --git a/data/audioconnect.png b/data/audioconnect.png
new file mode 100644
index 0000000..345b140
--- /dev/null
+++ b/data/audioconnect.png
Binary files differ
diff --git a/data/battery-0.png b/data/battery-0.png
new file mode 100644
index 0000000..5fa8700
--- /dev/null
+++ b/data/battery-0.png
Binary files differ
diff --git a/data/battery-1.png b/data/battery-1.png
new file mode 100644
index 0000000..9f5fb6b
--- /dev/null
+++ b/data/battery-1.png
Binary files differ
diff --git a/data/battery-2.png b/data/battery-2.png
new file mode 100644
index 0000000..5dae78d
--- /dev/null
+++ b/data/battery-2.png
Binary files differ
diff --git a/data/battery-3.png b/data/battery-3.png
new file mode 100644
index 0000000..ec6ba76
--- /dev/null
+++ b/data/battery-3.png
Binary files differ
diff --git a/data/battery-4.png b/data/battery-4.png
new file mode 100644
index 0000000..8d71640
--- /dev/null
+++ b/data/battery-4.png
Binary files differ
diff --git a/data/battery-5.png b/data/battery-5.png
new file mode 100644
index 0000000..3ea7cf2
--- /dev/null
+++ b/data/battery-5.png
Binary files differ
diff --git a/data/contacts.png b/data/contacts.png
new file mode 100644
index 0000000..17cbf87
--- /dev/null
+++ b/data/contacts.png
Binary files differ
diff --git a/data/dialpad.png b/data/dialpad.png
new file mode 100644
index 0000000..b2e78f1
--- /dev/null
+++ b/data/dialpad.png
Binary files differ
diff --git a/data/dsp-sidebar.png b/data/dsp-sidebar.png
deleted file mode 100644
index fef826e..0000000
--- a/data/dsp-sidebar.png
+++ /dev/null
Binary files differ
diff --git a/data/hangup.png b/data/hangup.png
new file mode 100644
index 0000000..c61ee6e
--- /dev/null
+++ b/data/hangup.png
Binary files differ
diff --git a/data/hfconsole.glade b/data/hfconsole.glade
index d62c845..8df3a37 100644
--- a/data/hfconsole.glade
+++ b/data/hfconsole.glade
@@ -1,585 +1,1392 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
-<!--Generated with glade3 3.4.5 on Sun Dec 14 16:36:47 2008 -->
+<!--Generated with glade3 3.4.5 on Tue Dec 23 12:42:43 2008 -->
<glade-interface>
<widget class="GtkWindow" id="MainWindow">
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="title" translatable="yes">Hands Free Console</property>
+ <property name="icon">icon.png</property>
<signal name="destroy" handler="on_MainWindow_destroy"/>
<child>
- <widget class="GtkVBox" id="vbox1">
+ <widget class="GtkNotebook" id="HiddenNotebook">
<property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="show_tabs">False</property>
+ <property name="show_border">False</property>
<child>
- <widget class="GtkMenuBar" id="menubar1">
- <child>
- <widget class="GtkMenuItem" id="menuitem1">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Devices</property>
- <property name="use_underline">True</property>
- <child>
- <widget class="GtkMenu" id="menu1">
- <property name="visible">True</property>
- <child>
- <widget class="GtkImageMenuItem" id="imagemenuitem2">
- <property name="visible">True</property>
- <property name="label">gtk-find</property>
- <property name="use_underline">True</property>
- <property name="use_stock">True</property>
- <signal name="activate" handler="ScanButton_clicked_cb"/>
- </widget>
- </child>
- <child>
- <widget class="GtkImageMenuItem" id="imagemenuitem3">
- <property name="visible">True</property>
- <property name="label">gtk-preferences</property>
- <property name="use_underline">True</property>
- <property name="use_stock">True</property>
- <signal name="activate" handler="ConfigButton_clicked_cb"/>
- </widget>
- </child>
- <child>
- <widget class="GtkSeparatorMenuItem" id="separatormenuitem1">
- <property name="visible">True</property>
- </widget>
- </child>
- <child>
- <widget class="GtkImageMenuItem" id="imagemenuitem5">
- <property name="visible">True</property>
- <property name="label">gtk-quit</property>
- <property name="use_underline">True</property>
- <property name="use_stock">True</property>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkMenuItem" id="menuitem4">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Help</property>
- <property name="use_underline">True</property>
- <child>
- <widget class="GtkMenu" id="menu3">
- <property name="visible">True</property>
- <child>
- <widget class="GtkImageMenuItem" id="imagemenuitem10">
- <property name="visible">True</property>
- <property name="label">gtk-about</property>
- <property name="use_underline">True</property>
- <property name="use_stock">True</property>
- <signal name="activate" handler="gtk_widget_show" object="AboutDialog"/>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkHBox" id="hbox1">
+ <widget class="GtkVBox" id="vbox1">
<property name="visible">True</property>
- <property name="border_width">8</property>
- <property name="spacing">8</property>
<child>
<widget class="GtkVBox" id="vbox2">
<property name="visible">True</property>
+ <property name="border_width">8</property>
<property name="spacing">8</property>
<child>
- <widget class="GtkVBox" id="AudioGatewayBox">
- <property name="width_request">250</property>
- <property name="visible">True</property>
- <property name="spacing">8</property>
- </widget>
- </child>
- <child>
<widget class="GtkHBox" id="hbox2">
<property name="visible">True</property>
<property name="spacing">8</property>
- <property name="homogeneous">True</property>
<child>
- <widget class="GtkButton" id="ScanButton">
+ <widget class="GtkToggleButton" id="AgSelector">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="label">gtk-find</property>
- <property name="use_stock">True</property>
+ <property name="focus_on_click">False</property>
<property name="response_id">0</property>
- <signal name="clicked" handler="ScanButton_clicked_cb"/>
+ <signal name="button_press_event" handler="AgSelector_button_press_event_cb"/>
+ <signal name="toggled" handler="AgSelector_toggled_cb"/>
+ <child>
+ <widget class="GtkHBox" id="hbox15">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkLabel" id="AgSelectorLabel">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkArrow" id="AgSelectorArrow">
+ <property name="visible">True</property>
+ <property name="xpad">4</property>
+ <property name="arrow_type">GTK_ARROW_DOWN</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
</widget>
+ <packing>
+ <property name="expand">False</property>
+ </packing>
</child>
<child>
- <widget class="GtkButton" id="ConfigButton">
+ <widget class="GtkNotebook" id="AgMainStatus">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="label">gtk-preferences</property>
- <property name="use_stock">True</property>
- <property name="response_id">0</property>
- <signal name="clicked" handler="ConfigButton_clicked_cb"/>
+ <property name="show_tabs">False</property>
+ <property name="show_border">False</property>
+ <child>
+ <widget class="GtkImage" id="image22">
+ <property name="visible">True</property>
+ <property name="tooltip" translatable="yes">Has Service</property>
+ <property name="pixbuf">signal-0.png</property>
+ </widget>
+ </child>
+ <child>
+ <placeholder/>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkImage" id="image23">
+ <property name="visible">True</property>
+ <property name="tooltip" translatable="yes">Has Service</property>
+ <property name="pixbuf">signal-1.png</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkImage" id="image24">
+ <property name="visible">True</property>
+ <property name="tooltip" translatable="yes">Has Service</property>
+ <property name="pixbuf">signal-2.png</property>
+ </widget>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkImage" id="image25">
+ <property name="visible">True</property>
+ <property name="tooltip" translatable="yes">Has Service</property>
+ <property name="pixbuf">signal-3.png</property>
+ </widget>
+ <packing>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkImage" id="image26">
+ <property name="visible">True</property>
+ <property name="tooltip" translatable="yes">Has Service</property>
+ <property name="pixbuf">signal-4.png</property>
+ </widget>
+ <packing>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkImage" id="image27">
+ <property name="visible">True</property>
+ <property name="tooltip" translatable="yes">Has Service</property>
+ <property name="pixbuf">signal-5.png</property>
+ </widget>
+ <packing>
+ <property name="position">5</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkImage" id="AgSignalUnknownIndicator">
+ <property name="visible">True</property>
+ <property name="tooltip" translatable="yes">Has Service</property>
+ <property name="pixbuf">signal.png</property>
+ </widget>
+ <packing>
+ <property name="position">6</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkImage" id="image28">
+ <property name="visible">True</property>
+ <property name="tooltip" translatable="yes">No Service</property>
+ <property name="pixbuf">signal-none.png</property>
+ </widget>
+ <packing>
+ <property name="position">7</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkImage" id="image29">
+ <property name="visible">True</property>
+ <property name="pixbuf">noag.png</property>
+ </widget>
+ <packing>
+ <property name="position">8</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkImage" id="NoBluetoothIndicator">
+ <property name="visible">True</property>
+ <property name="pixbuf">nobt.png</property>
+ </widget>
+ <packing>
+ <property name="position">9</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
</widget>
<packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkVBox" id="DialPad">
- <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="spacing">8</property>
- <child>
- <widget class="GtkHBox" id="PhoneNumEntryBox">
- <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="spacing">8</property>
<child>
- <widget class="GtkEntry" id="PhoneNumEntry">
+ <widget class="GtkNotebook" id="AgBatteryStatus">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="has_focus">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="show_tabs">False</property>
+ <property name="show_border">False</property>
+ <child>
+ <widget class="GtkImage" id="image34">
+ <property name="visible">True</property>
+ <property name="pixbuf">battery-0.png</property>
+ </widget>
+ </child>
+ <child>
+ <placeholder/>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkImage" id="image33">
+ <property name="visible">True</property>
+ <property name="pixbuf">battery-1.png</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkImage" id="image32">
+ <property name="visible">True</property>
+ <property name="pixbuf">battery-2.png</property>
+ </widget>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkImage" id="image31">
+ <property name="visible">True</property>
+ <property name="pixbuf">battery-3.png</property>
+ </widget>
+ <packing>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkImage" id="image17">
+ <property name="visible">True</property>
+ <property name="pixbuf">battery-4.png</property>
+ </widget>
+ <packing>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkImage" id="image8">
+ <property name="visible">True</property>
+ <property name="pixbuf">battery-5.png</property>
+ </widget>
+ <packing>
+ <property name="position">5</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
</widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">2</property>
+ </packing>
</child>
<child>
- <widget class="GtkButton" id="PhoneNumBs">
+ <widget class="GtkImage" id="MessageIndicator">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">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">&lt;</property>
- <property name="response_id">0</property>
- <signal name="clicked" handler="PhoneNumBs_clicked_cb"/>
+ <property name="tooltip" translatable="yes">Message Waiting</property>
+ <property name="pixbuf">message.png</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
- <property name="position">1</property>
+ <property name="position">3</property>
</packing>
</child>
- </widget>
- </child>
- <child>
- <widget class="GtkTable" id="DigitButtonBox">
- <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="n_rows">4</property>
- <property name="n_columns">3</property>
- <property name="column_spacing">8</property>
- <property name="row_spacing">8</property>
- <property name="homogeneous">True</property>
<child>
- <widget class="GtkButton" id="DigitButtonPnd">
+ <widget class="GtkVSeparator" id="vseparator1">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">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="focus_on_click">False</property>
- <property name="response_id">0</property>
- <signal name="pressed" handler="DigitButton_pressed_cb" object="#"/>
- <signal name="clicked" handler="DigitButton_clicked_cb" object="#"/>
- <child>
- <widget class="GtkLabel" id="DigitLabelPnd">
- <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">&lt;span size="xx-large" weight="heavy"&gt;#&lt;/span&gt;
-</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- </widget>
- </child>
</widget>
<packing>
- <property name="left_attach">2</property>
- <property name="right_attach">3</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
+ <property name="expand">False</property>
+ <property name="position">4</property>
</packing>
</child>
<child>
- <widget class="GtkButton" id="DigitButton0">
+ <widget class="GtkLabel" id="AudioGatewayStateLabel">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">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="focus_on_click">False</property>
- <property name="response_id">0</property>
- <signal name="pressed" handler="DigitButton_pressed_cb" object="0"/>
- <signal name="clicked" handler="DigitButton_clicked_cb" object="0"/>
- <child>
- <widget class="GtkLabel" id="DigitLabel0">
- <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">&lt;span size="xx-large" weight="heavy"&gt;0&lt;/span&gt;
+ <property name="xalign">0</property>
+ <property name="label">
</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- </widget>
- </child>
</widget>
<packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
+ <property name="position">5</property>
</packing>
</child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox1">
+ <property name="visible">True</property>
+ <property name="spacing">8</property>
<child>
- <widget class="GtkButton" id="DigitButtonAst">
+ <widget class="GtkVButtonBox" id="vbuttonbox1">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">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="focus_on_click">False</property>
- <property name="response_id">0</property>
- <signal name="pressed" handler="DigitButton_pressed_cb" object="*"/>
- <signal name="clicked" handler="DigitButton_clicked_cb" object="*"/>
+ <property name="spacing">8</property>
+ <property name="layout_style">GTK_BUTTONBOX_START</property>
<child>
- <widget class="GtkLabel" id="DigitLabelAst">
+ <widget class="GtkButton" id="BarDialPad">
<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">&lt;span size="xx-large" weight="heavy"&gt;*&lt;/span&gt;
-</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="focus_on_click">False</property>
+ <property name="response_id">0</property>
+ <signal name="clicked" handler="BarDialPad_clicked_cb"/>
+ <child>
+ <widget class="GtkImage" id="image39">
+ <property name="visible">True</property>
+ <property name="pixbuf">dialpad.png</property>
+ </widget>
+ </child>
</widget>
</child>
- </widget>
- <packing>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
- </packing>
- </child>
- <child>
- <widget class="GtkButton" id="DigitButton9">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">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="focus_on_click">False</property>
- <property name="response_id">0</property>
- <signal name="pressed" handler="DigitButton_pressed_cb" object="9"/>
- <signal name="clicked" handler="DigitButton_clicked_cb" object="9"/>
<child>
- <widget class="GtkLabel" id="DigitLabel9">
+ <widget class="GtkButton" id="BarContacts">
<property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="focus_on_click">False</property>
+ <property name="response_id">0</property>
+ <signal name="clicked" handler="BarContacts_clicked_cb"/>
+ <child>
+ <widget class="GtkImage" id="image40">
+ <property name="visible">True</property>
+ <property name="pixbuf">contacts.png</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="AgConnect">
+ <property name="receives_default">True</property>
+ <property name="tooltip" translatable="yes">Connect to Device</property>
+ <property name="focus_on_click">False</property>
+ <property name="response_id">0</property>
+ <signal name="clicked" handler="AgConnect_clicked_cb"/>
+ <child>
+ <widget class="GtkImage" id="image14">
+ <property name="visible">True</property>
+ <property name="pixbuf">agconnect.png</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="AgDial">
<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">&lt;span size="xx-large" weight="heavy"&gt;9&lt;/span&gt;
-wxyz</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
+ <property name="tooltip" translatable="yes">Dial Phone Number</property>
+ <property name="focus_on_click">False</property>
+ <property name="response_id">0</property>
+ <signal name="clicked" handler="AgDial_clicked_cb"/>
+ <child>
+ <widget class="GtkImage" id="image18">
+ <property name="visible">True</property>
+ <property name="pixbuf">pickup.png</property>
+ </widget>
+ </child>
</widget>
+ <packing>
+ <property name="position">3</property>
+ </packing>
</child>
- </widget>
- <packing>
- <property name="left_attach">2</property>
- <property name="right_attach">3</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- </packing>
- </child>
- <child>
- <widget class="GtkButton" id="DigitButton8">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">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="focus_on_click">False</property>
- <property name="response_id">0</property>
- <signal name="pressed" handler="DigitButton_pressed_cb" object="8"/>
- <signal name="clicked" handler="DigitButton_clicked_cb" object="8"/>
<child>
- <widget class="GtkLabel" id="DigitLabel8">
- <property name="visible">True</property>
+ <widget class="GtkButton" id="AgRedial">
<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">&lt;span size="xx-large" weight="heavy"&gt;8&lt;/span&gt;
-tuv</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
+ <property name="tooltip" translatable="yes">Redial Last Number</property>
+ <property name="focus_on_click">False</property>
+ <property name="response_id">0</property>
+ <signal name="clicked" handler="AgRedial_clicked_cb"/>
+ <child>
+ <widget class="GtkImage" id="image16">
+ <property name="visible">True</property>
+ <property name="pixbuf">redial.png</property>
+ </widget>
+ </child>
</widget>
+ <packing>
+ <property name="position">4</property>
+ <property name="secondary">True</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="AgHangUp">
+ <property name="receives_default">True</property>
+ <property name="tooltip" translatable="yes">Hang Up Active Call</property>
+ <property name="focus_on_click">False</property>
+ <property name="response_id">0</property>
+ <signal name="clicked" handler="AgHangUp_clicked_cb"/>
+ <child>
+ <widget class="GtkImage" id="image20">
+ <property name="visible">True</property>
+ <property name="pixbuf">hangup.png</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">5</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="AgHoldCall">
+ <property name="receives_default">True</property>
+ <property name="tooltip" translatable="yes">Hold Active Call</property>
+ <property name="focus_on_click">False</property>
+ <property name="response_id">0</property>
+ <signal name="clicked" handler="AgHoldCall_clicked_cb"/>
+ <child>
+ <widget class="GtkImage" id="image15">
+ <property name="visible">True</property>
+ <property name="pixbuf">holdcall.png</property>
+ <property name="icon_size">6</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">6</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="AgSwapCall">
+ <property name="receives_default">True</property>
+ <property name="tooltip" translatable="yes">Hold Active Call</property>
+ <property name="focus_on_click">False</property>
+ <property name="response_id">0</property>
+ <signal name="clicked" handler="AgSwapCall_clicked_cb"/>
+ <child>
+ <widget class="GtkImage" id="image21">
+ <property name="visible">True</property>
+ <property name="pixbuf">swapcall.png</property>
+ <property name="icon_size">6</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">7</property>
+ </packing>
</child>
</widget>
<packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
+ <property name="expand">False</property>
</packing>
</child>
<child>
- <widget class="GtkButton" id="DigitButton7">
+ <widget class="GtkNotebook" id="FrontNotebook">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="receives_default">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="focus_on_click">False</property>
- <property name="response_id">0</property>
- <signal name="pressed" handler="DigitButton_pressed_cb" object="7"/>
- <signal name="clicked" handler="DigitButton_clicked_cb" object="7"/>
+ <property name="show_tabs">False</property>
+ <property name="show_border">False</property>
+ <property name="homogeneous">True</property>
+ <signal name="switch_page" handler="FrontNotebook_switch_page_cb"/>
<child>
- <widget class="GtkLabel" id="DigitLabel7">
+ <widget class="GtkAspectFrame" id="DialPadTab">
<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">&lt;span size="xx-large" weight="heavy"&gt;7&lt;/span&gt;
+ <property name="label_xalign">0</property>
+ <property name="label_yalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="ratio">0.75</property>
+ <property name="obey_child">False</property>
+ <child>
+ <widget class="GtkVBox" id="DialPad">
+ <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="spacing">8</property>
+ <child>
+ <widget class="GtkHBox" id="PhoneNumEntryBox">
+ <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="spacing">8</property>
+ <child>
+ <widget class="GtkEntry" id="PhoneNumEntry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="has_focus">True</property>
+ <property name="is_focus">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="GtkButton" id="PhoneNumBs">
+ <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="focus_on_click">False</property>
+ <property name="response_id">0</property>
+ <signal name="clicked" handler="PhoneNumBs_clicked_cb"/>
+ <child>
+ <widget class="GtkImage" id="image19">
+ <property name="visible">True</property>
+ <property name="stock">gtk-go-back</property>
+ <property name="icon_size">5</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkTable" id="DigitButtonBox">
+ <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="n_rows">4</property>
+ <property name="n_columns">3</property>
+ <property name="column_spacing">8</property>
+ <property name="row_spacing">8</property>
+ <property name="homogeneous">True</property>
+ <child>
+ <widget class="GtkButton" id="DigitButtonAst">
+ <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="focus_on_click">False</property>
+ <property name="response_id">0</property>
+ <signal name="pressed" handler="DigitButton_pressed_cb" object="*"/>
+ <signal name="clicked" handler="DigitButton_clicked_cb" object="*"/>
+ <child>
+ <widget class="GtkLabel" id="DigitLabelAst">
+ <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">&lt;span size="xx-large" weight="heavy"&gt;*&lt;/span&gt;
+</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_CENTER</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
+ <property name="y_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="DigitButton7">
+ <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="focus_on_click">False</property>
+ <property name="response_id">0</property>
+ <signal name="pressed" handler="DigitButton_pressed_cb" object="7"/>
+ <signal name="clicked" handler="DigitButton_clicked_cb" object="7"/>
+ <child>
+ <widget class="GtkLabel" id="DigitLabel7">
+ <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">&lt;span size="xx-large" weight="heavy"&gt;7&lt;/span&gt;
pqrs</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_CENTER</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
+ <property name="y_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="DigitButton4">
+ <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="focus_on_click">False</property>
+ <property name="response_id">0</property>
+ <signal name="pressed" handler="DigitButton_pressed_cb" object="4"/>
+ <signal name="clicked" handler="DigitButton_clicked_cb" object="4"/>
+ <child>
+ <widget class="GtkLabel" id="DigitLabel4">
+ <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">&lt;span size="xx-large" weight="heavy"&gt;4&lt;/span&gt;
+ghi</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_CENTER</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
+ <property name="y_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="DigitButton1">
+ <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="focus_on_click">False</property>
+ <property name="response_id">0</property>
+ <signal name="pressed" handler="DigitButton_pressed_cb" object="1"/>
+ <signal name="clicked" handler="DigitButton_clicked_cb" object="1"/>
+ <child>
+ <widget class="GtkLabel" id="DigitLabel1">
+ <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">&lt;span size="xx-large" weight="heavy"&gt;1&lt;/span&gt;
+</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_CENTER</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
+ <property name="y_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="DigitButton2">
+ <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="focus_on_click">False</property>
+ <property name="response_id">0</property>
+ <signal name="pressed" handler="DigitButton_pressed_cb" object="2"/>
+ <signal name="clicked" handler="DigitButton_clicked_cb" object="2"/>
+ <child>
+ <widget class="GtkLabel" id="DigitLabel2">
+ <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">&lt;span size="xx-large" weight="heavy"&gt;2&lt;/span&gt;
+abc</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_CENTER</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="x_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
+ <property name="y_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="DigitButton5">
+ <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="focus_on_click">False</property>
+ <property name="response_id">0</property>
+ <signal name="pressed" handler="DigitButton_pressed_cb" object="5"/>
+ <signal name="clicked" handler="DigitButton_clicked_cb" object="5"/>
+ <child>
+ <widget class="GtkLabel" id="DigitLabel5">
+ <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">&lt;span size="xx-large" weight="heavy"&gt;5&lt;/span&gt;
+jkl</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_CENTER</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
+ <property name="y_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="DigitButton8">
+ <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="focus_on_click">False</property>
+ <property name="response_id">0</property>
+ <signal name="pressed" handler="DigitButton_pressed_cb" object="8"/>
+ <signal name="clicked" handler="DigitButton_clicked_cb" object="8"/>
+ <child>
+ <widget class="GtkLabel" id="DigitLabel8">
+ <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">&lt;span size="xx-large" weight="heavy"&gt;8&lt;/span&gt;
+tuv</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_CENTER</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
+ <property name="y_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="DigitButton0">
+ <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="focus_on_click">False</property>
+ <property name="response_id">0</property>
+ <signal name="pressed" handler="DigitButton_pressed_cb" object="0"/>
+ <signal name="clicked" handler="DigitButton_clicked_cb" object="0"/>
+ <child>
+ <widget class="GtkLabel" id="DigitLabel0">
+ <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">&lt;span size="xx-large" weight="heavy"&gt;0&lt;/span&gt;
+</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_CENTER</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
+ <property name="y_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="DigitButtonPnd">
+ <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="focus_on_click">False</property>
+ <property name="response_id">0</property>
+ <signal name="pressed" handler="DigitButton_pressed_cb" object="#"/>
+ <signal name="clicked" handler="DigitButton_clicked_cb" object="#"/>
+ <child>
+ <widget class="GtkLabel" id="DigitLabelPnd">
+ <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">&lt;span size="xx-large" weight="heavy"&gt;#&lt;/span&gt;
+</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_CENTER</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
+ <property name="y_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="DigitButton9">
+ <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="focus_on_click">False</property>
+ <property name="response_id">0</property>
+ <signal name="pressed" handler="DigitButton_pressed_cb" object="9"/>
+ <signal name="clicked" handler="DigitButton_clicked_cb" object="9"/>
+ <child>
+ <widget class="GtkLabel" id="DigitLabel9">
+ <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">&lt;span size="xx-large" weight="heavy"&gt;9&lt;/span&gt;
+wxyz</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_CENTER</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
+ <property name="y_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="DigitButton6">
+ <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="focus_on_click">False</property>
+ <property name="response_id">0</property>
+ <signal name="pressed" handler="DigitButton_pressed_cb" object="6"/>
+ <signal name="clicked" handler="DigitButton_clicked_cb" object="6"/>
+ <child>
+ <widget class="GtkLabel" id="DigitLabel6">
+ <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">&lt;span size="xx-large" weight="heavy"&gt;6&lt;/span&gt;
+mno</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_CENTER</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
+ <property name="y_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="DigitButton3">
+ <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="focus_on_click">False</property>
+ <property name="response_id">0</property>
+ <signal name="pressed" handler="DigitButton_pressed_cb" object="3"/>
+ <signal name="clicked" handler="DigitButton_clicked_cb" object="3"/>
+ <child>
+ <widget class="GtkLabel" id="DigitLabel3">
+ <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">&lt;span size="xx-large" weight="heavy"&gt;3&lt;/span&gt;
+def</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_CENTER</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="x_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
+ <property name="y_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <placeholder/>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkVBox" id="ContactsTab">
+ <property name="visible">True</property>
+ <property name="spacing">8</property>
+ <child>
+ <widget class="GtkLabel" id="label67">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">&lt;b&gt;Contacts&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_START</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow3">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <child>
+ <widget class="GtkTreeView" id="ContactsList">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="headers_clickable">True</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHButtonBox" id="hbuttonbox4">
+ <property name="visible">True</property>
+ <property name="spacing">8</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+ <child>
+ <widget class="GtkButton" id="ContactsDelete">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="label">gtk-delete</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkButton" id="ContactsNew">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="label">gtk-new</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="ContactsEdit">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="label">gtk-edit</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
</widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
</child>
</widget>
<packing>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
+ <property name="position">1</property>
</packing>
</child>
<child>
- <widget class="GtkButton" id="DigitButton6">
+ <widget class="GtkVButtonBox" id="vbuttonbox2">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">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="focus_on_click">False</property>
- <property name="response_id">0</property>
- <signal name="pressed" handler="DigitButton_pressed_cb" object="6"/>
- <signal name="clicked" handler="DigitButton_clicked_cb" object="6"/>
+ <property name="spacing">8</property>
+ <property name="layout_style">GTK_BUTTONBOX_START</property>
<child>
- <widget class="GtkLabel" id="DigitLabel6">
+ <widget class="GtkToggleButton" id="Mute">
<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">&lt;span size="xx-large" weight="heavy"&gt;6&lt;/span&gt;
-mno</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
+ <property name="tooltip" translatable="yes">Mute Microphone</property>
+ <property name="focus_on_click">False</property>
+ <property name="response_id">0</property>
+ <signal name="toggled" handler="Mute_toggled_cb"/>
+ <child>
+ <widget class="GtkImage" id="image12">
+ <property name="visible">True</property>
+ <property name="pixbuf">mute.png</property>
+ <property name="icon_size">5</property>
+ </widget>
+ </child>
</widget>
+ <packing>
+ <property name="expand">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkToggleButton" id="AgAudioToggle">
+ <property name="visible">True</property>
+ <property name="receives_default">True</property>
+ <property name="tooltip" translatable="yes">Connect Audio</property>
+ <property name="focus_on_click">False</property>
+ <property name="image_position">GTK_POS_TOP</property>
+ <property name="response_id">0</property>
+ <signal name="toggled" handler="AgAudioToggle_toggled_cb"/>
+ <child>
+ <widget class="GtkImage" id="image13">
+ <property name="visible">True</property>
+ <property name="pixbuf">audioconnect.png</property>
+ <property name="icon_size">6</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkToggleButton" id="RecordCall">
+ <property name="visible">True</property>
+ <property name="receives_default">True</property>
+ <property name="tooltip" translatable="yes">Record Call</property>
+ <property name="focus_on_click">False</property>
+ <property name="response_id">0</property>
+ <child>
+ <widget class="GtkImage" id="image11">
+ <property name="visible">True</property>
+ <property name="stock">gtk-media-record</property>
+ <property name="icon_size">6</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="ConfigOpen">
+ <property name="visible">True</property>
+ <property name="tooltip" translatable="yes">Open Preferences</property>
+ <property name="focus_on_click">False</property>
+ <property name="response_id">0</property>
+ <signal name="clicked" handler="ConfigOpen_clicked_cb"/>
+ <child>
+ <widget class="GtkImage" id="image9">
+ <property name="visible">True</property>
+ <property name="stock">gtk-preferences</property>
+ <property name="icon_size">6</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">3</property>
+ <property name="secondary">True</property>
+ </packing>
</child>
</widget>
<packing>
- <property name="left_attach">2</property>
- <property name="right_attach">3</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
+ <property name="expand">False</property>
+ <property name="position">2</property>
</packing>
</child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkStatusbar" id="StatusBar">
+ <property name="visible">True</property>
+ <property name="spacing">2</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <placeholder/>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkVBox" id="DevicesTab">
+ <property name="visible">True</property>
+ <property name="border_width">8</property>
+ <property name="spacing">8</property>
+ <child>
+ <widget class="GtkLabel" id="label57">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">&lt;b&gt;Known Devices:&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_START</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox6">
+ <property name="visible">True</property>
+ <property name="spacing">8</property>
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow4">
+ <property name="visible">True</property>
+ <property name="can_focus">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="hscrollbar_policy">GTK_POLICY_NEVER</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
<child>
- <widget class="GtkButton" id="DigitButton5">
+ <widget class="GtkTreeView" id="DevicesList">
+ <property name="width_request">300</property>
+ <property name="height_request">200</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="receives_default">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="focus_on_click">False</property>
- <property name="response_id">0</property>
- <signal name="pressed" handler="DigitButton_pressed_cb" object="5"/>
- <signal name="clicked" handler="DigitButton_clicked_cb" object="5"/>
+ <property name="headers_clickable">True</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkVBox" id="DevicesProperties">
+ <property name="visible">True</property>
+ <property name="border_width">8</property>
+ <property name="spacing">12</property>
+ <child>
+ <widget class="GtkVBox" id="vbox11">
+ <property name="visible">True</property>
<child>
- <widget class="GtkLabel" id="DigitLabel5">
+ <widget class="GtkLabel" id="label58">
<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">&lt;span size="xx-large" weight="heavy"&gt;5&lt;/span&gt;
-jkl</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">&lt;b&gt;Device Address&lt;/b&gt;</property>
<property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
</widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="DevicesDevAddr">
+ <property name="visible">True</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
</child>
</widget>
<packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
</packing>
</child>
<child>
- <widget class="GtkButton" id="DigitButton4">
+ <widget class="GtkButton" id="DevicesDelete">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">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="focus_on_click">False</property>
+ <property name="label">gtk-delete</property>
+ <property name="use_stock">True</property>
<property name="response_id">0</property>
- <signal name="pressed" handler="DigitButton_pressed_cb" object="4"/>
- <signal name="clicked" handler="DigitButton_clicked_cb" object="4"/>
- <child>
- <widget class="GtkLabel" id="DigitLabel4">
- <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">&lt;span size="xx-large" weight="heavy"&gt;4&lt;/span&gt;
-ghi</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- </widget>
- </child>
+ <signal name="clicked" handler="DevicesDelete_clicked_cb"/>
</widget>
<packing>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
</packing>
</child>
<child>
- <widget class="GtkButton" id="DigitButton3">
+ <widget class="GtkButton" id="DevicesConnect">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">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="focus_on_click">False</property>
+ <property name="label">gtk-connect</property>
+ <property name="use_stock">True</property>
<property name="response_id">0</property>
- <signal name="pressed" handler="DigitButton_pressed_cb" object="3"/>
- <signal name="clicked" handler="DigitButton_clicked_cb" object="3"/>
- <child>
- <widget class="GtkLabel" id="DigitLabel3">
- <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">&lt;span size="xx-large" weight="heavy"&gt;3&lt;/span&gt;
-def</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- </widget>
- </child>
+ <signal name="clicked" handler="DevicesConnect_clicked_cb"/>
</widget>
<packing>
- <property name="left_attach">2</property>
- <property name="right_attach">3</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
</packing>
</child>
<child>
- <widget class="GtkButton" id="DigitButton2">
+ <widget class="GtkButton" id="DevicesDisconnect">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">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="focus_on_click">False</property>
+ <property name="label">gtk-disconnect</property>
+ <property name="use_stock">True</property>
<property name="response_id">0</property>
- <signal name="pressed" handler="DigitButton_pressed_cb" object="2"/>
- <signal name="clicked" handler="DigitButton_clicked_cb" object="2"/>
- <child>
- <widget class="GtkLabel" id="DigitLabel2">
- <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">&lt;span size="xx-large" weight="heavy"&gt;2&lt;/span&gt;
-abc</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- </widget>
- </child>
+ <signal name="clicked" handler="DevicesDisconnect_clicked_cb"/>
</widget>
<packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">3</property>
</packing>
</child>
<child>
- <widget class="GtkButton" id="DigitButton1">
+ <widget class="GtkVBox" id="vbox12">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">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="focus_on_click">False</property>
- <property name="response_id">0</property>
- <signal name="pressed" handler="DigitButton_pressed_cb" object="1"/>
- <signal name="clicked" handler="DigitButton_clicked_cb" object="1"/>
<child>
- <widget class="GtkLabel" id="DigitLabel1">
+ <widget class="GtkLabel" id="label1">
<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">&lt;span size="xx-large" weight="heavy"&gt;1&lt;/span&gt;
-</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">&lt;b&gt;Auto-Connect&lt;/b&gt;</property>
<property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
</widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
</child>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <widget class="GtkVBox" id="DialCommandBox">
- <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="spacing">8</property>
- <property name="homogeneous">True</property>
- <child>
- <widget class="GtkHBox" id="hbox6">
- <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="spacing">8</property>
- <property name="homogeneous">True</property>
<child>
- <widget class="GtkButton" id="DialPadRedial">
+ <widget class="GtkRadioButton" id="DevicesAutoConnectNever">
<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">Redial</property>
- <property name="focus_on_click">False</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text">Auto-Connect Disabled</property>
+ <property name="label" translatable="yes">Never</property>
<property name="response_id">0</property>
- <signal name="clicked" handler="DialPadRedial_clicked_cb"/>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="DevicesAutoConnectNever_toggled_cb"/>
</widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
</child>
<child>
- <widget class="GtkButton" id="DialPadXfer">
+ <widget class="GtkRadioButton" id="DevicesAutoConnectDisabled">
<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">Transfer Voice</property>
- <property name="focus_on_click">False</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text">Auto-Connect Enabled on Successful Connection</property>
+ <property name="label" translatable="yes">Voluntary</property>
<property name="response_id">0</property>
- <signal name="activate" handler="DialPadXfer_activate_cb"/>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">DevicesAutoConnectNever</property>
+ <signal name="toggled" handler="DevicesAutoConnectDisabled_toggled_cb"/>
</widget>
<packing>
- <property name="position">1</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkRadioButton" id="DevicesAutoConnectEnabled">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip_text">Auto-Connect Enabled</property>
+ <property name="label" translatable="yes">Enabled</property>
+ <property name="response_id">0</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">DevicesAutoConnectNever</property>
+ <signal name="toggled" handler="DevicesAutoConnectEnabled_toggled_cb"/>
+ </widget>
+ <packing>
+ <property name="position">3</property>
</packing>
</child>
</widget>
<packing>
<property name="expand">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkButton" id="DialPadDial">
- <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">Dial</property>
- <property name="focus_on_click">False</property>
- <property name="response_id">0</property>
- <signal name="clicked" handler="DialPadDial_clicked_cb"/>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="position">1</property>
+ <property name="fill">False</property>
+ <property name="position">4</property>
</packing>
</child>
</widget>
<packing>
<property name="expand">False</property>
- <property name="position">2</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
</packing>
</child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHButtonBox" id="hbuttonbox8">
+ <property name="visible">True</property>
+ <property name="spacing">8</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+ <child>
+ <widget class="GtkButton" id="DevicesAdd">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="label">gtk-add</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ <signal name="clicked" handler="DevicesAdd_clicked_cb"/>
+ </widget>
+ </child>
<child>
- <widget class="GtkToggleButton" id="Mute">
+ <widget class="GtkButton" id="DevicesClose">
<property name="visible">True</property>
- <property name="label" translatable="yes">Mute</property>
- <property name="focus_on_click">False</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="label">gtk-close</property>
+ <property name="use_stock">True</property>
<property name="response_id">0</property>
- <signal name="toggled" handler="Mute_toggled_cb"/>
+ <signal name="clicked" handler="DevicesClose_clicked_cb"/>
</widget>
<packing>
- <property name="position">3</property>
+ <property name="position">1</property>
</packing>
</child>
</widget>
<packing>
<property name="expand">False</property>
- <property name="position">1</property>
+ <property name="position">2</property>
</packing>
</child>
</widget>
@@ -588,569 +1395,1528 @@ abc</property>
</packing>
</child>
<child>
- <widget class="GtkStatusbar" id="StatusBar">
- <property name="visible">True</property>
- <property name="spacing">2</property>
- </widget>
+ <placeholder/>
<packing>
- <property name="expand">False</property>
- <property name="position">2</property>
+ <property name="type">tab</property>
</packing>
</child>
- </widget>
- </child>
- </widget>
- <widget class="GtkDialog" id="ConfigDialog">
- <property name="width_request">460</property>
- <property name="border_width">5</property>
- <property name="title" translatable="yes">Configuration</property>
- <property name="modal">True</property>
- <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="transient_for">MainWindow</property>
- <property name="has_separator">False</property>
- <signal name="close" handler="on_ConfigDialog_close"/>
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox1">
- <property name="visible">True</property>
- <property name="spacing">2</property>
<child>
- <widget class="GtkNotebook" id="notebook1">
+ <widget class="GtkVBox" id="ScanTab">
<property name="visible">True</property>
- <property name="can_focus">True</property>
+ <property name="border_width">8</property>
+ <property name="spacing">8</property>
+ <child>
+ <widget class="GtkLabel" id="label41">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">&lt;b&gt;Discovered Devices:&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow1">
+ <property name="visible">True</property>
+ <property name="can_focus">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="hscrollbar_policy">GTK_POLICY_NEVER</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <child>
+ <widget class="GtkTreeView" id="ScanResults">
+ <property name="width_request">300</property>
+ <property name="height_request">200</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="headers_clickable">True</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
<child>
- <widget class="GtkVBox" id="vbox3">
+ <widget class="GtkHBox" id="ScanActivity">
+ <property name="no_show_all">True</property>
+ <child>
+ <widget class="GtkProgressBar" id="ScanActivityIndicator">
+ <property name="visible">True</property>
+ <property name="activity_mode">True</property>
+ <property name="pulse_step">0.14999999999999999</property>
+ <property name="text" translatable="yes">Searching...</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHButtonBox" id="hbuttonbox2">
<property name="visible">True</property>
- <property name="border_width">18</property>
<property name="spacing">8</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
<child>
- <widget class="GtkFrame" id="frame1">
+ <widget class="GtkButton" id="ScanHistory">
<property name="visible">True</property>
- <property name="label_xalign">0</property>
- <child>
- <widget class="GtkAlignment" id="alignment1">
- <property name="visible">True</property>
- <property name="left_padding">8</property>
- <child>
- <widget class="GtkVBox" id="vbox4">
- <property name="visible">True</property>
- <property name="border_width">8</property>
- <property name="spacing">8</property>
- <child>
- <widget class="GtkRadioButton" id="ConfigSecNone">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">No security</property>
- <property name="response_id">0</property>
- <property name="active">True</property>
- <property name="draw_indicator">True</property>
- </widget>
- </child>
- <child>
- <widget class="GtkRadioButton" id="ConfigSecAuth">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Require device authentication</property>
- <property name="response_id">1</property>
- <property name="active">True</property>
- <property name="draw_indicator">True</property>
- <property name="group">ConfigSecNone</property>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <widget class="GtkRadioButton" id="ConfigSecCrypt">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Require device authentication and encryption</property>
- <property name="response_id">2</property>
- <property name="active">True</property>
- <property name="draw_indicator">True</property>
- <property name="group">ConfigSecNone</property>
- </widget>
- <packing>
- <property name="position">2</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkLabel" id="label5">
- <property name="visible">True</property>
- <property name="label" translatable="yes">&lt;b&gt;Security&lt;/b&gt;</property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="label" translatable="yes">History</property>
+ <property name="response_id">-2</property>
+ <signal name="clicked" handler="ScanHistory_clicked_cb"/>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkButton" id="ScanRestart">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">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">gtk-refresh</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">-1</property>
+ <signal name="clicked" handler="ScanRestart_clicked_cb"/>
</widget>
<packing>
<property name="expand">False</property>
+ <property name="position">1</property>
</packing>
</child>
<child>
- <widget class="GtkCheckButton" id="ConfigAcceptUnknown">
+ <widget class="GtkButton" id="ScanClose">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="label" translatable="yes">Accept connections from unknown devices</property>
+ <property name="receives_default">True</property>
+ <property name="label">gtk-close</property>
+ <property name="use_stock">True</property>
<property name="response_id">0</property>
- <property name="draw_indicator">True</property>
+ <signal name="clicked" handler="ScanClose_clicked_cb"/>
</widget>
<packing>
- <property name="expand">False</property>
- <property name="position">1</property>
+ <property name="position">3</property>
</packing>
</child>
<child>
- <widget class="GtkCheckButton" id="ConfigAutoReconnect">
+ <widget class="GtkButton" id="ScanAdd">
<property name="visible">True</property>
+ <property name="sensitive">False</property>
<property name="can_focus">True</property>
- <property name="label" translatable="yes">Enable periodic auto-reconnection</property>
+ <property name="receives_default">True</property>
+ <property name="label">gtk-add</property>
+ <property name="use_stock">True</property>
<property name="response_id">0</property>
- <property name="draw_indicator">True</property>
+ <signal name="clicked" handler="ScanAdd_clicked_cb"/>
</widget>
<packing>
- <property name="expand">False</property>
+ <property name="pack_type">GTK_PACK_END</property>
<property name="position">2</property>
</packing>
</child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkVBox" id="HistoryTab">
+ <property name="visible">True</property>
+ <property name="border_width">8</property>
+ <property name="spacing">8</property>
+ <child>
+ <widget class="GtkLabel" id="label40">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">&lt;b&gt;Device History:&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow2">
+ <property name="visible">True</property>
+ <property name="can_focus">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="hscrollbar_policy">GTK_POLICY_NEVER</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
<child>
- <widget class="GtkCheckButton" id="ConfigVoicePersist">
+ <widget class="GtkTreeView" id="HistoryResults">
+ <property name="width_request">300</property>
+ <property name="height_request">200</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="label" translatable="yes">Keep existing voice connections when console terminates</property>
+ <property name="headers_clickable">True</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHButtonBox" id="hbuttonbox5">
+ <property name="visible">True</property>
+ <property name="spacing">8</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+ <child>
+ <widget class="GtkButton" id="HistoryOK">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="label">gtk-add</property>
+ <property name="use_stock">True</property>
<property name="response_id">0</property>
- <property name="draw_indicator">True</property>
+ <signal name="clicked" handler="HistoryOK_clicked_cb"/>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkButton" id="HistoryCancel">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="label">gtk-close</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">1</property>
+ <signal name="clicked" handler="HistoryCancel_clicked_cb"/>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkVBox" id="NewDeviceTab">
+ <property name="visible">True</property>
+ <property name="border_width">8</property>
+ <property name="spacing">8</property>
+ <child>
+ <widget class="GtkHBox" id="hbox14">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkImage" id="image10">
+ <property name="visible">True</property>
+ <property name="xpad">8</property>
+ <property name="ypad">8</property>
+ <property name="stock">gtk-dialog-info</property>
+ <property name="icon_size">6</property>
</widget>
<packing>
<property name="expand">False</property>
- <property name="position">3</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label65">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="xpad">8</property>
+ <property name="label" translatable="yes">&lt;b&gt;New Device Detected&lt;/b&gt;
+At least one unknown device attempted to connect. Would you like to add a device to the list of known devices?</property>
+ <property name="use_markup">True</property>
+ <property name="wrap">True</property>
+ <property name="wrap_mode">PANGO_WRAP_WORD_CHAR</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow5">
+ <property name="visible">True</property>
+ <property name="can_focus">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="hscrollbar_policy">GTK_POLICY_NEVER</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <child>
+ <widget class="GtkTreeView" id="NewDeviceList">
+ <property name="width_request">300</property>
+ <property name="height_request">200</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="headers_clickable">True</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHButtonBox" id="hbuttonbox9">
+ <property name="visible">True</property>
+ <property name="spacing">8</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+ <child>
+ <widget class="GtkButton" id="NewDeviceClose">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="label">gtk-close</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ <signal name="clicked" handler="NewDeviceClose_clicked_cb"/>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkButton" id="NewDeviceClear">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="label">gtk-clear</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ <signal name="clicked" handler="NewDeviceClear_clicked_cb"/>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="NewDeviceAdd">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="label">gtk-add</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ <signal name="clicked" handler="NewDeviceAdd_clicked_cb"/>
+ </widget>
+ <packing>
+ <property name="position">2</property>
</packing>
</child>
</widget>
<packing>
- <property name="tab_fill">False</property>
+ <property name="expand">False</property>
+ <property name="position">2</property>
</packing>
</child>
+ </widget>
+ <packing>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkVBox" id="ContactTab">
+ <property name="visible">True</property>
+ <property name="border_width">8</property>
+ <property name="spacing">8</property>
<child>
- <widget class="GtkLabel" id="label1">
+ <widget class="GtkLabel" id="label2">
<property name="visible">True</property>
- <property name="label" translatable="yes">Bluetooth</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">&lt;b&gt;Contact Information:&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
</widget>
<packing>
- <property name="type">tab</property>
- <property name="tab_fill">False</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
</packing>
</child>
<child>
- <widget class="GtkTable" id="table1">
+ <widget class="GtkTable" id="table2">
<property name="visible">True</property>
- <property name="border_width">18</property>
<property name="n_rows">5</property>
- <property name="n_columns">3</property>
+ <property name="n_columns">2</property>
<property name="column_spacing">8</property>
<property name="row_spacing">8</property>
<child>
- <widget class="GtkComboBoxEntry" id="ConfigDriverDevList">
+ <widget class="GtkLabel" id="label4">
<property name="visible">True</property>
- <child internal-child="entry">
- <widget class="GtkEntry" id="ConfigDriverOpts">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- </widget>
- </child>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Mobile:</property>
</widget>
<packing>
- <property name="left_attach">1</property>
- <property name="right_attach">3</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
+ <property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
- <widget class="GtkCheckButton" id="ConfigMinOutBufferHint">
+ <widget class="GtkEntry" id="ContactMobile">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="label" translatable="yes">Output Buffer</property>
- <property name="xalign">0</property>
- <property name="response_id">0</property>
- <property name="draw_indicator">True</property>
- <signal name="toggled" handler="ConfigMinOutBufferHint_toggled_cb"/>
</widget>
<packing>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
+ <property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
- <widget class="GtkCheckButton" id="ConfigPacketIntervalHint">
+ <widget class="GtkEntry" id="ContactHome">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="label" translatable="yes">Packet Interval</property>
- <property name="xalign">0</property>
- <property name="response_id">0</property>
- <property name="draw_indicator">True</property>
- <signal name="toggled" handler="ConfigPacketIntervalHint_toggled_cb"/>
</widget>
<packing>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
<property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
+ <property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="ConfigMinOutBufferLabel">
+ <widget class="GtkLabel" id="label36">
<property name="visible">True</property>
<property name="xalign">0</property>
+ <property name="label" translatable="yes">Home:</property>
</widget>
<packing>
- <property name="left_attach">2</property>
- <property name="right_attach">3</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
+ <property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
- <widget class="GtkHScale" id="ConfigPacketInterval">
+ <widget class="GtkEntry" id="ContactWork">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="adjustment">1 0 1 0.01 0.10000000000000001 0</property>
- <property name="restrict_to_fill_level">False</property>
- <property name="fill_level">1</property>
- <property name="digits">0</property>
- <property name="draw_value">False</property>
- <property name="value_pos">GTK_POS_RIGHT</property>
- <signal name="value_changed" handler="ConfigPacketInterval_value_changed_cb"/>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="y_options"></property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="ConfigPacketIntervalLabel">
- <property name="width_request">64</property>
+ <widget class="GtkLabel" id="label42">
<property name="visible">True</property>
<property name="xalign">0</property>
+ <property name="label" translatable="yes">Work:</property>
</widget>
<packing>
- <property name="left_attach">2</property>
- <property name="right_attach">3</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
<property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
+ <property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label6">
+ <widget class="GtkLabel" id="label44">
<property name="visible">True</property>
<property name="xalign">0</property>
- <property name="label" translatable="yes">Driver</property>
+ <property name="label" translatable="yes">&lt;b&gt;Telephone Numbers&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
</widget>
<packing>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
+ <property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
- <widget class="GtkHScale" id="ConfigMinOutBuffer">
+ <widget class="GtkEntry" id="ContactName">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="adjustment">1 0 1 0.01 0.10000000000000001 0</property>
- <property name="draw_value">False</property>
- <property name="value_pos">GTK_POS_RIGHT</property>
- <signal name="value_changed" handler="ConfigMinOutBuffer_value_changed_cb"/>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
- <property name="y_options"></property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label7">
+ <widget class="GtkLabel" id="label3">
<property name="visible">True</property>
<property name="xalign">0</property>
- <property name="label" translatable="yes">Device / Options</property>
+ <property name="label" translatable="yes">Name:</property>
</widget>
<packing>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
+ <property name="y_options">GTK_FILL</property>
</packing>
</child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHButtonBox" id="hbuttonbox10">
+ <property name="visible">True</property>
+ <property name="spacing">8</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+ <child>
+ <widget class="GtkButton" id="ContactCancel">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="label">gtk-add</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ </child>
<child>
- <widget class="GtkComboBox" id="ConfigDriver">
+ <widget class="GtkButton" id="ContactOK">
<property name="visible">True</property>
- <property name="items" translatable="yes"></property>
- <signal name="changed" handler="ConfigDriver_changed_cb"/>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="label">gtk-close</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">1</property>
</widget>
<packing>
- <property name="left_attach">1</property>
- <property name="right_attach">3</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
+ <property name="position">1</property>
</packing>
</child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">5</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkVBox" id="ChooseNumberTab">
+ <property name="visible">True</property>
+ <property name="border_width">8</property>
+ <property name="spacing">8</property>
+ <child>
+ <widget class="GtkHBox" id="hbox16">
+ <property name="visible">True</property>
<child>
- <widget class="GtkFrame" id="frame2">
+ <widget class="GtkImage" id="image35">
<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_xalign">0</property>
+ <property name="xpad">8</property>
+ <property name="ypad">8</property>
+ <property name="pixbuf">contacts.png</property>
+ <property name="icon_size">6</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label53">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="xpad">8</property>
+ <property name="label" translatable="yes">&lt;b&gt;Select Telephone Number&lt;/b&gt;
+The contact you wish to call has multiple telephone numbers. Select the number you wish to call from the list.</property>
+ <property name="use_markup">True</property>
+ <property name="wrap">True</property>
+ <property name="wrap_mode">PANGO_WRAP_WORD_CHAR</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkVButtonBox" id="vbuttonbox3">
+ <property name="visible">True</property>
+ <property name="spacing">8</property>
+ <property name="layout_style">GTK_BUTTONBOX_START</property>
+ <child>
+ <widget class="GtkButton" id="button1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="focus_on_click">False</property>
+ <property name="response_id">0</property>
<child>
- <widget class="GtkAlignment" id="alignment2">
+ <widget class="GtkHBox" id="hbox18">
<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="bottom_padding">8</property>
- <property name="left_padding">12</property>
+ <property name="border_width">4</property>
+ <property name="spacing">8</property>
<child>
- <widget class="GtkVBox" id="vbox10">
+ <widget class="GtkImage" id="image36">
<property name="visible">True</property>
- <property name="spacing">8</property>
+ <property name="pixbuf">tel-cell.png</property>
+ <property name="icon_size">6</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label64">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">&lt;b&gt;Mobile&lt;/b&gt;
+</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button2">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="focus_on_click">False</property>
+ <property name="response_id">0</property>
+ <child>
+ <widget class="GtkHBox" id="hbox19">
+ <property name="visible">True</property>
+ <property name="border_width">4</property>
+ <property name="spacing">8</property>
+ <child>
+ <widget class="GtkImage" id="image37">
+ <property name="visible">True</property>
+ <property name="stock">gtk-home</property>
+ <property name="icon_size">6</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label68">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">&lt;b&gt;Home&lt;/b&gt;
+</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button3">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="focus_on_click">False</property>
+ <property name="response_id">0</property>
+ <child>
+ <widget class="GtkHBox" id="hbox20">
+ <property name="visible">True</property>
+ <property name="border_width">4</property>
+ <property name="spacing">8</property>
+ <child>
+ <widget class="GtkImage" id="image38">
+ <property name="visible">True</property>
+ <property name="stock">gtk-home</property>
+ <property name="icon_size">6</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label69">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">&lt;b&gt;Work&lt;/b&gt;
+</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHButtonBox" id="hbuttonbox11">
+ <property name="visible">True</property>
+ <property name="spacing">8</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+ <child>
+ <widget class="GtkButton" id="ChooseNumberCancel">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="label" translatable="yes">gtk-cancel</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">6</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkVBox" id="ConfigTab">
+ <property name="visible">True</property>
+ <property name="border_width">8</property>
+ <property name="spacing">8</property>
+ <child>
+ <widget class="GtkNotebook" id="notebook2">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <child>
+ <widget class="GtkVBox" id="vbox3">
+ <property name="visible">True</property>
+ <property name="border_width">18</property>
+ <property name="spacing">8</property>
+ <child>
+ <widget class="GtkFrame" id="frame1">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <child>
+ <widget class="GtkAlignment" id="alignment1">
+ <property name="visible">True</property>
+ <property name="left_padding">8</property>
<child>
- <widget class="GtkHBox" id="hbox8">
+ <widget class="GtkVBox" id="vbox4">
<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="border_width">10</property>
- <property name="spacing">10</property>
+ <property name="border_width">8</property>
+ <property name="spacing">8</property>
<child>
- <widget class="GtkToggleButton" id="ConfigFeedbackTest">
+ <widget class="GtkRadioButton" id="ConfigSecNone">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="receives_default">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">Feedback Test</property>
+ <property name="label" translatable="yes">No security</property>
<property name="response_id">0</property>
- <signal name="toggled" handler="ConfigFeedbackTest_toggled_cb"/>
+ <property name="draw_indicator">True</property>
</widget>
</child>
<child>
- <widget class="GtkLabel" id="label21">
+ <widget class="GtkRadioButton" id="ConfigSecAuth">
<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">Real Packet Size:</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Require device authentication</property>
+ <property name="response_id">1</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">ConfigSecNone</property>
</widget>
<packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="ConfigRealPacketSizeLabel">
- <property name="width_request">64</property>
+ <widget class="GtkRadioButton" id="ConfigSecCrypt">
<property name="visible">True</property>
- <property name="xalign">0</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Require device authentication and encryption</property>
+ <property name="response_id">2</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">ConfigSecNone</property>
</widget>
<packing>
- <property name="expand">False</property>
<property name="position">2</property>
</packing>
</child>
</widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkHBox" id="hbox111">
- <property name="visible">True</property>
- <property name="spacing">8</property>
- <child>
- <widget class="GtkImage" id="ConfigSkewNotice">
- <property name="no_show_all">True</property>
- <property name="stock">gtk-dialog-warning</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="ConfigSkewNoticeLabel">
- <property name="no_show_all">True</property>
- <property name="xalign">0</property>
- <property name="wrap">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="padding">4</property>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
</child>
</widget>
</child>
+ <child>
+ <widget class="GtkLabel" id="label5">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Security&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
</widget>
+ <packing>
+ <property name="expand">False</property>
+ </packing>
</child>
<child>
- <widget class="GtkLabel" id="label20">
+ <widget class="GtkCheckButton" id="ConfigAcceptUnknown">
<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">&lt;b&gt;Test&lt;/b&gt;</property>
- <property name="use_markup">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Accept connections from unknown devices</property>
+ <property name="response_id">0</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkCheckButton" id="ConfigVoicePersist">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Keep existing voice connections when console terminates</property>
+ <property name="response_id">0</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox13">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkButton" id="ConfigDevices">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="label" translatable="yes">Manage Devices...</property>
+ <property name="response_id">0</property>
+ <signal name="clicked" handler="ConfigDevices_clicked_cb"/>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
</widget>
<packing>
- <property name="type">label_item</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">3</property>
</packing>
</child>
</widget>
<packing>
- <property name="right_attach">3</property>
- <property name="top_attach">4</property>
- <property name="bottom_attach">5</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
+ <property name="tab_fill">False</property>
</packing>
</child>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label2">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Audio Device</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- <property name="position">1</property>
- <property name="tab_fill">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkVBox" id="vbox6">
- <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="GtkVBox" id="vbox5">
+ <widget class="GtkLabel" id="label6">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Bluetooth</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkTable" id="table1">
<property name="visible">True</property>
<property name="border_width">18</property>
- <property name="spacing">10</property>
+ <property name="n_rows">6</property>
+ <property name="n_columns">3</property>
+ <property name="column_spacing">8</property>
+ <property name="row_spacing">8</property>
<child>
- <widget class="GtkTable" id="ConfigDsp">
+ <widget class="GtkLabel" id="ConfigMinOutBufferLabel">
<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="n_rows">5</property>
- <property name="n_columns">3</property>
- <property name="column_spacing">10</property>
- <property name="row_spacing">10</property>
- <child>
- <widget class="GtkLabel" id="ConfigDereverbDecayLabel">
+ <property name="xalign">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHScale" id="ConfigMinOutBuffer">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="adjustment">1 0 1 0.01 0.10000000000000001 0</property>
+ <property name="draw_value">False</property>
+ <property name="value_pos">GTK_POS_RIGHT</property>
+ <signal name="value_changed" handler="ConfigMinOutBuffer_value_changed_cb"/>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="ConfigJitterWindowLabel">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkCheckButton" id="ConfigJitterWindowHint">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Jitter Window</property>
+ <property name="xalign">0</property>
+ <property name="response_id">0</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="ConfigJitterWindowHint_toggled_cb"/>
+ </widget>
+ <packing>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkComboBoxEntry" id="ConfigDriverDevList">
+ <property name="visible">True</property>
+ <child internal-child="entry">
+ <widget class="GtkEntry" id="comboboxentry-entry2">
<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="xalign">0</property>
- <property name="label">0</property>
+ <property name="can_focus">True</property>
</widget>
- <packing>
- <property name="left_attach">2</property>
- <property name="right_attach">3</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options">GTK_FILL</property>
- </packing>
</child>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkCheckButton" id="ConfigMinOutBufferHint">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Output Buffer</property>
+ <property name="xalign">0</property>
+ <property name="response_id">0</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="ConfigMinOutBufferHint_toggled_cb"/>
+ </widget>
+ <packing>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkCheckButton" id="ConfigPacketIntervalHint">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Packet Interval</property>
+ <property name="xalign">0</property>
+ <property name="response_id">0</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="ConfigPacketIntervalHint_toggled_cb"/>
+ </widget>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHScale" id="ConfigPacketInterval">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="adjustment">1 0 1 0.01 0.10000000000000001 0</property>
+ <property name="restrict_to_fill_level">False</property>
+ <property name="fill_level">1</property>
+ <property name="digits">0</property>
+ <property name="draw_value">False</property>
+ <property name="value_pos">GTK_POS_RIGHT</property>
+ <signal name="value_changed" handler="ConfigPacketInterval_value_changed_cb"/>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="ConfigPacketIntervalLabel">
+ <property name="width_request">64</property>
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label7">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Driver</property>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHScale" id="ConfigJitterWindow">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="adjustment">1 0 1 0.01 0.10000000000000001 0</property>
+ <property name="draw_value">False</property>
+ <property name="value_pos">GTK_POS_RIGHT</property>
+ <signal name="value_changed" handler="ConfigJitterWindow_value_changed_cb"/>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label10">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Device / Options</property>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkComboBox" id="ConfigDriver">
+ <property name="visible">True</property>
+ <property name="items" translatable="yes"></property>
+ <signal name="changed" handler="ConfigDriver_changed_cb"/>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkFrame" id="frame2">
+ <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_xalign">0</property>
<child>
- <widget class="GtkLabel" id="ConfigDereverbValueLabel">
+ <widget class="GtkAlignment" id="alignment2">
<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="xalign">0</property>
- <property name="label">0</property>
+ <property name="bottom_padding">8</property>
+ <property name="left_padding">12</property>
+ <child>
+ <widget class="GtkVBox" id="vbox10">
+ <property name="visible">True</property>
+ <property name="spacing">8</property>
+ <child>
+ <widget class="GtkHBox" id="hbox8">
+ <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="border_width">10</property>
+ <property name="spacing">10</property>
+ <child>
+ <widget class="GtkToggleButton" id="ConfigFeedbackTest">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">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">Feedback Test</property>
+ <property name="response_id">0</property>
+ <signal name="toggled" handler="ConfigFeedbackTest_toggled_cb"/>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label21">
+ <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">Real Packet Size:</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="ConfigRealPacketSizeLabel">
+ <property name="width_request">64</property>
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox111">
+ <property name="visible">True</property>
+ <property name="spacing">8</property>
+ <child>
+ <widget class="GtkImage" id="ConfigSkewNotice">
+ <property name="no_show_all">True</property>
+ <property name="stock">gtk-dialog-warning</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="ConfigSkewNoticeLabel">
+ <property name="no_show_all">True</property>
+ <property name="xalign">0</property>
+ <property name="wrap">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="padding">4</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
</widget>
- <packing>
- <property name="left_attach">2</property>
- <property name="right_attach">3</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options">GTK_FILL</property>
- </packing>
</child>
<child>
- <widget class="GtkCheckButton" id="ConfigDenoise">
+ <widget class="GtkLabel" id="label20">
<property name="visible">True</property>
- <property name="can_focus">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">Noise Reduction</property>
- <property name="xalign">0</property>
- <property name="response_id">0</property>
- <property name="draw_indicator">True</property>
- <signal name="toggled" handler="ConfigDenoise_toggled_cb"/>
+ <property name="label" translatable="yes">&lt;b&gt;Test&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
</widget>
<packing>
- <property name="right_attach">3</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
+ <property name="type">label_item</property>
</packing>
</child>
+ </widget>
+ <packing>
+ <property name="right_attach">3</property>
+ <property name="top_attach">5</property>
+ <property name="bottom_attach">6</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label19">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Audio Device</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ <property name="position">1</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkVBox" id="vbox6">
+ <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="GtkVBox" id="vbox5">
+ <property name="visible">True</property>
+ <property name="border_width">18</property>
+ <property name="spacing">10</property>
<child>
- <widget class="GtkLabel" id="label10">
+ <widget class="GtkTable" id="ConfigDsp">
<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="xalign">0</property>
- <property name="label" translatable="yes">Auto Gain</property>
+ <property name="n_rows">5</property>
+ <property name="n_columns">3</property>
+ <property name="column_spacing">10</property>
+ <property name="row_spacing">10</property>
+ <child>
+ <widget class="GtkLabel" id="ConfigDereverbDecayLabel">
+ <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="xalign">0</property>
+ <property name="label">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="ConfigDereverbValueLabel">
+ <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="xalign">0</property>
+ <property name="label">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkCheckButton" id="ConfigDenoise">
+ <property name="visible">True</property>
+ <property name="can_focus">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">Noise Reduction</property>
+ <property name="xalign">0</property>
+ <property name="response_id">0</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="ConfigDenoise_toggled_cb"/>
+ </widget>
+ <packing>
+ <property name="right_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label34">
+ <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="xalign">0</property>
+ <property name="label" translatable="yes">Auto Gain</property>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkCheckButton" id="ConfigDereverb">
+ <property name="visible">True</property>
+ <property name="can_focus">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">Dereverb</property>
+ <property name="response_id">0</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="ConfigDereverb_toggled_cb"/>
+ </widget>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHScale" id="ConfigDereverbValue">
+ <property name="visible">True</property>
+ <property name="can_focus">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="adjustment">0 0 1 0.01 0.10000000000000001 0</property>
+ <property name="digits">2</property>
+ <property name="draw_value">False</property>
+ <property name="value_pos">GTK_POS_RIGHT</property>
+ <signal name="value_changed" handler="ConfigDereverbValue_value_changed_cb"/>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHScale" id="ConfigDereverbDecay">
+ <property name="visible">True</property>
+ <property name="can_focus">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="adjustment">0 0 1 0.01 0.10000000000000001 0</property>
+ <property name="digits">2</property>
+ <property name="draw_value">False</property>
+ <property name="value_pos">GTK_POS_RIGHT</property>
+ <signal name="value_changed" handler="ConfigDereverbDecay_value_changed_cb"/>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHScale" id="ConfigAutoGain">
+ <property name="visible">True</property>
+ <property name="can_focus">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="adjustment">0 0 20 1 10 0</property>
+ <property name="digits">0</property>
+ <property name="draw_value">False</property>
+ <property name="value_pos">GTK_POS_RIGHT</property>
+ <signal name="value_changed" handler="ConfigAutoGain_value_changed_cb"/>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="ConfigAutoGainLabel">
+ <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="xalign">0</property>
+ <property name="label">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkCheckButton" id="ConfigEchoCancel">
+ <property name="visible">True</property>
+ <property name="can_focus">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">Echo Cancelation</property>
+ <property name="response_id">0</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="ConfigEchoCancel_toggled_cb"/>
+ </widget>
+ <packing>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHScale" id="ConfigEchoCancelTail">
+ <property name="visible">True</property>
+ <property name="can_focus">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="adjustment">0 0 1 0.01 0.10000000000000001 0</property>
+ <property name="draw_value">False</property>
+ <signal name="value_changed" handler="ConfigEchoCancelTail_value_changed_cb"/>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="ConfigEchoCancelTailLabel">
+ <property name="width_request">64</property>
+ <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="xalign">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
</widget>
<packing>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
+ <property name="expand">False</property>
</packing>
</child>
<child>
- <widget class="GtkCheckButton" id="ConfigDereverb">
+ <widget class="GtkButton" id="ConfigDspTest">
<property name="visible">True</property>
<property name="can_focus">True</property>
+ <property name="receives_default">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">Dereverb</property>
+ <property name="label" translatable="yes">Test Signal Processing</property>
<property name="response_id">0</property>
- <property name="draw_indicator">True</property>
- <signal name="toggled" handler="ConfigDereverb_toggled_cb"/>
+ <signal name="clicked" handler="ConfigDspTest_clicked_cb"/>
</widget>
<packing>
- <property name="top_attach">2</property>
- <property name="bottom_attach">4</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
+ <property name="expand">False</property>
+ <property name="position">1</property>
</packing>
</child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label35">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Signal Processing</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ <property name="position">2</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkVBox" id="vbox7">
+ <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="border_width">18</property>
+ <child>
+ <widget class="GtkTable" id="table4">
+ <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="n_rows">3</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">5</property>
+ <property name="row_spacing">5</property>
<child>
- <widget class="GtkHScale" id="ConfigDereverbValue">
+ <widget class="GtkEntry" id="ConfigAudioDetachCommand">
<property name="visible">True</property>
<property name="can_focus">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="adjustment">0 0 1 0.01 0.10000000000000001 0</property>
- <property name="digits">2</property>
- <property name="draw_value">False</property>
- <property name="value_pos">GTK_POS_RIGHT</property>
- <signal name="value_changed" handler="ConfigDereverbValue_value_changed_cb"/>
</widget>
<packing>
<property name="left_attach">1</property>
@@ -1161,205 +2927,431 @@ abc</property>
</packing>
</child>
<child>
- <widget class="GtkHScale" id="ConfigDereverbDecay">
+ <widget class="GtkEntry" id="ConfigAudioAttachCommand">
<property name="visible">True</property>
<property name="can_focus">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="adjustment">0 0 1 0.01 0.10000000000000001 0</property>
- <property name="digits">2</property>
- <property name="draw_value">False</property>
- <property name="value_pos">GTK_POS_RIGHT</property>
- <signal name="value_changed" handler="ConfigDereverbDecay_value_changed_cb"/>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
- <widget class="GtkHScale" id="ConfigAutoGain">
+ <widget class="GtkLabel" id="label38">
<property name="visible">True</property>
- <property name="can_focus">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="adjustment">0 0 20 1 10 0</property>
- <property name="digits">0</property>
- <property name="draw_value">False</property>
- <property name="value_pos">GTK_POS_RIGHT</property>
- <signal name="value_changed" handler="ConfigAutoGain_value_changed_cb"/>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Audio Detach Command:</property>
</widget>
<packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="y_options">GTK_FILL</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="ConfigAutoGainLabel">
+ <widget class="GtkLabel" id="label37">
<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="xalign">0</property>
- <property name="label">0</property>
+ <property name="label" translatable="yes">Audio Attach Command:</property>
</widget>
<packing>
- <property name="left_attach">2</property>
- <property name="right_attach">3</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
- <property name="y_options">GTK_FILL</property>
+ <property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkCheckButton" id="ConfigEchoCancel">
+ <widget class="GtkLabel" id="label39">
<property name="visible">True</property>
- <property name="can_focus">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">Echo Cancelation</property>
- <property name="response_id">0</property>
- <property name="draw_indicator">True</property>
- <signal name="toggled" handler="ConfigEchoCancel_toggled_cb"/>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Ringer Sound:</property>
</widget>
<packing>
- <property name="top_attach">4</property>
- <property name="bottom_attach">5</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkHScale" id="ConfigEchoCancelTail">
+ <widget class="GtkFileChooserButton" id="ConfigRingerFile">
<property name="visible">True</property>
- <property name="can_focus">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="adjustment">0 0 1 0.01 0.10000000000000001 0</property>
- <property name="draw_value">False</property>
- <signal name="value_changed" handler="ConfigEchoCancelTail_value_changed_cb"/>
+ <signal name="file_set" handler="ConfigRingerFile_file_set_cb"/>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="top_attach">4</property>
- <property name="bottom_attach">5</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="ConfigEchoCancelTailLabel">
- <property name="width_request">64</property>
- <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="xalign">0</property>
- </widget>
- <packing>
- <property name="left_attach">2</property>
- <property name="right_attach">3</property>
- <property name="top_attach">4</property>
- <property name="bottom_attach">5</property>
- <property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
</widget>
- <packing>
- <property name="expand">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkButton" id="ConfigDspTest">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">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">Test Signal Processing</property>
- <property name="response_id">0</property>
- <signal name="clicked" handler="ConfigDspTest_clicked_cb"/>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="position">1</property>
- </packing>
</child>
</widget>
+ <packing>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label66">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Alerting</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ <property name="position">3</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkHButtonBox" id="hbuttonbox3">
+ <property name="visible">True</property>
+ <property name="spacing">8</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+ <child>
+ <widget class="GtkButton" id="ConfigCancel">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="label">gtk-cancel</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ <signal name="clicked" handler="ConfigCancel_clicked_cb"/>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkButton" id="ConfigInit">
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="label" translatable="yes">Assistant</property>
+ <property name="response_id">0</property>
+ <signal name="clicked" handler="ConfigInit_clicked_cb"/>
+ </widget>
+ <packing>
+ <property name="position">2</property>
+ <property name="secondary">True</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="ConfigOK">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="label">gtk-ok</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ <signal name="clicked" handler="ConfigOK_clicked_cb"/>
+ </widget>
+ <packing>
+ <property name="pack_type">GTK_PACK_END</property>
+ <property name="position">1</property>
+ </packing>
</child>
</widget>
<packing>
- <property name="position">2</property>
+ <property name="expand">False</property>
+ <property name="position">1</property>
</packing>
</child>
+ </widget>
+ <packing>
+ <property name="position">7</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkVBox" id="DspTestTab">
+ <property name="visible">True</property>
+ <property name="border_width">8</property>
+ <property name="spacing">8</property>
<child>
- <widget class="GtkLabel" id="label3">
+ <widget class="GtkLabel" id="label48">
<property name="visible">True</property>
- <property name="label" translatable="yes">Signal Processing</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">&lt;span size="xx-large" weight="bold"&gt;Digital Signal Processing Test&lt;/span&gt;</property>
+ <property name="use_markup">True</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_END</property>
</widget>
<packing>
- <property name="type">tab</property>
- <property name="position">2</property>
- <property name="tab_fill">False</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
</packing>
</child>
<child>
- <widget class="GtkVBox" id="vbox7">
+ <widget class="GtkNotebook" id="DspTestNotebook">
<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="border_width">18</property>
+ <property name="can_focus">True</property>
+ <property name="show_tabs">False</property>
+ <property name="show_border">False</property>
+ <signal name="switch_page" handler="DspTestNotebook_switch_page_cb"/>
<child>
- <widget class="GtkTable" id="table4">
+ <widget class="GtkTable" id="DspTestPage0">
<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="n_rows">3</property>
+ <property name="border_width">18</property>
+ <property name="n_rows">5</property>
<property name="n_columns">2</property>
- <property name="column_spacing">5</property>
- <property name="row_spacing">5</property>
+ <property name="column_spacing">8</property>
+ <property name="row_spacing">8</property>
<child>
- <widget class="GtkEntry" id="ConfigAudioDetachCommand">
+ <widget class="GtkLabel" id="label24">
<property name="visible">True</property>
- <property name="can_focus">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="xalign">0</property>
+ <property name="label" translatable="yes">The first step will begin when you click &lt;i&gt;Forward&lt;/i&gt;.</property>
+ <property name="use_markup">True</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="emptylabel2">
+ <property name="visible">True</property>
+ </widget>
+ <packing>
<property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
+ <property name="bottom_attach">5</property>
+ <property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
- <widget class="GtkEntry" id="ConfigAudioAttachCommand">
+ <widget class="GtkLabel" id="emptylabel">
<property name="visible">True</property>
- <property name="can_focus">True</property>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkArrow" id="arrow1">
+ <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>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label18">
+ <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="xalign">0</property>
+ <property name="label" translatable="yes">&lt;b&gt;3.&lt;/b&gt; Play back the second clip
+ &lt;i&gt;This is what the remote party would hear for the
+ conversation as simulated in step two.&lt;/i&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label17">
+ <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="xalign">0</property>
+ <property name="label" translatable="yes">&lt;b&gt;2.&lt;/b&gt; Play back the sound clip while recording a second clip
+ &lt;i&gt;This will simulate a full duplex conversation, with the clip
+ recorded in step one as coming from the remote party.&lt;/i&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label11">
+ <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="xalign">0</property>
+ <property name="label" translatable="yes">To test your signal processing settings, we will perform
+three steps:</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label14">
+ <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="xalign">0</property>
+ <property name="label" translatable="yes">&lt;b&gt;1. Record a sound clip of spoken language
+ &lt;i&gt;Try to leave pauses and quiet moments during
+ this clip.&lt;/i&gt;&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
- <property name="y_options">GTK_FILL</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
</packing>
</child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label45">
+ <property name="visible">True</property>
+ <property name="label">page 1</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkTable" id="DspTestPage1">
+ <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="border_width">18</property>
+ <property name="n_rows">6</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">8</property>
+ <property name="row_spacing">8</property>
<child>
- <widget class="GtkLabel" id="label35">
+ <widget class="GtkLabel" id="label8">
<property name="visible">True</property>
<property name="xalign">0</property>
- <property name="label" translatable="yes">Audio Detach Command:</property>
+ <property name="label" translatable="yes"> Click &lt;i&gt;Record&lt;/i&gt; to begin</property>
+ <property name="use_markup">True</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_END</property>
</widget>
<packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkProgressBar" id="DspTestRecPosition1">
+ <property name="visible">True</property>
+ <property name="show_text">True</property>
+ <property name="text" translatable="yes">Record Progress</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="emptylabel4">
+ <property name="visible">True</property>
+ </widget>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">6</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="emptylabel1">
+ <property name="visible">True</property>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkProgressBar" id="DspTestMicVolume1">
+ <property name="visible">True</property>
+ <property name="show_text">True</property>
+ <property name="text" translatable="yes">Mic Volume</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkArrow" id="arrow2">
+ <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>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label22">
+ <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="xalign">0</property>
+ <property name="label" translatable="yes">To test your signal processing settings, we will perform
+three steps:</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label34">
+ <widget class="GtkLabel" id="label12">
<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="xalign">0</property>
- <property name="label" translatable="yes">Audio Attach Command:</property>
+ <property name="label" translatable="yes">&lt;b&gt;1. Record a sound clip of spoken language
+ &lt;i&gt;Try to leave pauses and quiet moments during
+ this clip.&lt;/i&gt;&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
</widget>
<packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
@@ -1367,812 +3359,784 @@ abc</property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label19">
+ <widget class="GtkToggleButton" id="DspTestRecStart1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">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">gtk-media-record</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ <signal name="toggled" handler="DspTestRecStart1_toggled_cb"/>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">5</property>
+ <property name="bottom_attach">6</property>
+ <property name="x_options"></property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label46">
+ <property name="visible">True</property>
+ <property name="label">page 2</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ <property name="position">1</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkTable" id="DspTestPage2">
+ <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="border_width">18</property>
+ <property name="n_rows">6</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">8</property>
+ <property name="row_spacing">8</property>
+ <child>
+ <widget class="GtkLabel" id="label9">
+ <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="xalign">0</property>
+ <property name="label" translatable="yes">&lt;b&gt;2. Play back the sound clip while recording a second clip
+ &lt;i&gt;This will simulate a full duplex conversation, with
+ the clip recorded in step one as coming from the
+ remote party.&lt;/i&gt;&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkToggleButton" id="DspTestRecStart2">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">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">gtk-media-record</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ <signal name="toggled" handler="DspTestRecStart2_toggled_cb"/>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">5</property>
+ <property name="bottom_attach">6</property>
+ <property name="x_options"></property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label25">
<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="xalign">0</property>
- <property name="label" translatable="yes">Ringer Sound:</property>
+ <property name="label" translatable="yes">You are currently on Step 2 of the digital signal processing test:</property>
+ <property name="use_markup">True</property>
</widget>
<packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkFileChooserButton" id="ConfigRingerFile">
+ <widget class="GtkArrow" id="arrow4">
<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>
- <signal name="file_set" handler="ConfigRingerFile_file_set_cb"/>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkProgressBar" id="DspTestMicVolume2">
+ <property name="visible">True</property>
+ <property name="show_text">True</property>
+ <property name="text" translatable="yes">Mic Volume</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="emptylabel7">
+ <property name="visible">True</property>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="emptylabel8">
+ <property name="visible">True</property>
+ </widget>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">6</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkProgressBar" id="DspTestRecPosition2">
+ <property name="visible">True</property>
+ <property name="show_text">True</property>
+ <property name="text" translatable="yes">Record Progress</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
+ <child>
+ <widget class="GtkLabel" id="label26">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes"> Click &lt;i&gt;Record&lt;/i&gt; to begin</property>
+ <property name="use_markup">True</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_END</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ </packing>
+ </child>
</widget>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label47">
+ <property name="visible">True</property>
+ <property name="label">page 3</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ <property name="position">2</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkTable" id="DspTestPage3">
+ <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="border_width">18</property>
+ <property name="n_rows">5</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">8</property>
+ <property name="row_spacing">8</property>
+ <child>
+ <widget class="GtkToggleButton" id="DspTestPlayStart">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">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">gtk-media-play</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ <signal name="toggled" handler="DspTestPlayStart_toggled_cb"/>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="x_options"></property>
+ <property name="y_options">GTK_EXPAND</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label16">
+ <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="xalign">0</property>
+ <property name="label" translatable="yes">You are currently on Step 3 of the digital signal processing test:</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkArrow" id="arrow3">
+ <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>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="emptylabel6">
+ <property name="visible">True</property>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="emptylabel5">
+ <property name="visible">True</property>
+ </widget>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">5</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkProgressBar" id="DspTestPlayPosition">
+ <property name="visible">True</property>
+ <property name="show_text">True</property>
+ <property name="text" translatable="yes">Playback Progress</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label13">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes"> Click &lt;i&gt;Play&lt;/i&gt; to begin</property>
+ <property name="use_markup">True</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_END</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label23">
+ <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="xalign">0</property>
+ <property name="label" translatable="yes">&lt;b&gt;3. Play back the second clip
+ &lt;i&gt;This is what the remote party would hear for the
+ conversation as simulated in step two.&lt;/i&gt;&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label50">
+ <property name="visible">True</property>
+ <property name="label">page 4</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ <property name="position">3</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label15">
+ <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="xalign">0</property>
+ <property name="xpad">18</property>
+ <property name="ypad">18</property>
+ <property name="label" translatable="yes">&lt;b&gt;Tips to Improve Sound Quality:&lt;/b&gt;
+ - TODO</property>
+ <property name="use_markup">True</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_MIDDLE</property>
+ </widget>
+ <packing>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label51">
+ <property name="visible">True</property>
+ <property name="label">page 5</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ <property name="position">4</property>
+ <property name="tab_fill">False</property>
+ </packing>
</child>
</widget>
<packing>
- <property name="position">3</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label4">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Alerting</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- <property name="position">3</property>
- <property name="tab_fill">False</property>
+ <property name="position">1</property>
</packing>
</child>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area1">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
<child>
- <widget class="GtkButton" id="ConfigOk">
+ <widget class="GtkHButtonBox" id="hbuttonbox7">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="label">gtk-ok</property>
- <property name="use_stock">True</property>
- <property name="response_id">0</property>
- <signal name="clicked" handler="ConfigOk_clicked_cb"/>
- </widget>
- </child>
- <child>
- <widget class="GtkButton" id="ConfigCancel">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="response_id">1</property>
- <signal name="clicked" handler="ConfigCancel_clicked_cb"/>
+ <property name="spacing">8</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+ <child>
+ <widget class="GtkButton" id="DspTestClose">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="label">gtk-close</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">1</property>
+ <signal name="clicked" handler="DspTestClose_clicked_cb"/>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkButton" id="DspTestBack">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="label">gtk-go-back</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ <signal name="clicked" handler="DspTestBack_clicked_cb"/>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="DspTestForward">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="is_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="label">gtk-go-forward</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ <signal name="clicked" handler="DspTestForward_clicked_cb"/>
+ </widget>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
</widget>
<packing>
- <property name="position">1</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
</packing>
</child>
</widget>
<packing>
- <property name="expand">False</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- <widget class="GtkAssistant" id="DspTestAssistant">
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="border_width">5</property>
- <property name="title" translatable="yes">DSP Test</property>
- <property name="modal">True</property>
- <property name="transient_for">ConfigDialog</property>
- <signal name="close" handler="DspTestAssistant_close_cb"/>
- <signal name="cancel" handler="DspTestAssistant_cancel_cb"/>
- <signal name="prepare" handler="DspTestAssistant_prepare_cb"/>
- <child>
- <widget class="GtkTable" id="DspTestPage0">
- <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="border_width">18</property>
- <property name="n_rows">5</property>
- <property name="n_columns">2</property>
- <property name="column_spacing">8</property>
- <property name="row_spacing">8</property>
- <child>
- <widget class="GtkLabel" id="label24">
- <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="xalign">0</property>
- <property name="label" translatable="yes">The first step will begin when you click &lt;i&gt;Forward&lt;/i&gt;.</property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">4</property>
- <property name="bottom_attach">5</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="emptylabel2">
- <property name="visible">True</property>
- </widget>
- <packing>
- <property name="top_attach">2</property>
- <property name="bottom_attach">5</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="emptylabel">
- <property name="visible">True</property>
- </widget>
- <packing>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <widget class="GtkArrow" id="arrow1">
- <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>
- <packing>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label18">
- <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="xalign">0</property>
- <property name="label" translatable="yes">&lt;b&gt;3.&lt;/b&gt; Play back the second clip
- &lt;i&gt;This is what the remote party would hear for the
- conversation as simulated in step two.&lt;/i&gt;</property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label17">
- <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="xalign">0</property>
- <property name="label" translatable="yes">&lt;b&gt;2.&lt;/b&gt; Play back the sound clip while recording a second clip
- &lt;i&gt;This will simulate a full duplex conversation, with the clip
- recorded in step one as coming from the remote party.&lt;/i&gt;</property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label11">
- <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="xalign">0</property>
- <property name="label" translatable="yes">To test your signal processing settings, we will perform three steps:</property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label14">
- <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="xalign">0</property>
- <property name="label" translatable="yes">&lt;b&gt;1. Record a sound clip of spoken language
- &lt;i&gt;Try to leave pauses and quiet moments during this clip.&lt;/i&gt;&lt;/b&gt;</property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="page_type">GTK_ASSISTANT_PAGE_INTRO</property>
- <property name="title">Digital Signal Processing Test</property>
- <property name="sidebar_image">dsp-sidebar.png</property>
- </packing>
- </child>
- <child>
- <widget class="GtkTable" id="DspTestPage1">
- <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="border_width">18</property>
- <property name="n_rows">6</property>
- <property name="n_columns">2</property>
- <property name="column_spacing">8</property>
- <property name="row_spacing">8</property>
- <child>
- <widget class="GtkLabel" id="label8">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes"> Click &lt;i&gt;Record&lt;/i&gt; to begin</property>
- <property name="use_markup">True</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_END</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- </packing>
- </child>
- <child>
- <widget class="GtkProgressBar" id="DspTestRecPosition1">
- <property name="visible">True</property>
- <property name="show_text">True</property>
- <property name="text" translatable="yes">Record Progress</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="emptylabel4">
- <property name="visible">True</property>
- </widget>
- <packing>
- <property name="top_attach">2</property>
- <property name="bottom_attach">6</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="emptylabel1">
- <property name="visible">True</property>
- </widget>
- <packing>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <widget class="GtkProgressBar" id="DspTestMicVolume1">
- <property name="visible">True</property>
- <property name="show_text">True</property>
- <property name="text" translatable="yes">Mic Volume</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">4</property>
- <property name="bottom_attach">5</property>
- <property name="y_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <widget class="GtkArrow" id="arrow2">
- <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>
- <packing>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label22">
- <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="xalign">0</property>
- <property name="label" translatable="yes">To test your signal processing settings, we will perform three steps:</property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label12">
- <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="xalign">0</property>
- <property name="label" translatable="yes">&lt;b&gt;1. Record a sound clip of spoken language
- &lt;i&gt;Try to leave pauses and quiet moments during this clip.&lt;/i&gt;&lt;/b&gt;</property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <widget class="GtkToggleButton" id="DspTestRecStart1">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">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">gtk-media-record</property>
- <property name="use_stock">True</property>
- <property name="response_id">0</property>
- <signal name="toggled" handler="DspTestRecStart1_toggled_cb"/>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">5</property>
- <property name="bottom_attach">6</property>
- <property name="x_options"></property>
- <property name="y_options"></property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="title">Digital Signal Processing Test (1/4)</property>
- <property name="sidebar_image">dsp-sidebar.png</property>
- </packing>
- </child>
- <child>
- <widget class="GtkTable" id="DspTestPage2">
- <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="border_width">18</property>
- <property name="n_rows">6</property>
- <property name="n_columns">2</property>
- <property name="column_spacing">8</property>
- <property name="row_spacing">8</property>
- <child>
- <widget class="GtkLabel" id="label9">
- <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="xalign">0</property>
- <property name="label" translatable="yes">&lt;b&gt;2. Play back the sound clip while recording a second clip
- &lt;i&gt;This will simulate a full duplex conversation, with the clip
- recorded in step one as coming from the remote party.&lt;/i&gt;&lt;/b&gt;</property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <widget class="GtkToggleButton" id="DspTestRecStart2">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">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">gtk-media-record</property>
- <property name="use_stock">True</property>
- <property name="response_id">0</property>
- <signal name="toggled" handler="DspTestRecStart2_toggled_cb"/>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">5</property>
- <property name="bottom_attach">6</property>
- <property name="x_options"></property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label25">
- <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="xalign">0</property>
- <property name="label" translatable="yes">You are currently on Step 2 of the digital signal processing test:</property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <widget class="GtkArrow" id="arrow4">
- <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>
- <packing>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <widget class="GtkProgressBar" id="DspTestMicVolume2">
- <property name="visible">True</property>
- <property name="show_text">True</property>
- <property name="text" translatable="yes">Mic Volume</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">4</property>
- <property name="bottom_attach">5</property>
- <property name="y_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="emptylabel7">
- <property name="visible">True</property>
- </widget>
- <packing>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="emptylabel8">
- <property name="visible">True</property>
- </widget>
- <packing>
- <property name="top_attach">2</property>
- <property name="bottom_attach">6</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <widget class="GtkProgressBar" id="DspTestRecPosition2">
- <property name="visible">True</property>
- <property name="show_text">True</property>
- <property name="text" translatable="yes">Record Progress</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label26">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes"> Click &lt;i&gt;Record&lt;/i&gt; to begin</property>
- <property name="use_markup">True</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_END</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="title">Digital Signal Processing Test (2/4)</property>
- <property name="sidebar_image">dsp-sidebar.png</property>
- </packing>
- </child>
- <child>
- <widget class="GtkTable" id="DspTestPage3">
- <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="border_width">18</property>
- <property name="n_rows">5</property>
- <property name="n_columns">2</property>
- <property name="column_spacing">8</property>
- <property name="row_spacing">8</property>
- <child>
- <widget class="GtkToggleButton" id="DspTestPlayStart">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">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">gtk-media-play</property>
- <property name="use_stock">True</property>
- <property name="response_id">0</property>
- <signal name="toggled" handler="DspTestPlayStart_toggled_cb"/>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">4</property>
- <property name="bottom_attach">5</property>
- <property name="x_options"></property>
- <property name="y_options">GTK_EXPAND</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label16">
- <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="xalign">0</property>
- <property name="label" translatable="yes">You are currently on Step 3 of the digital signal processing test:</property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <widget class="GtkArrow" id="arrow3">
- <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>
- <packing>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="emptylabel6">
- <property name="visible">True</property>
- </widget>
- <packing>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="emptylabel5">
- <property name="visible">True</property>
- </widget>
- <packing>
- <property name="top_attach">2</property>
- <property name="bottom_attach">5</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <widget class="GtkProgressBar" id="DspTestPlayPosition">
- <property name="visible">True</property>
- <property name="show_text">True</property>
- <property name="text" translatable="yes">Playback Progress</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options">GTK_FILL</property>
+ <property name="position">8</property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label13">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes"> Click &lt;i&gt;Play&lt;/i&gt; to begin</property>
- <property name="use_markup">True</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_END</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label23">
- <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="xalign">0</property>
- <property name="label" translatable="yes">&lt;b&gt;3. Play back the second clip
- &lt;i&gt;This is what the remote party would hear for the
- conversation as simulated in step two.&lt;/i&gt;&lt;/b&gt;</property>
- <property name="use_markup">True</property>
- </widget>
+ <placeholder/>
<packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
+ <property name="type">tab</property>
</packing>
</child>
- </widget>
- <packing>
- <property name="title">Digital Signal Processing Test (3/4)</property>
- <property name="sidebar_image">dsp-sidebar.png</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label15">
- <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="xalign">0</property>
- <property name="xpad">18</property>
- <property name="ypad">18</property>
- <property name="label" translatable="yes">&lt;b&gt;Tips to Improve Sound Quality:&lt;/b&gt;
- - TODO</property>
- <property name="use_markup">True</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_MIDDLE</property>
- </widget>
- <packing>
- <property name="page_type">GTK_ASSISTANT_PAGE_SUMMARY</property>
- <property name="title">Digital Signal Processing Test (4/4)</property>
- <property name="sidebar_image">dsp-sidebar.png</property>
- </packing>
- </child>
- </widget>
- <widget class="GtkDialog" id="ScanDialog">
- <property name="border_width">5</property>
- <property name="title" translatable="yes">Bluetooth Scan</property>
- <property name="modal">True</property>
- <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="transient_for">MainWindow</property>
- <property name="has_separator">False</property>
- <signal name="close" handler="on_ScanDialog_close"/>
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox2">
- <property name="visible">True</property>
- <property name="spacing">2</property>
<child>
- <widget class="GtkScrolledWindow" id="scrolledwindow1">
+ <widget class="GtkVBox" id="InitConfTab">
<property name="visible">True</property>
- <property name="can_focus">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="hscrollbar_policy">GTK_POLICY_NEVER</property>
- <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="shadow_type">GTK_SHADOW_IN</property>
- <child>
- <widget class="GtkTreeView" id="ScanResults">
- <property name="width_request">300</property>
- <property name="height_request">200</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="headers_clickable">True</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area2">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
+ <property name="border_width">8</property>
+ <property name="spacing">8</property>
<child>
- <widget class="GtkButton" id="ScanRestart">
+ <widget class="GtkHBox" id="hbox12">
<property name="visible">True</property>
- <property name="sensitive">False</property>
- <property name="can_focus">True</property>
- <property name="receives_default">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">gtk-refresh</property>
- <property name="use_stock">True</property>
- <property name="response_id">-1</property>
- <signal name="clicked" handler="ScanRestart_clicked_cb"/>
+ <property name="spacing">8</property>
+ <child>
+ <widget class="GtkImage" id="image30">
+ <property name="visible">True</property>
+ <property name="pixbuf">icon.png</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label49">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">&lt;span size="xx-large" weight="bold"&gt;HFP for Linux Initial Configuration&lt;/span&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
</widget>
<packing>
<property name="expand">False</property>
- <property name="secondary">True</property>
</packing>
</child>
<child>
- <widget class="GtkButton" id="ScanHistory">
+ <widget class="GtkNotebook" id="InitConfNotebook">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="label" translatable="yes">History</property>
- <property name="response_id">-2</property>
- <signal name="clicked" handler="ScanHistory_clicked_cb"/>
+ <property name="show_border">False</property>
+ <signal name="switch_page" handler="InitConfNotebook_switch_page_cb"/>
+ <child>
+ <widget class="GtkTable" id="InitPage0">
+ <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="border_width">18</property>
+ <property name="n_rows">4</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">8</property>
+ <property name="row_spacing">8</property>
+ <child>
+ <widget class="GtkLabel" id="label52">
+ <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="xalign">0</property>
+ <property name="label" translatable="yes">The first step will begin when you click &lt;i&gt;Forward&lt;/i&gt;.</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="emptylabel3">
+ <property name="visible">True</property>
+ </widget>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="emptylabel9">
+ <property name="visible">True</property>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkArrow" id="arrow5">
+ <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>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label54">
+ <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="xalign">0</property>
+ <property name="label" translatable="yes">&lt;b&gt;2.&lt;/b&gt; Configure your Bluetooth mobile phone</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label55">
+ <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="xalign">0</property>
+ <property name="label" translatable="yes">To set up HFP for Linux for the first time, the following steps
+will be taken:</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label56">
+ <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="xalign">0</property>
+ <property name="label" translatable="yes">&lt;b&gt;1. Configure and test your local sound card&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label43">
+ <property name="visible">True</property>
+ <property name="label">page 1</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkTable" id="InitPage1">
+ <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="border_width">18</property>
+ <property name="n_rows">4</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">8</property>
+ <property name="row_spacing">8</property>
+ <child>
+ <widget class="GtkLabel" id="label60">
+ <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="xalign">0</property>
+ <property name="label" translatable="yes">The first step will begin when you click &lt;i&gt;Forward&lt;/i&gt;.</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="emptylabel10">
+ <property name="visible">True</property>
+ </widget>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="emptylabel11">
+ <property name="visible">True</property>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkArrow" id="arrow6">
+ <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>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label61">
+ <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="xalign">0</property>
+ <property name="label" translatable="yes">&lt;b&gt;2.&lt;/b&gt; Configure your Bluetooth mobile phone</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label62">
+ <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="xalign">0</property>
+ <property name="label" translatable="yes">To set up HFP for Linux for the first time, the following steps
+will be taken:</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label63">
+ <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="xalign">0</property>
+ <property name="label" translatable="yes">&lt;b&gt;1. Configure and test your local sound card&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label59">
+ <property name="visible">True</property>
+ <property name="label">page 2</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ <property name="position">1</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
</widget>
<packing>
<property name="position">1</property>
- <property name="secondary">True</property>
</packing>
</child>
<child>
- <widget class="GtkButton" id="ScanCancel">
+ <widget class="GtkHButtonBox" id="hbuttonbox6">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="response_id">1</property>
- <signal name="clicked" handler="ScanCancel_clicked_cb"/>
- </widget>
- <packing>
- <property name="pack_type">GTK_PACK_END</property>
- <property name="position">3</property>
- </packing>
- </child>
- <child>
- <widget class="GtkButton" id="ScanOK">
- <property name="visible">True</property>
- <property name="sensitive">False</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="label">gtk-ok</property>
- <property name="use_stock">True</property>
- <property name="response_id">0</property>
- <signal name="clicked" handler="ScanOK_clicked_cb"/>
+ <property name="spacing">8</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+ <child>
+ <widget class="GtkButton" id="InitConfDone">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="label">gtk-close</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">1</property>
+ <signal name="clicked" handler="InitConfDone_clicked_cb"/>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkButton" id="InitConfBack">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="label">gtk-go-back</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ <signal name="clicked" handler="InitConfBack_clicked_cb"/>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="InitConfForward">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="is_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="label">gtk-go-forward</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ <signal name="clicked" handler="InitConfForward_clicked_cb"/>
+ </widget>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
</widget>
<packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
<property name="pack_type">GTK_PACK_END</property>
<property name="position">2</property>
</packing>
</child>
</widget>
<packing>
- <property name="expand">False</property>
- <property name="pack_type">GTK_PACK_END</property>
+ <property name="position">9</property>
</packing>
</child>
- </widget>
- </child>
- </widget>
- <widget class="GtkAboutDialog" id="AboutDialog">
- <property name="border_width">5</property>
- <property name="title" translatable="yes">About Hands Free Console</property>
- <property name="resizable">False</property>
- <property name="modal">True</property>
- <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="has_separator">False</property>
- <property name="program_name">Hands Free Console</property>
- <property name="comments" translatable="yes">Part of HFP for Linux</property>
- <property name="website">http://nohands.sf.net/</property>
- <property name="website_label" translatable="yes">HFP for Linux</property>
- <property name="authors">Sam Revitch &lt;samr7@cs.washington.edu&gt;</property>
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox3">
- <property name="visible">True</property>
- <property name="spacing">2</property>
<child>
<placeholder/>
- </child>
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area3">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
- </widget>
<packing>
- <property name="expand">False</property>
- <property name="pack_type">GTK_PACK_END</property>
+ <property name="type">tab</property>
</packing>
</child>
</widget>
@@ -2247,7 +4211,7 @@ abc</property>
<child>
<widget class="GtkImage" id="image4">
<property name="visible">True</property>
- <property name="stock">gtk-yes</property>
+ <property name="pixbuf">pickup.png</property>
<property name="icon_size">5</property>
</widget>
</child>
@@ -2278,7 +4242,7 @@ abc</property>
<child>
<widget class="GtkImage" id="image6">
<property name="visible">True</property>
- <property name="stock">gtk-yes</property>
+ <property name="pixbuf">pickup.png</property>
<property name="icon_size">5</property>
</widget>
</child>
@@ -2313,7 +4277,7 @@ Hold Active</property>
<child>
<widget class="GtkImage" id="image5">
<property name="visible">True</property>
- <property name="stock">gtk-yes</property>
+ <property name="pixbuf">pickup.png</property>
<property name="icon_size">5</property>
</widget>
</child>
@@ -2348,7 +4312,7 @@ Drop Active</property>
<child>
<widget class="GtkImage" id="image3">
<property name="visible">True</property>
- <property name="stock">gtk-cancel</property>
+ <property name="pixbuf">hangup.png</property>
<property name="icon_size">5</property>
</widget>
</child>
@@ -2447,80 +4411,4 @@ Drop Active</property>
</widget>
</child>
</widget>
- <widget class="GtkDialog" id="HistoryDialog">
- <property name="border_width">5</property>
- <property name="modal">True</property>
- <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="transient_for">ScanDialog</property>
- <property name="has_separator">False</property>
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox4">
- <property name="visible">True</property>
- <property name="spacing">2</property>
- <child>
- <widget class="GtkScrolledWindow" id="scrolledwindow2">
- <property name="visible">True</property>
- <property name="can_focus">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="hscrollbar_policy">GTK_POLICY_NEVER</property>
- <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="shadow_type">GTK_SHADOW_IN</property>
- <child>
- <widget class="GtkTreeView" id="HistoryResults">
- <property name="width_request">300</property>
- <property name="height_request">200</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="headers_clickable">True</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area4">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
- <child>
- <widget class="GtkButton" id="HistoryCancel">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="response_id">1</property>
- <signal name="clicked" handler="HistoryCancel_clicked_cb"/>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <widget class="GtkButton" id="HistoryOK">
- <property name="visible">True</property>
- <property name="sensitive">False</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="label">gtk-ok</property>
- <property name="use_stock">True</property>
- <property name="response_id">0</property>
- <signal name="clicked" handler="HistoryOK_clicked_cb"/>
- </widget>
- <packing>
- <property name="pack_type">GTK_PACK_END</property>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
</glade-interface>
diff --git a/data/hfconsole.in b/data/hfconsole.in
index feb65f1..4573982 100755
--- a/data/hfconsole.in
+++ b/data/hfconsole.in
@@ -114,17 +114,204 @@ class GtkAlerter:
if not self.removed:
self.complete()
+# This is really _really_ stupid
+# If there was a vCard parser that was part of the standard
+# Python distribution, it would be used here. But there isn't
+# and the job isn't very complicated.
+class VCard:
+ """A hacky vCard representation"""
+
+class VCardSet:
+ """A hacky vCard container/manager object"""
+
+ def __init__(self):
+ self._file_line = 0
+ self._save_line = None
+ self._current_object = None
+ pass
+
+ def _isalpha(self, c):
+ x = ord(c)
+ return ((x >= ord('a') and x <= ord('z')) or
+ (x >= ord('A') and x <= ord('Z')))
+ def _isnum(self, c):
+ x = ord(c)
+ return (x >= ord('0') and x <= ord('9'))
+ def _iswsp(self, c):
+ return c == ' ' or c == '\t'
+ def _issafe(self, c):
+ x = ord(c)
+ return (self._iswsp(c)
+ or x == 0x21 or
+ (x >= 0x23 and x <= 0x2b) or
+ (x >= 0x2d and x <= 0x39) or
+ (x >= 0x3c and x <= 0x7e) or
+ x > 0x7f)
+ def _isqsafe(self, c):
+ x = ord(c)
+ return (_iswsp(c)
+ or x == 0x21 or
+ (x >= 0x23 and x <= 0x7e) or
+ x > 0x7f)
+
+ def _process_line(self, name, groups, params, value):
+ print "Name:%s groups:%s value:%s" % (name, groups, value)
+ for param in params:
+ print "\t%s=%s" % (param, params[param])
+
+ def _parse_error(self, message):
+ raise Exception('Line %d: %s' % (self._file_line, message))
+ def _parse_name_groups(self, line):
+ groups = []
+ name = None
+ sep = 0
+ while True:
+ if len(line) > sep:
+ x = line[sep]
+ if (self._isalpha(x) or
+ self._isnum(x) or
+ x == '-'):
+ sep += 1
+ continue
+ elif x == '.':
+ if not sep:
+ self._parse_error(
+ _('Empty group definition'))
+ groups.append(line[:sep])
+ line = line[(sep + 1):]
+ sep = 0
+ continue
+ if not sep:
+ self._parse_error(_("Empty content name"))
+ name = line[:sep]
+ line = line[sep:]
+ return (groups, name, line)
+ def _parse_param_value(self, line):
+ sep = 0
+ if line[0] == '"':
+ line = line[1:]
+ while True:
+ if len(line) <= sep:
+ self._parse_error(
+ _("Malformed quoted "
+ "parameter value"))
+ x = line[sep]
+ if self._isqsafe(x):
+ sep += 1
+ continue
+ elif x == '"':
+ break
+ else:
+ self._parse_error(
+ _("Malformed quoted "
+ "parameter value"))
+
+ value = ''
+ if sep:
+ value = line[:sep]
+ line = line[(sep + 1):]
+ return (value, line)
+
+ while True:
+ if len(line) > sep:
+ x = line[sep]
+ if self._issafe(x):
+ sep += 1
+ continue
+ break
+ value = ''
+ if sep:
+ value = line[:sep]
+ line = line[sep:]
+ return (value, line)
+
+ def _parse_param(self, line):
+ name = None
+ values = []
+ sep = 0
+ while True:
+ if len(line) <= sep:
+ self._parse_error(_("Malformed parameter"))
+ x = line[sep]
+ if self._isalpha(x) or self._isnum(x) or x == '-':
+ sep += 1
+ else:
+ if not sep:
+ self._parse_error(
+ _("Empty parameter name"))
+ name = line[:sep]
+ if x == '=':
+ line = line[(sep + 1):]
+ break
+ line = line[sep:]
+ return (name, values, line)
+
+ while True:
+ (x, line) = self._parse_param_value(line)
+ values.append(x)
+ if not len(line):
+ return (name, values, line)
+ x = line[0]
+ if x != ',':
+ return (name, values, line)
+ line = line[1:]
+ def _parse_line(self, line):
+ print "Line:%s" % line
+ (groups, name, line) = self._parse_name_groups(line)
+ params = {}
+ if not line:
+ self._parse_error(_('Malformed content line'))
+ while line[0] == ';':
+ (param, values, line) = self._parse_param(line[1:])
+ if param in params:
+ params[param].extend(values)
+ else:
+ params[param] = values
+ if line[0] != ':':
+ self._parse_error(_('Malformed content line'))
+ self._process_line(name, groups, params, line[1:])
+
+ def _feed_line(self, line):
+ if not line or not self._iswsp(line[0]):
+ if self._save_line:
+ self._parse_line(self._save_line)
+ self._save_line = line
+ elif self._save_line:
+ self._save_line += line[1:]
+ else:
+ self._save_line = line[1:]
+ self._file_line += 1
+ def _feed_done(self):
+ self._feed_line(None)
+ if self._current_object:
+ self._parse_error(_('Unterminated object in stream'))
+ def import_string(self, str):
+ self._file_line = 0
+ line = ''
+ for x in str.splitlines():
+ self._feed_line(x)
+ self._feed_done()
+ def import_file(self, path):
+ f = open(path, 'r')
+ contents = f.read()
+ f.close()
+ self.import_string(contents)
+
+
class HfConsole:
"""This is a user interface for the hfpd Bluetooth hands-free
profile server"""
+ DBUS_SERVICE_NAME = 'org.freedesktop.DBus'
DBUS_INTERFACE_DBUS = 'org.freedesktop.DBus'
DBUS_INTERFACE_PROPERTIES = 'org.freedesktop.DBus.Properties'
+ DBUS_BUS_OBJECT = '/org/freedesktop/DBus'
HFPD_HANDSFREE_INTERFACE_NAME = 'net.sf.nohands.hfpd.HandsFree'
HFPD_SOUNDIO_INTERFACE_NAME = 'net.sf.nohands.hfpd.SoundIo'
HFPD_AUDIOGATEWAY_INTERFACE_NAME = 'net.sf.nohands.hfpd.AudioGateway'
HFPD_SERVICE_NAME = 'net.sf.nohands.hfpd'
HFPD_HANDSFREE_OBJECT = '/net/sf/nohands/hfpd'
+ HFPD_SOUNDIO_OBJECT = '/net/sf/nohands/hfpd/soundio'
def addr_transform(self, addr):
val = (str(addr[0:2]) + str(addr[3:5]) + str(addr[6:8]) +
@@ -160,38 +347,77 @@ class HfConsole:
# Create our dictionay and connect it
dic = {
# Callbacks for the main window
+ "AgSelector_button_press_event_cb" :
+ self.ag_selector_open,
+ "AgSelector_toggled_cb" : self.ag_selector_toggle,
+ "AgScan_clicked_cb" : self.bar_ag_scan_clicked,
+ "AgConnect_clicked_cb" : self.bar_ag_connect_clicked,
+ "BarDialPad_clicked_cb" : self.bar_dialpad_clicked,
+ "BarContacts_clicked_cb" : self.bar_contacts_clicked,
+ "AgAudioToggle_toggled_cb" : self.bar_ag_audio_toggled,
+ "AgHangUp_clicked_cb" : self.bar_ag_hangup_clicked,
+ "AgHoldCall_clicked_cb" : self.bar_ag_swaphold_clicked,
+ "AgSwapCall_clicked_cb" : self.bar_ag_swaphold_clicked,
+ "AgDial_clicked_cb" : self.bar_ag_dial_clicked,
+ "AgRedial_clicked_cb" : self.bar_ag_redial_clicked,
+ "ConfigOpen_clicked_cb" : self.bar_config_clicked,
"DigitButton_pressed_cb" : self.digit_button_pressed,
"DigitButton_clicked_cb" : self.digit_button_clicked,
"PhoneNumBs_clicked_cb" : self.phone_num_bs,
- "DialPadDial_clicked_cb" : self.dial_dial_clicked,
- "DialPadRedial_clicked_cb" : self.dial_redial_clicked,
- "DialPadXfer_activate_cb" : self.dial_xfer_clicked,
- "ScanButton_clicked_cb" : self.scan_open,
- "ConfigButton_clicked_cb" : self.config_open,
"Mute_toggled_cb" : self.mute_toggled,
"on_MainWindow_destroy" : gtk.main_quit,
- # Callbacks for the scan dialog
- "on_ScanDialog_close" : gtk.main_quit,
- "ScanOK_clicked_cb" : self.scan_ok_clicked,
- "ScanCancel_clicked_cb" : self.scan_cancel_clicked,
+ # Known Devices tab
+ "DevicesClose_clicked_cb" : self.devices_close_clicked,
+ "DevicesAdd_clicked_cb" : self.devices_add_clicked,
+ "DevicesDelete_clicked_cb" :
+ self.devices_delete_clicked,
+ "DevicesConnect_clicked_cb" :
+ self.devices_connect_clicked,
+ "DevicesDisconnect_clicked_cb" :
+ self.devices_disconnect_clicked,
+ "DevicesAutoConnectNever_toggled_cb" :
+ self.devices_autoconnect_never_toggled,
+ "DevicesAutoConnectDisabled_toggled_cb" :
+ self.devices_autoconnect_disabled_toggled,
+ "DevicesAutoConnectEnabled_toggled_cb" :
+ self.devices_autoconnect_enabled_toggled,
+
+ # New Device tab
+ "NewDeviceClose_clicked_cb" :
+ self.newdevice_close_clicked,
+ "NewDeviceAdd_clicked_cb" :
+ self.newdevice_add_clicked,
+ "NewDeviceClear_clicked_cb" :
+ self.newdevice_clear_clicked,
+
+ # Callbacks for the scan tab
+ "ScanAdd_clicked_cb" : self.scan_add_clicked,
+ "ScanClose_clicked_cb" : self.scan_close_clicked,
"ScanHistory_clicked_cb" : self.scan_history_clicked,
"ScanRestart_clicked_cb" : self.scan_restart_clicked,
- # Callbacks for the history dialog
+ # Callbacks for the history tab
"HistoryOK_clicked_cb" : self.history_ok_clicked,
"HistoryCancel_clicked_cb" :
self.history_cancel_clicked,
- # Callbacks for the config dialog
- "ConfigOk_clicked_cb" : self.config_ok_clicked,
+ # Callbacks for the config tab
+ "ConfigOK_clicked_cb" : self.config_ok_clicked,
"ConfigCancel_clicked_cb" : self.config_cancel_clicked,
+ "ConfigInit_clicked_cb" : self.config_init_clicked,
+ "ConfigDevices_clicked_cb" :
+ self.config_devices_clicked,
"ConfigDriver_changed_cb" :
self.config_driver_changed,
"ConfigPacketIntervalHint_toggled_cb" :
self.config_packet_interval_toggled,
"ConfigPacketInterval_value_changed_cb" :
self.config_packet_interval_changed,
+ "ConfigJitterWindowHint_toggled_cb" :
+ self.config_jitter_window_toggled,
+ "ConfigJitterWindow_value_changed_cb" :
+ self.config_jitter_window_changed,
"ConfigMinOutBufferHint_toggled_cb" :
self.config_min_out_buffer_toggled,
"ConfigMinOutBuffer_value_changed_cb" :
@@ -217,22 +443,88 @@ class HfConsole:
"ConfigDspTest_clicked_cb" : self.config_dsptest_open,
"on_ConfigDialog_close" : gtk.main_quit,
- # Callbacks for the DSP test assistant
- "DspTestAssistant_prepare_cb" :
- self.config_dsptest_prepare,
- "DspTestAssistant_cancel_cb" :
- self.config_dsptest_cancel,
- "DspTestAssistant_close_cb" :
+ # Callbacks for the DSP test
+ "DspTestForward_clicked_cb" :
+ self.config_dsptest_forward,
+ "DspTestBack_clicked_cb" :
+ self.config_dsptest_back,
+ "DspTestClose_clicked_cb" :
self.config_dsptest_close,
+ "DspTestNotebook_switch_page_cb" :
+ self.config_dsptest_switch_page,
"DspTestRecStart1_toggled_cb" :
self.config_dsptest_recstart1_toggled,
"DspTestRecStart2_toggled_cb" :
self.config_dsptest_recstart2_toggled,
"DspTestPlayStart_toggled_cb" :
self.config_dsptest_playstart_toggled,
+
+ # Callbacks for the initial configuration page
+ "InitConfDone_clicked_cb" : self.initconf_done_clicked,
+ "InitConfBack_clicked_cb" : self.initconf_back_clicked,
+ "InitConfForward_clicked_cb" :
+ self.initconf_forward_clicked,
+ "InitConfNotebook_switch_page_cb" :
+ self.initconf_switch_page,
+
}
self.widgets.signal_autoconnect(dic)
+ self.ag_list = gtk.Menu()
+ self.ag_list_separator = gtk.SeparatorMenuItem()
+ self.ag_list_separator.set_no_show_all(True)
+ self.ag_list.append(self.ag_list_separator)
+ self.ag_list_scan = gtk.MenuItem(_('Search for Device...'))
+ self.ag_list_scan.connect('activate',
+ self.ag_selector_scan_activate)
+ self.ag_list.append(self.ag_list_scan)
+ self.ag_list_manage = gtk.MenuItem(_('Manage Devices...'))
+ self.ag_list_manage.connect('activate',
+ self.ag_selector_manage_activate)
+ self.ag_list.append(self.ag_list_manage)
+ self.ag_list.connect('selection-done', self.ag_selector_close)
+ self.ag_list.show_all()
+
+ self.ag_list_detail = gtk.ListStore(gobject.TYPE_STRING,
+ gobject.TYPE_STRING,
+ gobject.TYPE_PYOBJECT)
+ self['DevicesList'].set_model(self.ag_list_detail)
+ tvcolumn = gtk.TreeViewColumn(_('Name'))
+ self['DevicesList'].append_column(tvcolumn)
+ cell = gtk.CellRendererText()
+ tvcolumn.pack_start(cell, True)
+ tvcolumn.add_attribute(cell, 'text', 0)
+ tvcolumn = gtk.TreeViewColumn(_('Address'))
+ self['DevicesList'].append_column(tvcolumn)
+ cell = gtk.CellRendererText()
+ tvcolumn.pack_start(cell, True)
+ tvcolumn.add_attribute(cell, 'text', 1)
+ self['DevicesList'].get_selection().connect('changed',
+ self.devices_select)
+ self.devices_ag = None
+
+ self.ag_list_new = gtk.ListStore(gobject.TYPE_STRING,
+ gobject.TYPE_STRING,
+ gobject.TYPE_PYOBJECT)
+ self['NewDeviceList'].set_model(self.ag_list_new)
+ tvcolumn = gtk.TreeViewColumn(_('Name'))
+ self['NewDeviceList'].append_column(tvcolumn)
+ cell = gtk.CellRendererText()
+ tvcolumn.pack_start(cell, True)
+ tvcolumn.add_attribute(cell, 'text', 0)
+ tvcolumn = gtk.TreeViewColumn(_('Address'))
+ self['NewDeviceList'].append_column(tvcolumn)
+ cell = gtk.CellRendererText()
+ tvcolumn.pack_start(cell, True)
+ tvcolumn.add_attribute(cell, 'text', 1)
+ self['NewDeviceList'].get_selection().connect('changed',
+ self.newdevice_select)
+ self.ag_list_new.connect('row-inserted',
+ self.newdevice_row_added)
+ self.ag_list_new.connect('row-deleted',
+ self.newdevice_row_removed)
+ self.newdevice_ag = None
+
self['ConfigDriverDevList'].set_model(
gtk.ListStore(gobject.TYPE_STRING,
gobject.TYPE_STRING))
@@ -249,7 +541,7 @@ class HfConsole:
gobject.TYPE_UINT,
gobject.TYPE_STRING)
self['ScanResults'].set_model(self.scanresults)
- tvcolumn = gtk.TreeViewColumn('Device')
+ tvcolumn = gtk.TreeViewColumn(_('Device'))
self['ScanResults'].append_column(tvcolumn)
cell = gtk.CellRendererText()
tvcolumn.pack_start(cell, True)
@@ -261,7 +553,7 @@ class HfConsole:
gobject.TYPE_UINT,
gobject.TYPE_STRING)
self['HistoryResults'].set_model(self.historyresults)
- tvcolumn = gtk.TreeViewColumn('Device')
+ tvcolumn = gtk.TreeViewColumn(_('Device'))
self['HistoryResults'].append_column(tvcolumn)
cell = gtk.CellRendererText()
tvcolumn.pack_start(cell, True)
@@ -276,9 +568,14 @@ class HfConsole:
self.ags = {}
self.ags_added = {}
self.soundmonitor = False
- self.autoreconnect = True
self.selected_ag = None
+ self.selected_ag_lock = False
self.command_audio_attach_state = False
+ self.nobt = False
+ self.nested = False
+
+ self.frontpage = 0 #1
+ self.frontnotebook_set(self.frontpage)
self.alerter_factory = (lambda x:
GtkAlerter(self.gladefile, x))
@@ -296,24 +593,24 @@ class HfConsole:
p = subprocess.Popen(exc, shell=True)
def getprop_hfpd(self, prop):
- return self.hfpd_props.Get('net.sf.nohands.hfpd.HandsFree',
+ return self.hfpd_props.Get(self.HFPD_HANDSFREE_INTERFACE_NAME,
prop)
def getprop_soundio(self, prop):
- return self.soundio_props.Get('net.sf.nohands.hfpd.SoundIo',
+ return self.soundio_props.Get(self.HFPD_SOUNDIO_INTERFACE_NAME,
prop)
def setprop_hfpd(self, name, value):
- self.hfpd_props.Set('net.sf.nohands.hfpd.HandsFree',
+ self.hfpd_props.Set(self.HFPD_HANDSFREE_INTERFACE_NAME,
name, value)
def setprop_soundio(self, name, value):
- self.soundio_props.Set('net.sf.nohands.hfpd.SoundIo',
+ self.soundio_props.Set(self.HFPD_SOUNDIO_INTERFACE_NAME,
name, value)
def Start(self):
try:
self.busctl = dbus.Interface(
- self.dbus.get_object('org.freedesktop.DBus',
- '/org/freedesktop/DBus'),
- dbus_interface='org.freedesktop.DBus')
+ self.dbus.get_object(self.DBUS_SERVICE_NAME,
+ self.DBUS_BUS_OBJECT),
+ dbus_interface=self.DBUS_INTERFACE_DBUS)
except dbus.exceptions.DBusException, (ex):
self.fatal(_('Could not connect to D-Bus:\n%s') %
str(ex))
@@ -321,21 +618,23 @@ class HfConsole:
try:
self.hfpd = dbus.Interface(
- self.dbus.get_object('net.sf.nohands.hfpd',
- '/net/sf/nohands/hfpd'),
- dbus_interface='net.sf.nohands.hfpd.HandsFree')
+ self.dbus.get_object(self.HFPD_SERVICE_NAME,
+ self.HFPD_HANDSFREE_OBJECT),
+ dbus_interface =
+ self.HFPD_HANDSFREE_INTERFACE_NAME)
self.hfpd_props = dbus.Interface(
- self.dbus.get_object('net.sf.nohands.hfpd',
- '/net/sf/nohands/hfpd'),
- dbus_interface='org.freedesktop.DBus.Properties')
+ self.dbus.get_object(self.HFPD_SERVICE_NAME,
+ self.HFPD_HANDSFREE_OBJECT),
+ dbus_interface=self.DBUS_INTERFACE_PROPERTIES)
self.soundio = dbus.Interface(
- self.dbus.get_object('net.sf.nohands.hfpd',
- '/net/sf/nohands/hfpd/soundio'),
- dbus_interface='net.sf.nohands.hfpd.SoundIo')
+ self.dbus.get_object(self.HFPD_SERVICE_NAME,
+ self.HFPD_SOUNDIO_OBJECT),
+ dbus_interface =
+ self.HFPD_SOUNDIO_INTERFACE_NAME)
self.soundio_props = dbus.Interface(
- self.dbus.get_object('net.sf.nohands.hfpd',
- '/net/sf/nohands/hfpd/soundio'),
- dbus_interface='org.freedesktop.DBus.Properties')
+ self.dbus.get_object(self.HFPD_SERVICE_NAME,
+ self.HFPD_SOUNDIO_OBJECT),
+ dbus_interface=self.DBUS_INTERFACE_PROPERTIES)
except dbus.exceptions.DBusException, (ex):
self.fatal(_('Could not connect to hfpd:\n%s\n\n'
'Ensure that hfpd and its D-Bus '
@@ -351,7 +650,7 @@ class HfConsole:
except:
v = 0
- my_version = 2
+ my_version = 3
if v < my_version:
self.fatal(_('Version mismatch with hfpd!\n'
'hfpd version: %(hfpdver)d\n'
@@ -393,7 +692,7 @@ class HfConsole:
loadags = self.configfile.items('devices')
for x in loadags:
x = self.addr_untransform(x[0])
- self.add_audiogateway(x)
+ self.add_audiogateway(x, False)
self.busctl.connect_to_signal("NameOwnerChanged",
self.hfpd_lost)
@@ -426,20 +725,24 @@ class HfConsole:
self.soundio_status_ctx = self['StatusBar'].get_context_id(
'SoundIoStatus')
self.soundio_skew_monitor = None
- st = self.getprop_hfpd('SystemState')
- self.hfpd_system_state(st)
- if not st:
+ self.nobt = not self.getprop_hfpd('SystemState')
+ self.hfpd_system_state(not self.nobt)
+ if self.nobt:
try:
self.hfpd.Start()
+ self.nobt = False
except dbus.exceptions.DBusException, (ex):
if (ex.get_dbus_name() !=
'net.sf.nohands.hfpd.Error'):
- self.fatal(ex.get_dbus_message())
+ self.fatal(str(ex))
return
self.setprop_hfpd('AutoRestart', True)
ags = self.getprop_hfpd('AudioGateways')
for x in ags:
self.hfpd_ag_added(str(x))
+ if not self.selected_ag:
+ self.ag_none_selected()
+
self.soundio_state_changed(self.getprop_soundio('State'))
hwg['MainWindow'].show()
@@ -449,13 +752,12 @@ class HfConsole:
def error_closed(self, dlg, response):
dlg.hide()
- def error_message(self, msg, window=None):
+ def error_message(self, msg):
dlg = gtk.MessageDialog(None, gtk.DIALOG_MODAL,
gtk.MESSAGE_ERROR,
gtk.BUTTONS_OK,
msg)
- if not window:
- window = self['MainWindow']
+ window = self['MainWindow']
dlg.set_title(window.get_title())
dlg.set_transient_for(window)
dlg.set_position(gtk.WIN_POS_CENTER_ON_PARENT)
@@ -471,75 +773,36 @@ class HfConsole:
dlg.connect('response', self.fatal_closed)
class AudioGateway:
- def image_button(self, toggle, stock, tip):
- if toggle:
- but = gtk.ToggleButton()
- else:
- but = gtk.Button()
- img = gtk.Image()
- img.set_from_stock(stock,
- gtk.ICON_SIZE_LARGE_TOOLBAR)
- but.add(img)
- img.show()
- but.set_no_show_all(True)
-
- # Fail gracefully if not available
- try: but.set_tooltip_text(tip)
- except: pass
- return but
-
+ def reset_indicators(self):
+ self.signal = -1
+ self.battery = -1
+ self.message = False
+ self.vm = False
+ self.noservice = False
def __init__(self, hfc, sbus, hfpd, agpath, box):
self.hfc = hfc
self.path = agpath
self.hfpd = hfpd
self.alerter = None
self.caller_id = None
+ self.reset_indicators()
+ self.autoreconnect = 1
+ self.autoreconnect_flag = False
- frame = gtk.Frame('')
- box.pack_start(frame, expand=False)
- vbox = gtk.VBox(spacing = 8)
- vbox.set_border_width(8)
- frame.add(vbox)
- hbox = gtk.HBox(spacing = 8)
- vbox.pack_start(hbox)
- lab = gtk.Label('State Here')
- lab.set_alignment(0.0, 0.5)
- hbox.pack_start(lab, expand=True)
- self.statelab = lab
- but = self.image_button(False, gtk.STOCK_DELETE,
- _('Remove Device'))
- hbox.pack_end(but, expand=False)
- but.connect('clicked', self.remove_clicked)
- self.remove_but = but
- but = self.image_button(False, gtk.STOCK_CONNECT,
- _('Connect Now'))
- hbox.pack_end(but, expand=False)
- but.connect('clicked', self.connect_clicked)
- self.connect_but = but
- but = self.image_button(True, gtk.STOCK_APPLY,
- _('Set Device as Primary'))
- hbox.pack_end(but, expand=False)
- but.connect('toggled', self.select_toggled)
- self.select_but = but
- but = self.image_button(False, gtk.STOCK_ADD,
- _('Remember This Device'))
- hbox.pack_end(but, expand=False)
- but.connect('clicked', self.add_clicked)
- self.add_but = but
- self.frame = frame
self.state = 0
self.callstate = 0
self.audiostate = 0
- self.noservice = False
+ self.disp = hfc.ag_disp_new(self)
- self.dbusobj = sbus.get_object('net.sf.nohands.hfpd',
- agpath)
+ self.dbusobj = sbus.get_object(
+ hfc.HFPD_SERVICE_NAME,
+ agpath)
self.ag = dbus.Interface(self.dbusobj,
dbus_interface =
- 'net.sf.nohands.hfpd.AudioGateway')
+ hfc.HFPD_AUDIOGATEWAY_INTERFACE_NAME)
self.agprops = dbus.Interface(self.dbusobj,
- dbus_interface =
- 'org.freedesktop.DBus.Properties')
+ dbus_interface =
+ hfc.DBUS_INTERFACE_PROPERTIES)
self.sigs = []
sig = self.ag.connect_to_signal("NameResolved",
@@ -554,6 +817,9 @@ class HfConsole:
sig = self.ag.connect_to_signal("AudioStateChanged",
self.audio_state_changed)
self.sigs.append(sig)
+ sig = self.ag.connect_to_signal("AutoReconnectChanged",
+ self.autoreconnect_changed)
+ self.sigs.append(sig)
sig = self.ag.connect_to_signal("IndicatorChanged",
self.indicator_changed)
self.sigs.append(sig)
@@ -562,111 +828,168 @@ class HfConsole:
self.sigs.append(sig)
self.addr = self.getprop('Address')
- name = self.getprop('Name')
- self.frame.set_label(name)
+ self.name = self.getprop('Name')
+ if self.name == self.addr:
+ self.name = self.hfc.ag_history_getname(
+ self.addr)
self.state = self.getprop('State')
self.callstate = self.getprop('CallState')
self.audiostate = self.getprop('AudioState')
self.state_changed(self.state, False)
self.call_state_changed(self.callstate)
self.audio_state_changed(self.audiostate)
- self.frame.show_all()
+ self.disp.set_name(self.name)
self.hfc.ag_update_history(self.addr, None)
- def set_state_labels(self):
- state = self.state
- callstate = self.callstate
- lab = 'Invalid State'
- self.remove_but.show()
- if state != 4:
- if state == 1:
- lab = _('Destroyed') + '\n'
- if state == 2:
- lab = _('Detached') + '\n'
- self.connect_but.show()
- self.connect_but.set_sensitive(True)
- if state == 3:
- lab = _('Attaching') + '\n'
- self.connect_but.show()
- self.connect_but.set_sensitive(False)
- self.statelab.set_markup(lab)
- self.select_but.hide()
- self.hfc.ag_state_changed(self)
- return
- self.connect_but.hide()
- self.select_but.show()
- if callstate == 1:
- lab = _('Ready') + '\n'
- if self.noservice:
- lab = _('No Service') + '\n'
- if callstate == 2:
- lab = _('Dialing') + '\n'
- if callstate == 3:
- lab = _('Call Established') + '\n'
- if callstate == 4:
- lab = _('Ringing') + '\n'
- if callstate == 5:
- lab = _('Waiting Call') + '\n'
- if self.has_audio():
- lab += _('Audio Open')
- self.statelab.set_markup(lab)
- self.hfc.ag_state_changed(self)
-
def has_feature(self, feat):
return (hasattr(self, 'features') and
self.features[feat])
+ def is_connecting(self):
+ return self.state == 3
+ def is_connected(self):
+ return self.state == 4
def can_dial(self):
- return self.state == 4 and (self.callstate == 1 or
- self.callstate == 4)
+ return self.is_connected() and (self.callstate == 1 or
+ self.callstate == 4)
def can_dtmf(self):
- return self.state == 4 and (self.callstate == 2 or
- self.callstate == 3 or
- self.callstate == 5)
+ return self.is_connected() and (self.callstate == 2 or
+ self.callstate == 3 or
+ self.callstate == 5)
+ def can_hold(self):
+ return (self.is_connected() and
+ self.has_feature('SwapHoldActive') and
+ ((self.callstate == 3) or
+ (self.callstate == 5)))
+ def has_any_call(self):
+ return self.is_connected() and (self.callstate != 1)
+ def has_waiting_call(self):
+ return self.is_connected() and (self.callstate == 4 or
+ self.callstate == 5)
+ def has_message(self):
+ return self.is_connected() and (self.message or self.vm)
def can_drop_waiting(self):
return self.has_feature('RejectCall')
def can_drop_held_udub(self):
return self.has_feature('DropHeldUdub')
def selectable(self):
- return self.state == 4
+ return self.is_mine()
+ def select_priority(self):
+ if self.has_audio():
+ return 4
+ if self.has_any_call():
+ return 3
+ if self.has_service():
+ return 2
+ if self.is_connected():
+ return 1
+ return 0
+ def is_mine(self):
+ return self.hfc.ags_added.has_key(self.addr)
+ def load_config(self):
+ ar = True
+ if self.hfc.ag_config_has_option(self.addr,
+ 'autoreconnect'):
+ ar = self.hfc.ag_config_get_option(self.addr,
+ 'autoreconnect')
+ try: ar = int(ar)
+ except: ar = 2
+ if ar != self.autoreconnect:
+ self.autoreconnect = ar
+ if ar == 2: self.set_autoreconnect_flag(True)
+ else: self.set_autoreconnect_flag(False)
+ def save_config(self):
+ self.hfc.ag_config_set_option(self.addr,
+ 'autoreconnect',
+ self.autoreconnect)
+ def update_mine(self):
+ self.disp.set_name(None)
+ self.disp.set_name(self.name)
+ def get_autoreconnect(self):
+ return self.autoreconnect
+ def set_autoreconnect(self, value):
+ if value == self.autoreconnect:
+ return
+ self.autoreconnect = value
+ if value == 2: self.set_autoreconnect_flag(True)
+ else: self.set_autoreconnect_flag(False)
+ self.save_config()
+ self.disp.set_state()
+ def get_autoreconnect_flag(self):
+ return self.autoreconnect_flag
+ def set_autoreconnect_flag(self, value):
+ value = bool(value)
+ if value != self.autoreconnect_flag:
+ self.setprop('AutoReconnect',
+ dbus.Boolean(value))
+ self.autoreconnect_flag = value
+ def has_service(self):
+ return self.is_connected() and not self.noservice
+ def signal_level(self):
+ return self.signal
+ def battery_level(self):
+ return self.battery
+ def audio_connecting(self):
+ return self.audiostate == 2
def has_audio(self):
return self.audiostate == 3
def wants_audio(self):
return (self.callstate == 2 or
self.callstate == 3 or
self.callstate == 5)
- def select(self, state):
- if state and not self.selectable():
- return False
- self.nested = True
- self.select_but.set_active(state)
- del self.nested
- return True
def name_resolved(self, name):
- self.frame.set_label(name)
- self.hfc.ag_update_history(self.addr, name)
+ self.name = name
+ self.disp.set_name(self.name)
+ self.hfc.ag_update_history(self.addr, self.name)
def state_changed(self, state, voluntary):
self.state = int(state)
- if self.state == 4:
+ if self.is_connected():
self.features = self.getprop('Features')
+ if (self.is_mine() and
+ self.get_autoreconnect() == 1):
+ self.set_autoreconnect(2)
else:
+ self.reset_indicators()
self.call_state_changed(1)
if hasattr(self, 'features'):
del self.features
- self.set_state_labels()
+ self.disp.set_state()
def call_state_changed(self, state):
self.callstate = int(state)
- self.set_state_labels()
+ self.disp.set_state()
if (self.callstate != 4 and self.callstate != 5):
self.alert_close()
def audio_state_changed(self, state):
self.audiostate = int(state)
- self.set_state_labels()
+ self.disp.set_state()
+ def soundio_state_changed(self):
+ self.disp.set_state()
+ def autoreconnect_changed(self, value):
+ value = bool(value)
+ if self.autoreconnect_flag != value:
+ self.autoreconnect_flag = value
+ if value and self.get_autoreconnect() == 0:
+ self.set_autoreconnect(2)
+ elif not value and self.get_autoreconnect() ==2:
+ self.set_autoreconnect(1)
def indicator_changed(self, name, val):
+ #print "Indicator %s -> %d" % (name, int(val))
if name == 'service':
self.noservice = not val
- self.set_state_labels()
+ self.disp.set_state()
+ elif name == 'signal':
+ self.signal = int(val)
+ self.disp.set_state()
+ elif name == 'battchg':
+ self.battery = int(val)
+ self.disp.set_state()
+ elif name == 'voice mail':
+ self.vm = int(val)
+ self.disp.set_state()
+ elif name == 'message':
+ self.vm = int(val)
+ self.disp.set_state()
def alert_close(self):
if self.alerter:
@@ -685,20 +1008,14 @@ class HfConsole:
def waiting_caller_info(self):
return (self.caller_id, self.caller_phbook)
- def connect_clicked(self, widget):
+ def connect(self):
self.ag.Connect()
- def not_mine(self):
- self.add_but.show()
- def add_clicked(self, widget):
- self.hfc.ag_add_to_config(self.addr)
- widget.hide()
- def select_toggled(self, widget):
- if hasattr(self, 'nested'):
- return
- self.hfc.ag_select(self, widget.get_active())
-
+ def disconnect(self):
+ self.ag.Disconnect()
def command_failed(self, reason):
print _("Command failed: %s") % reason
+ def open_audio(self):
+ self.ag.OpenAudio()
def close_audio(self):
self.ag.CloseAudio()
def dial(self, number):
@@ -733,32 +1050,239 @@ class HfConsole:
self.ag.SendDtmf(char[0],
reply_handler=lambda : None,
error_handler=self.command_failed)
- def remove_clicked(self, widget):
- if self.hfc.configfile.remove_option('devices',
- self.hfc.addr_transform(self.addr)):
- self.hfc.configfile.write(open(
- self.hfc.configfile_name, 'w+'))
- self.setprop('Known', False)
+ def do_remove(self):
+ self.hfc.ag_remove_from_config(self.addr)
+ if self.hfc.ags_added.has_key(self.addr):
+ del self.hfc.ags_added[self.addr]
+ x = self.setprop('Known', False)
self.hfpd.RemoveDevice(self.addr)
def remove(self):
- self.frame.get_parent().remove(self.frame)
- del self.frame
+ self.disp.remove()
+ del self.disp
while self.sigs:
sig = self.sigs.pop()
sig.remove()
def getprop(self, prop):
return self.agprops.Get(
- 'net.sf.nohands.hfpd.AudioGateway',
+ self.hfc.HFPD_AUDIOGATEWAY_INTERFACE_NAME,
prop)
def setprop(self, prop, val):
return self.agprops.Set(
- 'net.sf.nohands.hfpd.AudioGateway',
+ self.hfc.HFPD_AUDIOGATEWAY_INTERFACE_NAME,
prop, val)
+ class AgStateDisplay:
+ def __init__(self, hf, ag):
+ self.hf = hf
+ self.ag = ag
+ self.item = None
+ self.row_detail = None
+ self.row_new = None
+ def selector_toggle(self, widget):
+ if widget.get_active():
+ self.hf.ag_selector_changed(self.ag)
+ def remove_item(self):
+ if self.item:
+ self.hf.ag_list.remove(self.item)
+ self.item = None
+ kids = self.hf.ag_list.get_children()
+ count = len(kids)
+ if count == 3:
+ self.hf.ag_list_separator.hide()
+ def set_name(self, name):
+ if not name:
+ self.remove_item()
+ if self.row_detail:
+ self.hf.ag_list_detail.remove(
+ self.row_detail)
+ self.row_detail = None
+ if self.row_new:
+ self.hf.ag_list_new.remove(
+ self.row_new)
+ self.row_new = None
+ return
+
+ if not self.ag.is_mine():
+ if not self.row_new:
+ self.row_new = (self.hf.ag_list_new.
+ append(
+ row=[name, self.ag.addr, self]))
+ else:
+ self.hf.ag_list_new.set(self.row_new,
+ 0, name)
+ return
+
+ self.remove_item()
+ group = None
+ kids = self.hf.ag_list.get_children()
+ count = len(kids)
+ if count > 3:
+ group = kids[0]
+ self.hf.ag_list_separator.show()
+ self.item = gtk.RadioMenuItem(group, name)
+ self.item.connect('toggled', self.selector_toggle)
+ self.item.show_all()
+ if self.ag == self.hf.selected_ag:
+ self.item.set_active(True)
+ self.hf.ag_list.insert(self.item, count - 3)
+ if self.ag == self.hf.selected_ag:
+ self.hf['AgSelectorLabel'].set_text(name)
+
+ if not self.row_detail:
+ self.row_detail = (self.hf.ag_list_detail.
+ append(
+ row=[name, self.ag.addr, self]))
+ else:
+ self.hf.ag_list_detail.set(self.row_detail,
+ 0, name)
+ def remove(self):
+ if self.ag == self.hf.selected_ag:
+ self.hf.selected_ag = None
+ self.hf.ag_none_selected()
+ self.ag = None
+ self.set_name(None)
+
+ def do_mainwindow_state(self, string):
+ self.hf['AudioGatewayStateLabel'].set_markup(
+ string)
+ def mainwindow_state(self):
+ if self.hf.selected_ag != self.ag:
+ return
+ state = self.ag.state
+ callstate = self.ag.callstate
+ lab = 'Invalid State'
+ if not self.ag.is_connected():
+ if state == 1:
+ lab = _('Destroyed')
+ if state == 2:
+ lab = _('Detached')
+ if state == 3:
+ lab = _('Attaching')
+ lab += '\n'
+ else:
+ if callstate == 1:
+ lab = _('Ready')
+ if not self.ag.has_service():
+ lab = _('No Service')
+ if callstate == 2:
+ lab = _('Dialing')
+ if callstate == 3:
+ lab = _('Call Established')
+ if callstate == 4:
+ lab = _('Ringing')
+ if callstate == 5:
+ lab = _('Waiting Call')
+ lab += '\n'
+ if self.ag.has_audio():
+ lab += _('Audio Open')
+ elif self.ag.audio_connecting():
+ lab += _('Audio Connecting')
+ self.do_mainwindow_state(lab)
+ self.hf.ag_configure_gui(self.ag)
+
+ def devices_state(self):
+ if self.hf.devices_ag != self.ag:
+ return
+ self.hf.nested = True
+ self.hf['DevicesProperties'].set_sensitive(True)
+ self.hf['DevicesDevAddr'].set_text(self.ag.addr)
+ v = self.ag.get_autoreconnect()
+ if v == 0: v = 'DevicesAutoConnectNever'
+ elif v == 1: v = 'DevicesAutoConnectDisabled'
+ else: v = 'DevicesAutoConnectEnabled'
+ self.hf[v].set_active(True)
+ if self.ag.is_connected():
+ self.hf['DevicesConnect'].hide()
+ self.hf['DevicesDisconnect'].show()
+ else:
+ self.hf['DevicesConnect'].show()
+ self.hf['DevicesConnect'].set_sensitive(
+ not self.ag.is_connecting())
+ self.hf['DevicesDisconnect'].hide()
+ self.hf.nested = False
+
+ def update_state(self):
+ self.mainwindow_state()
+ self.devices_state()
+
+ def set_state(self):
+ self.hf.ag_state_changed(self.ag)
+ self.update_state()
+
+ def ag_disp_new(self, ag):
+ disp = self.AgStateDisplay(self, ag)
+ return disp
+
+ def ag_selector_set(self, ag):
+ do_arrow = False
+ if ag:
+ lab = ag.name
+ ag.disp.item.set_active(True)
+ self['AgSelectorArrow'].show()
+ else:
+ lab = _('Search for Device...')
+ self['AgSelectorArrow'].hide()
+ self['AgSelectorLabel'].set_text(lab)
+ def ag_selector_menu_position(self, menu):
+ widget = self['AgSelector']
+ alloc = widget.get_allocation()
+ (x, y) = widget.get_parent_window().get_origin()
+ x += alloc.x
+ y += alloc.y + alloc.height
+ return (x, y, True)
+ def ag_selector_open(self, widget, event):
+ kids = self.ag_list.get_children()
+ count = len(kids)
+ if count == 3:
+ return
+ self.nested = True
+ self['AgSelector'].set_active(True)
+ self.nested = False
+ self.ag_list.popup(None, None,
+ self.ag_selector_menu_position,
+ event.button,
+ event.get_time())
+
+ def ag_selector_close(self, widget):
+ self.nested = True
+ self['AgSelector'].set_active(False)
+ self.nested = False
+ def ag_selector_toggle(self, widget):
+ if self.nested:
+ return
+ self.nested = True
+ if widget.get_active():
+ widget.set_active(False)
+ self.scan_open()
+ self.nested = False
+ def ag_selector_scan_activate(self, widget):
+ self.scan_open()
+ def ag_selector_manage_activate(self, widget):
+ self.devices_open()
+ def ag_selector_changed(self, ag):
+ if not ag.selectable():
+ ag = None
+ if self.selected_ag and self.selected_ag.selectable():
+ self.selected_ag.item.set_active(True)
+ ag = self.selected_ag
+ self.ag_selector_set(ag)
+ return
+
+ # If the user explicitly picks an audio gateway of lesser
+ # priority than the currently selected AG, consider the
+ # selection to be locked to that audio gateway.
+ lock = False
+ if self.selected_ag and (self.selected_ag.select_priority() >
+ ag.select_priority()):
+ lock = True
+ self.ag_select_changed(ag, lock)
+
def hfpd_lost(self, name, old_owner, new_owner):
- if name != 'net.sf.nohands.hfpd' or new_owner != '':
+ if name != self.HFPD_SERVICE_NAME or new_owner != '':
return
- self.fatal(_('HFPD Process Disconnected'))
+ msg = _('HFPD Process Disconnected')
+ print msg
+ self.fatal(msg)
def hfpd_ag_added(self, agpath):
if agpath not in self.ags:
@@ -768,21 +1292,36 @@ class HfConsole:
agpath,
self['AudioGatewayBox'])
self.ags[agpath] = ag
- self.ag_mine(ag)
+ if ag.is_mine():
+ ag.load_config()
+ else:
+ self.newdevice_open()
+ if (self.ags_added.has_key(ag.addr) and
+ self.ags_added[ag.addr] == 2):
+ if (not self.selected_ag or
+ not self.selected_ag.wants_audio()):
+ self.ags_added[ag.addr] = 1
+ self.ag_select_changed(ag)
def hfpd_ag_removed(self, agpath):
if agpath in self.ags:
self.ags[agpath].remove()
del self.ags[agpath]
- def ag_select_search(self):
- for xag in self.ags.values():
- if xag.has_audio() and xag.select(True):
- self.ag_select_changed(xag)
- return
+ if not self.selected_ag:
+ self.ag_none_selected()
+ def ag_none_selected(self):
+ (ag, prio) = self.ag_best()
+ self.ag_select_changed(ag)
+ def ag_best(self):
+ best_ag = None
+ best_prio = -1
for xag in self.ags.values():
- if xag.select(True):
- self.ag_select_changed(xag)
- return
+ if xag.selectable() and (
+ not best_ag or (best_prio <
+ xag.select_priority())):
+ best_ag = xag
+ best_prio = xag.select_priority()
+ return (best_ag, best_prio)
def ag_stop_audio_unselected(self):
for xag in self.ags.values():
if xag != self.selected_ag and xag.has_audio():
@@ -808,58 +1347,66 @@ class HfConsole:
self.selected_ag.close_audio()
self.ag_stop_audio_unselected()
def ag_state_changed(self, ag):
- if ((not ag.selectable() and ag == self.selected_ag) or
- (ag.has_audio() and self.selected_ag and
- not self.selected_ag.has_audio())):
- ag.select(False)
- self.ag_select_changed(None)
-
- if not self.selected_ag:
- # Find another AG and select it
- self.ag_select_search()
- # If we still didn't find one, stop audio.
- if not self.selected_ag:
- self.ag_stop_audio_unselected()
- elif ag == self.selected_ag:
- # Maybe update buttons to reflect state
- self.ag_select_changed(ag)
-
- def ag_select(self, ag, state):
- if ((not state and ag == self.selected_ag) or
- (state and ag != self.selected_ag)):
- ag.select(False)
- self.ag_select_changed(None)
- if state and ag.select(True):
- self.ag_select_changed(ag)
+ #print "AG state changed %s %slock" % (ag.name, self.selected_ag_lock)
+ if ag and ag == self.selected_ag:
+ self.ag_push_audio()
+ if self.selected_ag_lock and self.selected_ag.selectable():
+ self.ag_stop_audio_unselected()
+ return
+ # Evaluate all AGs and maybe change selection
+ (best, prio) = self.ag_best()
+ if (not self.selected_ag or
+ not self.selected_ag.selectable() or
+ (self.selected_ag.select_priority() < prio)):
+ self.ag_select_changed(best)
if not self.selected_ag:
- self.ag_select_search()
+ self.ag_stop_audio_unselected()
- def ag_select_changed(self, ag):
- if self.selected_ag:
- if self.selected_ag != ag:
- self.selected_ag.select(False)
- self.selected_ag = ag
+ def ag_select_changed(self, ag, lock = False):
if not ag:
- self.command_mode(0)
- elif ag.can_dial():
- self.command_mode(1)
- elif ag.can_dtmf():
- self.command_mode(2)
+ lock = False
+ elif not lock and self.selected_ag == ag:
+ lock = self.selected_ag_lock
+ self.selected_ag = ag
+ self.selected_ag_lock = lock
+ self.ag_selector_set(ag)
+ if ag:
+ ag.disp.update_state()
else:
- self.command_mode(0)
+ self.ag_configure_gui(None)
if ag:
self.ag_push_audio()
- def ag_mine(self, ag):
- if self.ags_added.has_key(ag.addr):
- ag.setprop('AutoReconnect', self.autoreconnect)
- else:
- ag.not_mine()
+ def ag_config_has_option(self, addr, name):
+ section = 'ag_' + self.addr_transform(addr)
+ if not self.configfile.has_section(section):
+ return False
+ return self.configfile.has_option(section, name)
+
+ def ag_config_get_option(self, addr, name):
+ section = 'ag_' + self.addr_transform(addr)
+ if not self.configfile.has_section(section):
+ return None
+ return self.configfile.get(section, name, raw=True)
+
+ def ag_config_set_option(self, addr, name, value):
+ section = 'ag_' + self.addr_transform(addr)
+ if not self.configfile.has_section(section):
+ self.configfile.add_section(section)
+ self.configfile.set(section, name, value)
+ self.configfile.write(open(self.configfile_name, 'w+'))
def ag_add_to_config(self, addr):
self.configfile.set('devices', self.addr_transform(addr), True)
self.configfile.write(open(self.configfile_name, 'w+'))
+ def ag_remove_from_config(self, addr):
+ self.configfile.remove_option('devices',
+ self.addr_transform(addr))
+ section = 'ag_' + self.addr_transform(addr)
+ self.configfile.remove_section(section)
+ self.configfile.write(open(self.configfile_name, 'w+'))
+
def ag_update_history(self, addr, name):
addrx = self.addr_transform(addr)
has = self.configfile.has_option('history', addrx)
@@ -872,9 +1419,19 @@ class HfConsole:
self.configfile.set('history', addrx, name)
self.configfile.write(open(self.configfile_name, 'w+'))
- def add_audiogateway(self, addr):
+ def ag_history_getname(self, addr):
+ addrx = self.addr_transform(addr)
+ if not self.configfile.has_option('history', addrx):
+ return None
+ return self.configfile.get('history', addrx)
+
+ def add_audiogateway(self, addr, selectit):
+ agpath = None
try:
- self.ags_added[addr] = True
+ if selectit:
+ self.ags_added[addr] = 2
+ else:
+ self.ags_added[addr] = 1
# We will use the accompanying AudioGatewayAdded
# signal to construct the AudioGateway object above
agpath = self.hfpd.AddDevice(addr, False)
@@ -910,42 +1467,179 @@ class HfConsole:
def phone_num_bs(self, but):
entry = self['PhoneNumEntry']
entry.set_text(entry.get_text()[:-1])
- def command_mode(self, val):
- if val == 0:
- self['DigitButtonBox'].set_sensitive(False)
- self['PhoneNumEntryBox'].set_sensitive(False)
- self['DialCommandBox'].set_sensitive(False)
- self['DialPadDial'].set_label('Dial')
- elif val == 1:
- self['DigitButtonBox'].set_sensitive(True)
- self['PhoneNumEntryBox'].set_sensitive(True)
- self['DialCommandBox'].set_sensitive(True)
- self['DialPadRedial'].set_sensitive(True)
- self['DialPadDial'].set_label('Dial')
- elif val == 2:
- self['DigitButtonBox'].set_sensitive(True)
- self['PhoneNumEntryBox'].set_sensitive(False)
- self['DialCommandBox'].set_sensitive(True)
- self['DialPadRedial'].set_sensitive(False)
- self['DialPadDial'].set_label('Hang Up')
- def dial_dial_clicked(self, widget):
+ def ag_configure_gui(self, ag):
+ sel_dis = False
+ connect = False
+ connect_ip = False
+ digits = False
+ do_notebook = False
+ dial = False
+ hold = False
+ swap = False
+ hangup = False
+ audio = False
+ audio_ip = False
+ audio_dn = False
+ record = False
+ record_dn = False
+ mainstatus = False
+ status_page = 0
+ battstatus = False
+ batt_page = 0
+ message = False
+ if ag:
+ mainstatus = True
+ if not ag.is_connected():
+ connect = True
+ connect_ip = ag.is_connecting() or self.nobt
+ status_page = 8
+ else:
+ status_page = 7
+ if ag.has_service():
+ status_page = ag.signal_level()
+ if status_page < 0 or status_page > 5:
+ status_page = 6
+ digits = ag.can_dial() or ag.can_dtmf()
+ dial = ag.can_dial()
+ hold = ag.can_hold()
+ do_notebook = not ag.can_dial()
+ hangup = not dial
+ if hold:
+ swap = ag.has_waiting_call()
+ hold = not swap
+ audio = True
+ if ag.has_audio():
+ audio_dn = True
+ elif ag.audio_connecting():
+ audio_ip = True
+ message = ag.has_message()
+ batt_page = ag.battery_level()
+ battstatus = True
+ if batt_page < 0 or batt_page > 5:
+ batt_page = 0
+ battstatus = False
+
+ # Display the "no bluetooth" icon if BT is disconnected
+ # and the AG is not connected
+ if self.nobt and (not ag or (not ag.is_connected() and
+ not ag.is_connecting())):
+ mainstatus = True
+ status_page = 9
+ sel_dis = True
+
+ def set_vis(widget, visible):
+ if visible: widget.show()
+ else: widget.hide()
+
+ self['AgSelector'].set_sensitive(not sel_dis)
+ self['DigitButtonBox'].set_sensitive(digits)
+ self['PhoneNumEntryBox'].set_sensitive(dial)
+ set_vis(self['AgConnect'], connect)
+ self['AgConnect'].set_sensitive(not connect_ip)
+ set_vis(self['AgHangUp'], hangup)
+ set_vis(self['AgHoldCall'], hold)
+ set_vis(self['AgSwapCall'], swap)
+ set_vis(self['AgDial'], dial)
+ set_vis(self['AgRedial'], dial)
+ set_vis(self['AgAudioToggle'], audio)
+ self['AgAudioToggle'].set_active(audio_dn)
+ self['AgAudioToggle'].set_sensitive(not audio_ip)
+ set_vis(self['RecordCall'], record)
+ self['RecordCall'].set_active(record_dn)
+ set_vis(self['AgMainStatus'], mainstatus)
+ self['AgMainStatus'].set_current_page(status_page)
+ set_vis(self['AgBatteryStatus'], battstatus)
+ self['AgBatteryStatus'].set_current_page(batt_page)
+ set_vis(self['MessageIndicator'], message)
+ if do_notebook:
+ self.frontnotebook_set(0)
+ else:
+ self.frontnotebook_set(self.frontpage)
+
+ def bar_ag_dial_clicked(self, widget):
ag = self.selected_ag
entry = self['PhoneNumEntry']
if not ag:
return
if not ag.can_dial():
- ag.hangup()
return
num = entry.get_text()
entry.set_text('')
ag.dial(num)
- def dial_redial_clicked(self, widget):
+
+ def bar_ag_scan_clicked(self, widget):
+ self.scan_open()
+ def bar_ag_connect_clicked(self, widget):
+ try:
+ if self.selected_ag:
+ self.selected_ag.connect()
+ except dbus.exceptions.DBusException, (ex):
+ self.error_message(
+ _('Could not attach Audio Gateway: %s') %
+ str(ex))
+
+ def frontnotebook_set(self, page):
+ dialpad_but = False
+ contacts_but = False
+ if page == 0:
+ #contacts_but = True
+ if (self.selected_ag and
+ self.selected_ag.is_connected() and
+ not self.selected_ag.can_dial()):
+ contacts_but = False
+ if page == 1:
+ dialpad_but = True
+
+ def set_vis(widget, visible):
+ if visible: widget.show()
+ else: widget.hide()
+
+ self['FrontNotebook'].set_current_page(page)
+ set_vis(self['BarDialPad'], dialpad_but)
+ set_vis(self['BarContacts'], contacts_but)
+
+ def bar_dialpad_clicked(self, widget):
+ self.frontpage = 0
+ self.frontnotebook_set(0)
+ def bar_contacts_clicked(self, widget):
+ self.frontpage = 1
+ self.frontnotebook_set(1)
+
+ def bar_ag_hangup_clicked(self, widget):
+ ag = self.selected_ag
+ if not ag:
+ return
+ ag.hangup()
+ def bar_ag_swaphold_clicked(self, widget):
+ ag = self.selected_ag
+ if not ag or not ag.can_hold():
+ return
+ ag.swap_hold_active()
+ def bar_ag_redial_clicked(self, widget):
ag = self.selected_ag
if not ag or not ag.can_dial():
return
ag.redial()
- def dial_xfer_clicked(self, widget):
- pass
+ def bar_ag_audio_toggled(self, widget):
+ if not self.selected_ag:
+ return
+ if not widget.get_active():
+ if (self.selected_ag.has_audio() or
+ self.selected_ag.audio_connecting()):
+ self.selected_ag.close_audio()
+ return
+ if (self.selected_ag.has_audio() or
+ self.selected_ag.audio_connecting()):
+ return
+ try:
+ self.selected_ag.open_audio()
+ except dbus.exceptions.DBusException, (ex):
+ self.error_message(
+ _('Could not open audio connection: %s') %
+ str(ex))
+ widget.set_active(False)
+ def bar_config_clicked(self, widget):
+ self.config_open()
def hfpd_system_msg_clear(self):
if hasattr(self, 'system_msg'):
self['StatusBar'].remove(self.system_ctx,
@@ -954,6 +1648,7 @@ class HfConsole:
if hasattr(self, 'system_msg_timeout'):
gobject.source_remove(self.system_msg_timeout)
del self.system_msg_timeout
+ return False
def hfpd_system_msg(self, msg, timeout):
self.hfpd_system_msg_clear()
self.system_msg = self['StatusBar'].push(self.system_ctx, msg)
@@ -963,59 +1658,173 @@ class HfConsole:
def hfpd_system_state(self, state):
if not state:
+ self.nobt = True
self.hfpd_system_msg(_('Bluetooth Unavailable'), None)
else:
+ self.nobt = False
self.hfpd_system_msg_clear()
+ self.ag_configure_gui(self.selected_ag)
+
+ def topnotebook_set(self, page):
+ nb = self['HiddenNotebook']
+ if not hasattr(self, 'notebook_stack'):
+ self.notebook_stack = []
+ if page:
+ self.notebook_stack.append(nb.get_current_page())
+ nb.set_current_page(nb.page_num(page))
+ elif len(self.notebook_stack):
+ nb.set_current_page(self.notebook_stack.pop())
+ else:
+ nb.set_current_page(0)
+ def topnotebook_get(self):
+ nb = self['HiddenNotebook']
+ return nb.get_nth_page(nb.get_current_page())
+
+ def devices_open(self):
+ self.topnotebook_set(self['DevicesTab'])
+ def devices_close_clicked(self, widget):
+ self.topnotebook_set(None)
+ def devices_add_clicked(self, widget):
+ self.scan_open()
+ def devices_delete_clicked(self, widget):
+ if self.devices_ag:
+ self.ag_remove_from_config(self.devices_ag.addr)
+ self.devices_ag.do_remove()
+ def devices_connect_clicked(self, widget):
+ if self.devices_ag:
+ self.devices_ag.connect()
+ def devices_disconnect_clicked(self, widget):
+ if self.devices_ag:
+ self.devices_ag.disconnect()
+ def devices_autoconnect_toggled(self, widget, value):
+ if self.nested or not widget.get_active():
+ return
+ if self.devices_ag:
+ self.devices_ag.set_autoreconnect(value)
+ def devices_autoconnect_never_toggled(self, widget):
+ self.devices_autoconnect_toggled(widget, 0)
+ def devices_autoconnect_disabled_toggled(self, widget):
+ self.devices_autoconnect_toggled(widget, 1)
+ def devices_autoconnect_enabled_toggled(self, widget):
+ self.devices_autoconnect_toggled(widget, 2)
+ def devices_select(self, selection):
+ if not selection.count_selected_rows():
+ self.devices_ag = None
+ self['DevicesDevAddr'].set_text('')
+ self['DevicesConnect'].hide()
+ self['DevicesDisconnect'].show()
+ self['DevicesProperties'].set_sensitive(False)
+ return
+ (store, iter) = selection.get_selected()
+ disp = store.get_value(iter, 2)
+ self.devices_ag = disp.ag
+ disp.devices_state()
+ self['DevicesProperties'].show()
+
+ def newdevice_open(self):
+ tab = self['NewDeviceTab']
+ if self.topnotebook_get() == tab:
+ return
+ itx = self.ag_list_new.get_iter_root()
+ if itx:
+ self['NewDeviceList'].get_selection().select_iter(itx)
+ self.topnotebook_set(tab)
+ def newdevice_close_clicked(self, widget):
+ self.topnotebook_set(None)
+ def newdevice_add_clicked(self, widget):
+ ag = self.newdevice_ag
+ self.add_audiogateway(ag.addr, False)
+ ag.update_mine()
+ self.ag_add_to_config(ag.addr)
+ ag.set_autoreconnect(2)
+ self.ag_select_changed(ag)
+ def newdevice_clear_clicked(self, widget):
+ xiter = self.ag_list_new.get_iter_root()
+ while xiter:
+ disp = self.ag_list_new.get_value(xiter, 2)
+ disp.ag.do_remove()
+ xiter = self.ag_list_new.iter_next(xiter)
+ def newdevice_select(self, selection):
+ if not selection.count_selected_rows():
+ self['NewDeviceAdd'].set_sensitive(False)
+ return
+ (store, iter) = selection.get_selected()
+ disp = store.get_value(iter, 2)
+ self.newdevice_ag = disp.ag
+ self['NewDeviceAdd'].set_sensitive(True)
+ def newdevice_row_added(self, list, path, iter):
+ self['NewDeviceClear'].set_sensitive(True)
+ def newdevice_row_removed(self, list, path):
+ if not list.get_iter_root():
+ self['NewDeviceClear'].set_sensitive(False)
+ tab = self['NewDeviceTab']
+ if self.topnotebook_get() == tab:
+ self.topnotebook_set(None)
+
+ def inquiry_show_activity(self):
+ self['ScanActivityIndicator'].pulse()
+ return True
+ def inquiry_started(self):
+ self.inquiry = True
+ self['ScanRestart'].set_sensitive(False)
+ self['ScanActivityIndicator'].set_fraction(0)
+ self['ScanActivity'].show()
+ self.inquiry_animation_timeout = gobject.timeout_add(
+ 175, self.inquiry_show_activity)
+
+ def inquiry_stopped(self):
+ self.inquiry = False
+ self['ScanActivity'].hide()
+ self['ScanRestart'].set_sensitive(True)
+ if hasattr(self, 'inquiry_animation_timeout'):
+ gobject.source_remove(self.inquiry_animation_timeout)
+ del self.inquiry_animation_timeout
def scan_restart(self):
self.scanresults.clear()
- self['ScanOK'].set_sensitive(False)
+ self['ScanAdd'].set_sensitive(False)
try: self.hfpd.StartInquiry()
except: return False
- self.inquiry = True
- self['ScanRestart'].set_sensitive(False)
+ self.inquiry_started()
return True
- def scan_open(self, but):
- dlg = self['ScanDialog']
+ def scan_open(self):
if not self.scan_restart():
- self.error_message(_('Could not start inquiry'),
- self['ScanDialog'])
+ self.error_message(_('Could not start inquiry'))
return
- dlg.show()
+ self.topnotebook_set(self['ScanTab'])
def scan_close(self):
- dlg = self['ScanDialog']
- dlg.hide()
+ self.topnotebook_set(None)
if self.inquiry:
try:
self.hfpd.StopInquiry()
except:
pass
- self.inquiry = False
+ self.inquiry_stopped()
def scan_create_session(self, store, iter):
# Create a session for the selected bdaddr
self.scan_close()
assert store and iter
addr = store.get_value(iter, 2)
self.ag_add_to_config(addr)
- self.add_audiogateway(addr)
- def scan_ok_clicked(self, widget):
+ self.ag_config_set_option(addr, 'autoreconnect', 2)
+ self.add_audiogateway(addr, True)
+ def scan_add_clicked(self, widget):
assert (self.scanselect.count_selected_rows() <= 1)
(store, iter) = self.scanselect.get_selected()
self.scan_create_session(store, iter)
- def scan_cancel_clicked(self,widget):
+ def scan_close_clicked(self,widget):
self.scan_close()
def scan_history_clicked(self, widget):
self.history_open()
def scan_restart_clicked(self, widget):
if not self.scan_restart():
- self.error_message(_('Could not start inquiry'),
- self['ScanDialog'])
+ self.error_message(_('Could not start inquiry'))
def scan_select(self, selection):
if not selection.count_selected_rows():
- self['ScanOK'].set_sensitive(False)
+ self['ScanAdd'].set_sensitive(False)
else:
- self['ScanOK'].set_sensitive(True)
+ self['ScanAdd'].set_sensitive(True)
class NameResolveReq:
def __init__(self, hfc, addr, store):
self.addr = addr
@@ -1047,8 +1856,7 @@ class HfConsole:
return
if not self.inquiry:
return
- self.inquiry = False
- self['ScanRestart'].set_sensitive(True)
+ self.inquiry_stopped()
ix = self.scanresults.get_iter_first()
while ix:
addr = self.scanresults.get_value(ix, 2)
@@ -1060,7 +1868,6 @@ class HfConsole:
# History box
def history_open(self):
- dlg = self['HistoryDialog']
self.historyresults.clear()
self['HistoryOK'].set_sensitive(False)
@@ -1074,10 +1881,9 @@ class HfConsole:
else:
name = "%s (%s)" % (name, addr)
self.historyresults.append(row=[name, 0, addr])
- dlg.show()
+ self.topnotebook_set(self['HistoryTab'])
def history_close(self):
- dlg = self['HistoryDialog']
- dlg.hide()
+ self.topnotebook_set(None)
def history_ok_clicked(self, widget):
self.history_close()
assert self.historyselect.count_selected_rows() <= 1
@@ -1092,10 +1898,10 @@ class HfConsole:
self['HistoryOK'].set_sensitive(True)
# Configuration dialog related methods
- def config_open(self, widget):
- dlg = self['ConfigDialog']
+ def config_open(self):
savecfg = self.config_get_vals()
savecfg['packetintervalsave'] = savecfg['packetinterval']
+ savecfg['jitterwindowsave'] = savecfg['jitterwindow']
savecfg['minbufferfillsave'] = savecfg['minbufferfill']
savecfg['echocancelsave'] = savecfg['echocancel']
if savecfg['echocancelsave'] == 0:
@@ -1113,8 +1919,6 @@ class HfConsole:
savecfg['acceptunknown'])
self['ConfigVoicePersist'].set_active(
savecfg['voicepersist'])
- self['ConfigAutoReconnect'].set_active(
- savecfg['autoreconnect'])
self['ConfigDriver'].get_model().clear()
for x in savecfg['drivers']:
self['ConfigDriver'].append_text(x)
@@ -1122,6 +1926,7 @@ class HfConsole:
self['ConfigDriverDevList'].child.set_text(
savecfg['driveropts'])
self.config_packet_interval(savecfg['packetinterval'])
+ self.config_jitter_window(savecfg['jitterwindow'])
self.config_min_out_buffer(savecfg['minbufferfill'])
self['ConfigDenoise'].set_active(savecfg['denoise'])
self.config_echo_cancel(savecfg['echocancel'])
@@ -1149,35 +1954,40 @@ class HfConsole:
if cmd:
self['ConfigAudioDetachCommand'].set_text(cmd)
self.config_savecfg = savecfg
- dlg.show()
+ self.topnotebook_set(self['ConfigTab'])
def config_close(self):
- dlg = self['ConfigDialog']
- dlg.hide()
+ self['ConfigFeedbackTest'].set_active(False)
del self.config
if hasattr(self, 'loopback_active'):
del self.loopback_active
if hasattr(self, 'config_savecfg'):
del self.config_savecfg
+ self.topnotebook_set(None)
def config_ok_clicked(self, widget):
try: self.config_save_vals()
except dbus.exceptions.DBusException, (ex):
- self.error_message(ex.get_dbus_message())
+ self.error_message(str(ex))
self.config_close()
def config_cancel_clicked(self, widget):
# Restore the save values
try: self.config_restore_vals(self.config_savecfg)
except dbus.exceptions.DBusException, (ex):
- self.error_message(ex.get_dbus_message())
+ self.error_message(str(ex))
self.config_close()
+ def config_init_clicked(self, widget):
+ self.initconf_open()
+ def config_devices_clicked(self, widget):
+ self.devices_open()
def config_get_vals(self):
- spr = self.soundio_props.GetAll('net.sf.nohands.hfpd.SoundIo')
- hfpr = self.hfpd_props.GetAll('net.sf.nohands.hfpd.HandsFree')
+ spr = self.soundio_props.GetAll(
+ self.HFPD_SOUNDIO_INTERFACE_NAME)
+ hfpr = self.hfpd_props.GetAll(
+ self.HFPD_HANDSFREE_INTERFACE_NAME)
vals = dict()
vals['secmode'] = int(hfpr['SecMode'])
vals['acceptunknown'] = hfpr['AcceptUnknown']
vals['voicepersist'] = hfpr['VoicePersist']
- vals['autoreconnect'] = self.autoreconnect
vals['drivers'] = []
vals['driver'] = 0
index = 0
@@ -1189,6 +1999,7 @@ class HfConsole:
index += 1
vals['driveropts'] = str(spr['DriverOpts'])
vals['packetinterval'] = int(spr['PacketIntervalHint'])
+ vals['jitterwindow'] = spr['JitterWindowHint']
vals['minbufferfill'] = spr['MinBufferFillHint']
vals['denoise'] = spr['Denoise']
vals['echocancel'] = int(spr['EchoCancelTail'])
@@ -1214,7 +2025,6 @@ class HfConsole:
self['ConfigDriverDevList'].child.
get_text())
self.hfpd.SaveSettings()
- self.autoreconnect = self['ConfigAutoReconnect'].get_active()
cmd = self['ConfigAudioAttachCommand'].get_text()
self.command_audio_attach_acmd = cmd
self.configfile.set('options', 'attach_command', cmd)
@@ -1229,6 +2039,8 @@ class HfConsole:
self.config['driveropts'])
self.setprop_soundio('PacketIntervalHint',
dbus.UInt32(vals['packetinterval']))
+ self.setprop_soundio('JitterWindowHint',
+ dbus.UInt32(vals['jitterwindow']))
self.setprop_soundio('MinBufferFillHint',
dbus.UInt32(vals['minbufferfill']))
self.setprop_soundio('Denoise', dbus.Boolean(vals['denoise']))
@@ -1304,6 +2116,41 @@ class HfConsole:
value = self.value_transform(widget.get_value(), 3, 5, 1000)
if not self.nested:
self.config_packet_interval(value)
+ def config_jitter_window(self, value):
+ self.nested = True
+ if value != 0:
+ value = self.constrain(value, 5, 1000)
+ self['ConfigJitterWindowHint'].set_active(True)
+ self['ConfigJitterWindowLabel'].set_text(
+ self.format_ms(value))
+ self['ConfigJitterWindow'].set_sensitive(True)
+ self['ConfigJitterWindow'].set_value(
+ self.value_untransform(value, 3, 5, 1000))
+ else:
+ value = 0
+ self['ConfigJitterWindowHint'].set_active(False)
+ self['ConfigJitterWindowLabel'].set_text('')
+ self['ConfigJitterWindow'].set_sensitive(False)
+ self['ConfigJitterWindow'].set_value(0)
+ if self.config['jitterwindow'] != value:
+ self.config['jitterwindow'] = value
+ self.setprop_soundio('JitterWindowHint',
+ dbus.UInt32(value))
+ self.nested = False
+ def config_jitter_window_toggled(self, widget):
+ if widget.get_active():
+ value = self.config['jitterwindowsave']
+ value = self.constrain(value, 5, 1000)
+ else:
+ self.config['jitterwindowsave'] = (
+ self.config['jitterwindow'])
+ value = 0
+ if not self.nested:
+ self.config_jitter_window(value)
+ def config_jitter_window_changed(self, widget):
+ value = self.value_transform(widget.get_value(), 3, 5, 1000)
+ if not self.nested:
+ self.config_jitter_window(value)
def config_min_out_buffer(self, value):
self.nested = True
if value != 0:
@@ -1353,8 +2200,7 @@ class HfConsole:
except:
widget.set_active(False)
self.error_message(_('Cannot Apply '
- 'Sound Driver Settings'),
- self['ConfigDialog'])
+ 'Sound Driver Settings'))
return
try:
@@ -1366,8 +2212,7 @@ class HfConsole:
widget.set_active(False)
self.error_message(_('Could not open '
'Audio Device:\n'
- '%s') % str(ex),
- self['ConfigDialog'])
+ '%s') % str(ex))
return
self.loopback_active = True
@@ -1391,6 +2236,7 @@ class HfConsole:
if hasattr(self, 'config_skew_timeout'):
gobject.source_remove(self.config_skew_timeout)
del self.config_skew_timeout
+ return False
def config_skew_notify(self, skewtype, count):
timeout = 1500
if skewtype == 0:
@@ -1505,7 +2351,7 @@ class HfConsole:
def config_dsptest_pageid(self, widget):
- return int(widget.get_name()[11:])
+ return widget.get_current_page()
def config_dsptest_open(self, widget):
self['ConfigFeedbackTest'].set_active(False)
try:
@@ -1515,12 +2361,12 @@ class HfConsole:
get_text())
except:
self.error_message(_('Cannot Apply Sound Driver '
- 'Settings'),
- self['ConfigDialog'])
+ 'Settings'))
return
- assist = self['DspTestAssistant']
- assist.set_current_page(0)
- assist.show()
+ self['DspTestNotebook'].set_current_page(1)
+ self['DspTestNotebook'].set_current_page(0)
+ self.topnotebook_set(self['DspTestTab'])
+ self['DspTestForward'].grab_focus()
def connect_soundmonitor(self, to):
if self.soundmonitor:
self.soundmonitor.remove()
@@ -1540,47 +2386,52 @@ class HfConsole:
pow(float(amp) / 65535, 0.33))
def config_dsptest_mon3(self, pos, amp):
self['DspTestPlayPosition'].set_fraction(float(pos)/80000)
- def config_dsptest_prepare(self, widget, page):
- assist = self['DspTestAssistant']
- pageid = self.config_dsptest_pageid(page)
+ def config_dsptest_set_buttons(self, back, fwd):
+ self['DspTestBack'].set_sensitive(back)
+ self['DspTestForward'].set_sensitive(fwd)
+ def config_dsptest_back(self, widget):
+ self['DspTestNotebook'].prev_page()
+ def config_dsptest_forward(self, widget):
+ self['DspTestNotebook'].next_page()
+ def config_dsptest_setup(self, pageid):
if not hasattr(self, 'membuf_active'):
self.membuf_active = False
if self.membuf_active:
self.soundio.Stop()
if pageid == 0:
self.maxvol = 0
- assist.set_page_complete(page, True)
+ self.config_dsptest_set_buttons(False, True)
elif pageid == 1:
- assist.set_page_complete(page, False)
+ self.config_dsptest_set_buttons(True, False)
self['DspTestRecPosition1'].set_fraction(0.0)
self.connect_soundmonitor(self.config_dsptest_mon1)
self['DspTestRecStart1'].set_active(True)
elif pageid == 2:
+ self.config_dsptest_set_buttons(True, True)
self['DspTestRecPosition2'].set_fraction(0.0)
- assist.set_page_complete(page, True)
self.connect_soundmonitor(self.config_dsptest_mon2)
elif pageid == 3:
+ self.config_dsptest_set_buttons(True, True)
self['DspTestPlayPosition'].set_fraction(0.0)
- assist.set_page_complete(page, True)
self.connect_soundmonitor(self.config_dsptest_mon3)
self['DspTestPlayStart'].set_active(True)
- def config_dsptest_cancel(self, widget):
- assist = self['DspTestAssistant']
- assist.hide()
- if self.membuf_active:
- self.soundio.Stop()
- self.connect_soundmonitor(None)
- if hasattr(self, 'maxvol'):
- del self.maxvol
+ else:
+ self.config_dsptest_set_buttons(True, False)
+ def config_dsptest_close(self, widget):
+ self['DspTestRecStart1'].set_active(False)
+ self['DspTestRecStart2'].set_active(False)
+ self['DspTestPlayStart'].set_active(False)
+ self.topnotebook_set(None)
if hasattr(self, 'membuf_active'):
+ if self.membuf_active:
+ self.soundio.Stop()
del self.membuf_active
- def config_dsptest_close(self, widget):
- assist = self['DspTestAssistant']
- assist.hide()
self.connect_soundmonitor(None)
- print "DSP close"
+ if hasattr(self, 'maxvol'):
+ del self.maxvol
+ def config_dsptest_switch_page(self, widget, page, page_num):
+ self.config_dsptest_setup(page_num)
def config_dsptest_xxx_toggled(self, widget, page, doin, doout):
- assist = self['DspTestAssistant']
if widget.get_active():
if doin and not doout:
self.soundio.MembufClear()
@@ -1593,12 +2444,11 @@ class HfConsole:
except:
widget.set_active(False)
self.error_message(_('Could not open '
- 'Audio Device'),
- self['DspTestAssistant'])
+ 'Audio Device'))
return
self.membuf_active = True
- assist.set_page_complete(page, True)
+ self.config_dsptest_set_buttons(True, True)
return
if self.membuf_active:
try:
@@ -1642,7 +2492,7 @@ class HfConsole:
if agpath:
ag = self.ags[agpath]
if ag:
- self.ag_select(ag, True)
+ ag.soundio_state_changed()
def soundio_stream_aborted(self, excode, descr):
if (excode ==
'net.sf.nohands.hfpd.Error.SoundIoSoundCardFailed'):
@@ -1667,6 +2517,7 @@ class HfConsole:
del self.soundio_status_timeout
if hasattr(self, 'soundio_skew_type'):
del self.soundio_skew_type
+ return False
def soundio_status_msg(self, msg, timeout):
self.soundio_status_msg_clear()
self.soundio_status_msgid = self['StatusBar'].push(
@@ -1695,8 +2546,29 @@ class HfConsole:
if self.soundio_skew_monitor:
self.soundio_skew_monitor(skewtype, count)
+ def initconf_open(self):
+ self['InitConfNotebook'].set_current_page(1)
+ self['InitConfNotebook'].set_current_page(0)
+ self.topnotebook_set(self['InitConfTab'])
+ self['InitConfForward'].grab_focus()
+ def initconf_close(self):
+ self.topnotebook_set(None)
+
+ def initconf_set_buttons(self, back, fwd):
+ self['InitConfBack'].set_sensitive(back)
+ self['InitConfForward'].set_sensitive(fwd)
+ def initconf_done_clicked(self, widget):
+ self.initconf_close()
+ def initconf_back_clicked(self, widget):
+ self['InitConfNotebook'].prev_page()
+ def initconf_forward_clicked(self, widget):
+ self['InitConfNotebook'].next_page()
+ def initconf_switch_page(self, widget, page, page_num):
+ if page_num == 0:
+ self.initconf_set_buttons(False, True)
+ elif page_num == 1:
+ self.initconf_set_buttons(True, False)
if __name__ == "__main__":
hwg = HfConsole()
-
hwg.Start()
gtk.main()
diff --git a/data/holdcall.png b/data/holdcall.png
new file mode 100644
index 0000000..13ea402
--- /dev/null
+++ b/data/holdcall.png
Binary files differ
diff --git a/data/icon.png b/data/icon.png
new file mode 100644
index 0000000..91a8690
--- /dev/null
+++ b/data/icon.png
Binary files differ
diff --git a/data/iconsrc/agconnect.svg b/data/iconsrc/agconnect.svg
new file mode 100644
index 0000000..26c218d
--- /dev/null
+++ b/data/iconsrc/agconnect.svg
@@ -0,0 +1,216 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48px"
+ height="48px"
+ id="svg3039"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ inkscape:export-filename="/vhome/samr7/sf/nohands/trunk/data/agconnect.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docname="agconnect.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs3041">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective3047" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="7"
+ inkscape:cx="24"
+ inkscape:cy="24"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:window-width="640"
+ inkscape:window-height="681"
+ inkscape:window-x="0"
+ inkscape:window-y="6" />
+ <metadata
+ id="metadata3044">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ id="g6777"
+ transform="matrix(2.5083118,0,0,2.5083118,-27.59323,-5.9722859)">
+ <path
+ id="path6721"
+ d="M 13.18249,7.3017703 C 12.710607,7.5872624 12.24915,7.8631391 12.020815,8.5139533 C 11.96684,8.8439865 11.823317,9.2187941 12.020815,9.4230906 C 12.059533,11.064068 18.384776,16.090098 21.566757,19.423601 L 22.475894,19.625631 L 23.536554,19.171063 L 26.61752,17.150758 L 26.769042,15.989082 L 26.415489,15.029437 C 24.44366,11.291672 19.316925,5.6301037 17.273609,5.3319728 C 15.873206,5.402986 14.495689,6.5778276 13.18249,7.3017703 z"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6719"
+ d="M 13.232999,7.3017702 C 15.660926,10.07189 18.528893,13.229592 22.425387,17.201265 C 22.807587,17.558874 23.025795,18.019099 24.597214,16.948727 C 26.126241,16.057186 25.361346,15.840139 25.354829,15.332483 C 23.787955,12.950557 23.108724,11.137632 16.515994,5.5340033"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6695"
+ d="M 12.576399,7.6553237 C 15.330014,10.307924 22.467902,17.878424 22.576909,18.413448 C 22.685916,18.948472 22.526402,19.575124 22.526402,19.575124"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path6703"
+ d="M 18.046017,12.617327 C 19.526312,12.225298 20.856897,11.633654 21.768787,10.483751"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path6705"
+ d="M 18.602901,13.281073 C 20.083196,12.889044 21.413781,12.2974 22.325671,11.147497"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path6707"
+ d="M 19.245758,13.888217 C 20.726053,13.496188 22.056638,12.904544 22.968528,11.754641"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path6709"
+ d="M 19.817187,14.49536 C 21.297482,14.103331 22.520924,13.547401 23.432814,12.397498"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path6711"
+ d="M 20.406472,15.084645 C 21.886767,14.692616 22.931638,14.208115 23.843528,13.058212"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path6713"
+ d="M 21.29933,16.013217 C 22.779625,15.621188 23.681638,15.243829 24.593528,14.093926"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path6715"
+ d="M 22.1029,16.816789 C 23.583195,16.42476 24.306637,16.190258 25.218527,15.040355"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.02;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cczzc"
+ id="path6723"
+ d="M 23.464286,18.785714 L 25.964286,17.178571 C 25.979933,17.115389 26.116736,16.88849 25.756128,16.861475 C 25.420628,16.836341 23.835673,17.681082 23.55484,18.174239 C 23.280401,18.656167 23.366429,18.62457 23.464286,18.785714 z"
+ style="fill:#808080;fill-rule:evenodd;stroke:#000000;stroke-width:0.09999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cccccc"
+ id="path6725"
+ d="M 17.399878,11.847457 C 18.128534,11.730919 18.727619,11.601424 18.788837,11.418142 L 19.066629,11.569665 C 19.397026,11.129807 19.840557,11.029349 20.304066,10.988827 L 20.228305,10.685781 C 20.607135,10.438863 20.981485,10.190451 21.162696,9.8776592"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ transform="translate(0.2272843,-0.2525381)"
+ d="M 16.036172,7.2765164 A 0.65659916,0.45456865 0 1 1 14.722974,7.2765164 A 0.65659916,0.45456865 0 1 1 16.036172,7.2765164 z"
+ sodipodi:ry="0.45456865"
+ sodipodi:rx="0.65659916"
+ sodipodi:cy="7.2765164"
+ sodipodi:cx="15.379573"
+ id="path6727"
+ style="fill:#e6e6e6;fill-opacity:1;stroke:#000000;stroke-width:0.05;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ id="path6729"
+ d="M 16.312034,10.646572 C 15.29154,9.5267798 13.32449,7.323327 13.32449,7.2999806 C 13.32449,7.2936201 13.389834,7.2516246 13.4697,7.2066566 C 13.549565,7.1616887 13.899014,6.94658 14.246254,6.728638 C 15.272509,6.0845186 15.671039,5.8631767 16.155419,5.6682978 C 16.327663,5.5989996 16.47223,5.5529483 16.47668,5.5659618 C 16.481129,5.5789756 16.719628,5.7917804 17.006676,6.0388617 C 17.68735,6.6247618 18.543013,7.3848831 19.158121,7.9500784 C 19.872309,8.6063139 21.102665,9.807559 21.102665,9.8486131 C 21.102665,9.9211161 20.761264,10.242032 20.468152,10.445053 C 20.138386,10.673462 20.161047,10.637022 20.208048,10.863323 C 20.223125,10.935917 20.218772,10.945398 20.170366,10.945398 C 20.140265,10.945398 20.028043,10.962809 19.920984,10.984089 C 19.659332,11.036098 19.354166,11.188062 19.18428,11.350947 L 19.047881,11.481726 L 18.910247,11.414225 L 18.772615,11.346723 L 18.697421,11.423632 C 18.602698,11.520518 18.345848,11.603897 17.832933,11.704263 C 17.624239,11.7451 17.433137,11.783311 17.408262,11.789176 C 17.374863,11.797051 17.088189,11.498249 16.312034,10.646572 L 16.312034,10.646572 z M 15.969616,7.4361256 C 16.43466,7.2339312 16.387926,6.742493 15.887752,6.5752716 C 15.7471,6.528248 15.45873,6.5327765 15.306114,6.5844057 C 15.236226,6.6080486 15.135377,6.6633875 15.082006,6.7073806 C 14.768429,6.9658577 14.923505,7.3689149 15.382676,7.488846 C 15.522124,7.5252691 15.827722,7.4978192 15.969616,7.4361256 z"
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.00126269;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6735"
+ d="M 18.406635,12.920568 L 18.151383,12.646077 L 18.282259,12.612979 C 18.739882,12.49725 19.510698,12.209537 19.937779,11.995044 C 20.632593,11.646088 21.234785,11.2015 21.61034,10.760222 C 21.699193,10.65582 21.778955,10.569543 21.78759,10.568495 C 21.811962,10.565539 22.250707,11.06755 22.259653,11.108629 C 22.2718,11.164404 21.650946,11.774589 21.380457,11.972716 C 20.771878,12.418488 20.094608,12.749919 19.208629,13.03553 C 18.613644,13.227334 18.703937,13.240276 18.406636,12.920568 L 18.406635,12.920568 z"
+ style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.00126269;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6737"
+ d="M 19.018414,13.568396 C 18.883889,13.42976 18.779259,13.310893 18.785905,13.304247 C 18.792552,13.297601 18.950045,13.246369 19.135891,13.190397 C 19.769571,12.999552 20.458668,12.703586 20.93787,12.416451 C 21.378271,12.152565 21.670641,11.923752 22.031391,11.560644 C 22.215786,11.375044 22.370967,11.22319 22.376239,11.22319 C 22.390283,11.22319 22.831051,11.750994 22.840973,11.779693 C 22.852798,11.813896 22.602196,12.08722 22.370767,12.292528 C 21.62871,12.950835 20.72128,13.405212 19.393655,13.783259 L 19.263008,13.820461 L 19.018414,13.568396 z"
+ style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.00126269;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6739"
+ d="M 19.591994,14.177928 L 19.35664,13.925433 L 19.423173,13.900138 C 19.459768,13.886224 19.499554,13.874841 19.511587,13.874841 C 19.563985,13.874841 20.357225,13.606006 20.610215,13.502507 C 21.488712,13.143113 22.131757,12.726174 22.700021,12.147513 C 22.835473,12.009583 22.950153,11.901442 22.954865,11.9072 C 23.201249,12.208308 23.326376,12.391255 23.313559,12.431639 C 23.290728,12.503572 22.797525,12.991542 22.561798,13.175422 C 21.931689,13.666945 21.112991,14.058153 20.117766,14.343284 C 19.985815,14.381087 19.866491,14.416159 19.852601,14.42122 C 19.838711,14.426282 19.721438,14.316799 19.591993,14.177928 L 19.591994,14.177928 z"
+ style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.00126269;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6741"
+ d="M 20.160109,14.770901 L 19.937285,14.531599 L 20.003916,14.506265 C 20.040563,14.492332 20.080084,14.480932 20.091742,14.480932 C 20.1034,14.480932 20.275964,14.42862 20.475219,14.364682 C 21.709279,13.968692 22.648606,13.39772 23.3045,12.644896 L 23.418985,12.513491 L 23.601695,12.765594 C 23.81751,13.063373 23.832834,13.001237 23.442598,13.410693 C 23.064451,13.807463 22.559696,14.178976 22.045786,14.438783 C 21.690656,14.618319 20.556375,15.014089 20.406574,15.010733 C 20.39357,15.010442 20.282661,14.902517 20.160108,14.7709 L 20.160109,14.770901 z"
+ style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.00126269;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path6743"
+ d="M 19.041375,11.54441 L 21.869803,14.625376"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6745"
+ d="M 20.304066,10.988827 L 22.98097,13.867762"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 24.496199,16.330009 A 0.65659916,0.49244937 0 1 1 23.183,16.330009 A 0.65659916,0.49244937 0 1 1 24.496199,16.330009 z"
+ sodipodi:ry="0.49244937"
+ sodipodi:rx="0.65659916"
+ sodipodi:cy="16.330009"
+ sodipodi:cx="23.8396"
+ id="path6751"
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ d="M 24.092138,16.330009 A 0.18940361,0.16414979 0 1 1 23.713331,16.330009 A 0.18940361,0.16414979 0 1 1 24.092138,16.330009 z"
+ sodipodi:ry="0.16414979"
+ sodipodi:rx="0.18940361"
+ sodipodi:cy="16.330009"
+ sodipodi:cx="23.902735"
+ id="path6753"
+ style="fill:#cccccc;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ id="path6757"
+ d="M 20.893118,15.535279 C 20.54563,15.171526 20.507291,15.123051 20.555654,15.108594 C 21.256845,14.898976 21.80128,14.700461 22.143063,14.529783 C 22.641485,14.280883 23.14848,13.900641 23.562929,13.464895 L 23.872982,13.138907 L 24.100607,13.487934 C 24.225802,13.679898 24.365024,13.896894 24.409992,13.970146 L 24.49175,14.103332 L 24.429599,14.184803 C 24.040356,14.695037 23.358514,15.207216 22.696045,15.486997 C 22.343346,15.635951 21.402255,15.945653 21.302324,15.945653 C 21.292874,15.945653 21.108732,15.760985 20.893118,15.535279 L 20.893118,15.535279 z"
+ style="fill:#ececec;fill-opacity:1;stroke:#000000;stroke-width:0.00252538;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6759"
+ d="M 21.897451,16.570685 C 21.786558,16.456096 21.629241,16.292502 21.547857,16.207144 L 21.399887,16.051946 L 21.548008,16.011311 C 21.887481,15.918183 22.54822,15.690215 22.805366,15.577498 C 23.444042,15.297543 24.0068,14.875665 24.482194,14.320444 C 24.528041,14.266899 24.569236,14.227125 24.573741,14.232056 C 24.578245,14.236986 24.706613,14.434983 24.859002,14.672048 L 25.136072,15.103076 L 25.061533,15.189752 C 24.912744,15.362765 24.497018,15.771881 24.40489,15.835953 L 24.310477,15.901615 L 24.177606,15.844254 C 24.075318,15.800096 23.996904,15.786854 23.836937,15.786724 C 23.650805,15.786572 23.61131,15.795507 23.45813,15.872417 C 23.221539,15.991208 23.135597,16.11526 23.135597,16.337969 C 23.135597,16.459057 23.126263,16.501366 23.097716,16.509678 C 23.076882,16.515745 22.860217,16.57883 22.61624,16.649869 C 22.372263,16.720907 22.156091,16.779029 22.13586,16.779029 C 22.115629,16.779029 22.008344,16.685275 21.897451,16.570685 L 21.897451,16.570685 z"
+ style="fill:#ececec;fill-opacity:1;stroke:#000000;stroke-width:0.00252538;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6761"
+ d="M 23.03306,17.534423 C 22.962776,17.525431 22.860498,17.489212 22.805776,17.453937 C 22.650958,17.354135 22.146647,16.834095 22.190066,16.819022 C 22.210082,16.812072 22.368512,16.766443 22.542132,16.717623 C 22.715752,16.668803 22.926794,16.607485 23.011115,16.581361 L 23.164425,16.533862 L 23.246574,16.63171 C 23.291754,16.685525 23.387546,16.760156 23.459443,16.797555 C 23.573993,16.857141 23.619846,16.865669 23.830077,16.866486 C 24.043058,16.867314 24.08623,16.859442 24.214682,16.796365 C 24.557674,16.627935 24.658134,16.268507 24.431555,16.020434 L 24.354351,15.935906 L 24.45208,15.858885 C 24.615585,15.730027 24.813266,15.538919 24.99149,15.337411 L 25.160911,15.145855 L 25.225197,15.249022 C 25.260554,15.305764 25.297613,15.391964 25.307551,15.440577 C 25.317489,15.489191 25.356623,15.602833 25.394516,15.693115 C 25.490169,15.921013 25.502186,15.983494 25.471954,16.095769 C 25.417439,16.298221 25.160852,16.521655 24.499303,16.942745 C 23.740555,17.425704 23.365683,17.576978 23.03306,17.534423 L 23.03306,17.534423 z"
+ style="fill:#ececec;fill-opacity:1;stroke:#000000;stroke-width:0.00252538;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6763"
+ d="M 20.543483,11.153648 C 20.392072,10.995169 20.351185,10.93502 20.329017,10.838147 L 20.301628,10.718457 L 20.58219,10.519993 C 20.7365,10.410838 20.940702,10.23877 21.035973,10.137619 L 21.209192,9.9537091 L 21.450914,10.195431 C 21.657204,10.401721 21.68919,10.444567 21.669128,10.487737 C 21.599836,10.636849 20.847547,11.348825 20.758775,11.349306 C 20.743256,11.349391 20.646375,11.261345 20.543483,11.153649 L 20.543483,11.153648 z"
+ style="fill:#ececec;fill-opacity:1;stroke:#000000;stroke-width:0.00252538;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6765"
+ d="M 19.36497,11.804742 C 19.163798,11.586603 19.157434,11.576016 19.193961,11.520268 C 19.298465,11.360775 19.643714,11.169248 19.9327,11.110452 C 20.276962,11.040409 20.259411,11.035739 20.467142,11.252658 L 20.652367,11.446076 L 20.372915,11.611957 C 20.143742,11.747991 19.608808,12.031312 19.581136,12.031312 C 19.577167,12.031312 19.479892,11.929355 19.36497,11.804741 L 19.36497,11.804742 z"
+ style="fill:#ececec;fill-opacity:1;stroke:#000000;stroke-width:0.00252538;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6773"
+ d="M 22.643337,19.292186 C 22.657138,19.181731 22.667746,18.947681 22.666912,18.772074 C 22.664779,18.323127 22.649044,18.295518 21.878375,17.388434 C 20.368228,15.610978 16.476224,11.463173 13.742227,8.7175369 C 13.187316,8.1602634 12.733298,7.6981251 12.733298,7.6905616 C 12.733298,7.6682244 13.155113,7.3884341 13.188789,7.3884341 C 13.205751,7.3884341 13.628507,7.8504173 14.128249,8.4150634 C 15.185541,9.6096723 16.998696,11.605854 17.818408,12.47772 C 18.132361,12.811648 18.61497,13.325934 18.890873,13.620577 C 19.166774,13.91522 19.570836,14.341113 19.788787,14.567006 C 22.67958,17.563146 22.695646,17.578957 22.910077,17.638526 C 23.171147,17.711053 23.513304,17.643974 23.91147,17.442208 C 24.280116,17.2554 25.185169,16.652941 25.364184,16.47519 C 25.669006,16.172519 25.677263,16.083604 25.456816,15.47772 C 25.28495,15.005355 23.85956,12.8354 23.083821,11.865168 C 21.763342,10.213617 19.649281,8.1221587 17.132748,5.9777198 C 16.856134,5.7420055 16.62899,5.5382341 16.627984,5.5248948 C 16.625249,5.4886223 16.994974,5.4190123 17.207657,5.4157566 C 17.86219,5.4057376 19.185784,6.3230101 20.797224,7.9033851 C 22.334816,9.4113359 23.708719,11.034441 24.956436,12.817006 C 25.789275,14.00685 26.294538,14.880689 26.534701,15.546572 L 26.701224,16.008281 L 26.627882,16.561545 C 26.587545,16.865841 26.550565,17.117387 26.545705,17.120537 C 26.540847,17.123687 25.85585,17.572242 25.023492,18.117326 C 23.756053,18.947329 23.437645,19.139641 23.06418,19.300701 L 22.618245,19.493013 L 22.643337,19.292186 z M 24.744365,18.044891 C 25.4356,17.600586 26.012963,17.21889 26.027394,17.196677 C 26.078294,17.118334 26.054964,16.935434 25.986126,16.873136 C 25.892346,16.788265 25.640529,16.793133 25.396224,16.884539 C 24.897802,17.071024 24.119583,17.530548 23.759943,17.850736 C 23.578736,18.012067 23.363629,18.344414 23.324185,18.524001 C 23.298914,18.639064 23.381104,18.85272 23.45064,18.85272 C 23.470955,18.85272 24.053131,18.489197 24.744366,18.044892 L 24.744365,18.044891 z"
+ style="fill:#cccccc;fill-opacity:1;stroke:#000000;stroke-width:0.00357143;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6775"
+ d="M 21.956508,19.44645 L 21.626147,19.369825 L 20.992223,18.742196 C 20.283972,18.040978 19.491605,17.291321 18.090104,15.996504 C 16.091873,14.150381 15.503282,13.591392 14.481321,12.56921 C 12.908053,10.995604 12.285319,10.204891 12.110342,9.5586769 C 12.082329,9.4552226 12.038997,9.3189684 12.014048,9.2558912 C 11.976273,9.1603884 11.978583,9.0898612 12.027859,8.8342512 C 12.103893,8.4398505 12.221693,8.1859623 12.433942,7.9590512 L 12.603867,7.7773873 L 13.49343,8.6632676 C 16.632223,11.789061 21.751453,17.298446 22.38248,18.229784 C 22.544674,18.469169 22.575162,18.669376 22.521991,19.145955 C 22.500711,19.336699 22.483298,19.501431 22.483298,19.512027 C 22.483298,19.547736 22.288805,19.523524 21.956508,19.44645 z"
+ style="fill:#cccccc;fill-opacity:1;stroke:#000000;stroke-width:0.00357143;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ <path
+ id="path6482"
+ style="fill:#00b000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5480032;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 21.528431,11.242009 L 21.528431,7.3193087 L 13.545431,13.857142 L 21.528431,20.394976 L 21.528431,16.472276 L 36.571554,16.472276 L 36.571554,19.799459 L 45.597427,13.976886 L 36.571554,8.1543137 L 36.571554,11.481498 L 21.528431,11.242009 z"
+ sodipodi:nodetypes="ccccccccccc" />
+ </g>
+</svg>
diff --git a/data/iconsrc/audioconnect.svg b/data/iconsrc/audioconnect.svg
new file mode 100644
index 0000000..46ca7e6
--- /dev/null
+++ b/data/iconsrc/audioconnect.svg
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48px"
+ height="48px"
+ id="svg5945"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="audioconnect.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/vhome/samr7/sf/nohands/trunk/data/audioconnect.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs5947">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective5953" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="4"
+ inkscape:cx="20.050649"
+ inkscape:cy="31.149092"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ objecttolerance="11"
+ gridtolerance="11"
+ guidetolerance="11"
+ inkscape:window-width="1069"
+ inkscape:window-height="681"
+ inkscape:window-x="5"
+ inkscape:window-y="31">
+ <inkscape:grid
+ type="xygrid"
+ id="grid5957"
+ visible="true"
+ enabled="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata5950">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ sodipodi:type="arc"
+ style="fill:#919191;fill-opacity:1;stroke:#000000;stroke-width:0.50000000000000000;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path5955"
+ sodipodi:cx="31.714285"
+ sodipodi:cy="23.285715"
+ sodipodi:rx="7.2857141"
+ sodipodi:ry="13"
+ d="M 38.999999,23.285715 A 7.2857141,13 0 1 1 24.428571,23.285715 A 7.2857141,13 0 1 1 38.999999,23.285715 z"
+ transform="matrix(1.6242948,0.8274672,0,1.5315401,-18.129867,-37.015729)" />
+ <path
+ sodipodi:type="arc"
+ style="fill:#cccccc;fill-opacity:1;stroke:#000000;stroke-width:0.96901637;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path6468"
+ sodipodi:cx="31.714285"
+ sodipodi:cy="23.285715"
+ sodipodi:rx="7.2857141"
+ sodipodi:ry="13"
+ d="M 38.999999,23.285715 A 7.2857141,13 0 1 1 24.428571,23.285715 A 7.2857141,13 0 1 1 38.999999,23.285715 z"
+ transform="matrix(0.5028692,0.2561775,0,0.474153,15.302229,7.61865)" />
+ <path
+ sodipodi:type="arc"
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.96901637;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path6472"
+ sodipodi:cx="31.714285"
+ sodipodi:cy="23.285715"
+ sodipodi:rx="7.2857141"
+ sodipodi:ry="13"
+ d="M 28.071428,12.027385 A 7.2857141,13 0 0 1 37.295466,14.929476"
+ transform="matrix(0.4436841,0.3724649,0,0.6893868,17.551571,3.2722363)"
+ sodipodi:start="4.1887902"
+ sodipodi:end="5.5850536"
+ sodipodi:open="true" />
+ <path
+ style="fill:#333333;fill-rule:evenodd;stroke:#000000;stroke-width:0.78861785;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 21.495104,18.610008 L 19.228913,22.275651 L 18.223933,23.504631 L 16.470198,24.837042 C 17.035003,29.65608 18.252202,34.500001 20.346553,37.155738 L 25,38 L 27.524989,39.050922 L 27.668559,39.186292 C 23.034964,32.529922 21.549672,25.626174 21.495104,18.610008 z"
+ id="path6474"
+ sodipodi:nodetypes="ccccccccc" />
+ <path
+ id="path6482"
+ style="fill:#00b000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5480032;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 12.983,10.384866 L 12.983,6.4621653 L 5,13 L 12.983,19.537834 L 12.983,15.615134 L 28.026123,15.615134 L 28.026123,18.942317 L 37.051996,13.119744 L 28.026123,7.297171 L 28.026123,10.624356 L 12.983,10.384866 z"
+ sodipodi:nodetypes="ccccccccccc" />
+ </g>
+</svg>
diff --git a/data/iconsrc/battery-0.svg b/data/iconsrc/battery-0.svg
new file mode 100644
index 0000000..f5c26cf
--- /dev/null
+++ b/data/iconsrc/battery-0.svg
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="32"
+ height="32"
+ id="svg2383"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docname="battery-0.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/vhome/samr7/sf/nohands/trunk/data/battery-0.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs2385">
+ <linearGradient
+ id="linearGradient3165">
+ <stop
+ style="stop-color:#8a8a8a;stop-opacity:1;"
+ offset="0"
+ id="stop3167" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="1"
+ id="stop3169" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective2391" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="9.8994949"
+ inkscape:cx="4.3830811"
+ inkscape:cy="14.197799"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ objecttolerance="11"
+ gridtolerance="11"
+ guidetolerance="11"
+ inkscape:window-width="1077"
+ inkscape:window-height="700"
+ inkscape:window-x="152"
+ inkscape:window-y="281">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3207"
+ visible="true"
+ enabled="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2388">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 6,14 L 6,34 L 41,34 L 41,14 L 6,14 z"
+ id="path3209" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 28,11 L 23,11 L 20,23 L 28,23 C 28,21 28,19 30,19 C 30,19 30,15 30,15 C 28,15 28,13 28,11 z"
+ id="path3240"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 21,23 L 24,11 L 18,11 L 15,23 L 21,23 z"
+ id="path3242"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 16,23 L 19,11 L 13,11 L 10,23 L 16,23 z"
+ id="path3238"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 11,23 L 14,11 L 8,11 L 5,23 L 11,23 z"
+ id="path3236"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 6,23 L 9,11 L 2,11 C 2,11 2,23 2,23 L 6,23 z"
+ id="path3212"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#ff0000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 2,11 L 28,11 L 28,14 L 30,14 C 30,16 30,18 30,20 L 28,20 L 28,23 L 2,23 C 2,23 2,11 2,11 z"
+ id="rect3204"
+ sodipodi:nodetypes="ccccccccc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.39999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 20,7 L 14,25"
+ id="path5268"
+ sodipodi:nodetypes="cc" />
+ </g>
+</svg>
diff --git a/data/iconsrc/battery-1.svg b/data/iconsrc/battery-1.svg
new file mode 100644
index 0000000..48d5f27
--- /dev/null
+++ b/data/iconsrc/battery-1.svg
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="32"
+ height="32"
+ id="svg2383"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docname="battery-1.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/vhome/samr7/sf/nohands/trunk/data/battery-1.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs2385">
+ <linearGradient
+ id="linearGradient3165">
+ <stop
+ style="stop-color:#8a8a8a;stop-opacity:1;"
+ offset="0"
+ id="stop3167" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="1"
+ id="stop3169" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective2391" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="9.8994949"
+ inkscape:cx="21.126365"
+ inkscape:cy="14.197799"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ objecttolerance="11"
+ gridtolerance="11"
+ guidetolerance="11"
+ inkscape:window-width="1077"
+ inkscape:window-height="700"
+ inkscape:window-x="142"
+ inkscape:window-y="231">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3207"
+ visible="true"
+ enabled="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2388">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 6,14 L 6,34 L 41,34 L 41,14 L 6,14 z"
+ id="path3209" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 28,11 L 23,11 L 20,23 L 28,23 C 28,21 28,19 30,19 C 30,19 30,15 30,15 C 28,15 28,13 28,11 z"
+ id="path3240"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 21,23 L 24,11 L 18,11 L 15,23 L 21,23 z"
+ id="path3242"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 16,23 L 19,11 L 13,11 L 10,23 L 16,23 z"
+ id="path3238"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 11,23 L 14,11 L 8,11 L 5,23 L 11,23 z"
+ id="path3236"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#ffa000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 6,23 L 9,11 L 2,11 C 2,11 2,23 2,23 L 6,23 z"
+ id="path3212"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 2,11 L 28,11 L 28,14 L 30,14 C 30,16 30,18 30,20 L 28,20 L 28,23 L 2,23 C 2,23 2,11 2,11 z"
+ id="rect3204"
+ sodipodi:nodetypes="ccccccccc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.39999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 9,11 L 6,23 L 6,23"
+ id="path5268"
+ sodipodi:nodetypes="ccc" />
+ </g>
+</svg>
diff --git a/data/iconsrc/battery-2.svg b/data/iconsrc/battery-2.svg
new file mode 100644
index 0000000..2fd56ce
--- /dev/null
+++ b/data/iconsrc/battery-2.svg
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="32"
+ height="32"
+ id="svg2383"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docname="battery-2.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/vhome/samr7/sf/nohands/trunk/data/battery-2.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs2385">
+ <linearGradient
+ id="linearGradient3165">
+ <stop
+ style="stop-color:#8a8a8a;stop-opacity:1;"
+ offset="0"
+ id="stop3167" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="1"
+ id="stop3169" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective2391" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="9.8994949"
+ inkscape:cx="21.126365"
+ inkscape:cy="13.539034"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ objecttolerance="11"
+ gridtolerance="11"
+ guidetolerance="11"
+ inkscape:window-width="1077"
+ inkscape:window-height="700"
+ inkscape:window-x="142"
+ inkscape:window-y="231">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3207"
+ visible="true"
+ enabled="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2388">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 6,8 L 6,28 L 41,28 L 41,8 L 6,8 z"
+ id="path3209" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 28,11 L 23,11 L 20,23 L 28,23 C 28,21 28,19 30,19 C 30,19 30,15 30,15 C 28,15 28,13 28,11 z"
+ id="path3240"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 21,23 L 24,11 L 18,11 L 15,23 L 21,23 z"
+ id="path3242"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 16,23 L 19,11 L 13,11 L 10,23 L 16,23 z"
+ id="path3238"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 11,23 L 14,11 L 8,11 L 5,23 L 11,23 z"
+ id="path3236"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 6,23 L 9,11 L 2,11 C 2,11 2,23 2,23 L 6,23 z"
+ id="path3212"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 2,11 L 28,11 L 28,14 L 30,14 C 30,16 30,18 30,20 L 28,20 L 28,23 L 2,23 C 2,23 2,11 2,11 z"
+ id="rect3204"
+ sodipodi:nodetypes="ccccccccc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.39999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 14,11 L 11,23 L 11,23"
+ id="path5268"
+ sodipodi:nodetypes="ccc" />
+ </g>
+</svg>
diff --git a/data/iconsrc/battery-3.svg b/data/iconsrc/battery-3.svg
new file mode 100644
index 0000000..c705fc6
--- /dev/null
+++ b/data/iconsrc/battery-3.svg
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="32"
+ height="32"
+ id="svg2383"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docname="battery-3.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/vhome/samr7/sf/nohands/trunk/data/battery-3.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs2385">
+ <linearGradient
+ id="linearGradient3165">
+ <stop
+ style="stop-color:#8a8a8a;stop-opacity:1;"
+ offset="0"
+ id="stop3167" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="1"
+ id="stop3169" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective2391" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="9.8994949"
+ inkscape:cx="21.126365"
+ inkscape:cy="14.197799"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ objecttolerance="11"
+ gridtolerance="11"
+ guidetolerance="11"
+ inkscape:window-width="1077"
+ inkscape:window-height="700"
+ inkscape:window-x="142"
+ inkscape:window-y="231">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3207"
+ visible="true"
+ enabled="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2388">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 6,8 L 6,28 L 41,28 L 41,8 L 6,8 z"
+ id="path3209" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 28,11 L 23,11 L 20,23 L 28,23 C 28,21 28,19 30,19 C 30,19 30,15 30,15 C 28,15 28,13 28,11 z"
+ id="path3240"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 21,23 L 24,11 L 18,11 L 15,23 L 21,23 z"
+ id="path3242"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#d0ff00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 16,23 L 19,11 L 13,11 L 10,23 L 16,23 z"
+ id="path3238"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#d0ff00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 11,23 L 14,11 L 8,11 L 5,23 L 11,23 z"
+ id="path3236"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#d0ff00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 6,23 L 9,11 L 2,11 C 2,11 2,23 2,23 L 6,23 z"
+ id="path3212"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 2,11 L 28,11 L 28,14 L 30,14 C 30,16 30,18 30,20 L 28,20 L 28,23 L 2,23 C 2,23 2,11 2,11 z"
+ id="rect3204"
+ sodipodi:nodetypes="ccccccccc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.39999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 19,11 L 16,23 L 16,23"
+ id="path5268"
+ sodipodi:nodetypes="ccc" />
+ </g>
+</svg>
diff --git a/data/iconsrc/battery-4.svg b/data/iconsrc/battery-4.svg
new file mode 100644
index 0000000..1eae0c1
--- /dev/null
+++ b/data/iconsrc/battery-4.svg
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="32"
+ height="32"
+ id="svg2383"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docname="battery-4.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/vhome/samr7/sf/nohands/trunk/data/battery-4.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs2385">
+ <linearGradient
+ id="linearGradient3165">
+ <stop
+ style="stop-color:#8a8a8a;stop-opacity:1;"
+ offset="0"
+ id="stop3167" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="1"
+ id="stop3169" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective2391" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="9.8994949"
+ inkscape:cx="21.126365"
+ inkscape:cy="14.197799"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ objecttolerance="11"
+ gridtolerance="11"
+ guidetolerance="11"
+ inkscape:window-width="1077"
+ inkscape:window-height="700"
+ inkscape:window-x="147"
+ inkscape:window-y="256">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3207"
+ visible="true"
+ enabled="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2388">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 6,14 L 6,34 L 41,34 L 41,14 L 6,14 z"
+ id="path3209" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 28,11 L 23,11 L 20,23 L 28,23 C 28,21 28,19 30,19 C 30,19 30,15 30,15 C 28,15 28,13 28,11 z"
+ id="path3240"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#00b000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 21,23 L 24,11 L 18,11 L 15,23 L 21,23 z"
+ id="path3242"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#00b000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 16,23 L 19,11 L 13,11 L 10,23 L 16,23 z"
+ id="path3238"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#00b000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 11,23 L 14,11 L 8,11 L 5,23 L 11,23 z"
+ id="path3236"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#00b000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 6,23 L 9,11 L 2,11 C 2,11 2,23 2,23 L 6,23 z"
+ id="path3212"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 2,11 L 28,11 L 28,14 L 30,14 C 30,16 30,18 30,20 L 28,20 L 28,23 L 2,23 C 2,23 2,11 2,11 z"
+ id="rect3204"
+ sodipodi:nodetypes="ccccccccc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.39999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 24,11 L 21,23 L 21,23"
+ id="path5268"
+ sodipodi:nodetypes="ccc" />
+ </g>
+</svg>
diff --git a/data/iconsrc/battery-5.svg b/data/iconsrc/battery-5.svg
new file mode 100644
index 0000000..e4ef3c0
--- /dev/null
+++ b/data/iconsrc/battery-5.svg
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="32"
+ height="32"
+ id="svg2383"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docname="battery-5.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/vhome/samr7/sf/nohands/trunk/data/battery-5.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs2385">
+ <linearGradient
+ id="linearGradient3165">
+ <stop
+ style="stop-color:#8a8a8a;stop-opacity:1;"
+ offset="0"
+ id="stop3167" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="1"
+ id="stop3169" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective2391" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="9.8994949"
+ inkscape:cx="21.126365"
+ inkscape:cy="14.197799"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ objecttolerance="11"
+ gridtolerance="11"
+ guidetolerance="11"
+ inkscape:window-width="1077"
+ inkscape:window-height="700"
+ inkscape:window-x="147"
+ inkscape:window-y="256">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3207"
+ visible="true"
+ enabled="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2388">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 6,8 L 6,28 L 41,28 L 41,8 L 6,8 z"
+ id="path3209" />
+ <path
+ style="fill:#00b000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 28,11 L 23,11 L 20,23 L 28,23 C 28,21 28,19 30,19 C 30,19 30,15 30,15 C 28,15 28,13 28,11 z"
+ id="path3240"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#00b000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 21,23 L 24,11 L 18,11 L 15,23 L 21,23 z"
+ id="path3242"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#00b000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 16,23 L 19,11 L 13,11 L 10,23 L 16,23 z"
+ id="path3238"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#00b000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 11,23 L 14,11 L 8,11 L 5,23 L 11,23 z"
+ id="path3236"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#00b000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 6,23 L 9,11 L 2,11 C 2,11 2,23 2,23 L 6,23 z"
+ id="path3212"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 2,11 L 28,11 L 28,14 L 30,14 C 30,16 30,18 30,20 L 28,20 L 28,23 L 2,23 C 2,23 2,11 2,11 z"
+ id="rect3204"
+ sodipodi:nodetypes="ccccccccc" />
+ </g>
+</svg>
diff --git a/data/iconsrc/contacts.svg b/data/iconsrc/contacts.svg
new file mode 100644
index 0000000..94d395f
--- /dev/null
+++ b/data/iconsrc/contacts.svg
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48px"
+ height="48px"
+ id="svg3393"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="contacts.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/vhome/samr7/sf/nohands/trunk/data/contacts.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs3395">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective3401" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="9.8994949"
+ inkscape:cx="28.881265"
+ inkscape:cy="35.428571"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ objecttolerance="11"
+ gridtolerance="11"
+ guidetolerance="11"
+ inkscape:window-width="1078"
+ inkscape:window-height="940"
+ inkscape:window-x="10"
+ inkscape:window-y="160">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3407"
+ visible="true"
+ enabled="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata3398">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ id="g3930"
+ transform="matrix(-1,0,0,1,30,-3.363636)">
+ <path
+ sodipodi:nodetypes="ccc"
+ id="path3920"
+ d="M 7.0000005,39.363636 L 25,39.363636 C 25,14.818182 7.0000005,14.818182 7.0000005,39.363636 z"
+ style="fill:#51342f;fill-opacity:1;fill-rule:evenodd;stroke:#5c5c5c;stroke-width:0.81818181px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ transform="matrix(0.8181818,0,0,0.8181818,-4.454545,4.1818186)"
+ d="M 35,13 A 10,10 0 1 1 15,13 A 10,10 0 1 1 35,13 z"
+ sodipodi:ry="10"
+ sodipodi:rx="10"
+ sodipodi:cy="13"
+ sodipodi:cx="25"
+ id="path3922"
+ style="fill:#c2b5a4;fill-opacity:1;stroke:#5c5c5c;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ </g>
+ <g
+ id="g3934"
+ transform="matrix(-1,0,0,1,62,-1)">
+ <path
+ sodipodi:nodetypes="ccc"
+ id="path3405"
+ d="M 20,46 L 42,46 C 42,16 20,16 20,46 z"
+ style="fill:#000080;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ transform="translate(6,3)"
+ d="M 35,13 A 10,10 0 1 1 15,13 A 10,10 0 1 1 35,13 z"
+ sodipodi:ry="10"
+ sodipodi:rx="10"
+ sodipodi:cy="13"
+ sodipodi:cx="25"
+ id="path3409"
+ style="fill:#deb887;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ </g>
+ </g>
+</svg>
diff --git a/data/iconsrc/dialpad.svg b/data/iconsrc/dialpad.svg
new file mode 100644
index 0000000..7df31a6
--- /dev/null
+++ b/data/iconsrc/dialpad.svg
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48px"
+ height="48px"
+ id="svg2510"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="dialpad.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/vhome/samr7/sf/nohands/trunk/data/dialpad.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs2512">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective2518" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="7"
+ inkscape:cx="26.729142"
+ inkscape:cy="24"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:window-width="904"
+ inkscape:window-height="674"
+ inkscape:window-x="73"
+ inkscape:window-y="417" />
+ <metadata
+ id="metadata2515">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ style="fill:#deb887;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 4.8070562,42.390819 L 4.3990762,30.767616 L 8.3928811,23.495322 L 10.093408,21.620123 L 12.249707,15.522 L 13.249205,13.783779 L 14.489155,10.892328 L 16.339225,10.67639 L 17.629432,11.61787 L 17.646186,12.895514 L 16.671817,16.5502 L 15.983352,17.64541 L 15.000608,20.661274 L 12.831743,25.801165 L 14.051368,26.232424 L 15.129826,25.643245 L 16.092246,25.950091 L 17.009213,27.663182 L 19.054279,27.700261 L 20.410882,28.832549 L 20.104037,29.79497 L 22.086896,29.960649 L 23.754534,30.449927 L 24.339525,31.208974 L 23.659437,32.943007 L 22.469131,34.747623 L 20.304454,40.206924 L 14.559863,45.521488 L 4.8070562,42.390819 z"
+ id="path2524" />
+ <g
+ id="g3368"
+ transform="translate(-0.7142857,0)">
+ <rect
+ y="2.4767151"
+ x="25.762424"
+ height="20.475147"
+ width="21.046576"
+ id="rect3296"
+ style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.35342371;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <text
+ id="text3298"
+ y="19.17425"
+ x="28.740303"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Sans;-inkscape-font-specification:Caption"
+ xml:space="preserve"><tspan
+ y="19.17425"
+ x="28.740303"
+ id="tspan3300"
+ sodipodi:role="line">#</tspan></text>
+ </g>
+ </g>
+</svg>
diff --git a/data/iconsrc/handset.svg b/data/iconsrc/handset.svg
new file mode 100644
index 0000000..60b0745
--- /dev/null
+++ b/data/iconsrc/handset.svg
@@ -0,0 +1,230 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="744.09448819"
+ height="1052.3622047"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="handset.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective10" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="2.8"
+ inkscape:cx="341.2983"
+ inkscape:cy="238.44874"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ inkscape:window-width="1135"
+ inkscape:window-height="763"
+ inkscape:window-x="271"
+ inkscape:window-y="37"
+ inkscape:snap-bbox="true"
+ inkscape:object-nodes="true"
+ inkscape:object-paths="true">
+ <sodipodi:guide
+ orientation="0,1"
+ position="161.42857,590"
+ id="guide2385" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="190,804.28572"
+ id="guide2387" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="490,742.85714"
+ id="guide2389" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="152.14286,632.14286"
+ id="guide2391" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="290,821.42857"
+ id="guide2393" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="390,809.28572"
+ id="guide2395" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="340,770.71429"
+ id="guide2397" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="373.57143,700"
+ id="guide2399" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="292.14286,639.28571"
+ id="guide2401" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="270,812.85714"
+ id="guide2403" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="410,805.71429"
+ id="guide2405" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="263.14474,400.02041"
+ id="guide3830" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="208.09142,450.02296"
+ id="guide3832" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="226.77925,350.01786"
+ id="guide3834" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="310,486.42857"
+ id="guide3836" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="370,504.64286"
+ id="guide3838" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="243.21429,430"
+ id="guide3840" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="252.5,370"
+ id="guide3842" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="321.78571,460"
+ id="guide3864" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="331.78571,420"
+ id="guide3866" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="360,426.42857"
+ id="guide3868" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="329.46429,440"
+ id="guide3870" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="315.92521,469.97347"
+ id="guide3893" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="243.19423,301.278"
+ id="guide3895" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="354.81608,330.06734"
+ id="guide3897" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="262.13459,200.0102"
+ id="guide4049" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="337.89603,250.01276"
+ id="guide4051" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="288.39855,229.8097"
+ id="guide4053" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="263.64981,170.2107"
+ id="guide4057" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="226.77925,150.00765"
+ id="guide4059" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="299.00515,264.91251"
+ id="guide4070" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="314.91506,214.90995"
+ id="guide4072" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="319.71328,239.91123"
+ id="guide4074" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g3903">
+ <path
+ transform="matrix(1.9788733,0,0,1.9788591,-401.8275,-707.51428)"
+ d="M 410,687.3183 A 35,34.976536 0 1 1 340,687.3183 A 35,34.976536 0 1 1 410,687.3183 z"
+ sodipodi:ry="34.976536"
+ sodipodi:rx="35"
+ sodipodi:cy="687.3183"
+ sodipodi:cx="375"
+ id="path3899"
+ style="fill:#00b000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.50533987999999996;stroke-miterlimit:4;stroke-dasharray:none"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:nodetypes="cssscccccssscc"
+ d="M 386.67765,635.34486 C 396.05572,661.11487 382.75533,689.64202 356.98927,699.02154 C 331.2232,708.40106 302.70042,695.09862 293.32234,669.32861 C 283.94426,643.5586 297.24465,615.03145 323.01072,605.65193 C 328.73651,603.5676 331.63389,602.49752 340,602.33922 L 340,592.36218 L 360,612.36218 L 340,632.36218 L 340,622.36218 C 336.34405,622.36218 333.24191,623.09916 329.80644,624.3497 C 314.3468,629.97712 306.36656,647.09254 311.99341,662.55376 C 317.62026,678.01498 334.73393,685.99603 350.19357,680.3686 C 365.65321,674.74118 373.63345,657.62577 368.0066,642.16455 L 386.78572,635.3979"
+ style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+ id="path3826" />
+ </g>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 190,462.36218 C 190,352.36218 270,352.36218 340,352.36218 C 410,352.36218 490,352.36218 490,462.36218 L 490,462.36218 L 410,462.36218 C 410,462.36218 390,420.21933 390,420.21932 C 390,413.07647 290,413.07647 290,420.21932 C 290,420.21932 270,462.36218 270,462.36218 L 190,462.36218 C 190,462.36218 190,462.36218 190,462.36218 z"
+ id="path2383"
+ sodipodi:nodetypes="ccsccccccc" />
+ <path
+ id="path4061"
+ style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 340,822.55249 C 323.44,822.55249 310,835.90265 310,852.35198 C 310,852.35198 310,852.35198 310,852.35198 L 290,852.35198 C 290,824.75057 312.4,802.34943 340,802.34943 L 340,787.44967 L 370,812.45095 L 340,837.45223 L 340.16887,822.55248"
+ sodipodi:nodetypes="ccccccccc" />
+ </g>
+</svg>
diff --git a/data/iconsrc/hangup.svg b/data/iconsrc/hangup.svg
new file mode 100644
index 0000000..c26290c
--- /dev/null
+++ b/data/iconsrc/hangup.svg
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48px"
+ height="48px"
+ id="svg3254"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="hangup.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/vhome/samr7/sf/nohands/trunk/data/hangup.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs3256">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective3262" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="9.8994949"
+ inkscape:cx="29.404316"
+ inkscape:cy="24"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:window-width="1020"
+ inkscape:window-height="727"
+ inkscape:window-x="5"
+ inkscape:window-y="31">
+ <sodipodi:guide
+ orientation="1,0"
+ position="24.041631,50.002551"
+ id="guide3281" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata3259">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 3.614281,26.887446 C 3.614281,11.93792 14.486668,11.93792 24,11.93792 C 33.513332,11.93792 44.385719,11.93792 44.385719,26.887446 L 44.385719,26.887446 L 33.513332,26.887446 C 33.513332,26.887446 30.79524,21.160031 30.79524,21.16003 C 30.79524,20.189282 17.204761,20.189282 17.204761,21.16003 C 17.204761,21.16003 14.486668,26.887446 14.486668,26.887446 L 3.614281,26.887446 C 3.614281,26.887446 3.614281,26.887446 3.614281,26.887446 z"
+ id="path2383"
+ sodipodi:nodetypes="ccsccccccc" />
+ <path
+ style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.60473979;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 14.950258,31.787052 L 33.031988,31.787052 L 24.041631,37.746952 L 14.950258,31.787052 z"
+ id="path3230"
+ sodipodi:nodetypes="cccc" />
+ </g>
+</svg>
diff --git a/data/iconsrc/holdcall.svg b/data/iconsrc/holdcall.svg
new file mode 100644
index 0000000..5feb5ca
--- /dev/null
+++ b/data/iconsrc/holdcall.svg
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48px"
+ height="48px"
+ id="svg3992"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="holdcall.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/vhome/samr7/sf/nohands/trunk/data/holdcall.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs3994">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective4000" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="7"
+ inkscape:cx="6.6428571"
+ inkscape:cy="24"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:window-width="1056"
+ inkscape:window-height="681"
+ inkscape:window-x="0"
+ inkscape:window-y="6" />
+ <metadata
+ id="metadata3997">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 43.249526,44.385719 C 28.3,44.385719 28.3,33.513332 28.3,24 C 28.3,14.486668 28.3,3.6142807 43.249526,3.6142807 L 43.249526,3.6142807 L 43.249526,14.486668 C 43.249526,14.486668 37.522111,17.20476 37.52211,17.20476 C 36.551362,17.20476 36.551362,30.795239 37.52211,30.795239 C 37.52211,30.795239 43.249526,33.513332 43.249526,33.513332 L 43.249526,44.385719 C 43.249526,44.385719 43.249526,44.385719 43.249526,44.385719 z"
+ id="path2383"
+ sodipodi:nodetypes="ccsccccccc" />
+ <rect
+ style="fill:#ffff00;fill-opacity:0.92653061;stroke:#000000;stroke-width:0.67731994;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4003"
+ width="5.32268"
+ height="15.32268"
+ x="14.338659"
+ y="16.338659" />
+ <rect
+ style="fill:#ffff00;fill-opacity:0.92653061;stroke:#000000;stroke-width:0.67731994;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4005"
+ width="5.32268"
+ height="15.32268"
+ x="6.3386602"
+ y="16.338659" />
+ </g>
+</svg>
diff --git a/data/iconsrc/logomain.svg b/data/iconsrc/logomain.svg
new file mode 100644
index 0000000..996f55e
--- /dev/null
+++ b/data/iconsrc/logomain.svg
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48px"
+ height="48px"
+ id="svg2383"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="logomain.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/vhome/samr7/sf/nohands/trunk/data/icon.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs2385">
+ <linearGradient
+ id="linearGradient2639">
+ <stop
+ style="stop-color:#002b60;stop-opacity:1;"
+ offset="0"
+ id="stop2641" />
+ <stop
+ id="stop2647"
+ offset="0.5"
+ style="stop-color:#ffca63;stop-opacity:0.49803922;" />
+ <stop
+ style="stop-color:#002c5d;stop-opacity:1;"
+ offset="1"
+ id="stop2643" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="-22.875 : 46.75 : 1"
+ inkscape:vp_y="6.1230318e-14 : 1000 : 0"
+ inkscape:vp_z="67.75 : 56 : 1"
+ inkscape:persp3d-origin="19 : 14.25 : 1"
+ id="perspective2391" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="15.999999"
+ inkscape:cx="20.478674"
+ inkscape:cy="22.891045"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ objecttolerance="11"
+ gridtolerance="11"
+ guidetolerance="11"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ inkscape:window-width="1227"
+ inkscape:window-height="940"
+ inkscape:window-x="-2"
+ inkscape:window-y="120">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3485"
+ visible="true"
+ enabled="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2388">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ id="g6808"
+ transform="matrix(0.4427666,0,0,0.4427666,21.475903,16.911767)" />
+ <g
+ id="g2650"
+ transform="matrix(0.2350258,0,0,0.2350258,23.837022,16.299093)" />
+ <g
+ id="g3178"
+ transform="matrix(1.2575359,0,0,1.2575359,-6.1808616,-6.1808616)">
+ <rect
+ width="28.093035"
+ height="38.169884"
+ rx="11.603645"
+ ry="16.261848"
+ x="9.9534826"
+ y="4.9150581"
+ style="fill:#002c60;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.87800002;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ id="rect3481" />
+ <path
+ id="path3172"
+ d="M 25.5,8.375 L 22.9375,10.9375 L 11.9375,21.9375 L 14.0625,24.0625 L 22.5,15.625 L 22.5,36 L 22.5,39.625 L 25.0625,37.0625 L 36.0625,26.0625 L 33.9375,23.9375 L 25.5,32.375 L 25.5,12 L 25.5,8.375 z"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ </g>
+</svg>
diff --git a/data/iconsrc/message.svg b/data/iconsrc/message.svg
new file mode 100644
index 0000000..205ea5b
--- /dev/null
+++ b/data/iconsrc/message.svg
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="32px"
+ height="32px"
+ id="svg6507"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="message.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/vhome/samr7/sf/nohands/trunk/data/message.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs6509">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 16 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="32 : 16 : 1"
+ inkscape:persp3d-origin="16 : 10.666667 : 1"
+ id="perspective6515" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.313708"
+ inkscape:cx="15.5791"
+ inkscape:cy="14.135545"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ objecttolerance="11"
+ gridtolerance="11"
+ guidetolerance="11"
+ inkscape:window-width="1062"
+ inkscape:window-height="681"
+ inkscape:window-x="85"
+ inkscape:window-y="272">
+ <inkscape:grid
+ type="xygrid"
+ id="grid6517"
+ visible="true"
+ enabled="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata6512">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ style="fill:#f7f8e9;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.51661348;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 1.9583068,7.04105 L 1.9583068,24.041693 L 30.041693,24.041693 L 30.041693,7.04105 L 1.9583068,7.04105 z"
+ id="path6523" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.55499452;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 1.9774973,24.022503 L 16,12.063212 L 30.022503,24.022503 L 1.9774973,24.022503 z"
+ id="path7034" />
+ <path
+ style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:0.55499452;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 1.9774973,7.040709 L 16,19 L 30.022503,7.040709 L 1.9774973,7.040709 z"
+ id="path7036" />
+ </g>
+</svg>
diff --git a/data/iconsrc/mute.svg b/data/iconsrc/mute.svg
new file mode 100644
index 0000000..eb95aeb
--- /dev/null
+++ b/data/iconsrc/mute.svg
@@ -0,0 +1,646 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48px"
+ height="48px"
+ id="svg2383"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="mute.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/vhome/samr7/sf/nohands/trunk/data/mute.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs2385">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5183">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5185" />
+ <stop
+ style="stop-color:#b3b3b3;stop-opacity:1"
+ offset="1"
+ id="stop5187" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4693">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0.24705882;"
+ offset="0"
+ id="stop4703" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop4697" />
+ </linearGradient>
+ <pattern
+ inkscape:collect="always"
+ xlink:href="#Strips1_1"
+ id="pattern4685"
+ patternTransform="matrix(10,0,0,10,-16.089427,-3.9364852)" />
+ <pattern
+ inkscape:stockid="Stripes 1:1"
+ id="Strips1_1"
+ patternTransform="translate(0,0) scale(10,10)"
+ height="1"
+ width="2"
+ patternUnits="userSpaceOnUse"
+ inkscape:collect="always">
+ <rect
+ id="rect3954"
+ height="2"
+ width="1"
+ y="-0.5"
+ x="0"
+ style="fill:black;stroke:none" />
+ </pattern>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3220">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop3222" />
+ <stop
+ style="stop-color:#000000;stop-opacity:1"
+ offset="1"
+ id="stop3224" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="6.1230318e-14 : 1000 : 0"
+ inkscape:vp_z="42.545176 : 25.818275 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective2391" />
+ <pattern
+ patternUnits="userSpaceOnUse"
+ width="15.821146"
+ height="18.818178"
+ patternTransform="translate(16.089427,3.9364852)"
+ id="pattern4682">
+ <path
+ sodipodi:nodetypes="cczzc"
+ id="path3232"
+ d="M 0,18.818178 L 15.821146,18.818178 L 15.821146,8.6944748 C 15.821146,-3.0586208 0,-2.7365774 0,8.6944748 L 0,18.818178 z"
+ style="fill:url(#pattern4685);fill-opacity:1;stroke:none;stroke-width:0.79204983;stroke-linecap:butt;stroke-miterlimit:4;stroke-opacity:1" />
+ </pattern>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5183"
+ id="linearGradient5737"
+ gradientUnits="userSpaceOnUse"
+ x1="17.125"
+ y1="4.9000001"
+ x2="20.5"
+ y2="8.5" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3220"
+ id="linearGradient5739"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.7463892,0,0,0.5373438,5.7134639,12.368942)"
+ x1="23.444445"
+ y1="20.000004"
+ x2="23.444445"
+ y2="21.500004" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3220"
+ id="linearGradient5741"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.7463892,0,0,0.5373438,5.7134636,14.78699)"
+ x1="23.444445"
+ y1="20"
+ x2="23.444445"
+ y2="21.5" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3220"
+ id="linearGradient5893"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9614258,0,0,0.6921539,-4.2897993,16.430534)"
+ x1="23.444445"
+ y1="20"
+ x2="23.444445"
+ y2="21.5" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3220"
+ id="linearGradient5896"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9614258,0,0,0.6921539,-4.2897989,13.315841)"
+ x1="23.444445"
+ y1="20.000004"
+ x2="23.444445"
+ y2="21.500004" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5183"
+ id="linearGradient5902"
+ gradientUnits="userSpaceOnUse"
+ x1="17.125"
+ y1="4.9000001"
+ x2="20.5"
+ y2="8.5" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="24.000001"
+ inkscape:cy="22.471243"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ inkscape:object-nodes="true"
+ gridtolerance="11"
+ objecttolerance="11"
+ guidetolerance="11"
+ inkscape:window-width="1366"
+ inkscape:window-height="840"
+ inkscape:window-x="38"
+ inkscape:window-y="156">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3169"
+ visible="true"
+ enabled="true" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2388">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ id="g5904">
+ <path
+ sodipodi:nodetypes="cczzcczcccczc"
+ id="path3171"
+ d="M 5.0573969,21.005998 L 8.1019122,21.005998 L 8.1019122,33.464768 C 8.1019122,40.163169 30.428356,39.889091 30.428356,33.464768 L 30.428356,21.005998 L 33.472871,21.005998 L 33.472871,36.579461 C 33.472871,41.770616 22.309649,41.770616 22.309649,41.770616 L 22.309649,48.000002 L 17.235458,48.000002 L 17.235458,41.770616 C 17.235458,41.770616 5.0573969,41.770616 5.0573969,36.579461 L 5.0573969,21.005998 z"
+ style="fill:#666666;fill-rule:evenodd;stroke:#000000;stroke-width:0.51323408;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cczzc"
+ id="path4689"
+ d="M 11.237181,24.827742 L 27.293087,24.827742 L 27.293087,14.316999 C 27.293087,2.1145715 11.237181,2.448927 11.237181,14.316999 L 11.237181,24.827742 z"
+ style="fill:#cccccc;fill-opacity:1;stroke:none;stroke-width:0.79204983;stroke-linecap:butt;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ transform="matrix(1.8041571,0,0,1.7303851,-16.705249,-8.1239e-3)"
+ sodipodi:open="true"
+ sodipodi:end="4.712389"
+ sodipodi:start="3.1415927"
+ d="M 16,8.4999998 A 4.5,4.5 0 0 1 20.5,4"
+ sodipodi:ry="4.5"
+ sodipodi:rx="4.5"
+ sodipodi:cy="8.5"
+ sodipodi:cx="20.5"
+ id="path5181"
+ style="fill:url(#linearGradient5902);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:nodetypes="cczzc"
+ id="rect3205"
+ d="M 11.146427,25.082459 L 27.383842,25.082459 L 27.383842,31.311845 C 27.383842,38.54384 11.146427,38.345678 11.146427,31.311845 L 11.146427,25.082459 z"
+ style="fill:#333333;fill-opacity:1;stroke:#000000;stroke-width:0.6294263;stroke-linecap:butt;stroke-miterlimit:4;stroke-opacity:1" />
+ <rect
+ rx="0"
+ y="27.158918"
+ x="10.131588"
+ height="2.076462"
+ width="18.267092"
+ id="rect3210"
+ style="fill:url(#linearGradient5896);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ rx="0"
+ y="30.273613"
+ x="10.131588"
+ height="2.076462"
+ width="18.267092"
+ id="rect3228"
+ style="fill:url(#linearGradient5893);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ id="rect4687"
+ y="5.2901268"
+ x="11.23718"
+ height="19.537617"
+ width="16.055906"
+ style="fill:none;stroke:none" />
+ <path
+ inkscape:transform-center-y="-1"
+ inkscape:transform-center-x="-0.5"
+ transform="matrix(1.0148384,0,0,1.038231,0.9980431,18.333957)"
+ d="M 16,3.5 A 0.5,0.5 0 1 1 15,3.5 A 0.5,0.5 0 1 1 16,3.5 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="3.5"
+ sodipodi:cx="15.5"
+ id="path5079"
+ style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ inkscape:transform-center-y="-1"
+ inkscape:transform-center-x="-0.5"
+ transform="matrix(1.0148384,0,0,1.038231,5.0573969,18.333957)"
+ d="M 16,3.5 A 0.5,0.5 0 1 1 15,3.5 A 0.5,0.5 0 1 1 16,3.5 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="3.5"
+ sodipodi:cx="15.5"
+ id="path5083"
+ style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ inkscape:transform-center-y="-1"
+ inkscape:transform-center-x="-0.5"
+ transform="matrix(1.0148384,0,0,1.038231,9.1167502,18.333957)"
+ d="M 16,3.5 A 0.5,0.5 0 1 1 15,3.5 A 0.5,0.5 0 1 1 16,3.5 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="3.5"
+ sodipodi:cx="15.5"
+ id="path5085"
+ style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ inkscape:transform-center-y="-1"
+ inkscape:transform-center-x="-0.5"
+ transform="matrix(1.0148384,0,0,1.038231,-1.5390529,19.891304)"
+ d="M 16,3.5 A 0.5,0.5 0 1 1 15,3.5 A 0.5,0.5 0 1 1 16,3.5 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="3.5"
+ sodipodi:cx="15.5"
+ id="path5087"
+ style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ inkscape:transform-center-y="-1"
+ inkscape:transform-center-x="-0.5"
+ transform="matrix(1.0148384,0,0,1.038231,2.5203,19.891304)"
+ d="M 16,3.5 A 0.5,0.5 0 1 1 15,3.5 A 0.5,0.5 0 1 1 16,3.5 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="3.5"
+ sodipodi:cx="15.5"
+ id="path5091"
+ style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ inkscape:transform-center-y="-1"
+ inkscape:transform-center-x="-0.5"
+ transform="matrix(1.0148384,0,0,1.038231,6.5796533,19.891304)"
+ d="M 16,3.5 A 0.5,0.5 0 1 1 15,3.5 A 0.5,0.5 0 1 1 16,3.5 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="3.5"
+ sodipodi:cx="15.5"
+ id="path5095"
+ style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ inkscape:transform-center-y="-1"
+ inkscape:transform-center-x="-0.5"
+ transform="matrix(1.0148384,0,0,1.038231,10.639008,19.891304)"
+ d="M 16,3.5 A 0.5,0.5 0 1 1 15,3.5 A 0.5,0.5 0 1 1 16,3.5 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="3.5"
+ sodipodi:cx="15.5"
+ id="path5101"
+ style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ inkscape:transform-center-y="-1"
+ inkscape:transform-center-x="-0.5"
+ transform="matrix(1.0148384,0,0,1.038231,-3.0613103,18.333957)"
+ d="M 16,3.5 A 0.5,0.5 0 1 1 15,3.5 A 0.5,0.5 0 1 1 16,3.5 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="3.5"
+ sodipodi:cx="15.5"
+ id="path5103"
+ style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ inkscape:transform-center-y="-1"
+ inkscape:transform-center-x="-0.5"
+ transform="matrix(1.0148384,0,0,1.038231,0.9980431,15.219263)"
+ d="M 16,3.5 A 0.5,0.5 0 1 1 15,3.5 A 0.5,0.5 0 1 1 16,3.5 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="3.5"
+ sodipodi:cx="15.5"
+ id="path5133"
+ style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ inkscape:transform-center-y="-1"
+ inkscape:transform-center-x="-0.5"
+ transform="matrix(1.0148384,0,0,1.038231,5.0573969,15.219263)"
+ d="M 16,3.5 A 0.5,0.5 0 1 1 15,3.5 A 0.5,0.5 0 1 1 16,3.5 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="3.5"
+ sodipodi:cx="15.5"
+ id="path5135"
+ style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ inkscape:transform-center-y="-1"
+ inkscape:transform-center-x="-0.5"
+ transform="matrix(1.0148384,0,0,1.038231,9.1167502,15.219263)"
+ d="M 16,3.5 A 0.5,0.5 0 1 1 15,3.5 A 0.5,0.5 0 1 1 16,3.5 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="3.5"
+ sodipodi:cx="15.5"
+ id="path5137"
+ style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ inkscape:transform-center-y="-1"
+ inkscape:transform-center-x="-0.5"
+ transform="matrix(1.0148384,0,0,1.038231,-1.5390529,16.77661)"
+ d="M 16,3.5 A 0.5,0.5 0 1 1 15,3.5 A 0.5,0.5 0 1 1 16,3.5 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="3.5"
+ sodipodi:cx="15.5"
+ id="path5139"
+ style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ inkscape:transform-center-y="-1"
+ inkscape:transform-center-x="-0.5"
+ transform="matrix(1.0148384,0,0,1.038231,2.5203,16.77661)"
+ d="M 16,3.5 A 0.5,0.5 0 1 1 15,3.5 A 0.5,0.5 0 1 1 16,3.5 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="3.5"
+ sodipodi:cx="15.5"
+ id="path5141"
+ style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ inkscape:transform-center-y="-1"
+ inkscape:transform-center-x="-0.5"
+ transform="matrix(1.0148384,0,0,1.038231,6.5796533,16.77661)"
+ d="M 16,3.5 A 0.5,0.5 0 1 1 15,3.5 A 0.5,0.5 0 1 1 16,3.5 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="3.5"
+ sodipodi:cx="15.5"
+ id="path5143"
+ style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ inkscape:transform-center-y="-1"
+ inkscape:transform-center-x="-0.5"
+ transform="matrix(1.0148384,0,0,1.038231,10.639008,16.77661)"
+ d="M 16,3.5 A 0.5,0.5 0 1 1 15,3.5 A 0.5,0.5 0 1 1 16,3.5 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="3.5"
+ sodipodi:cx="15.5"
+ id="path5145"
+ style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ inkscape:transform-center-y="-1"
+ inkscape:transform-center-x="-0.5"
+ transform="matrix(1.0148384,0,0,1.038231,-3.0613103,15.219263)"
+ d="M 16,3.5 A 0.5,0.5 0 1 1 15,3.5 A 0.5,0.5 0 1 1 16,3.5 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="3.5"
+ sodipodi:cx="15.5"
+ id="path5147"
+ style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ inkscape:transform-center-y="-1"
+ inkscape:transform-center-x="-0.5"
+ transform="matrix(1.0148384,0,0,1.038231,0.9980431,12.104571)"
+ d="M 16,3.5 A 0.5,0.5 0 1 1 15,3.5 A 0.5,0.5 0 1 1 16,3.5 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="3.5"
+ sodipodi:cx="15.5"
+ id="path5149"
+ style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ inkscape:transform-center-y="-1"
+ inkscape:transform-center-x="-0.5"
+ transform="matrix(1.0148384,0,0,1.038231,5.0573969,12.104571)"
+ d="M 16,3.5 A 0.5,0.5 0 1 1 15,3.5 A 0.5,0.5 0 1 1 16,3.5 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="3.5"
+ sodipodi:cx="15.5"
+ id="path5151"
+ style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ inkscape:transform-center-y="-1"
+ inkscape:transform-center-x="-0.5"
+ transform="matrix(1.0148384,0,0,1.038231,9.1167502,12.104571)"
+ d="M 16,3.5 A 0.5,0.5 0 1 1 15,3.5 A 0.5,0.5 0 1 1 16,3.5 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="3.5"
+ sodipodi:cx="15.5"
+ id="path5153"
+ style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ inkscape:transform-center-y="-1"
+ inkscape:transform-center-x="-0.5"
+ transform="matrix(1.0148384,0,0,1.038231,-1.5390529,13.661918)"
+ d="M 16,3.5 A 0.5,0.5 0 1 1 15,3.5 A 0.5,0.5 0 1 1 16,3.5 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="3.5"
+ sodipodi:cx="15.5"
+ id="path5155"
+ style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ inkscape:transform-center-y="-1"
+ inkscape:transform-center-x="-0.5"
+ transform="matrix(1.0148384,0,0,1.038231,2.5203,13.661918)"
+ d="M 16,3.5 A 0.5,0.5 0 1 1 15,3.5 A 0.5,0.5 0 1 1 16,3.5 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="3.5"
+ sodipodi:cx="15.5"
+ id="path5157"
+ style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ inkscape:transform-center-y="-1"
+ inkscape:transform-center-x="-0.5"
+ transform="matrix(1.0148384,0,0,1.038231,6.5796533,13.661918)"
+ d="M 16,3.5 A 0.5,0.5 0 1 1 15,3.5 A 0.5,0.5 0 1 1 16,3.5 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="3.5"
+ sodipodi:cx="15.5"
+ id="path5159"
+ style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ inkscape:transform-center-y="-1"
+ inkscape:transform-center-x="-0.5"
+ transform="matrix(1.0148384,0,0,1.038231,10.639008,13.661918)"
+ d="M 16,3.5 A 0.5,0.5 0 1 1 15,3.5 A 0.5,0.5 0 1 1 16,3.5 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="3.5"
+ sodipodi:cx="15.5"
+ id="path5161"
+ style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ inkscape:transform-center-y="-1"
+ inkscape:transform-center-x="-0.5"
+ transform="matrix(1.0148384,0,0,1.038231,-3.0613103,12.104571)"
+ d="M 16,3.5 A 0.5,0.5 0 1 1 15,3.5 A 0.5,0.5 0 1 1 16,3.5 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="3.5"
+ sodipodi:cx="15.5"
+ id="path5163"
+ style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ inkscape:transform-center-y="-1"
+ inkscape:transform-center-x="-0.5"
+ transform="matrix(1.0148384,0,0,1.038231,0.9980431,8.989878)"
+ d="M 16,3.5 A 0.5,0.5 0 1 1 15,3.5 A 0.5,0.5 0 1 1 16,3.5 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="3.5"
+ sodipodi:cx="15.5"
+ id="path5165"
+ style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ inkscape:transform-center-y="-1"
+ inkscape:transform-center-x="-0.5"
+ transform="matrix(1.0148384,0,0,1.038231,5.0573969,8.989878)"
+ d="M 16,3.5 A 0.5,0.5 0 1 1 15,3.5 A 0.5,0.5 0 1 1 16,3.5 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="3.5"
+ sodipodi:cx="15.5"
+ id="path5167"
+ style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ inkscape:transform-center-y="-1"
+ inkscape:transform-center-x="-0.5"
+ transform="matrix(1.0148384,0,0,1.038231,9.1167502,8.989878)"
+ d="M 16,3.5 A 0.5,0.5 0 1 1 15,3.5 A 0.5,0.5 0 1 1 16,3.5 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="3.5"
+ sodipodi:cx="15.5"
+ id="path5169"
+ style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ inkscape:transform-center-y="-1"
+ inkscape:transform-center-x="-0.5"
+ transform="matrix(1.0148384,0,0,1.038231,-1.5390529,10.547224)"
+ d="M 16,3.5 A 0.5,0.5 0 1 1 15,3.5 A 0.5,0.5 0 1 1 16,3.5 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="3.5"
+ sodipodi:cx="15.5"
+ id="path5171"
+ style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ inkscape:transform-center-y="-1"
+ inkscape:transform-center-x="-0.5"
+ transform="matrix(1.0148384,0,0,1.038231,2.5203,10.547224)"
+ d="M 16,3.5 A 0.5,0.5 0 1 1 15,3.5 A 0.5,0.5 0 1 1 16,3.5 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="3.5"
+ sodipodi:cx="15.5"
+ id="path5173"
+ style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ inkscape:transform-center-y="-1"
+ inkscape:transform-center-x="-0.5"
+ transform="matrix(1.0148384,0,0,1.038231,6.5796533,10.547224)"
+ d="M 16,3.5 A 0.5,0.5 0 1 1 15,3.5 A 0.5,0.5 0 1 1 16,3.5 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="3.5"
+ sodipodi:cx="15.5"
+ id="path5175"
+ style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ inkscape:transform-center-y="-1"
+ inkscape:transform-center-x="-0.5"
+ transform="matrix(1.0148384,0,0,1.038231,10.639008,10.547224)"
+ d="M 16,3.5 A 0.5,0.5 0 1 1 15,3.5 A 0.5,0.5 0 1 1 16,3.5 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="3.5"
+ sodipodi:cx="15.5"
+ id="path5177"
+ style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ inkscape:transform-center-y="-1"
+ inkscape:transform-center-x="-0.5"
+ transform="matrix(1.0148384,0,0,1.038231,-3.0613103,8.989878)"
+ d="M 16,3.5 A 0.5,0.5 0 1 1 15,3.5 A 0.5,0.5 0 1 1 16,3.5 z"
+ sodipodi:ry="0.5"
+ sodipodi:rx="0.5"
+ sodipodi:cy="3.5"
+ sodipodi:cx="15.5"
+ id="path5179"
+ style="fill:#4d4d4d;fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ </g>
+ <path
+ style="fill:#ff0000;fill-opacity:1;stroke:#000000;stroke-width:0.58778471;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 24.481786,7.343145 L 30.13864,13 L 24.481786,18.656854 L 26.912466,21.087534 L 32.56932,15.43068 L 38.226174,21.087534 L 40.656854,18.656854 L 35,13 L 40.656854,7.343145 L 38.226174,4.912466 L 32.56932,10.56932 L 26.912466,4.912466 L 24.481786,7.343145 z"
+ id="rect5385" />
+ </g>
+</svg>
diff --git a/data/iconsrc/noag.svg b/data/iconsrc/noag.svg
new file mode 100644
index 0000000..7f7c223
--- /dev/null
+++ b/data/iconsrc/noag.svg
@@ -0,0 +1,213 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48"
+ height="32"
+ id="svg6170"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docname="noag.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs6172">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective6178" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="8"
+ inkscape:cx="17.683298"
+ inkscape:cy="20.411566"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:window-width="1283"
+ inkscape:window-height="919"
+ inkscape:window-x="84"
+ inkscape:window-y="82" />
+ <metadata
+ id="metadata6175">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ id="g6777"
+ transform="matrix(2.0973983,0,0,2.0973983,-22.828539,-10.638504)">
+ <path
+ id="path6721"
+ d="M 13.18249,7.3017703 C 12.710607,7.5872624 12.24915,7.8631391 12.020815,8.5139533 C 11.96684,8.8439865 11.823317,9.2187941 12.020815,9.4230906 C 12.059533,11.064068 18.384776,16.090098 21.566757,19.423601 L 22.475894,19.625631 L 23.536554,19.171063 L 26.61752,17.150758 L 26.769042,15.989082 L 26.415489,15.029437 C 24.44366,11.291672 19.316925,5.6301037 17.273609,5.3319728 C 15.873206,5.402986 14.495689,6.5778276 13.18249,7.3017703 z"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6719"
+ d="M 13.232999,7.3017702 C 15.660926,10.07189 18.528893,13.229592 22.425387,17.201265 C 22.807587,17.558874 23.025795,18.019099 24.597214,16.948727 C 26.126241,16.057186 25.361346,15.840139 25.354829,15.332483 C 23.787955,12.950557 23.108724,11.137632 16.515994,5.5340033"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6695"
+ d="M 12.576399,7.6553237 C 15.330014,10.307924 22.467902,17.878424 22.576909,18.413448 C 22.685916,18.948472 22.526402,19.575124 22.526402,19.575124"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path6703"
+ d="M 18.046017,12.617327 C 19.526312,12.225298 20.856897,11.633654 21.768787,10.483751"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path6705"
+ d="M 18.602901,13.281073 C 20.083196,12.889044 21.413781,12.2974 22.325671,11.147497"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path6707"
+ d="M 19.245758,13.888217 C 20.726053,13.496188 22.056638,12.904544 22.968528,11.754641"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path6709"
+ d="M 19.817187,14.49536 C 21.297482,14.103331 22.520924,13.547401 23.432814,12.397498"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path6711"
+ d="M 20.406472,15.084645 C 21.886767,14.692616 22.931638,14.208115 23.843528,13.058212"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path6713"
+ d="M 21.29933,16.013217 C 22.779625,15.621188 23.681638,15.243829 24.593528,14.093926"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path6715"
+ d="M 22.1029,16.816789 C 23.583195,16.42476 24.306637,16.190258 25.218527,15.040355"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.02;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cczzc"
+ id="path6723"
+ d="M 23.464286,18.785714 L 25.964286,17.178571 C 25.979933,17.115389 26.116736,16.88849 25.756128,16.861475 C 25.420628,16.836341 23.835673,17.681082 23.55484,18.174239 C 23.280401,18.656167 23.366429,18.62457 23.464286,18.785714 z"
+ style="fill:#808080;fill-rule:evenodd;stroke:#000000;stroke-width:0.09999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cccccc"
+ id="path6725"
+ d="M 17.399878,11.847457 C 18.128534,11.730919 18.727619,11.601424 18.788837,11.418142 L 19.066629,11.569665 C 19.397026,11.129807 19.840557,11.029349 20.304066,10.988827 L 20.228305,10.685781 C 20.607135,10.438863 20.981485,10.190451 21.162696,9.8776592"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ transform="translate(0.2272843,-0.2525381)"
+ d="M 16.036172,7.2765164 A 0.65659916,0.45456865 0 1 1 14.722974,7.2765164 A 0.65659916,0.45456865 0 1 1 16.036172,7.2765164 z"
+ sodipodi:ry="0.45456865"
+ sodipodi:rx="0.65659916"
+ sodipodi:cy="7.2765164"
+ sodipodi:cx="15.379573"
+ id="path6727"
+ style="fill:#e6e6e6;fill-opacity:1;stroke:#000000;stroke-width:0.05;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ id="path6729"
+ d="M 16.312034,10.646572 C 15.29154,9.5267798 13.32449,7.323327 13.32449,7.2999806 C 13.32449,7.2936201 13.389834,7.2516246 13.4697,7.2066566 C 13.549565,7.1616887 13.899014,6.94658 14.246254,6.728638 C 15.272509,6.0845186 15.671039,5.8631767 16.155419,5.6682978 C 16.327663,5.5989996 16.47223,5.5529483 16.47668,5.5659618 C 16.481129,5.5789756 16.719628,5.7917804 17.006676,6.0388617 C 17.68735,6.6247618 18.543013,7.3848831 19.158121,7.9500784 C 19.872309,8.6063139 21.102665,9.807559 21.102665,9.8486131 C 21.102665,9.9211161 20.761264,10.242032 20.468152,10.445053 C 20.138386,10.673462 20.161047,10.637022 20.208048,10.863323 C 20.223125,10.935917 20.218772,10.945398 20.170366,10.945398 C 20.140265,10.945398 20.028043,10.962809 19.920984,10.984089 C 19.659332,11.036098 19.354166,11.188062 19.18428,11.350947 L 19.047881,11.481726 L 18.910247,11.414225 L 18.772615,11.346723 L 18.697421,11.423632 C 18.602698,11.520518 18.345848,11.603897 17.832933,11.704263 C 17.624239,11.7451 17.433137,11.783311 17.408262,11.789176 C 17.374863,11.797051 17.088189,11.498249 16.312034,10.646572 L 16.312034,10.646572 z M 15.969616,7.4361256 C 16.43466,7.2339312 16.387926,6.742493 15.887752,6.5752716 C 15.7471,6.528248 15.45873,6.5327765 15.306114,6.5844057 C 15.236226,6.6080486 15.135377,6.6633875 15.082006,6.7073806 C 14.768429,6.9658577 14.923505,7.3689149 15.382676,7.488846 C 15.522124,7.5252691 15.827722,7.4978192 15.969616,7.4361256 z"
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.00126269;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6735"
+ d="M 18.406635,12.920568 L 18.151383,12.646077 L 18.282259,12.612979 C 18.739882,12.49725 19.510698,12.209537 19.937779,11.995044 C 20.632593,11.646088 21.234785,11.2015 21.61034,10.760222 C 21.699193,10.65582 21.778955,10.569543 21.78759,10.568495 C 21.811962,10.565539 22.250707,11.06755 22.259653,11.108629 C 22.2718,11.164404 21.650946,11.774589 21.380457,11.972716 C 20.771878,12.418488 20.094608,12.749919 19.208629,13.03553 C 18.613644,13.227334 18.703937,13.240276 18.406636,12.920568 L 18.406635,12.920568 z"
+ style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.00126269;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6737"
+ d="M 19.018414,13.568396 C 18.883889,13.42976 18.779259,13.310893 18.785905,13.304247 C 18.792552,13.297601 18.950045,13.246369 19.135891,13.190397 C 19.769571,12.999552 20.458668,12.703586 20.93787,12.416451 C 21.378271,12.152565 21.670641,11.923752 22.031391,11.560644 C 22.215786,11.375044 22.370967,11.22319 22.376239,11.22319 C 22.390283,11.22319 22.831051,11.750994 22.840973,11.779693 C 22.852798,11.813896 22.602196,12.08722 22.370767,12.292528 C 21.62871,12.950835 20.72128,13.405212 19.393655,13.783259 L 19.263008,13.820461 L 19.018414,13.568396 z"
+ style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.00126269;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6739"
+ d="M 19.591994,14.177928 L 19.35664,13.925433 L 19.423173,13.900138 C 19.459768,13.886224 19.499554,13.874841 19.511587,13.874841 C 19.563985,13.874841 20.357225,13.606006 20.610215,13.502507 C 21.488712,13.143113 22.131757,12.726174 22.700021,12.147513 C 22.835473,12.009583 22.950153,11.901442 22.954865,11.9072 C 23.201249,12.208308 23.326376,12.391255 23.313559,12.431639 C 23.290728,12.503572 22.797525,12.991542 22.561798,13.175422 C 21.931689,13.666945 21.112991,14.058153 20.117766,14.343284 C 19.985815,14.381087 19.866491,14.416159 19.852601,14.42122 C 19.838711,14.426282 19.721438,14.316799 19.591993,14.177928 L 19.591994,14.177928 z"
+ style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.00126269;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6741"
+ d="M 20.160109,14.770901 L 19.937285,14.531599 L 20.003916,14.506265 C 20.040563,14.492332 20.080084,14.480932 20.091742,14.480932 C 20.1034,14.480932 20.275964,14.42862 20.475219,14.364682 C 21.709279,13.968692 22.648606,13.39772 23.3045,12.644896 L 23.418985,12.513491 L 23.601695,12.765594 C 23.81751,13.063373 23.832834,13.001237 23.442598,13.410693 C 23.064451,13.807463 22.559696,14.178976 22.045786,14.438783 C 21.690656,14.618319 20.556375,15.014089 20.406574,15.010733 C 20.39357,15.010442 20.282661,14.902517 20.160108,14.7709 L 20.160109,14.770901 z"
+ style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.00126269;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path6743"
+ d="M 19.041375,11.54441 L 21.869803,14.625376"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6745"
+ d="M 20.304066,10.988827 L 22.98097,13.867762"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 24.496199,16.330009 A 0.65659916,0.49244937 0 1 1 23.183,16.330009 A 0.65659916,0.49244937 0 1 1 24.496199,16.330009 z"
+ sodipodi:ry="0.49244937"
+ sodipodi:rx="0.65659916"
+ sodipodi:cy="16.330009"
+ sodipodi:cx="23.8396"
+ id="path6751"
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ d="M 24.092138,16.330009 A 0.18940361,0.16414979 0 1 1 23.713331,16.330009 A 0.18940361,0.16414979 0 1 1 24.092138,16.330009 z"
+ sodipodi:ry="0.16414979"
+ sodipodi:rx="0.18940361"
+ sodipodi:cy="16.330009"
+ sodipodi:cx="23.902735"
+ id="path6753"
+ style="fill:#cccccc;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ id="path6757"
+ d="M 20.893118,15.535279 C 20.54563,15.171526 20.507291,15.123051 20.555654,15.108594 C 21.256845,14.898976 21.80128,14.700461 22.143063,14.529783 C 22.641485,14.280883 23.14848,13.900641 23.562929,13.464895 L 23.872982,13.138907 L 24.100607,13.487934 C 24.225802,13.679898 24.365024,13.896894 24.409992,13.970146 L 24.49175,14.103332 L 24.429599,14.184803 C 24.040356,14.695037 23.358514,15.207216 22.696045,15.486997 C 22.343346,15.635951 21.402255,15.945653 21.302324,15.945653 C 21.292874,15.945653 21.108732,15.760985 20.893118,15.535279 L 20.893118,15.535279 z"
+ style="fill:#ececec;fill-opacity:1;stroke:#000000;stroke-width:0.00252538;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6759"
+ d="M 21.897451,16.570685 C 21.786558,16.456096 21.629241,16.292502 21.547857,16.207144 L 21.399887,16.051946 L 21.548008,16.011311 C 21.887481,15.918183 22.54822,15.690215 22.805366,15.577498 C 23.444042,15.297543 24.0068,14.875665 24.482194,14.320444 C 24.528041,14.266899 24.569236,14.227125 24.573741,14.232056 C 24.578245,14.236986 24.706613,14.434983 24.859002,14.672048 L 25.136072,15.103076 L 25.061533,15.189752 C 24.912744,15.362765 24.497018,15.771881 24.40489,15.835953 L 24.310477,15.901615 L 24.177606,15.844254 C 24.075318,15.800096 23.996904,15.786854 23.836937,15.786724 C 23.650805,15.786572 23.61131,15.795507 23.45813,15.872417 C 23.221539,15.991208 23.135597,16.11526 23.135597,16.337969 C 23.135597,16.459057 23.126263,16.501366 23.097716,16.509678 C 23.076882,16.515745 22.860217,16.57883 22.61624,16.649869 C 22.372263,16.720907 22.156091,16.779029 22.13586,16.779029 C 22.115629,16.779029 22.008344,16.685275 21.897451,16.570685 L 21.897451,16.570685 z"
+ style="fill:#ececec;fill-opacity:1;stroke:#000000;stroke-width:0.00252538;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6761"
+ d="M 23.03306,17.534423 C 22.962776,17.525431 22.860498,17.489212 22.805776,17.453937 C 22.650958,17.354135 22.146647,16.834095 22.190066,16.819022 C 22.210082,16.812072 22.368512,16.766443 22.542132,16.717623 C 22.715752,16.668803 22.926794,16.607485 23.011115,16.581361 L 23.164425,16.533862 L 23.246574,16.63171 C 23.291754,16.685525 23.387546,16.760156 23.459443,16.797555 C 23.573993,16.857141 23.619846,16.865669 23.830077,16.866486 C 24.043058,16.867314 24.08623,16.859442 24.214682,16.796365 C 24.557674,16.627935 24.658134,16.268507 24.431555,16.020434 L 24.354351,15.935906 L 24.45208,15.858885 C 24.615585,15.730027 24.813266,15.538919 24.99149,15.337411 L 25.160911,15.145855 L 25.225197,15.249022 C 25.260554,15.305764 25.297613,15.391964 25.307551,15.440577 C 25.317489,15.489191 25.356623,15.602833 25.394516,15.693115 C 25.490169,15.921013 25.502186,15.983494 25.471954,16.095769 C 25.417439,16.298221 25.160852,16.521655 24.499303,16.942745 C 23.740555,17.425704 23.365683,17.576978 23.03306,17.534423 L 23.03306,17.534423 z"
+ style="fill:#ececec;fill-opacity:1;stroke:#000000;stroke-width:0.00252538;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6763"
+ d="M 20.543483,11.153648 C 20.392072,10.995169 20.351185,10.93502 20.329017,10.838147 L 20.301628,10.718457 L 20.58219,10.519993 C 20.7365,10.410838 20.940702,10.23877 21.035973,10.137619 L 21.209192,9.9537091 L 21.450914,10.195431 C 21.657204,10.401721 21.68919,10.444567 21.669128,10.487737 C 21.599836,10.636849 20.847547,11.348825 20.758775,11.349306 C 20.743256,11.349391 20.646375,11.261345 20.543483,11.153649 L 20.543483,11.153648 z"
+ style="fill:#ececec;fill-opacity:1;stroke:#000000;stroke-width:0.00252538;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6765"
+ d="M 19.36497,11.804742 C 19.163798,11.586603 19.157434,11.576016 19.193961,11.520268 C 19.298465,11.360775 19.643714,11.169248 19.9327,11.110452 C 20.276962,11.040409 20.259411,11.035739 20.467142,11.252658 L 20.652367,11.446076 L 20.372915,11.611957 C 20.143742,11.747991 19.608808,12.031312 19.581136,12.031312 C 19.577167,12.031312 19.479892,11.929355 19.36497,11.804741 L 19.36497,11.804742 z"
+ style="fill:#ececec;fill-opacity:1;stroke:#000000;stroke-width:0.00252538;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6773"
+ d="M 22.643337,19.292186 C 22.657138,19.181731 22.667746,18.947681 22.666912,18.772074 C 22.664779,18.323127 22.649044,18.295518 21.878375,17.388434 C 20.368228,15.610978 16.476224,11.463173 13.742227,8.7175369 C 13.187316,8.1602634 12.733298,7.6981251 12.733298,7.6905616 C 12.733298,7.6682244 13.155113,7.3884341 13.188789,7.3884341 C 13.205751,7.3884341 13.628507,7.8504173 14.128249,8.4150634 C 15.185541,9.6096723 16.998696,11.605854 17.818408,12.47772 C 18.132361,12.811648 18.61497,13.325934 18.890873,13.620577 C 19.166774,13.91522 19.570836,14.341113 19.788787,14.567006 C 22.67958,17.563146 22.695646,17.578957 22.910077,17.638526 C 23.171147,17.711053 23.513304,17.643974 23.91147,17.442208 C 24.280116,17.2554 25.185169,16.652941 25.364184,16.47519 C 25.669006,16.172519 25.677263,16.083604 25.456816,15.47772 C 25.28495,15.005355 23.85956,12.8354 23.083821,11.865168 C 21.763342,10.213617 19.649281,8.1221587 17.132748,5.9777198 C 16.856134,5.7420055 16.62899,5.5382341 16.627984,5.5248948 C 16.625249,5.4886223 16.994974,5.4190123 17.207657,5.4157566 C 17.86219,5.4057376 19.185784,6.3230101 20.797224,7.9033851 C 22.334816,9.4113359 23.708719,11.034441 24.956436,12.817006 C 25.789275,14.00685 26.294538,14.880689 26.534701,15.546572 L 26.701224,16.008281 L 26.627882,16.561545 C 26.587545,16.865841 26.550565,17.117387 26.545705,17.120537 C 26.540847,17.123687 25.85585,17.572242 25.023492,18.117326 C 23.756053,18.947329 23.437645,19.139641 23.06418,19.300701 L 22.618245,19.493013 L 22.643337,19.292186 z M 24.744365,18.044891 C 25.4356,17.600586 26.012963,17.21889 26.027394,17.196677 C 26.078294,17.118334 26.054964,16.935434 25.986126,16.873136 C 25.892346,16.788265 25.640529,16.793133 25.396224,16.884539 C 24.897802,17.071024 24.119583,17.530548 23.759943,17.850736 C 23.578736,18.012067 23.363629,18.344414 23.324185,18.524001 C 23.298914,18.639064 23.381104,18.85272 23.45064,18.85272 C 23.470955,18.85272 24.053131,18.489197 24.744366,18.044892 L 24.744365,18.044891 z"
+ style="fill:#cccccc;fill-opacity:1;stroke:#000000;stroke-width:0.00357143;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6775"
+ d="M 21.956508,19.44645 L 21.626147,19.369825 L 20.992223,18.742196 C 20.283972,18.040978 19.491605,17.291321 18.090104,15.996504 C 16.091873,14.150381 15.503282,13.591392 14.481321,12.56921 C 12.908053,10.995604 12.285319,10.204891 12.110342,9.5586769 C 12.082329,9.4552226 12.038997,9.3189684 12.014048,9.2558912 C 11.976273,9.1603884 11.978583,9.0898612 12.027859,8.8342512 C 12.103893,8.4398505 12.221693,8.1859623 12.433942,7.9590512 L 12.603867,7.7773873 L 13.49343,8.6632676 C 16.632223,11.789061 21.751453,17.298446 22.38248,18.229784 C 22.544674,18.469169 22.575162,18.669376 22.521991,19.145955 C 22.500711,19.336699 22.483298,19.501431 22.483298,19.512027 C 22.483298,19.547736 22.288805,19.523524 21.956508,19.44645 z"
+ style="fill:#cccccc;fill-opacity:1;stroke:#000000;stroke-width:0.00357143;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ <path
+ style="fill:#ff0000;fill-opacity:1;stroke:#000000;stroke-width:0.58778471;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 24.662466,7.718146 L 30.31932,13.375 L 24.662466,19.031854 L 27.093146,21.462534 L 32.75,15.80568 L 38.406854,21.462534 L 40.837534,19.031854 L 35.18068,13.375 L 40.837534,7.718146 L 38.406854,5.287466 L 32.75,10.94432 L 27.093146,5.287466 L 24.662466,7.718146 z"
+ id="rect5385" />
+ </g>
+</svg>
diff --git a/data/iconsrc/nobt.svg b/data/iconsrc/nobt.svg
new file mode 100644
index 0000000..9b27a04
--- /dev/null
+++ b/data/iconsrc/nobt.svg
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="32px"
+ height="32px"
+ id="svg5606"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="nobt.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs5608">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 16 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="32 : 16 : 1"
+ inkscape:persp3d-origin="16 : 10.666667 : 1"
+ id="perspective5614" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="6.5937153"
+ inkscape:cx="15.892761"
+ inkscape:cy="33.577674"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ objecttolerance="11"
+ gridtolerance="11"
+ guidetolerance="11"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-line-segments="true"
+ inkscape:window-width="1153"
+ inkscape:window-height="681"
+ inkscape:window-x="474"
+ inkscape:window-y="173" />
+ <metadata
+ id="metadata5611">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ id="g6808"
+ transform="matrix(0.2350258,0,0,0.2350258,14.212022,12.299093)" />
+ <g
+ id="g2681">
+ <rect
+ width="16.132931"
+ height="21.919743"
+ rx="6.6636019"
+ ry="9.3386593"
+ x="7.9335346"
+ y="5.0401287"
+ style="fill:#002c60;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.87800002;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ id="rect2305" />
+ <path
+ d="M 11.206885,12.346709 L 12.259032,11.294562 L 15.357022,14.275648 L 15.357022,7.1444244 L 20.793117,12.522069 L 17.227505,16.146131 L 20.910024,19.828649 L 15.357022,25.030934 L 15.357022,17.958164 L 12.375936,20.997701 L 11.148432,19.828649 L 15.064758,16.087678 L 11.206885,12.346709 zM 16.876791,10.59313 L 16.876791,14.334099 L 18.688823,12.580519 L 16.876791,10.59313 zM 16.818337,18.016617 L 16.935244,21.348418 L 18.747276,19.770196 L 16.818337,18.016617 z"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ id="path2311" />
+ </g>
+ <path
+ sodipodi:type="arc"
+ style="fill:none;fill-opacity:1;stroke:#ff0000;stroke-width:2.48614555;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path5635"
+ sodipodi:cx="27.460747"
+ sodipodi:cy="27.311581"
+ sodipodi:rx="11.475467"
+ sodipodi:ry="11.386163"
+ d="M 38.936213,27.311581 A 11.475467,11.386163 0 1 1 15.98528,27.311581 A 11.475467,11.386163 0 1 1 38.936213,27.311581 z"
+ transform="matrix(1.2019827,0,0,1.2114101,-17.007343,-17.085524)" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 27.179635,7.8230718 L 7.9335345,26.959871"
+ id="path6148"
+ sodipodi:nodetypes="cz" />
+ </g>
+</svg>
diff --git a/data/iconsrc/pickup.svg b/data/iconsrc/pickup.svg
new file mode 100644
index 0000000..36d9689
--- /dev/null
+++ b/data/iconsrc/pickup.svg
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48px"
+ height="48px"
+ id="svg2431"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="pickup.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/vhome/samr7/sf/nohands/trunk/data/pickup.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs2433">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective2439" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="9.8994949"
+ inkscape:cx="15.688393"
+ inkscape:cy="26.206147"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ inkscape:snap-bbox="true"
+ inkscape:snap-guide="true"
+ guidetolerance="10"
+ gridtolerance="10"
+ inkscape:window-width="1193"
+ inkscape:window-height="805"
+ inkscape:window-x="15"
+ inkscape:window-y="186">
+ <sodipodi:guide
+ orientation="1,0"
+ position="24.041631,42.426407"
+ id="guide2442" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="11.414724,34.042141"
+ id="guide2444" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="14.950258,37.072598"
+ id="guide2446" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="33.031988,35.355339"
+ id="guide2448" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="19.192898,40.002041"
+ id="guide2450" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2436">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ style="fill:#00b000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 5.905659,33.243119 C 0.30546803,19.38216 10.38617,15.309292 19.206777,11.745535 C 28.027385,8.181779 38.108087,4.1089107 43.708278,17.96987 L 43.708278,17.96987 L 33.627576,22.042738 C 33.627576,22.042738 28.961878,17.750586 28.961878,17.750585 C 28.598229,16.850523 15.997356,21.941606 16.361005,22.841668 C 16.361005,22.841668 15.986361,29.170251 15.986361,29.170251 L 5.905659,33.243119 C 5.905659,33.243119 5.905659,33.243119 5.905659,33.243119 z"
+ id="path2383"
+ sodipodi:nodetypes="ccsccccccc" />
+ <path
+ style="fill:#00b000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.60473979;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 18.586807,35.676139 L 36.668537,35.676139 L 27.67818,29.716239 L 18.586807,35.676139 z"
+ id="path3230"
+ sodipodi:nodetypes="cccc" />
+ </g>
+</svg>
diff --git a/data/iconsrc/redial.svg b/data/iconsrc/redial.svg
new file mode 100644
index 0000000..4cc5030
--- /dev/null
+++ b/data/iconsrc/redial.svg
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48px"
+ height="48px"
+ id="svg2431"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="redial.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/vhome/samr7/sf/nohands/trunk/data/redial.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs2433">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective2439" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="9.8994949"
+ inkscape:cx="23.787383"
+ inkscape:cy="22.349746"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ inkscape:snap-bbox="true"
+ inkscape:snap-guide="true"
+ guidetolerance="10"
+ gridtolerance="10"
+ inkscape:window-width="1193"
+ inkscape:window-height="805"
+ inkscape:window-x="10"
+ inkscape:window-y="161">
+ <sodipodi:guide
+ orientation="1,0"
+ position="24.041631,42.426407"
+ id="guide2442" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="11.414724,34.042141"
+ id="guide2444" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="14.950258,37.072598"
+ id="guide2446" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="33.031988,35.355339"
+ id="guide2448" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="19.192898,40.002041"
+ id="guide2450" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2436">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ sodipodi:type="arc"
+ style="fill:#00b000;fill-opacity:1;stroke:#000000;stroke-width:1.54037355999999992;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path3899"
+ sodipodi:cx="375"
+ sodipodi:cy="687.3183"
+ sodipodi:rx="35"
+ sodipodi:ry="34.976536"
+ d="M 410,687.3183 A 35,34.976536 0 1 1 340,687.3183 A 35,34.976536 0 1 1 410,687.3183 z"
+ transform="matrix(0,0.5029077,-0.502904,0,369.65515,-164.5904)" />
+ <path
+ id="path3826"
+ style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.77466291;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 28.38314,35.798995 C 21.833993,38.182322 14.58415,34.802182 12.200454,28.254036 C 9.8167577,21.70589 13.197419,14.457159 19.746566,12.073829 C 26.295716,9.6904993 33.545556,13.070639 35.929252,19.618785 C 36.458962,21.073927 36.730909,21.810263 36.771141,23.936412 L 41.306689,23.936412 L 34.223919,31.019181 L 27.141153,23.936412 L 31.682536,23.936412 C 31.682536,23.007294 31.495242,22.218923 31.177433,21.345839 C 29.74729,17.416951 25.397604,15.388866 21.468315,16.818864 C 17.539025,18.248862 15.510736,22.598104 16.940881,26.52699 C 18.371024,30.455878 22.720705,32.483963 26.649997,31.053965 L 28.369662,35.82646"
+ sodipodi:nodetypes="cssscccccssscc" />
+ </g>
+</svg>
diff --git a/data/iconsrc/signal-0.svg b/data/iconsrc/signal-0.svg
new file mode 100644
index 0000000..ee76d08
--- /dev/null
+++ b/data/iconsrc/signal-0.svg
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48"
+ height="32"
+ id="svg4681"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docname="signal-0.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs4683">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective4689" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="4.9497475"
+ inkscape:cx="24.369088"
+ inkscape:cy="16.183991"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:window-width="933"
+ inkscape:window-height="681"
+ inkscape:window-x="703"
+ inkscape:window-y="296" />
+ <metadata
+ id="metadata4686">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ style="fill:#ff0000;fill-rule:evenodd;stroke:#000000;stroke-width:0.60000001999999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 11.096044,28.163673 L 14.025487,28.163673 L 14.025487,12.102247 L 22.106707,4.1220421 L 2.105687,4.1220421 L 11.096044,12.102247 L 11.096044,28.163673 z"
+ id="path4108"
+ sodipodi:nodetypes="ccccccc" />
+ </g>
+</svg>
diff --git a/data/iconsrc/signal-1.svg b/data/iconsrc/signal-1.svg
new file mode 100644
index 0000000..e48a0b1
--- /dev/null
+++ b/data/iconsrc/signal-1.svg
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48"
+ height="32"
+ id="svg4681"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docname="signal-1.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs4683">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective4689" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="4.9497475"
+ inkscape:cx="24.369088"
+ inkscape:cy="16.183991"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:window-width="933"
+ inkscape:window-height="681"
+ inkscape:window-x="703"
+ inkscape:window-y="296" />
+ <metadata
+ id="metadata4686">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ style="fill:#cccccc;fill-rule:evenodd;stroke:#000000;stroke-width:0.60000001999999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 11.096044,28.163673 L 14.025487,28.163673 L 14.025487,12.102247 L 22.106707,4.1220421 L 2.105687,4.1220421 L 11.096044,12.102247 L 11.096044,28.163673 z"
+ id="path4108"
+ sodipodi:nodetypes="ccccccc" />
+ <rect
+ style="fill:#ffa000;fill-opacity:1;stroke:#000000;stroke-width:0.60000001999999997;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4128"
+ width="4.0406108"
+ height="5.0507631"
+ x="17.055944"
+ y="23.112909" />
+ </g>
+</svg>
diff --git a/data/iconsrc/signal-2.svg b/data/iconsrc/signal-2.svg
new file mode 100644
index 0000000..d17f81c
--- /dev/null
+++ b/data/iconsrc/signal-2.svg
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48"
+ height="32"
+ id="svg4681"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docname="signal-2.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs4683">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective4689" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="4.9497475"
+ inkscape:cx="24.369088"
+ inkscape:cy="16.183991"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:window-width="933"
+ inkscape:window-height="681"
+ inkscape:window-x="703"
+ inkscape:window-y="296" />
+ <metadata
+ id="metadata4686">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ style="fill:#cccccc;fill-rule:evenodd;stroke:#000000;stroke-width:0.60000001999999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 11.096044,28.163673 L 14.025487,28.163673 L 14.025487,12.102247 L 22.106707,4.1220421 L 2.105687,4.1220421 L 11.096044,12.102247 L 11.096044,28.163673 z"
+ id="path4108"
+ sodipodi:nodetypes="ccccccc" />
+ <rect
+ style="fill:#ffff00;fill-opacity:1;stroke:#000000;stroke-width:0.60000001999999997;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4128"
+ width="4.0406108"
+ height="5.0507631"
+ x="17.055944"
+ y="23.112909" />
+ <rect
+ style="fill:#ffff00;fill-opacity:1;stroke:#000000;stroke-width:0.60000001999999997;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4639"
+ width="4.0406108"
+ height="8.0812206"
+ x="23.116861"
+ y="20.082451" />
+ </g>
+</svg>
diff --git a/data/iconsrc/signal-3.svg b/data/iconsrc/signal-3.svg
new file mode 100644
index 0000000..37b7cf0
--- /dev/null
+++ b/data/iconsrc/signal-3.svg
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48"
+ height="32"
+ id="svg4681"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docname="signal-3.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs4683">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective4689" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="4.9497475"
+ inkscape:cx="24.369088"
+ inkscape:cy="16.183991"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:window-width="933"
+ inkscape:window-height="681"
+ inkscape:window-x="703"
+ inkscape:window-y="296" />
+ <metadata
+ id="metadata4686">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ style="fill:#cccccc;fill-rule:evenodd;stroke:#000000;stroke-width:0.60000001999999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 11.096044,28.163673 L 14.025487,28.163673 L 14.025487,12.102247 L 22.106707,4.1220421 L 2.105687,4.1220421 L 11.096044,12.102247 L 11.096044,28.163673 z"
+ id="path4108"
+ sodipodi:nodetypes="ccccccc" />
+ <rect
+ style="fill:#d0ff00;fill-opacity:1;stroke:#000000;stroke-width:0.60000001999999997;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4128"
+ width="4.0406108"
+ height="5.0507631"
+ x="17.055944"
+ y="23.112909" />
+ <rect
+ style="fill:#d0ff00;fill-opacity:1;stroke:#000000;stroke-width:0.60000001999999997;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4639"
+ width="4.0406108"
+ height="8.0812206"
+ x="23.116861"
+ y="20.082451" />
+ <rect
+ style="fill:#d0ff00;fill-opacity:1;stroke:#000000;stroke-width:0.60000001999999997;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4641"
+ width="3.939595"
+ height="11.010663"
+ x="29.177776"
+ y="17.153009" />
+ </g>
+</svg>
diff --git a/data/iconsrc/signal-4.svg b/data/iconsrc/signal-4.svg
new file mode 100644
index 0000000..23d9e86
--- /dev/null
+++ b/data/iconsrc/signal-4.svg
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48"
+ height="32"
+ id="svg4681"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docname="signal-4.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs4683">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective4689" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="4.9497475"
+ inkscape:cx="24.369088"
+ inkscape:cy="16.183991"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:window-width="933"
+ inkscape:window-height="681"
+ inkscape:window-x="703"
+ inkscape:window-y="296" />
+ <metadata
+ id="metadata4686">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ style="fill:#cccccc;fill-rule:evenodd;stroke:#000000;stroke-width:0.60000001999999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 11.096044,28.163673 L 14.025487,28.163673 L 14.025487,12.102247 L 22.106707,4.1220421 L 2.105687,4.1220421 L 11.096044,12.102247 L 11.096044,28.163673 z"
+ id="path4108"
+ sodipodi:nodetypes="ccccccc" />
+ <rect
+ style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:0.60000001999999997;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4128"
+ width="4.0406108"
+ height="5.0507631"
+ x="17.055944"
+ y="23.112909" />
+ <rect
+ style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:0.60000001999999997;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4639"
+ width="4.0406108"
+ height="8.0812206"
+ x="23.116861"
+ y="20.082451" />
+ <rect
+ style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:0.60000001999999997;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4641"
+ width="3.939595"
+ height="11.010663"
+ x="29.177776"
+ y="17.153009" />
+ <rect
+ style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:0.60000001999999997;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4657"
+ width="4.0406098"
+ height="14.041121"
+ x="35.036659"
+ y="14.122552" />
+ </g>
+</svg>
diff --git a/data/iconsrc/signal-5.svg b/data/iconsrc/signal-5.svg
new file mode 100644
index 0000000..a5ea349
--- /dev/null
+++ b/data/iconsrc/signal-5.svg
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48"
+ height="32"
+ id="svg4681"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docname="signal-5.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/vhome/samr7/sf/nohands/trunk/data/signal-5.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4683">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective4689" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="4.9497475"
+ inkscape:cx="46"
+ inkscape:cy="16.183991"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:window-width="762"
+ inkscape:window-height="681"
+ inkscape:window-x="874"
+ inkscape:window-y="296" />
+ <metadata
+ id="metadata4686">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ style="fill:#cccccc;fill-rule:evenodd;stroke:#000000;stroke-width:0.60000001999999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 11.096044,28.163673 L 14.025487,28.163673 L 14.025487,12.102247 L 22.106707,4.1220421 L 2.105687,4.1220421 L 11.096044,12.102247 L 11.096044,28.163673 z"
+ id="path4108"
+ sodipodi:nodetypes="ccccccc" />
+ <rect
+ style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:0.60000001999999997;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4128"
+ width="4.0406108"
+ height="5.0507631"
+ x="17.055944"
+ y="23.112909" />
+ <rect
+ style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:0.60000001999999997;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4639"
+ width="4.0406108"
+ height="8.0812206"
+ x="23.116861"
+ y="20.082451" />
+ <rect
+ style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:0.60000001999999997;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4641"
+ width="3.939595"
+ height="11.010663"
+ x="29.177776"
+ y="17.153009" />
+ <rect
+ style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:0.60000001999999997;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4657"
+ width="4.0406098"
+ height="14.041121"
+ x="35.036659"
+ y="14.122552" />
+ <rect
+ style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:0.60000001999999997;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4659"
+ width="3.939595"
+ height="17.071577"
+ x="41.097576"
+ y="11.092095" />
+ </g>
+</svg>
diff --git a/data/iconsrc/signal-none.svg b/data/iconsrc/signal-none.svg
new file mode 100644
index 0000000..a7dccfc
--- /dev/null
+++ b/data/iconsrc/signal-none.svg
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48"
+ height="32"
+ id="svg4681"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docname="signal-none.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs4683">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective4689" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="8"
+ inkscape:cx="46"
+ inkscape:cy="16.183991"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:window-width="842"
+ inkscape:window-height="681"
+ inkscape:window-x="869"
+ inkscape:window-y="271" />
+ <metadata
+ id="metadata4686">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ style="fill:#cccccc;fill-rule:evenodd;stroke:#000000;stroke-width:0.60000001999999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 11.096044,28.163673 L 14.025487,28.163673 L 14.025487,12.102247 L 22.106707,4.1220421 L 2.105687,4.1220421 L 11.096044,12.102247 L 11.096044,28.163673 z"
+ id="path4108"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#ff0000;fill-opacity:1;stroke:#000000;stroke-width:0.58778471;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 13.162466,8.2181458 L 18.81932,13.875 L 13.162466,19.531854 L 15.593146,21.962534 L 21.25,16.30568 L 26.906854,21.962534 L 29.337534,19.531854 L 23.68068,13.875 L 29.337534,8.2181458 L 26.906854,5.7874662 L 21.25,11.44432 L 15.593146,5.7874662 L 13.162466,8.2181458 z"
+ id="rect5385" />
+ </g>
+</svg>
diff --git a/data/iconsrc/signal-proto.svg b/data/iconsrc/signal-proto.svg
new file mode 100644
index 0000000..906b9ae
--- /dev/null
+++ b/data/iconsrc/signal-proto.svg
@@ -0,0 +1,195 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48px"
+ height="48px"
+ id="svg4084"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="signal-proto.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs4086">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective4092" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="2.4748737"
+ inkscape:cx="21.663814"
+ inkscape:cy="24"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ guidetolerance="10"
+ gridtolerance="10"
+ objecttolerance="10"
+ inkscape:window-width="1097"
+ inkscape:window-height="775"
+ inkscape:window-x="0"
+ inkscape:window-y="6">
+ <sodipodi:guide
+ orientation="0,1"
+ position="20.809142,40.002041"
+ id="guide4094" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="14.950258,46.972093"
+ id="guide4096" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="12.020815,46.062956"
+ id="guide4098" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="3.0304576,28.385287"
+ id="guide4100" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="24.041631,25.859905"
+ id="guide4102" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="7.0710678,15.96041"
+ id="guide4104" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="-6.9700526,32.021836"
+ id="guide4106" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="17.980715,25.152798"
+ id="guide4110" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="22.021325,25.354829"
+ id="guide4112" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="7.9802051,21.011173"
+ id="guide4114" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="27.981225,28.385287"
+ id="guide4116" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="5.6568543,24.041631"
+ id="guide4118" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="30.001531,46.163971"
+ id="guide4120" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="34.042141,51.113719"
+ id="guide4122" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="8.0812204,26.971073"
+ id="guide4124" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="35.961431,50.911688"
+ id="guide4643" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="40.002041,50.911688"
+ id="guide4645" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="42.022346,51.113719"
+ id="guide4647" />
+ <sodipodi:guide
+ orientation="1,0"
+ position="45.961941,51.214734"
+ id="guide4649" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="-5.0507627,30.001531"
+ id="guide4653" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="0.50507627,33.031988"
+ id="guide4655" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata4089">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ id="g4691">
+ <path
+ sodipodi:nodetypes="ccccccc"
+ id="path4108"
+ d="M 12.020815,32.03959 L 14.950258,32.03959 L 14.950258,15.978164 L 23.031478,7.997959 L 3.0304576,7.997959 L 12.020815,15.978164 L 12.020815,32.03959 z"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.6;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" />
+ <rect
+ y="26.988827"
+ x="17.980715"
+ height="5.0507631"
+ width="4.0406108"
+ id="rect4128"
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.6;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ y="23.958368"
+ x="24.041632"
+ height="8.0812206"
+ width="4.0406108"
+ id="rect4639"
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.60000002;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ y="21.028927"
+ x="30.102547"
+ height="11.010663"
+ width="3.939595"
+ id="rect4641"
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.60000002;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ y="17.998468"
+ x="35.96143"
+ height="14.041121"
+ width="4.0406098"
+ id="rect4657"
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.60000002;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ y="14.968012"
+ x="42.022346"
+ height="17.071577"
+ width="3.939595"
+ id="rect4659"
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.60000002;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ </g>
+</svg>
diff --git a/data/iconsrc/signal.svg b/data/iconsrc/signal.svg
new file mode 100644
index 0000000..cce95e3
--- /dev/null
+++ b/data/iconsrc/signal.svg
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48"
+ height="32"
+ id="svg4681"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ version="1.0"
+ sodipodi:docname="signal.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs4683">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective4689" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="23.1875"
+ inkscape:cy="16.183991"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:window-width="842"
+ inkscape:window-height="681"
+ inkscape:window-x="864"
+ inkscape:window-y="246" />
+ <metadata
+ id="metadata4686">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ style="fill:#cccccc;fill-rule:evenodd;stroke:#000000;stroke-width:0.60000001999999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 11.096044,28.163673 L 14.025487,28.163673 L 14.025487,12.102247 L 22.106707,4.1220421 L 2.105687,4.1220421 L 11.096044,12.102247 L 11.096044,28.163673 z"
+ id="path4108"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#00b000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 19.190864,9.8161794 C 19.190864,9.8161794 25.742641,22.228553 25.992641,21.728553 C 26.242641,21.228553 40.992641,1.4785534 40.992641,1.4785534 L 25.367641,15.978553 L 19.190864,9.8161794 z"
+ id="path6955"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+</svg>
diff --git a/data/iconsrc/swapcall.svg b/data/iconsrc/swapcall.svg
new file mode 100644
index 0000000..e2b9811
--- /dev/null
+++ b/data/iconsrc/swapcall.svg
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48px"
+ height="48px"
+ id="svg3992"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="swapcall.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/vhome/samr7/sf/nohands/trunk/data/swapcall.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs3994">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective4000" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="3.8890872"
+ inkscape:cx="6.1704756"
+ inkscape:cy="24.31428"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:window-width="1056"
+ inkscape:window-height="681"
+ inkscape:window-x="-1"
+ inkscape:window-y="10" />
+ <metadata
+ id="metadata3997">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.61328584;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 45.693356,44.693357 C 30.306642,44.693357 30.306642,33.656896 30.306642,23.999999 C 30.306642,14.343103 30.306642,3.3066427 45.693356,3.3066427 L 45.693356,3.3066427 L 45.693356,14.343103 C 45.693356,14.343103 39.798447,17.102214 39.798446,17.102214 C 38.79931,17.102214 38.79931,30.897784 39.798446,30.897784 C 39.798446,30.897784 45.693356,33.656896 45.693356,33.656896 L 45.693356,44.693357 C 45.693356,44.693357 45.693356,44.693357 45.693356,44.693357 z"
+ id="path2383"
+ sodipodi:nodetypes="ccsccccccc" />
+ <path
+ style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.6132859;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 2.3066431,3.3066427 C 17.693358,3.3066427 17.693358,14.343103 17.693358,23.999998 C 17.693358,33.656895 17.693358,44.693357 2.3066431,44.693357 L 2.3066431,44.693357 L 2.3066431,33.656895 C 2.3066431,33.656895 8.2015525,30.897785 8.2015535,30.897785 C 9.2006904,30.897785 9.2006904,17.102215 8.2015535,17.102215 C 8.2015535,17.102215 2.3066431,14.343103 2.3066431,14.343103 L 2.3066431,3.3066427 C 2.3066431,3.3066427 2.3066431,3.3066427 2.3066431,3.3066427 z"
+ id="path4047"
+ sodipodi:nodetypes="ccsccccccc" />
+ <path
+ id="path4061"
+ style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:0.25087741;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 25.78773,18.884736 C 21.88375,17.463803 17.56979,19.457851 16.158353,23.335742 C 16.158353,23.335742 16.158353,23.335742 16.158353,23.335742 L 11.4434,21.619639 C 13.811742,15.112672 21.014621,11.753691 27.521256,14.121912 L 28.799732,10.609329 L 33.726923,19.077476 L 24.509256,22.397315 L 25.827542,18.899223"
+ sodipodi:nodetypes="ccccccccc" />
+ <path
+ id="path4082"
+ style="fill:#0000ff;fill-opacity:1;stroke:#000000;stroke-width:0.25087741;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 21.996146,30.145756 C 25.900126,31.566689 30.214086,29.572641 31.625523,25.69475 C 31.625523,25.69475 31.625523,25.69475 31.625523,25.69475 L 36.340476,27.410853 C 33.972134,33.91782 26.769255,37.276801 20.26262,34.90858 L 18.984144,38.421163 L 14.056953,29.953016 L 23.27462,26.633177 L 21.956334,30.131269"
+ sodipodi:nodetypes="ccccccccc" />
+ </g>
+</svg>
diff --git a/data/iconsrc/tel-cell.svg b/data/iconsrc/tel-cell.svg
new file mode 100644
index 0000000..a6c4129
--- /dev/null
+++ b/data/iconsrc/tel-cell.svg
@@ -0,0 +1,211 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48px"
+ height="48px"
+ id="svg2430"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="tel-cell.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/vhome/samr7/sf/nohands/trunk/data/tel-cell.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs2432">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective2438" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="7"
+ inkscape:cx="25.118064"
+ inkscape:cy="24"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:window-width="977"
+ inkscape:window-height="674"
+ inkscape:window-x="0"
+ inkscape:window-y="6" />
+ <metadata
+ id="metadata2435">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ id="g6777"
+ transform="matrix(2.7068119,0,0,2.7068119,-28.361669,-9.7777695)">
+ <path
+ id="path6721"
+ d="M 13.18249,7.3017703 C 12.710607,7.5872624 12.24915,7.8631391 12.020815,8.5139533 C 11.96684,8.8439865 11.823317,9.2187941 12.020815,9.4230906 C 12.059533,11.064068 18.384776,16.090098 21.566757,19.423601 L 22.475894,19.625631 L 23.536554,19.171063 L 26.61752,17.150758 L 26.769042,15.989082 L 26.415489,15.029437 C 24.44366,11.291672 19.316925,5.6301037 17.273609,5.3319728 C 15.873206,5.402986 14.495689,6.5778276 13.18249,7.3017703 z"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6719"
+ d="M 13.232999,7.3017702 C 15.660926,10.07189 18.528893,13.229592 22.425387,17.201265 C 22.807587,17.558874 23.025795,18.019099 24.597214,16.948727 C 26.126241,16.057186 25.361346,15.840139 25.354829,15.332483 C 23.787955,12.950557 23.108724,11.137632 16.515994,5.5340033"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6695"
+ d="M 12.576399,7.6553237 C 15.330014,10.307924 22.467902,17.878424 22.576909,18.413448 C 22.685916,18.948472 22.526402,19.575124 22.526402,19.575124"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path6703"
+ d="M 18.046017,12.617327 C 19.526312,12.225298 20.856897,11.633654 21.768787,10.483751"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path6705"
+ d="M 18.602901,13.281073 C 20.083196,12.889044 21.413781,12.2974 22.325671,11.147497"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path6707"
+ d="M 19.245758,13.888217 C 20.726053,13.496188 22.056638,12.904544 22.968528,11.754641"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path6709"
+ d="M 19.817187,14.49536 C 21.297482,14.103331 22.520924,13.547401 23.432814,12.397498"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path6711"
+ d="M 20.406472,15.084645 C 21.886767,14.692616 22.931638,14.208115 23.843528,13.058212"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path6713"
+ d="M 21.29933,16.013217 C 22.779625,15.621188 23.681638,15.243829 24.593528,14.093926"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path6715"
+ d="M 22.1029,16.816789 C 23.583195,16.42476 24.306637,16.190258 25.218527,15.040355"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.02;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cczzc"
+ id="path6723"
+ d="M 23.464286,18.785714 L 25.964286,17.178571 C 25.979933,17.115389 26.116736,16.88849 25.756128,16.861475 C 25.420628,16.836341 23.835673,17.681082 23.55484,18.174239 C 23.280401,18.656167 23.366429,18.62457 23.464286,18.785714 z"
+ style="fill:#808080;fill-rule:evenodd;stroke:#000000;stroke-width:0.09999997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cccccc"
+ id="path6725"
+ d="M 17.399878,11.847457 C 18.128534,11.730919 18.727619,11.601424 18.788837,11.418142 L 19.066629,11.569665 C 19.397026,11.129807 19.840557,11.029349 20.304066,10.988827 L 20.228305,10.685781 C 20.607135,10.438863 20.981485,10.190451 21.162696,9.8776592"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ transform="translate(0.2272843,-0.2525381)"
+ d="M 16.036172,7.2765164 A 0.65659916,0.45456865 0 1 1 14.722974,7.2765164 A 0.65659916,0.45456865 0 1 1 16.036172,7.2765164 z"
+ sodipodi:ry="0.45456865"
+ sodipodi:rx="0.65659916"
+ sodipodi:cy="7.2765164"
+ sodipodi:cx="15.379573"
+ id="path6727"
+ style="fill:#e6e6e6;fill-opacity:1;stroke:#000000;stroke-width:0.05;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ id="path6729"
+ d="M 16.312034,10.646572 C 15.29154,9.5267798 13.32449,7.323327 13.32449,7.2999806 C 13.32449,7.2936201 13.389834,7.2516246 13.4697,7.2066566 C 13.549565,7.1616887 13.899014,6.94658 14.246254,6.728638 C 15.272509,6.0845186 15.671039,5.8631767 16.155419,5.6682978 C 16.327663,5.5989996 16.47223,5.5529483 16.47668,5.5659618 C 16.481129,5.5789756 16.719628,5.7917804 17.006676,6.0388617 C 17.68735,6.6247618 18.543013,7.3848831 19.158121,7.9500784 C 19.872309,8.6063139 21.102665,9.807559 21.102665,9.8486131 C 21.102665,9.9211161 20.761264,10.242032 20.468152,10.445053 C 20.138386,10.673462 20.161047,10.637022 20.208048,10.863323 C 20.223125,10.935917 20.218772,10.945398 20.170366,10.945398 C 20.140265,10.945398 20.028043,10.962809 19.920984,10.984089 C 19.659332,11.036098 19.354166,11.188062 19.18428,11.350947 L 19.047881,11.481726 L 18.910247,11.414225 L 18.772615,11.346723 L 18.697421,11.423632 C 18.602698,11.520518 18.345848,11.603897 17.832933,11.704263 C 17.624239,11.7451 17.433137,11.783311 17.408262,11.789176 C 17.374863,11.797051 17.088189,11.498249 16.312034,10.646572 L 16.312034,10.646572 z M 15.969616,7.4361256 C 16.43466,7.2339312 16.387926,6.742493 15.887752,6.5752716 C 15.7471,6.528248 15.45873,6.5327765 15.306114,6.5844057 C 15.236226,6.6080486 15.135377,6.6633875 15.082006,6.7073806 C 14.768429,6.9658577 14.923505,7.3689149 15.382676,7.488846 C 15.522124,7.5252691 15.827722,7.4978192 15.969616,7.4361256 z"
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.00126269;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6735"
+ d="M 18.406635,12.920568 L 18.151383,12.646077 L 18.282259,12.612979 C 18.739882,12.49725 19.510698,12.209537 19.937779,11.995044 C 20.632593,11.646088 21.234785,11.2015 21.61034,10.760222 C 21.699193,10.65582 21.778955,10.569543 21.78759,10.568495 C 21.811962,10.565539 22.250707,11.06755 22.259653,11.108629 C 22.2718,11.164404 21.650946,11.774589 21.380457,11.972716 C 20.771878,12.418488 20.094608,12.749919 19.208629,13.03553 C 18.613644,13.227334 18.703937,13.240276 18.406636,12.920568 L 18.406635,12.920568 z"
+ style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.00126269;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6737"
+ d="M 19.018414,13.568396 C 18.883889,13.42976 18.779259,13.310893 18.785905,13.304247 C 18.792552,13.297601 18.950045,13.246369 19.135891,13.190397 C 19.769571,12.999552 20.458668,12.703586 20.93787,12.416451 C 21.378271,12.152565 21.670641,11.923752 22.031391,11.560644 C 22.215786,11.375044 22.370967,11.22319 22.376239,11.22319 C 22.390283,11.22319 22.831051,11.750994 22.840973,11.779693 C 22.852798,11.813896 22.602196,12.08722 22.370767,12.292528 C 21.62871,12.950835 20.72128,13.405212 19.393655,13.783259 L 19.263008,13.820461 L 19.018414,13.568396 z"
+ style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.00126269;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6739"
+ d="M 19.591994,14.177928 L 19.35664,13.925433 L 19.423173,13.900138 C 19.459768,13.886224 19.499554,13.874841 19.511587,13.874841 C 19.563985,13.874841 20.357225,13.606006 20.610215,13.502507 C 21.488712,13.143113 22.131757,12.726174 22.700021,12.147513 C 22.835473,12.009583 22.950153,11.901442 22.954865,11.9072 C 23.201249,12.208308 23.326376,12.391255 23.313559,12.431639 C 23.290728,12.503572 22.797525,12.991542 22.561798,13.175422 C 21.931689,13.666945 21.112991,14.058153 20.117766,14.343284 C 19.985815,14.381087 19.866491,14.416159 19.852601,14.42122 C 19.838711,14.426282 19.721438,14.316799 19.591993,14.177928 L 19.591994,14.177928 z"
+ style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.00126269;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6741"
+ d="M 20.160109,14.770901 L 19.937285,14.531599 L 20.003916,14.506265 C 20.040563,14.492332 20.080084,14.480932 20.091742,14.480932 C 20.1034,14.480932 20.275964,14.42862 20.475219,14.364682 C 21.709279,13.968692 22.648606,13.39772 23.3045,12.644896 L 23.418985,12.513491 L 23.601695,12.765594 C 23.81751,13.063373 23.832834,13.001237 23.442598,13.410693 C 23.064451,13.807463 22.559696,14.178976 22.045786,14.438783 C 21.690656,14.618319 20.556375,15.014089 20.406574,15.010733 C 20.39357,15.010442 20.282661,14.902517 20.160108,14.7709 L 20.160109,14.770901 z"
+ style="fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:0.00126269;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path6743"
+ d="M 19.041375,11.54441 L 21.869803,14.625376"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6745"
+ d="M 20.304066,10.988827 L 22.98097,13.867762"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 24.496199,16.330009 A 0.65659916,0.49244937 0 1 1 23.183,16.330009 A 0.65659916,0.49244937 0 1 1 24.496199,16.330009 z"
+ sodipodi:ry="0.49244937"
+ sodipodi:rx="0.65659916"
+ sodipodi:cy="16.330009"
+ sodipodi:cx="23.8396"
+ id="path6751"
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ d="M 24.092138,16.330009 A 0.18940361,0.16414979 0 1 1 23.713331,16.330009 A 0.18940361,0.16414979 0 1 1 24.092138,16.330009 z"
+ sodipodi:ry="0.16414979"
+ sodipodi:rx="0.18940361"
+ sodipodi:cy="16.330009"
+ sodipodi:cx="23.902735"
+ id="path6753"
+ style="fill:#cccccc;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ id="path6757"
+ d="M 20.893118,15.535279 C 20.54563,15.171526 20.507291,15.123051 20.555654,15.108594 C 21.256845,14.898976 21.80128,14.700461 22.143063,14.529783 C 22.641485,14.280883 23.14848,13.900641 23.562929,13.464895 L 23.872982,13.138907 L 24.100607,13.487934 C 24.225802,13.679898 24.365024,13.896894 24.409992,13.970146 L 24.49175,14.103332 L 24.429599,14.184803 C 24.040356,14.695037 23.358514,15.207216 22.696045,15.486997 C 22.343346,15.635951 21.402255,15.945653 21.302324,15.945653 C 21.292874,15.945653 21.108732,15.760985 20.893118,15.535279 L 20.893118,15.535279 z"
+ style="fill:#ececec;fill-opacity:1;stroke:#000000;stroke-width:0.00252538;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6759"
+ d="M 21.897451,16.570685 C 21.786558,16.456096 21.629241,16.292502 21.547857,16.207144 L 21.399887,16.051946 L 21.548008,16.011311 C 21.887481,15.918183 22.54822,15.690215 22.805366,15.577498 C 23.444042,15.297543 24.0068,14.875665 24.482194,14.320444 C 24.528041,14.266899 24.569236,14.227125 24.573741,14.232056 C 24.578245,14.236986 24.706613,14.434983 24.859002,14.672048 L 25.136072,15.103076 L 25.061533,15.189752 C 24.912744,15.362765 24.497018,15.771881 24.40489,15.835953 L 24.310477,15.901615 L 24.177606,15.844254 C 24.075318,15.800096 23.996904,15.786854 23.836937,15.786724 C 23.650805,15.786572 23.61131,15.795507 23.45813,15.872417 C 23.221539,15.991208 23.135597,16.11526 23.135597,16.337969 C 23.135597,16.459057 23.126263,16.501366 23.097716,16.509678 C 23.076882,16.515745 22.860217,16.57883 22.61624,16.649869 C 22.372263,16.720907 22.156091,16.779029 22.13586,16.779029 C 22.115629,16.779029 22.008344,16.685275 21.897451,16.570685 L 21.897451,16.570685 z"
+ style="fill:#ececec;fill-opacity:1;stroke:#000000;stroke-width:0.00252538;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6761"
+ d="M 23.03306,17.534423 C 22.962776,17.525431 22.860498,17.489212 22.805776,17.453937 C 22.650958,17.354135 22.146647,16.834095 22.190066,16.819022 C 22.210082,16.812072 22.368512,16.766443 22.542132,16.717623 C 22.715752,16.668803 22.926794,16.607485 23.011115,16.581361 L 23.164425,16.533862 L 23.246574,16.63171 C 23.291754,16.685525 23.387546,16.760156 23.459443,16.797555 C 23.573993,16.857141 23.619846,16.865669 23.830077,16.866486 C 24.043058,16.867314 24.08623,16.859442 24.214682,16.796365 C 24.557674,16.627935 24.658134,16.268507 24.431555,16.020434 L 24.354351,15.935906 L 24.45208,15.858885 C 24.615585,15.730027 24.813266,15.538919 24.99149,15.337411 L 25.160911,15.145855 L 25.225197,15.249022 C 25.260554,15.305764 25.297613,15.391964 25.307551,15.440577 C 25.317489,15.489191 25.356623,15.602833 25.394516,15.693115 C 25.490169,15.921013 25.502186,15.983494 25.471954,16.095769 C 25.417439,16.298221 25.160852,16.521655 24.499303,16.942745 C 23.740555,17.425704 23.365683,17.576978 23.03306,17.534423 L 23.03306,17.534423 z"
+ style="fill:#ececec;fill-opacity:1;stroke:#000000;stroke-width:0.00252538;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6763"
+ d="M 20.543483,11.153648 C 20.392072,10.995169 20.351185,10.93502 20.329017,10.838147 L 20.301628,10.718457 L 20.58219,10.519993 C 20.7365,10.410838 20.940702,10.23877 21.035973,10.137619 L 21.209192,9.9537091 L 21.450914,10.195431 C 21.657204,10.401721 21.68919,10.444567 21.669128,10.487737 C 21.599836,10.636849 20.847547,11.348825 20.758775,11.349306 C 20.743256,11.349391 20.646375,11.261345 20.543483,11.153649 L 20.543483,11.153648 z"
+ style="fill:#ececec;fill-opacity:1;stroke:#000000;stroke-width:0.00252538;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6765"
+ d="M 19.36497,11.804742 C 19.163798,11.586603 19.157434,11.576016 19.193961,11.520268 C 19.298465,11.360775 19.643714,11.169248 19.9327,11.110452 C 20.276962,11.040409 20.259411,11.035739 20.467142,11.252658 L 20.652367,11.446076 L 20.372915,11.611957 C 20.143742,11.747991 19.608808,12.031312 19.581136,12.031312 C 19.577167,12.031312 19.479892,11.929355 19.36497,11.804741 L 19.36497,11.804742 z"
+ style="fill:#ececec;fill-opacity:1;stroke:#000000;stroke-width:0.00252538;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6773"
+ d="M 22.643337,19.292186 C 22.657138,19.181731 22.667746,18.947681 22.666912,18.772074 C 22.664779,18.323127 22.649044,18.295518 21.878375,17.388434 C 20.368228,15.610978 16.476224,11.463173 13.742227,8.7175369 C 13.187316,8.1602634 12.733298,7.6981251 12.733298,7.6905616 C 12.733298,7.6682244 13.155113,7.3884341 13.188789,7.3884341 C 13.205751,7.3884341 13.628507,7.8504173 14.128249,8.4150634 C 15.185541,9.6096723 16.998696,11.605854 17.818408,12.47772 C 18.132361,12.811648 18.61497,13.325934 18.890873,13.620577 C 19.166774,13.91522 19.570836,14.341113 19.788787,14.567006 C 22.67958,17.563146 22.695646,17.578957 22.910077,17.638526 C 23.171147,17.711053 23.513304,17.643974 23.91147,17.442208 C 24.280116,17.2554 25.185169,16.652941 25.364184,16.47519 C 25.669006,16.172519 25.677263,16.083604 25.456816,15.47772 C 25.28495,15.005355 23.85956,12.8354 23.083821,11.865168 C 21.763342,10.213617 19.649281,8.1221587 17.132748,5.9777198 C 16.856134,5.7420055 16.62899,5.5382341 16.627984,5.5248948 C 16.625249,5.4886223 16.994974,5.4190123 17.207657,5.4157566 C 17.86219,5.4057376 19.185784,6.3230101 20.797224,7.9033851 C 22.334816,9.4113359 23.708719,11.034441 24.956436,12.817006 C 25.789275,14.00685 26.294538,14.880689 26.534701,15.546572 L 26.701224,16.008281 L 26.627882,16.561545 C 26.587545,16.865841 26.550565,17.117387 26.545705,17.120537 C 26.540847,17.123687 25.85585,17.572242 25.023492,18.117326 C 23.756053,18.947329 23.437645,19.139641 23.06418,19.300701 L 22.618245,19.493013 L 22.643337,19.292186 z M 24.744365,18.044891 C 25.4356,17.600586 26.012963,17.21889 26.027394,17.196677 C 26.078294,17.118334 26.054964,16.935434 25.986126,16.873136 C 25.892346,16.788265 25.640529,16.793133 25.396224,16.884539 C 24.897802,17.071024 24.119583,17.530548 23.759943,17.850736 C 23.578736,18.012067 23.363629,18.344414 23.324185,18.524001 C 23.298914,18.639064 23.381104,18.85272 23.45064,18.85272 C 23.470955,18.85272 24.053131,18.489197 24.744366,18.044892 L 24.744365,18.044891 z"
+ style="fill:#cccccc;fill-opacity:1;stroke:#000000;stroke-width:0.00357143;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path6775"
+ d="M 21.956508,19.44645 L 21.626147,19.369825 L 20.992223,18.742196 C 20.283972,18.040978 19.491605,17.291321 18.090104,15.996504 C 16.091873,14.150381 15.503282,13.591392 14.481321,12.56921 C 12.908053,10.995604 12.285319,10.204891 12.110342,9.5586769 C 12.082329,9.4552226 12.038997,9.3189684 12.014048,9.2558912 C 11.976273,9.1603884 11.978583,9.0898612 12.027859,8.8342512 C 12.103893,8.4398505 12.221693,8.1859623 12.433942,7.9590512 L 12.603867,7.7773873 L 13.49343,8.6632676 C 16.632223,11.789061 21.751453,17.298446 22.38248,18.229784 C 22.544674,18.469169 22.575162,18.669376 22.521991,19.145955 C 22.500711,19.336699 22.483298,19.501431 22.483298,19.512027 C 22.483298,19.547736 22.288805,19.523524 21.956508,19.44645 z"
+ style="fill:#cccccc;fill-opacity:1;stroke:#000000;stroke-width:0.00357143;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ </g>
+</svg>
diff --git a/data/message.png b/data/message.png
new file mode 100644
index 0000000..29867c5
--- /dev/null
+++ b/data/message.png
Binary files differ
diff --git a/data/mute.png b/data/mute.png
new file mode 100644
index 0000000..472b1ef
--- /dev/null
+++ b/data/mute.png
Binary files differ
diff --git a/data/noag.png b/data/noag.png
new file mode 100644
index 0000000..1fd8cd4
--- /dev/null
+++ b/data/noag.png
Binary files differ
diff --git a/data/nobt.png b/data/nobt.png
new file mode 100644
index 0000000..449097a
--- /dev/null
+++ b/data/nobt.png
Binary files differ
diff --git a/data/pickup.png b/data/pickup.png
new file mode 100644
index 0000000..156c35f
--- /dev/null
+++ b/data/pickup.png
Binary files differ
diff --git a/data/redial.png b/data/redial.png
new file mode 100644
index 0000000..20b893d
--- /dev/null
+++ b/data/redial.png
Binary files differ
diff --git a/data/signal-0.png b/data/signal-0.png
new file mode 100644
index 0000000..40295b6
--- /dev/null
+++ b/data/signal-0.png
Binary files differ
diff --git a/data/signal-1.png b/data/signal-1.png
new file mode 100644
index 0000000..1f74477
--- /dev/null
+++ b/data/signal-1.png
Binary files differ
diff --git a/data/signal-2.png b/data/signal-2.png
new file mode 100644
index 0000000..046bd30
--- /dev/null
+++ b/data/signal-2.png
Binary files differ
diff --git a/data/signal-3.png b/data/signal-3.png
new file mode 100644
index 0000000..485ea0c
--- /dev/null
+++ b/data/signal-3.png
Binary files differ
diff --git a/data/signal-4.png b/data/signal-4.png
new file mode 100644
index 0000000..564dd63
--- /dev/null
+++ b/data/signal-4.png
Binary files differ
diff --git a/data/signal-5.png b/data/signal-5.png
new file mode 100644
index 0000000..6491538
--- /dev/null
+++ b/data/signal-5.png
Binary files differ
diff --git a/data/signal-none.png b/data/signal-none.png
new file mode 100644
index 0000000..1d56887
--- /dev/null
+++ b/data/signal-none.png
Binary files differ
diff --git a/data/signal.png b/data/signal.png
new file mode 100644
index 0000000..441615c
--- /dev/null
+++ b/data/signal.png
Binary files differ
diff --git a/data/swapcall.png b/data/swapcall.png
new file mode 100644
index 0000000..e3e9fd0
--- /dev/null
+++ b/data/swapcall.png
Binary files differ
diff --git a/data/tel-cell.png b/data/tel-cell.png
new file mode 100644
index 0000000..b8902cb
--- /dev/null
+++ b/data/tel-cell.png
Binary files differ
diff --git a/hfpd/objects.cpp b/hfpd/objects.cpp
index 4c9733d..30c98a7 100644
--- a/hfpd/objects.cpp
+++ b/hfpd/objects.cpp
@@ -1814,7 +1814,7 @@ done:
bool HandsFree::
GetVersion(DBusMessage *msgp, dbus_uint32_t &val)
{
- val = 2;
+ val = 3;
return true;
}