]> git.itanic.dy.fi Git - maemo-mapper/commitdiff
A rather large reorganization of the code, as well as fixes for the following:
authorgnuite <gnuite@gmail.com>
Sat, 1 Jul 2006 20:25:44 +0000 (20:25 +0000)
committergnuite <gnuite@gmail.com>
Sat, 1 Jul 2006 20:25:44 +0000 (20:25 +0000)
  closes #12 - Implement Localization Framework
  closes #14 - Use dbus-Based Flite
  addresses #16 - Provide Official User Documentation (the framework is there)
  closes #18 - Use Chime to Indicate Approaching Waypoint

git-svn-id: svn+ssh://garage/var/lib/gforge/svnroot/maemo-mapper/trunk@18 6c538b50-5814-0410-93ad-8bdf4c0149d1

19 files changed:
LICENSE [new file with mode: 0644]
Makefile.am
autogen.sh
configure.ac
data/Makefile.am [new file with mode: 0644]
data/com.gnuite.maemo_mapper.service [moved from com.nokia.maemo_mapper.service with 59% similarity]
data/help/en_US/maemomapper.xml [new file with mode: 0644]
data/icons/26x26/maemo-mapper.png [moved from maemo-mapper.26.png with 100% similarity]
data/icons/40x40/maemo-mapper.png [moved from maemo-mapper.40.png with 100% similarity]
data/icons/scalable/maemo-mapper.png [moved from maemo-mapper.64.png with 100% similarity]
data/maemo-mapper.desktop [moved from maemo-mapper.desktop with 85% similarity]
debian/changelog
debian/control
debian/copyright
debian/rules
po/POTFILES.in [new file with mode: 0644]
po/en_US.po [new file with mode: 0644]
src/Makefile.am [new file with mode: 0644]
src/maemo-mapper.c [moved from maemo-mapper.c with 92% similarity]

diff --git a/LICENSE b/LICENSE
new file mode 100644 (file)
index 0000000..e37680c
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,280 @@
+                   GNU GENERAL PUBLIC LICENSE
+                      Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                   GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                           NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
index 3d18c9c901c148478864b37beb2bdf756a4c89e4..7b632736600cf7e2addcfcd8e313e3ab890bf8eb 100644 (file)
@@ -1,50 +1,33 @@
-# The icons
-
-icondir = $(datadir)/icons/hicolor
-
-install-data-local:
-       i=maemo-mapper; \
-       $(mkinstalldirs) $(DESTDIR)$(icondir)/26x26/hildon; \
-       $(mkinstalldirs) $(DESTDIR)$(icondir)/40x40/hildon; \
-       $(mkinstalldirs) $(DESTDIR)$(icondir)/scalable/hildon; \
-       $(INSTALL_DATA) $(srcdir)/$$i.26.png $(DESTDIR)$(icondir)/26x26/hildon/$$i.png; \
-       $(INSTALL_DATA) $(srcdir)/$$i.40.png $(DESTDIR)$(icondir)/40x40/hildon/$$i.png; \
-       $(INSTALL_DATA) $(srcdir)/$$i.64.png $(DESTDIR)$(icondir)/scalable/hildon/$$i.png;
-
-uninstall-local:
-       i=maemo-mapper; \
-       rm $(DESTDIR)$(icondir)/26x26/hildon/$$i.png; \
-       rm $(DESTDIR)$(icondir)/40x40/hildon/$$i.png; \
-       rm $(DESTDIR)$(icondir)/scalable/hildon/$$i.png;
-
-# The program
-
-bin_PROGRAMS = maemo-mapper
-
-maemo_mapper_SOURCES = maemo-mapper.c
-maemo_mapper_CFLAGS = $(GTK_CFLAGS) $(OSSO_CFLAGS) $(HILDON_CFLAGS) $(GNOME_VFS_CFLAGS) $(GCONF_CFLAGS) $(LIBXML2_CFLAGS)
-maemo_mapper_LDADD = $(GTK_LIBS) $(OSSO_LIBS) $(HILDON_LIBS) $(GNOME_VFS_LIBS) $(GCONF_LIBS) $(LIBXML2_LIBS) -lbluetooth
-
-desktopdir = $(datadir)/applications/hildon
-desktop_DATA = maemo-mapper.desktop
-
-servicedir = $(datadir)/dbus-1/services
-service_DATA = com.nokia.maemo_mapper.service
-
-EXTRA_DIST =                                                                  \
-        autogen.sh                                                            \
-        debian/changelog                                                      \
-        debian/compat                                                         \
-        debian/copyright                                                      \
-        debian/control                                                        \
-        debian/rules                                                          \
-        debian/maemo-mapper.links                                             \
-        maemo-mapper.desktop                                                  \
-        com.nokia.maemo_mapper.service                                        \
-        maemo-mapper.26.png                                                   \
-        maemo-mapper.40.png                                                   \
-        maemo-mapper.64.png
-
-deb:
-       ./make-package $(PACKAGE) $(VERSION)
-
+#
+# This file is part of maemo-mapper
+#
+# Copyright (C) 2006 John Costigan.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+EXTRA_DIST = \
+        autogen.sh \
+        intltool-extract.in \
+        intltool-merge.in \
+        intltool-update.in \
+        debian/changelog \
+        debian/compat \
+        debian/copyright  \
+        debian/control \
+        debian/rules \
+        debian/maemo-mapper.links
+
+SUBDIRS = src data po
index d6b2ae6398accd3c64f96081c55408c5878f4cf5..a6a3df6c584cd54245165634dc3389cd9d2ae871 100755 (executable)
@@ -1,7 +1,30 @@
 #!/bin/sh
 
+#
+# This file is part of maemo-mapper
+#
+# Copyright (C) 2006 John Costigan.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
 set -x
+glib-gettextize --copy --force
+libtoolize --automake --copy --force
+intltoolize --automake --copy --force
 aclocal-1.7
-autoconf
-libtoolize
-automake-1.7 --add-missing --foreign
+autoconf --force
+autoheader --force
+automake-1.7 --add-missing --copy --force-missing --foreign
index 84b33aeabf0adf757a15055dbb904ff85566a94e..6d8079a86a48b8b85a1d97adf436f539329e06ec 100644 (file)
@@ -1,15 +1,36 @@
+#
+# This file is part of maemo-mapper
+#
+# Copyright (C) 2006 John Costigan.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+
 AC_INIT(Makefile.am)
-AM_INIT_AUTOMAKE(maemo-mapper, 1.0.1)
+AM_INIT_AUTOMAKE(maemo-mapper, 1.0.2)
 
 AC_PROG_CPP
 AC_PROG_INSTALL
 AC_PROG_LIBTOOL
+AC_PROG_INTLTOOL([0.23])
 
 PKG_CHECK_MODULES(GTK, gtk+-2.0)
 AC_SUBST(GTK_LIBS)
 AC_SUBST(GTK_CFLAGS)
 
-PKG_CHECK_MODULES(OSSO, libosso >= 1)
+PKG_CHECK_MODULES(OSSO, libosso >= 1 libossohelp)
 AC_SUBST(OSSO_LIBS)
 AC_SUBST(OSSO_CFLAGS)
 
@@ -30,4 +51,64 @@ AC_SUBST(LIBXML2_LIBS)
 AC_SUBST(LIBXML2_CFLAGS)
 
 
-AC_OUTPUT([ Makefile ])
+# Localisation
+GETTEXT_PACKAGE=$PACKAGE
+AC_SUBST(GETTEXT_PACKAGE)
+AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE], "${GETTEXT_PACKAGE}", [Name of gettext package])
+ALL_LINGUAS="en_US"
+AM_GLIB_GNU_GETTEXT
+
+# To make application visible in maemo Task Navigator it needs a Desktop
+# file for the application.
+# D-BUS service file is needed to be able to launch the maemo application
+# and connect it to D-BUS services.
+# The following line defines install directories for these files.
+desktopentrydir=`$PKG_CONFIG osso-af-settings --variable=desktopentrydir`
+serviceentrydir=`$PKG_CONFIG osso-af-settings --variable=dbusservicedir`
+
+# Application locale install directory
+localedir=`$PKG_CONFIG osso-af-settings --variable=localedir`
+
+# Application pixmaps install directory
+pixmapdir=`$PKG_CONFIG osso-af-settings --variable=hildonpixmapdir`
+
+# Application icon install directories
+icon_26x26dir=$datadir/icons/hicolor/26x26/hildon
+icon_34x34dir=$datadir/icons/hicolor/34x34/hildon
+icon_40x40dir=$datadir/icons/hicolor/40x40/hildon
+icon_50x50dir=$datadir/icons/hicolor/50x50/hildon
+icon_scalabledir=$datadir/icons/hicolor/scalable/hildon
+
+# Help file install directory
+helpfile_engbdir=$datadir/osso-help/en_US
+
+# Hildon control panel plugin install directories
+pluginlibdir=`$PKG_CONFIG hildon-control-panel --variable=plugindir`
+plugindesktopentrydir=`$PKG_CONFIG hildon-control-panel --variable=plugindesktopentrydir`
+
+# Define as variables in Makefiles
+AC_SUBST(desktopentrydir)
+AC_SUBST(serviceentrydir)
+AC_SUBST(localedir)
+AC_SUBST(pixmapdir)
+AC_SUBST(icon_26x26dir)
+AC_SUBST(icon_34x34dir)
+AC_SUBST(icon_40x40dir)
+AC_SUBST(icon_50x50dir)
+AC_SUBST(icon_scalabledir)
+AC_SUBST(pluginlibdir)
+AC_SUBST(plugindesktopentrydir)
+AC_SUBST(helpfile_engbdir)
+
+AC_DEFINE_UNQUOTED([LOCALEDIR], "${localedir}", [Runtime locale catalog files path])
+AC_DEFINE_UNQUOTED([PIXMAPDIR], "${pixmapdir}", [Runtime pixmap files path])
+
+# Produce output files
+AC_OUTPUT(
+          Makefile \
+          src/Makefile \
+          data/Makefile \
+          po/Makefile.in \
+          po/Makefile
+)
+
diff --git a/data/Makefile.am b/data/Makefile.am
new file mode 100644 (file)
index 0000000..d318dd2
--- /dev/null
@@ -0,0 +1,31 @@
+#
+# This file is part of maemo-mapper
+#
+# Copyright (C) 2006 John Costigan.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+serviceentry_DATA = com.gnuite.maemo_mapper.service
+
+desktopentry_DATA = maemo-mapper.desktop
+
+icon_26x26_DATA = icons/26x26/maemo-mapper.png 
+icon_40x40_DATA = icons/40x40/maemo-mapper.png
+icon_scalable_DATA = icons/scalable/maemo-mapper.png
+
+helpfile_engb_DATA = help/en_US/maemomapper.xml
+
+EXTRA_DIST = $(serviceentry_DATA) $(desktopentry_DATA) $(icon_26x26_DATA) $(icon_40x40_DATA) $(icon_scalable_DATA) $(helpfile_engb_DATA)
similarity index 59%
rename from com.nokia.maemo_mapper.service
rename to data/com.gnuite.maemo_mapper.service
index 190de27b45765c83863494b96bf9a14efb3416c1..5328bc5d5f738a2997fc79d1d8ef7a32cb9346c1 100644 (file)
@@ -1,3 +1,3 @@
 [D-BUS Service]
-Name=com.nokia.maemo_mapper
+Name=com.gnuite.maemo_mapper
 Exec=/usr/bin/maemo-mapper
diff --git a/data/help/en_US/maemomapper.xml b/data/help/en_US/maemomapper.xml
new file mode 100644 (file)
index 0000000..103f184
--- /dev/null
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ossohelpsource>
+  <folder>
+    <title>Maemo Mapper</title>
+    <topic>
+      <topictitle>Introduction</topictitle>
+      <context contextUID="help_maemomapper_intro" />
+      <para>Welcome to Maemo Mapper.</para>
+      <para>
+        This help file is obviously incomplete, but hopefully this will
+        change in future versions.  If you would like to contribute, feel
+        free to apply to be a documenter at the Maemo Mapper Garage site.
+    </topic>
+  </folder>
+</ossohelpsource>
similarity index 85%
rename from maemo-mapper.desktop
rename to data/maemo-mapper.desktop
index 021d737ca0ad4b5866bb01199abf73efc61beb09..d921df0c6a965402c933d0e3f12f37a559670f2e 100644 (file)
@@ -7,6 +7,6 @@ Exec=/usr/bin/maemo-mapper
 Icon=maemo-mapper
 X-Window-Icon=maemo-mapper
 X-HildonDesk-ShowInToolbar=true
-X-Osso-Service=maemo_mapper
+X-Osso-Service=com.gnuite.maemo_mapper
 X-Osso-Type=application/x-executable
 Terminal=false
index d076971d122238aba5a51ab8b1e17d84a1fb26b4..e70b6f8847a1b89ff7dfd8d648fe5d4d7e1ace5c 100644 (file)
@@ -1,3 +1,13 @@
+maemo-mapper (1.0.2) unstable; urgency=low
+
+  * Re-organized to work better with the final version of 2006 OS.
+  * Changed voice synthesis mechanism to dbus-based flite (closes #14).
+  * Added Localization Framework (closes #12).
+  * Added the framework for online Help (begins to address #16).
+  * Added chime to indicate approaching waypoints (closes #18).
+
+ -- John Costigan <gnuite@gmail.com>  Sat, 1 Jul 2006 10:14:00 -0400
+
 maemo-mapper (1.0.1) unstable; urgency=low
 
   * Fixed my broken "last two center points" code.
index 33d0ffca90bb3b282621d620dd903af1721b7eee..3e79e77d4357cd39b5d611835c4dcd967602cfe8 100644 (file)
@@ -1,12 +1,12 @@
 Source: maemo-mapper
-Section: user/gps
+Section: maemo/Applications
 Priority: optional
 Maintainer: John Costigan <gnuite@gmail.com>
 Build-Depends: debhelper (>= 4.0.0), intltool, hildon-base-lib-dev, hildon-libs-dev, hildon-fm-dev, libgtk2.0-dev, libosso-gnomevfs2-dev, libglib2.0-dev, libdbus-glib-1-dev, libosso-dev
 Standards-Version: 3.6.0
 
 Package: maemo-mapper
-Architecture: armel
+Architecture: armel arm i386
 Pre-Depends: maemo-select-menu-location
 Depends: ${shlibs:Depends}
 Description: Maemo Mapper is geographical mapping softare specifically designed
index 768fa4e61d370b971027127bd033e11e32339ca2..537bb4ae447b072d966ebe55bc67e2df6b62c89e 100644 (file)
@@ -6,3 +6,18 @@ By using this software you agree that you understand that using Maemo Mapper in
 Online Mode with a commercial map repository may be considered a violation of
 copyright law and that John Costigan cannot be held responsible for any of your
 actions related thereto.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
index 914a7ba6afd74eaa54b9b13961cad3364e8c1f92..bd90db631e22462d9e9dc8c4b2e10b272d9c493e 100755 (executable)
@@ -6,6 +6,11 @@
 # Uncomment this to turn on verbose mode.
 #export DH_VERBOSE=1
 
+# These are used for cross-compiling and for saving the configure script
+# from having to guess our platform (since we know it already)
+DEB_HOST_GNU_TYPE   ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
+DEB_BUILD_GNU_TYPE  ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
+
 
 CFLAGS = -Wall -g
 
@@ -26,6 +31,7 @@ endif
 configure: configure-stamp
 configure-stamp:
        dh_testdir
+       ./autogen.sh
        # Add here commands to configure the package.
        CFLAGS="$(CFLAGS)" ./configure --prefix=/usr --disable-static
        touch configure-stamp
@@ -62,7 +68,7 @@ install: build
 
         # See postinst for why we do this.
        ( cd $(CURDIR)/debian/maemo-mapper/usr/share/applications/hildon \
-          && mv maemo-mapper.desktop maemo-mapper.inactive                    \
+          && mv maemo-mapper.desktop maemo-mapper.inactive \
         )
 
 # Build architecture-independent files here.
diff --git a/po/POTFILES.in b/po/POTFILES.in
new file mode 100644 (file)
index 0000000..0b92b7e
--- /dev/null
@@ -0,0 +1,3 @@
+# List of MaemoPad source files to be localized
+
+../src/maemo-mapper.c
diff --git a/po/en_US.po b/po/en_US.po
new file mode 100644 (file)
index 0000000..7912551
--- /dev/null
@@ -0,0 +1,477 @@
+# This is an en_US "translation" file for Maemo Mapper.  To translate this to
+# another language, first copy this file to a filename with the appropriate
+# language/country code, then modify the "msgstr" strings with the correct
+# translation.
+#
+# Copyright (C) 2006 John Costigan
+# This file is distributed under the same license as the maemo-mapper package.
+# John Costigan <gnuite@gmail.com>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: maemo-mapper 1.0.2\n"
+"Report-Msgid-Bugs-To: gnuite@gmail.com\n"
+"POT-Creation-Date: 2006-07-01 05:57-0400\n"
+"PO-Revision-Date: 2006-07-01 05:57-0400\n"
+"Last-Translator: John Costigan <gnuite@gmail.com>\n"
+"Language-Team: John Costigan <gnuite@gmail.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../src/maemo-mapper.c:1749
+msgid "Advance Notice"
+msgstr "Advance Notice"
+
+#: ../src/maemo-mapper.c:1745
+msgid "Announce"
+msgstr "Announce"
+
+#: ../src/maemo-mapper.c:5069
+msgid "Area"
+msgstr "Area"
+
+#: ../src/maemo-mapper.c:1718 ../src/maemo-mapper.c:2291
+msgid "Auto-Center"
+msgstr "Auto-Center"
+
+#: ../src/maemo-mapper.c:4931
+msgid "Auto-Center Mode: Lat/Lon"
+msgstr "Auto-Center Mode: Lat/Lon"
+
+#: ../src/maemo-mapper.c:4916
+msgid "Auto-Center Mode: Lead"
+msgstr "Auto-Center Mode: Lead"
+
+#: ../src/maemo-mapper.c:4945
+msgid "Auto-Center Off"
+msgstr "Auto-Center Off"
+
+#: ../src/maemo-mapper.c:2265
+msgid "Auto-Download"
+msgstr "Auto-Download"
+
+#: ../src/maemo-mapper.c:4441
+msgid "Auto-Update"
+msgstr "Auto-Update"
+
+#: ../src/maemo-mapper.c:5132
+msgid "Bottom-Right"
+msgstr "Bottom-Right"
+
+#: ../src/maemo-mapper.c:1711
+msgid "Browse..."
+msgstr "Browse..."
+
+#: ../src/maemo-mapper.c:1701
+msgid "Cache Dir."
+msgstr "Cache Dir."
+
+#: ../src/maemo-mapper.c:5340
+msgid ""
+"Cannot enable GPS until a GPS Receiver MAC is set in the Settings dialog box."
+msgstr ""
+"Cannot enable GPS until a GPS Receiver MAC is set in the Settings dialog box."
+
+#: ../src/maemo-mapper.c:1657
+msgid "Channel"
+msgstr "Channel"
+
+#: ../src/maemo-mapper.c:2240 ../src/maemo-mapper.c:2254
+#: ../src/maemo-mapper.c:5057
+msgid "Clear"
+msgstr "Clear"
+
+#: ../src/maemo-mapper.c:2330
+msgid "Close"
+msgstr "Close"
+
+#: ../src/maemo-mapper.c:5266
+#, c-format
+msgid ""
+"Confirm download of %d maps\n"
+"(up to about %.2f MB)\n"
+msgstr ""
+"Confirm download of %d maps\n"
+"(up to about %.2f MB)\n"
+
+#: ../src/maemo-mapper.c:1862
+msgid "Could not create Map Cache directory."
+msgstr "Could not create Map Cache directory."
+
+#: ../src/maemo-mapper.c:2006
+msgid ""
+"Could not create Map Cache directory.\n"
+"Please set a valid Map Cache directory in the Settings dialog box."
+msgstr ""
+"Could not create Map Cache directory.\n"
+"Please set a valid Map Cache directory in the Settings dialog box."
+
+#: ../src/maemo-mapper.c:4519
+msgid "Could not generate directions. Make sure your locations are valid."
+msgstr "Could not generate directions. Make sure your locations are valid."
+
+#: ../src/maemo-mapper.c:4458
+msgid "Destination"
+msgstr "Destination"
+
+#: ../src/maemo-mapper.c:2261
+msgid "Download Along Route"
+msgstr "Download Along Route"
+
+#: ../src/maemo-mapper.c:2263
+msgid "Download Area..."
+msgstr "Download Area..."
+
+#: ../src/maemo-mapper.c:5051
+msgid "Download Maps by Area"
+msgstr "Download Maps by Area"
+
+#: ../src/maemo-mapper.c:4415
+msgid "Download Route"
+msgstr "Download Route"
+
+#: ../src/maemo-mapper.c:2234
+msgid "Download..."
+msgstr "Download..."
+
+#: ../src/maemo-mapper.c:3558
+#, c-format
+msgid "Downloading %s\n"
+msgstr "Downloading %s\n"
+
+#: ../src/maemo-mapper.c:2688
+msgid "Downloading maps"
+msgstr "Downloading maps"
+
+#: ../src/maemo-mapper.c:2318
+msgid "Enable GPS"
+msgstr "Enable GPS"
+
+#: ../src/maemo-mapper.c:1761
+msgid "Enable Voice Synthesis (requires flite)"
+msgstr "Enable Voice Synthesis (requires flite)"
+
+#: ../src/maemo-mapper.c:3785 ../src/maemo-mapper.c:4575
+#: ../src/maemo-mapper.c:4611 ../src/maemo-mapper.c:4662
+msgid "Error parsing GPX file."
+msgstr "Error parsing GPX file."
+
+#: ../src/maemo-mapper.c:4677
+#, c-format
+msgid ""
+"Error while writing to file:\n"
+"%s\n"
+"File is incomplete."
+msgstr ""
+"Error while writing to file:\n"
+"%s\n"
+"File is incomplete."
+
+#: ../src/maemo-mapper.c:4769 ../src/maemo-mapper.c:4822
+msgid "Error writing GPX file."
+msgstr "Error writing GPX file."
+
+#: ../src/maemo-mapper.c:742
+msgid "Establishing GPS fix"
+msgstr "Establishing GPS fix"
+
+#: ../src/maemo-mapper.c:4512
+#, c-format
+msgid ""
+"Failed to connect to GPX Directions server.\n"
+"%s"
+msgstr ""
+"Failed to connect to GPX Directions server.\n"
+"%s"
+
+#: ../src/maemo-mapper.c:1969
+msgid "Failed to initialize GConf.  Quitting."
+msgstr "Failed to initialize GConf.  Quitting."
+
+#: ../src/maemo-mapper.c:1396
+msgid "Failed to initialize GConf.  Settings were not saved."
+msgstr "Failed to initialize GConf.  Settings were not saved."
+
+#: ../src/maemo-mapper.c:3421
+#, c-format
+msgid ""
+"Failed to open file for %s.\n"
+"%s"
+msgstr ""
+"Failed to open file for %s.\n"
+"%s"
+
+#: ../src/maemo-mapper.c:3774
+#, c-format
+msgid ""
+"Failed to open file for reading.\n"
+"%s"
+msgstr ""
+"Failed to open file for reading.\n"
+"%s"
+
+#: ../src/maemo-mapper.c:4139
+#, c-format
+msgid "Failed to parse string as float: %s\n"
+msgstr "Failed to parse string as float: %s\n"
+
+#: ../src/maemo-mapper.c:4128
+#, c-format
+msgid "Failed to parse string as int: %s\n"
+msgstr "Failed to parse string as int: %s\n"
+
+#: ../src/maemo-mapper.c:2313
+msgid "Full Screen"
+msgstr "Full Screen"
+
+#: ../src/maemo-mapper.c:1644
+msgid "GPS"
+msgstr "GPS"
+
+#: ../src/maemo-mapper.c:5083
+msgid "GPS Location"
+msgstr "GPS Location"
+
+#: ../src/maemo-mapper.c:4356
+msgid "GSV"
+msgstr "GSV"
+
+#: ../src/maemo-mapper.c:2336
+msgid "Help"
+msgstr "Help"
+
+#: ../src/maemo-mapper.c:5220
+msgid "Invalid Bottom-Right Latitude"
+msgstr "Invalid Bottom-Right Latitude"
+
+#: ../src/maemo-mapper.c:5227
+msgid "Invalid Bottom-Right Longitude"
+msgstr "Invalid Bottom-Right Longitude"
+
+#: ../src/maemo-mapper.c:4130 ../src/maemo-mapper.c:4141
+msgid "Invalid NMEA input from receiver!"
+msgstr "Invalid NMEA input from receiver!"
+
+#: ../src/maemo-mapper.c:5206
+msgid "Invalid Top-Left Latitude"
+msgstr "Invalid Top-Left Latitude"
+
+#: ../src/maemo-mapper.c:5213
+msgid "Invalid Top-Left Longitude"
+msgstr "Invalid Top-Left Longitude"
+
+#: ../src/maemo-mapper.c:1813
+msgid "Keep Display On Only in Fullscreen Mode"
+msgstr "Keep Display On Only in Fullscreen Mode"
+
+#: ../src/maemo-mapper.c:2295
+msgid "Lat/Lon"
+msgstr "Lat/Lon"
+
+#: ../src/maemo-mapper.c:5073
+msgid "Latitude"
+msgstr "Latitude"
+
+#: ../src/maemo-mapper.c:2301
+msgid "Lead"
+msgstr "Lead"
+
+#: ../src/maemo-mapper.c:1733
+msgid "Lead Amount"
+msgstr "Lead Amount"
+
+#: ../src/maemo-mapper.c:1801
+msgid "Line Width"
+msgstr "Line Width"
+
+#: ../src/maemo-mapper.c:5077
+msgid "Longitude"
+msgstr "Longitude"
+
+#: ../src/maemo-mapper.c:1648
+msgid "MAC"
+msgstr "MAC"
+
+#: ../src/maemo-mapper.c:3634
+msgid "Maemo Mapper"
+msgstr "Maemo Mapper"
+
+#: ../src/maemo-mapper.c:1632
+msgid "Maemo Mapper Settings"
+msgstr "Maemo Mapper Settings"
+
+#: ../src/maemo-mapper.c:1676 ../src/maemo-mapper.c:2257
+msgid "Maps"
+msgstr "Maps"
+
+#: ../src/maemo-mapper.c:2252
+msgid "Mark a Waypoint"
+msgstr "Mark a Waypoint"
+
+#: ../src/maemo-mapper.c:1797
+msgid "Misc."
+msgstr "Misc."
+
+#: ../src/maemo-mapper.c:1880
+msgid ""
+"No GPS Receiver MAC Provided.\n"
+"GPS Disabled."
+msgstr ""
+"No GPS Receiver MAC Provided.\n"
+"GPS Disabled."
+
+#: ../src/maemo-mapper.c:2307
+msgid "None"
+msgstr "None"
+
+#: ../src/maemo-mapper.c:1667
+msgid "Note: \"Channel\" refers to the device side!"
+msgstr "Note: \"Channel\" refers to the device side!"
+
+#: ../src/maemo-mapper.c:2232 ../src/maemo-mapper.c:2248
+msgid "Open..."
+msgstr "Open..."
+
+#: ../src/maemo-mapper.c:4447
+msgid "Origin"
+msgstr "Origin"
+
+#: ../src/maemo-mapper.c:1786
+msgid "Pitch"
+msgstr "Pitch"
+
+#: ../src/maemo-mapper.c:4489
+msgid "Please specify a start location."
+msgstr "Please specify a start location."
+
+#: ../src/maemo-mapper.c:4496
+msgid "Please specify an end location."
+msgstr "Please specify an end location."
+
+#: ../src/maemo-mapper.c:4353
+msgid "RMC"
+msgstr "RMC"
+
+#: ../src/maemo-mapper.c:2238
+msgid "Reset"
+msgstr "Reset"
+
+#: ../src/maemo-mapper.c:2228 ../src/maemo-mapper.c:2276
+msgid "Route"
+msgstr "Route"
+
+#: ../src/maemo-mapper.c:4570
+msgid "Route Downloaded"
+msgstr "Route Downloaded"
+
+#: ../src/maemo-mapper.c:3783 ../src/maemo-mapper.c:4608
+msgid "Route Opened"
+msgstr "Route Opened"
+
+#: ../src/maemo-mapper.c:4820
+msgid "Route Saved"
+msgstr "Route Saved"
+
+#: ../src/maemo-mapper.c:4889
+msgid "Routes are now hidden"
+msgstr "Routes are now hidden"
+
+#: ../src/maemo-mapper.c:4882
+msgid "Routes are now shown"
+msgstr "Routes are now shown"
+
+#: ../src/maemo-mapper.c:2236 ../src/maemo-mapper.c:2250
+msgid "Save..."
+msgstr "Save..."
+
+#: ../src/maemo-mapper.c:1830
+msgid "Scanning for bluetooth devices"
+msgstr "Scanning for bluetooth devices"
+
+#: ../src/maemo-mapper.c:732
+msgid "Searching for GPS receiver"
+msgstr "Searching for GPS receiver"
+
+#: ../src/maemo-mapper.c:1148
+#, c-format
+msgid "Sending to flite: %s\n"
+msgstr "Sending to flite: %s\n"
+
+#: ../src/maemo-mapper.c:1722
+msgid "Sensitivity"
+msgstr "Sensitivity"
+
+#: ../src/maemo-mapper.c:821
+#, c-format
+msgid "Setting _next_way to NULL\n"
+msgstr "Setting _next_way to NULL\n"
+
+#: ../src/maemo-mapper.c:2325
+msgid "Settings..."
+msgstr "Settings..."
+
+#: ../src/maemo-mapper.c:2272
+msgid "Show"
+msgstr "Show"
+
+#: ../src/maemo-mapper.c:1774
+msgid "Speed"
+msgstr "Speed"
+
+#: ../src/maemo-mapper.c:5118
+msgid "Top-Left"
+msgstr "Top-Left"
+
+#: ../src/maemo-mapper.c:2244 ../src/maemo-mapper.c:2281
+msgid "Track"
+msgstr "Track"
+
+#: ../src/maemo-mapper.c:4659
+msgid "Track Opened"
+msgstr "Track Opened"
+
+#: ../src/maemo-mapper.c:4767
+msgid "Track Saved"
+msgstr "Track Saved"
+
+#: ../src/maemo-mapper.c:4787
+msgid "Track Waypoint"
+msgstr "Track Waypoint"
+
+#: ../src/maemo-mapper.c:4863
+msgid "Tracks are now hidden"
+msgstr "Tracks are now hidden"
+
+#: ../src/maemo-mapper.c:4856
+msgid "Tracks are now shown"
+msgstr "Tracks are now shown"
+
+#: ../src/maemo-mapper.c:1680
+msgid "URI Format"
+msgstr "URI Format"
+
+#: ../src/maemo-mapper.c:4437
+msgid "Use GPS Location"
+msgstr "Use GPS Location"
+
+#: ../src/maemo-mapper.c:2286
+msgid "Velocity Vector"
+msgstr "Velocity Vector"
+
+#: ../src/maemo-mapper.c:5099
+msgid "View Center"
+msgstr "View Center"
+
+#: ../src/maemo-mapper.c:5147
+msgid "Zoom"
+msgstr "Zoom"
+
+#: ../src/maemo-mapper.c:5150
+msgid "Zoom Levels to Download: (0 -> most detail)"
+msgstr "Zoom Levels to Download: (0 -> most detail)"
+
+#: ../src/maemo-mapper.c:1690
+msgid "Zoom Steps"
+msgstr "Zoom Steps"
+
diff --git a/src/Makefile.am b/src/Makefile.am
new file mode 100644 (file)
index 0000000..e6783ce
--- /dev/null
@@ -0,0 +1,27 @@
+#
+# This file is part of maemo-mapper
+#
+# Copyright (C) 2006 John Costigan.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+
+bin_PROGRAMS = maemo-mapper
+
+maemo_mapper_CFLAGS = $(GTK_CFLAGS) $(OSSO_CFLAGS) $(HILDON_CFLAGS) $(GNOME_VFS_CFLAGS) $(GCONF_CFLAGS) $(LIBXML2_CFLAGS)
+
+maemo_mapper_LDADD = $(GTK_LIBS) $(OSSO_LIBS) $(HILDON_LIBS) $(GNOME_VFS_LIBS) $(GCONF_LIBS) $(LIBXML2_LIBS) -lbluetooth
+
+maemo_mapper_SOURCES = maemo-mapper.c
similarity index 92%
rename from maemo-mapper.c
rename to src/maemo-mapper.c
index ab66957818222c3c7b781b133af5f77cbd6c79e2..b9580b3f9bb684a835437627ec810538554cad53 100644 (file)
@@ -1,28 +1,28 @@
 /*
  * This file is part of maemo-mapper
  *
- * Copyright (C) 2006 John Costigan
+ * Copyright (C) 2006 John Costigan.
  *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
  *
- * This software is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or(at your option)any later version.
- *
- * This software is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
  *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
+
 #define _GNU_SOURCE
 
+#define _(String) gettext(String)
+
 #include <unistd.h>
 #include <stdlib.h>
 #include <string.h>
 #include <fcntl.h>
 #include <gdk/gdkkeysyms.h>
 #include <libosso.h>
+#include <osso-helplib.h>
 #include <hildon-widgets/hildon-program.h>
 #include <hildon-widgets/hildon-controlbar.h>
 #include <hildon-widgets/hildon-note.h>
 #include <hildon-widgets/hildon-file-chooser-dialog.h>
 #include <hildon-widgets/hildon-number-editor.h>
 #include <hildon-widgets/hildon-banner.h>
+#include <hildon-widgets/hildon-system-sound.h>
 #include <libgnomevfs/gnome-vfs.h>
 #include <gconf/gconf-client.h>
 #include <libxml/parser.h>
 
+#include <libintl.h>
+#include <locale.h>
+
 /* BELOW: for getting input from the GPS receiver. */
 #include <sys/socket.h>
 #include <bluetooth/bluetooth.h>
 /* Pans are done two "grids" at a time, or 64 pixels. */
 #define PAN_UNITS (grid2unit(2))
 
-#define GCONF_KEY_PREFIX "/apps/maemo-mapper"
+#define GCONF_KEY_PREFIX "/apps/maemo/maemo-mapper"
 #define GCONF_KEY_RCVR_MAC GCONF_KEY_PREFIX"/receiver_mac"
 #define GCONF_KEY_RCVR_CHAN GCONF_KEY_PREFIX"/receiver_channel"
 #define GCONF_KEY_MAP_URI_FORMAT GCONF_KEY_PREFIX"/map_uri_format"
 #define GCONF_KEY_ANNOUNCE_NOTICE GCONF_KEY_PREFIX"/announce_notice"
 #define GCONF_KEY_DRAW_LINE_WIDTH GCONF_KEY_PREFIX"/draw_line_width"
 #define GCONF_KEY_ENABLE_VOICE GCONF_KEY_PREFIX"/enable_voice"
-#define GCONF_KEY_VOICE_SYNTH_PATH GCONF_KEY_PREFIX"/voice_synth_path"
+#define GCONF_KEY_VOICE_SPEED GCONF_KEY_PREFIX"/voice_speed"
+#define GCONF_KEY_VOICE_PITCH GCONF_KEY_PREFIX"/voice_pitch"
 #define GCONF_KEY_ALWAYS_KEEP_ON \
                                    GCONF_KEY_PREFIX"/always_keep_on"
 #define GCONF_KEY_AUTOCENTER_MODE GCONF_KEY_PREFIX"/autocenter_mode"
 #define GCONF_KEY_ROUTE_LOCATIONS GCONF_KEY_PREFIX"/route_locations"
 
 
+#define HELP_ID_PREFIX "help_maemomapper_"
+#define HELP_ID_INTRO HELP_ID_PREFIX"intro"
+
 #define MACRO_RECALC_CENTER(center_unitx, center_unity) { \
     switch(_center_mode) \
     { \
@@ -533,6 +542,7 @@ static GtkWidget *_menu_ac_none_item = NULL;
 static GtkWidget *_menu_fullscreen_item = NULL;
 static GtkWidget *_menu_enable_gps_item = NULL;
 static GtkWidget *_menu_settings_item = NULL;
+static GtkWidget *_menu_help_item = NULL;
 static GtkWidget *_menu_close_item = NULL;
 
 /** BANNERS. */
@@ -564,8 +574,9 @@ static guint _center_ratio = 7;
 static guint _draw_line_width = 5;
 static guint _announce_notice_ratio = 6;
 static gboolean _enable_voice = TRUE;
-static gchar *_voice_synth_path = NULL;
 static gboolean _always_keep_on = FALSE;
+static gdouble _voice_speed = 1.0;
+static gint _voice_pitch = 0;
 static GSList *_loc_list;
 static GtkListStore *_loc_model;
 
@@ -653,6 +664,9 @@ menu_cb_enable_gps(GtkAction *action);
 static gboolean
 menu_cb_settings(GtkAction *action);
 
+static gboolean
+menu_cb_help(GtkAction *action);
+
 static gint
 map_download_cb_async(GnomeVFSAsyncHandle *handle,
         GnomeVFSXferProgressInfo *info, ProgressUpdateInfo *pui);
@@ -721,7 +735,7 @@ set_conn_state(ConnState new_conn_state)
             }
             if(!_connect_banner)
                 _connect_banner = hildon_banner_show_animation(
-                        _window, NULL, "Searching for GPS receiver");
+                        _window, NULL, _("Searching for GPS receiver"));
             break;
         case RCVR_UP:
             if(_connect_banner)
@@ -731,7 +745,7 @@ set_conn_state(ConnState new_conn_state)
             }
             if(!_fix_banner)
                 _fix_banner = hildon_banner_show_progress(
-                        _window, NULL, "Establishing GPS fix");
+                        _window, NULL, _("Establishing GPS fix"));
             break;
         default: ; /* to quell warning. */
     }
@@ -1135,22 +1149,31 @@ track_add(guint unitx, guint unity, gboolean newly_fixed)
     {
         if(_enable_voice && strcmp(_next_way->desc, _last_spoken_phrase))
         {
-            gchar *buffer;
             g_free(_last_spoken_phrase);
             _last_spoken_phrase = g_strdup(_next_way->desc);
-            if(!fork())
-            {
-                /* We are the fork child.  Synthesize the voice. */
-                buffer = g_strdup_printf(
-                        "Approaching Waypoint. %s",
-                        _last_spoken_phrase);
-                printf("%s %s\n", _voice_synth_path, buffer);
-                execl(_voice_synth_path, _voice_synth_path,
-                        "-t", buffer, (char *)NULL);
-                printf("DONE!\n");
-                g_free(buffer);
-                exit(0);
-            }
+            printf("Sending to flite: %s\n", _last_spoken_phrase);
+            hildon_play_system_sound(
+                    "/usr/share/sounds/ui-information_note.wav");
+            osso_rpc_async_run(_osso,
+                    "com.nokia.flite",
+                    "/com/nokia/flite",
+                    "com.nokia.flite",
+                    "flite_tts",
+                    NULL,
+                    NULL,
+                    DBUS_TYPE_UINT32,
+                    getpid(),
+                    DBUS_TYPE_STRING,
+                    _last_spoken_phrase,
+                    DBUS_TYPE_UINT32,
+                    18,
+                    DBUS_TYPE_DOUBLE,
+                    _voice_speed,
+                    DBUS_TYPE_DOUBLE,
+                    _voice_pitch,
+                    DBUS_TYPE_STRING,
+                    g_strdup("cmu_us_kal"),
+                    DBUS_TYPE_INVALID);
         }
         hildon_banner_show_information(_window, NULL, _next_way->desc);
     }
@@ -1376,7 +1399,7 @@ config_save()
 
     if(!gconf_client)
     {
-        fprintf(stderr, "Failed to initialize GConf.  Aborting.\n");
+        popup_error(_("Failed to initialize GConf.  Settings were not saved."));
         return;
     }
 
@@ -1430,10 +1453,6 @@ config_save()
     gconf_client_set_bool(gconf_client,
             GCONF_KEY_ENABLE_VOICE, _enable_voice, NULL);
 
-    /* Save Voice Synthesis Path flag. */
-    gconf_client_set_string(gconf_client,
-            GCONF_KEY_VOICE_SYNTH_PATH, _voice_synth_path, NULL);
-
     /* Save Keep On When Fullscreen flag. */
     gconf_client_set_bool(gconf_client,
             GCONF_KEY_ALWAYS_KEEP_ON, _always_keep_on, NULL);
@@ -1549,6 +1568,40 @@ scan_bluetooth(ScanInfo *scan_info)
     return TRUE;
 }
 
+typedef struct _BrowseInfo BrowseInfo;
+struct _BrowseInfo {
+    GtkWidget *dialog;
+    GtkWidget *txt_map_dir_name;
+};
+
+static gboolean
+settings_dialog_browse(GtkWidget *widget, BrowseInfo *browse_info)
+{
+    GtkWidget *dialog;
+    printf("%s()\n", __PRETTY_FUNCTION__);
+
+    dialog = GTK_WIDGET(
+            hildon_file_chooser_dialog_new(GTK_WINDOW(browse_info->dialog),
+            GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER));
+
+    gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(dialog), TRUE);
+    gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog),
+            gtk_entry_get_text(GTK_ENTRY(browse_info->txt_map_dir_name)));
+
+    if(GTK_RESPONSE_OK == gtk_dialog_run(GTK_DIALOG(dialog)))
+    {
+        gchar *filename = gtk_file_chooser_get_filename(
+                GTK_FILE_CHOOSER(dialog));
+        gtk_entry_set_text(GTK_ENTRY(browse_info->txt_map_dir_name), filename);
+        g_free(filename);
+    }
+
+    gtk_widget_destroy(dialog);
+
+    vprintf("%s(): return TRUE\n", __PRETTY_FUNCTION__);
+    return TRUE;
+}
+
 /**
  * Bring up the Settings dialog.  Return TRUE if and only if the recever
  * information has changed (MAC or channel).
@@ -1559,6 +1612,8 @@ settings_dialog()
     GtkWidget *dialog;
     GtkWidget *notebook;
     GtkWidget *table;
+    GtkWidget *hbox;
+    GtkWidget *hbox2;
     GtkWidget *label;
     GtkWidget *txt_rcvr_mac;
     GtkWidget *num_rcvr_chan;
@@ -1569,15 +1624,18 @@ settings_dialog()
     GtkWidget *num_lead_ratio;
     GtkWidget *num_announce_notice;
     GtkWidget *chk_enable_voice;
-    GtkWidget *txt_voice_synth_path;
+    GtkWidget *num_voice_speed;
+    GtkWidget *num_voice_pitch;
     GtkWidget *num_draw_line_width;
     GtkWidget *chk_always_keep_on;
+    GtkWidget *btn_browse;
     ScanInfo scan_info = {0, 0};
+    BrowseInfo browse_info = {0, 0};
     gboolean rcvr_changed = FALSE;
     gint scan_sid = 0;
     printf("%s()\n", __PRETTY_FUNCTION__);
 
-    dialog = gtk_dialog_new_with_buttons("Maemo Mapper Settings",
+    dialog = gtk_dialog_new_with_buttons(_("Maemo Mapper Settings"),
             GTK_WINDOW(_window), GTK_DIALOG_MODAL,
             GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
             GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
@@ -1589,11 +1647,11 @@ settings_dialog()
     /* Receiver page. */
     gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
             table = gtk_table_new(2, 3, FALSE),
-            label = gtk_label_new("GPS"));
+            label = gtk_label_new(_("GPS")));
 
     /* Receiver MAC Address. */
     gtk_table_attach(GTK_TABLE(table),
-            label = gtk_label_new("MAC"),
+            label = gtk_label_new(_("MAC")),
             0, 1, 0, 1, GTK_FILL, 0, 2, 4);
     gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
     gtk_table_attach(GTK_TABLE(table),
@@ -1602,7 +1660,7 @@ settings_dialog()
 
     /* Receiver Channel. */
     gtk_table_attach(GTK_TABLE(table),
-            label = gtk_label_new("Channel"),
+            label = gtk_label_new(_("Channel")),
             0, 1, 1, 2, GTK_FILL, 0, 2, 4);
     gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
     gtk_table_attach(GTK_TABLE(table),
@@ -1612,7 +1670,7 @@ settings_dialog()
     /* Note!. */
     gtk_table_attach(GTK_TABLE(table),
             label = gtk_label_new(
-                "Note: \"Channel\" refers to the device side!"),
+                _("Note: \"Channel\" refers to the device side!")),
             0, 2, 2, 3, GTK_FILL, 0, 2, 4);
     gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_CENTER);
     gtk_misc_set_alignment(GTK_MISC(label), 0.5f, 0.5f);
@@ -1621,11 +1679,11 @@ settings_dialog()
     /* Maps page. */
     gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
             table = gtk_table_new(2, 3, FALSE),
-            label = gtk_label_new("Maps"));
+            label = gtk_label_new(_("Maps")));
 
     /* Map download URI. */
     gtk_table_attach(GTK_TABLE(table),
-            label = gtk_label_new("URI Prefix"),
+            label = gtk_label_new(_("URI Format")),
             0, 1, 0, 1, GTK_FILL, 0, 2, 4);
     gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
     gtk_table_attach(GTK_TABLE(table),
@@ -1635,7 +1693,7 @@ settings_dialog()
 
     /* Zoom Steps. */
     gtk_table_attach(GTK_TABLE(table),
-            label = gtk_label_new("Zoom Steps"),
+            label = gtk_label_new(_("Zoom Steps")),
             0, 1, 1, 2, GTK_FILL, 0, 2, 4);
     gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
     gtk_table_attach(GTK_TABLE(table),
@@ -1646,23 +1704,28 @@ settings_dialog()
 
     /* Map Directory. */
     gtk_table_attach(GTK_TABLE(table),
-            label = gtk_label_new("Cache Dir."),
+            label = gtk_label_new(_("Cache Dir.")),
             0, 1, 2, 3, GTK_FILL, 0, 2, 4);
     gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
     gtk_table_attach(GTK_TABLE(table),
-            txt_map_dir_name = gtk_entry_new(),
+            hbox = gtk_hbox_new(FALSE, 4),
             1, 2, 2, 3, GTK_EXPAND | GTK_FILL, 0, 2, 4);
-    gtk_entry_set_width_chars(GTK_ENTRY(txt_map_dir_name), 30);
+    gtk_box_pack_start(GTK_BOX(hbox),
+            txt_map_dir_name = gtk_entry_new(),
+            TRUE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(hbox),
+            btn_browse = gtk_button_new_with_label(_("Browse...")),
+            FALSE, FALSE, 0);
 
 
     /* Auto-Center page. */
     gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
             table = gtk_table_new(2, 2, FALSE),
-            label = gtk_label_new("Auto-Center"));
+            label = gtk_label_new(_("Auto-Center")));
 
     /* Auto-Center Sensitivity. */
     gtk_table_attach(GTK_TABLE(table),
-            label = gtk_label_new("Sensitivity"),
+            label = gtk_label_new(_("Sensitivity")),
             0, 1, 0, 1, GTK_FILL, 0, 2, 4);
     gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
     gtk_table_attach(GTK_TABLE(table),
@@ -1673,7 +1736,7 @@ settings_dialog()
 
     /* Lead Amount. */
     gtk_table_attach(GTK_TABLE(table),
-            label = gtk_label_new("Lead Amount"),
+            label = gtk_label_new(_("Lead Amount")),
             0, 1, 1, 2, GTK_FILL, 0, 2, 4);
     gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
     gtk_table_attach(GTK_TABLE(table),
@@ -1685,11 +1748,11 @@ settings_dialog()
     /* Announcement. */
     gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
             table = gtk_table_new(2, 3, FALSE),
-            label = gtk_label_new("Announce"));
+            label = gtk_label_new(_("Announce")));
 
     /* Announcement Advance Notice. */
     gtk_table_attach(GTK_TABLE(table),
-            label = gtk_label_new("Advance Notice"),
+            label = gtk_label_new(_("Advance Notice")),
             0, 1, 0, 1, GTK_FILL, 0, 2, 4);
     gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
     gtk_table_attach(GTK_TABLE(table),
@@ -1701,29 +1764,47 @@ settings_dialog()
     /* Enable Voice. */
     gtk_table_attach(GTK_TABLE(table),
             chk_enable_voice = gtk_check_button_new_with_label(
-                "Enable Voice Synthesis (requires flite)"),
+                _("Enable Voice Synthesis (requires flite)")),
             0, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_enable_voice),
             _enable_voice);
 
-    /* Voice Synthesis Path. */
-    gtk_table_attach(GTK_TABLE(table),
-            label = gtk_label_new("Voice Synth Path"),
-            0, 1, 2, 3, GTK_FILL, 0, 2, 4);
-    gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
+    /* Voice Speed and Pitch. */
     gtk_table_attach(GTK_TABLE(table),
-            txt_voice_synth_path = gtk_entry_new(),
-            1, 2, 2, 3, GTK_EXPAND | GTK_FILL, 0, 2, 4);
-    gtk_entry_set_width_chars(GTK_ENTRY(txt_voice_synth_path), 30);
+            hbox = gtk_hbox_new(FALSE, 12),
+            0, 2, 2, 3, 0, 0, 2, 6);
+    gtk_box_pack_start(GTK_BOX(hbox),
+            hbox2 = gtk_hbox_new(FALSE, 4),
+            TRUE, TRUE, 4);
+    gtk_box_pack_start(GTK_BOX(hbox2),
+            label = gtk_label_new(_("Speed")),
+            TRUE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(hbox2),
+            num_voice_speed = hildon_controlbar_new(),
+            TRUE, TRUE, 0);
+    hildon_controlbar_set_range(HILDON_CONTROLBAR(num_voice_speed), 1, 10);
+    force_min_visible_bars(HILDON_CONTROLBAR(num_voice_speed), 1);
+
+    gtk_box_pack_start(GTK_BOX(hbox),
+            hbox2 = gtk_hbox_new(FALSE, 4),
+            TRUE, TRUE, 4);
+    gtk_box_pack_start(GTK_BOX(hbox2),
+            label = gtk_label_new(_("Pitch")),
+            TRUE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(hbox2),
+            num_voice_pitch = hildon_controlbar_new(),
+            TRUE, TRUE, 0);
+    hildon_controlbar_set_range(HILDON_CONTROLBAR(num_voice_pitch), -2, 8);
+    force_min_visible_bars(HILDON_CONTROLBAR(num_voice_pitch), 1);
 
     /* Misc. page. */
     gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
             table = gtk_table_new(2, 2, FALSE),
-            label = gtk_label_new("Misc."));
+            label = gtk_label_new(_("Misc.")));
 
     /* Line Width. */
     gtk_table_attach(GTK_TABLE(table),
-            label = gtk_label_new("Line Width"),
+            label = gtk_label_new(_("Line Width")),
             0, 1, 0, 1, GTK_FILL, 0, 2, 4);
     gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
     gtk_table_attach(GTK_TABLE(table),
@@ -1735,9 +1816,15 @@ settings_dialog()
     /* Keep Display On Only When Fullscreen. */
     gtk_table_attach(GTK_TABLE(table),
             chk_always_keep_on = gtk_check_button_new_with_label(
-                "Keep Display On Only in Fullscreen Mode"),
+                _("Keep Display On Only in Fullscreen Mode")),
             0, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
 
+    /* Connect signals. */
+    browse_info.dialog = dialog;
+    browse_info.txt_map_dir_name = txt_map_dir_name;
+    g_signal_connect(G_OBJECT(btn_browse), "clicked",
+                      G_CALLBACK(settings_dialog_browse), &browse_info);
+
     /* Initialize fields. */
     if(_rcvr_mac)
         gtk_entry_set_text(GTK_ENTRY(txt_rcvr_mac), _rcvr_mac);
@@ -1746,7 +1833,7 @@ settings_dialog()
         scan_info.txt_rcvr_mac = txt_rcvr_mac;
         scan_info.scan_banner
             = hildon_banner_show_animation(dialog, NULL,
-                "Scanning for bluetooth devices");
+                _("Scanning for bluetooth devices"));
         scan_sid = gtk_idle_add((GSourceFunc)scan_bluetooth, &scan_info);
     }
     hildon_number_editor_set_value(HILDON_NUMBER_EDITOR(num_rcvr_chan),
@@ -1762,7 +1849,10 @@ settings_dialog()
             _lead_ratio);
     hildon_controlbar_set_value(HILDON_CONTROLBAR(num_announce_notice),
             _announce_notice_ratio);
-    gtk_entry_set_text(GTK_ENTRY(txt_voice_synth_path), _voice_synth_path);
+    hildon_controlbar_set_value(HILDON_CONTROLBAR(num_voice_speed),
+            (gint)(_voice_speed * 3 + 0.5));
+    hildon_controlbar_set_value(HILDON_CONTROLBAR(num_voice_pitch),
+            _voice_pitch);
     hildon_controlbar_set_value(HILDON_CONTROLBAR(num_draw_line_width),
             _draw_line_width);
     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chk_always_keep_on),
@@ -1775,7 +1865,7 @@ settings_dialog()
         if(!config_set_map_dir_name(gnome_vfs_expand_initial_tilde(
                 gtk_entry_get_text(GTK_ENTRY(txt_map_dir_name)))))
         {
-            popup_error("Could not create Map Cache directory.");
+            popup_error(_("Could not create Map Cache directory."));
             continue;
         }
 
@@ -1793,8 +1883,8 @@ settings_dialog()
             {
                 gtk_check_menu_item_set_active(
                         GTK_CHECK_MENU_ITEM(_menu_enable_gps_item), FALSE);
-                popup_error("No GPS Receiver MAC Provided.\n"
-                        "GPS Disabled.");
+                popup_error(_("No GPS Receiver MAC Provided.\n"
+                        "GPS Disabled."));
                 rcvr_changed = TRUE;
             }
         }
@@ -1843,13 +1933,15 @@ settings_dialog()
         _announce_notice_ratio = hildon_controlbar_get_value(
                 HILDON_CONTROLBAR(num_announce_notice));
 
+        _voice_speed = hildon_controlbar_get_value(
+                HILDON_CONTROLBAR(num_voice_speed)) / 3.0;
+
+        _voice_pitch = hildon_controlbar_get_value(
+                HILDON_CONTROLBAR(num_voice_pitch));
+
         _enable_voice = gtk_toggle_button_get_active(
                 GTK_TOGGLE_BUTTON(chk_enable_voice));
 
-        g_free(_voice_synth_path);
-        _voice_synth_path = g_strdup(gtk_entry_get_text(
-                    GTK_ENTRY(txt_voice_synth_path)));
-
         update_gcs();
 
         config_save();
@@ -1880,7 +1972,7 @@ config_init()
 
     if(!gconf_client)
     {
-        fprintf(stderr, "Failed to initialize GConf.  Aborting.\n");
+        popup_error(_("Failed to initialize GConf.  Quitting."));
         exit(1);
     }
 
@@ -1917,9 +2009,9 @@ config_init()
             tmp = g_strdup("~/apps/maemo-mapper");
         if(!config_set_map_dir_name(gnome_vfs_expand_initial_tilde(tmp)))
         {
-            popup_error("Could not create Map Cache directory.\n"
+            popup_error(_("Could not create Map Cache directory.\n"
                     "Please set a valid Map Cache directory in the Settings"
-                    " dialog box.");
+                    " dialog box."));
         }
         g_free(tmp);
     }
@@ -1966,11 +2058,25 @@ config_init()
     else
         _enable_voice = TRUE;
 
-    /* Get Voice Synthesis Path.  Default is /usr/bin/flite. */
-    _voice_synth_path = gconf_client_get_string(gconf_client,
-            GCONF_KEY_VOICE_SYNTH_PATH, NULL);
-    if(!_voice_synth_path)
-        _voice_synth_path = g_strdup("/usr/bin/flite");
+    /* Get Voice Speed - Default is 1.0. */
+    value = gconf_client_get(gconf_client, GCONF_KEY_VOICE_SPEED, NULL);
+    if(value)
+    {
+        _voice_speed = gconf_value_get_float(value);
+        gconf_value_free(value);
+    }
+    else
+        _voice_speed = 1.0;
+
+    /* Get Voice Speed - Default is 0. */
+    value = gconf_client_get(gconf_client, GCONF_KEY_VOICE_PITCH, NULL);
+    if(value)
+    {
+        _voice_pitch = gconf_value_get_int(value);
+        gconf_value_free(value);
+    }
+    else
+        _voice_pitch = 3;
 
     /* Get Always Keep On flag.  Default is FALSE. */
     _always_keep_on = gconf_client_get_bool(gconf_client,
@@ -2125,109 +2231,112 @@ menu_init()
 
     /* The "Routes" submenu. */
     gtk_menu_append(main_menu, menu_item
-            = gtk_menu_item_new_with_label("Route"));
+            = gtk_menu_item_new_with_label(_("Route")));
     gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
             submenu = gtk_menu_new());
     gtk_menu_append(submenu, _menu_route_open_item
-            = gtk_menu_item_new_with_label("Open..."));
+            = gtk_menu_item_new_with_label(_("Open...")));
     gtk_menu_append(submenu, _menu_route_download_item
-            = gtk_menu_item_new_with_label("Download..."));
+            = gtk_menu_item_new_with_label(_("Download...")));
     gtk_menu_append(submenu, _menu_route_save_item
-            = gtk_menu_item_new_with_label("Save..."));
+            = gtk_menu_item_new_with_label(_("Save...")));
     gtk_menu_append(submenu, _menu_route_reset_item
-        = gtk_menu_item_new_with_label("Reset"));
+        = gtk_menu_item_new_with_label(_("Reset")));
     gtk_menu_append(submenu, _menu_route_clear_item
-        = gtk_menu_item_new_with_label("Clear"));
+        = gtk_menu_item_new_with_label(_("Clear")));
 
     /* The "Track" submenu. */
     gtk_menu_append(main_menu, menu_item
-            = gtk_menu_item_new_with_label("Track"));
+            = gtk_menu_item_new_with_label(_("Track")));
     gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
             submenu = gtk_menu_new());
     gtk_menu_append(submenu, _menu_track_open_item
-            = gtk_menu_item_new_with_label("Open..."));
+            = gtk_menu_item_new_with_label(_("Open...")));
     gtk_menu_append(submenu, _menu_track_save_item
-            = gtk_menu_item_new_with_label("Save..."));
+            = gtk_menu_item_new_with_label(_("Save...")));
     gtk_menu_append(submenu, _menu_track_mark_way_item
-            = gtk_menu_item_new_with_label("Mark a Waypoint"));
+            = gtk_menu_item_new_with_label(_("Mark a Waypoint")));
     gtk_menu_append(submenu, _menu_track_clear_item
-            = gtk_menu_item_new_with_label("Clear"));
+            = gtk_menu_item_new_with_label(_("Clear")));
 
     gtk_menu_append(main_menu, menu_item
-            = gtk_menu_item_new_with_label("Maps"));
+            = gtk_menu_item_new_with_label(_("Maps")));
     gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
             submenu = gtk_menu_new());
     gtk_menu_append(submenu, _menu_maps_dlroute_item
-            = gtk_menu_item_new_with_label("Download Along Route"));
+            = gtk_menu_item_new_with_label(_("Download Along Route")));
     gtk_menu_append(submenu, _menu_maps_dlarea_item
-            = gtk_menu_item_new_with_label("Download Area..."));
+            = gtk_menu_item_new_with_label(_("Download Area...")));
     gtk_menu_append(submenu, _menu_auto_download_item
-            = gtk_check_menu_item_new_with_label("Auto-Download"));
+            = gtk_check_menu_item_new_with_label(_("Auto-Download")));
     gtk_check_menu_item_set_active(
             GTK_CHECK_MENU_ITEM(_menu_auto_download_item), _auto_download);
 
     gtk_menu_append(main_menu, gtk_separator_menu_item_new());
 
     gtk_menu_append(main_menu, menu_item
-            = gtk_menu_item_new_with_label("Show"));
+            = gtk_menu_item_new_with_label(_("Show")));
     gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
             submenu = gtk_menu_new());
     gtk_menu_append(submenu, _menu_show_routes_item
-            = gtk_check_menu_item_new_with_label("Route"));
+            = gtk_check_menu_item_new_with_label(_("Route")));
     gtk_check_menu_item_set_active(
             GTK_CHECK_MENU_ITEM(_menu_show_routes_item),
             _show_tracks & ROUTES_MASK);
     gtk_menu_append(submenu, _menu_show_tracks_item
-            = gtk_check_menu_item_new_with_label("Track"));
+            = gtk_check_menu_item_new_with_label(_("Track")));
     gtk_check_menu_item_set_active(
             GTK_CHECK_MENU_ITEM(_menu_show_tracks_item),
             _show_tracks & TRACKS_MASK);
     gtk_menu_append(submenu, _menu_show_velvec_item
-            = gtk_check_menu_item_new_with_label("Velocity Vector"));
+            = gtk_check_menu_item_new_with_label(_("Velocity Vector")));
     gtk_check_menu_item_set_active(
             GTK_CHECK_MENU_ITEM(_menu_show_velvec_item), _show_velvec);
 
     gtk_menu_append(main_menu, menu_item
-            = gtk_menu_item_new_with_label("Auto-Center"));
+            = gtk_menu_item_new_with_label(_("Auto-Center")));
     gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item),
             submenu = gtk_menu_new());
     gtk_menu_append(submenu, _menu_ac_latlon_item
-            = gtk_radio_menu_item_new_with_label(NULL, "Lat/Lon"));
+            = gtk_radio_menu_item_new_with_label(NULL, _("Lat/Lon")));
     gtk_check_menu_item_set_active(
             GTK_CHECK_MENU_ITEM(_menu_ac_latlon_item),
             _center_mode == CENTER_LATLON);
     gtk_menu_append(submenu, _menu_ac_lead_item
             = gtk_radio_menu_item_new_with_label_from_widget(
-                GTK_RADIO_MENU_ITEM(_menu_ac_latlon_item), "Lead"));
+                GTK_RADIO_MENU_ITEM(_menu_ac_latlon_item), _("Lead")));
     gtk_check_menu_item_set_active(
             GTK_CHECK_MENU_ITEM(_menu_ac_lead_item),
             _center_mode == CENTER_LEAD);
     gtk_menu_append(submenu, _menu_ac_none_item
             = gtk_radio_menu_item_new_with_label_from_widget(
-                GTK_RADIO_MENU_ITEM(_menu_ac_latlon_item), "None"));
+                GTK_RADIO_MENU_ITEM(_menu_ac_latlon_item), _("None")));
     gtk_check_menu_item_set_active(
             GTK_CHECK_MENU_ITEM(_menu_ac_none_item),
             _center_mode < 0);
 
     gtk_menu_append(main_menu, _menu_fullscreen_item
-            = gtk_check_menu_item_new_with_label("Full Screen"));
+            = gtk_check_menu_item_new_with_label(_("Full Screen")));
     gtk_check_menu_item_set_active(
             GTK_CHECK_MENU_ITEM(_menu_fullscreen_item), _fullscreen);
 
     gtk_menu_append(main_menu, _menu_enable_gps_item
-            = gtk_check_menu_item_new_with_label("Enable GPS"));
+            = gtk_check_menu_item_new_with_label(_("Enable GPS")));
     gtk_check_menu_item_set_active(
             GTK_CHECK_MENU_ITEM(_menu_enable_gps_item), _enable_gps);
 
     gtk_menu_append(main_menu, gtk_separator_menu_item_new());
 
     gtk_menu_append(main_menu, _menu_settings_item
-        = gtk_menu_item_new_with_label("Settings..."));
+        = gtk_menu_item_new_with_label(_("Settings...")));
 
     gtk_menu_append(main_menu, gtk_separator_menu_item_new());
 
+    gtk_menu_append(main_menu, _menu_help_item
+        = gtk_menu_item_new_with_label(_("Help")));
+
     gtk_menu_append(main_menu, _menu_close_item
-        = gtk_menu_item_new_with_label("Close"));
+        = gtk_menu_item_new_with_label(_("Close")));
 
     /* We need to show menu items. */
     gtk_widget_show_all(GTK_WIDGET(main_menu));
@@ -2277,6 +2386,8 @@ menu_init()
                       G_CALLBACK(menu_cb_auto_download), NULL);
     g_signal_connect(G_OBJECT(_menu_settings_item), "activate",
                       G_CALLBACK(menu_cb_settings), NULL);
+    g_signal_connect(G_OBJECT(_menu_help_item), "activate",
+                      G_CALLBACK(menu_cb_help), NULL);
     g_signal_connect(G_OBJECT(_menu_close_item), "activate",
                       G_CALLBACK(gtk_main_quit), NULL);
 
@@ -2585,7 +2696,7 @@ map_initiate_download(gchar *buffer, guint tilex, guint tiley, guint zoom)
     g_hash_table_insert(_downloads_hash, pui, pui);
     if(!_num_downloads++ && !_download_banner)
         _download_banner = hildon_banner_show_progress(
-                _window, NULL, "Downloading maps");
+                _window, NULL, _("Downloading maps"));
 
     vprintf("%s(): return\n", __PRETTY_FUNCTION__);
     return TRUE;
@@ -3318,9 +3429,9 @@ open_file(gchar **bytes_out, GnomeVFSHandle **handle_out, gint *size_out,
                             GNOME_VFS_OPEN_WRITE, FALSE, 0664))))
         {
             gchar buffer[1024];
-            sprintf(buffer, "Failed to open file for %s.\n%s",
+            sprintf(buffer, _("Failed to open file for %s.\n%s"),
                     chooser_action == GTK_FILE_CHOOSER_ACTION_OPEN
-                    ? "reading" : "writing",
+                    ? _("reading") : _("writing"),
                     gnome_vfs_result_to_string(vfs_result));
             popup_error(buffer);
         }
@@ -3671,7 +3782,7 @@ maemo_mapper_init(gint argc, gchar **argv)
                         file_uri, &size, &buffer)))
         {
             gchar buffer[1024];
-            sprintf(buffer, "Failed to open file for reading.\n%s",
+            sprintf(buffer, _("Failed to open file for reading.\n%s"),
                     gnome_vfs_result_to_string(vfs_result));
             popup_error(buffer);
         }
@@ -3679,9 +3790,10 @@ maemo_mapper_init(gint argc, gchar **argv)
         {
             /* If auto is enabled, append the route, otherwise replace it. */
             if(parse_gpx(buffer, size, &_route, 0, 0))
-                hildon_banner_show_information(_window, NULL, "Route Opened");
+                hildon_banner_show_information(
+                        _window, NULL, _("Route Opened"));
             else
-                popup_error("Error parsing GPX file.");
+                popup_error(_("Error parsing GPX file."));
             g_free(buffer);
         }
         g_free(file_uri);
@@ -3710,7 +3822,7 @@ main(gint argc, gchar *argv[])
     g_thread_init(NULL);
 
     /* Initialize _osso. */
-    _osso = osso_initialize("maemo_mapper", VERSION, TRUE, NULL);
+    _osso = osso_initialize("com.gnuite.maemo_mapper", VERSION, TRUE, NULL);
     if(!_osso)
     {
         fprintf(stderr, "osso_initialize failed.\n");
@@ -4024,9 +4136,9 @@ channel_cb_connect(GIOChannel *src, GIOCondition condition, gpointer data)
     (tofill) = strtol((str), &error_check, 10); \
     if(error_check == (str)) \
     { \
-        fprintf(stderr, "Failed to parse string as int: %s\n", str); \
+        fprintf(stderr, _("Failed to parse string as int: %s\n"), str); \
         hildon_banner_show_information(_window, NULL, \
-                "Invalid NMEA input from receiver!"); \
+                _("Invalid NMEA input from receiver!")); \
         return; \
     } \
 }
@@ -4035,9 +4147,9 @@ channel_cb_connect(GIOChannel *src, GIOCondition condition, gpointer data)
     (tofill) = g_ascii_strtod((str), &error_check); \
     if(error_check == (str)) \
     { \
-        fprintf(stderr, "Failed to parse string as float: %s\n", str); \
+        fprintf(stderr, _("Failed to parse string as float: %s\n"), str); \
         hildon_banner_show_information(_window, NULL, \
-                "Invalid NMEA input from receiver!"); \
+                _("Invalid NMEA input from receiver!")); \
         return; \
     } \
 }
@@ -4311,7 +4423,7 @@ menu_cb_route_download(GtkAction *action)
     gint size;
     printf("%s()\n", __PRETTY_FUNCTION__);
 
-    dialog = gtk_dialog_new_with_buttons("Download Route",
+    dialog = gtk_dialog_new_with_buttons(_("Download Route"),
             GTK_WINDOW(_window), GTK_DIALOG_MODAL,
             GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
             GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
@@ -4333,17 +4445,17 @@ menu_cb_route_download(GtkAction *action)
             0, 2, 0, 1, 0, 0, 2, 4);
     gtk_box_pack_start(GTK_BOX(hbox),
             chk_gps = gtk_check_button_new_with_label(
-                "Use GPS Location"),
+                _("Use GPS Location")),
             TRUE, TRUE, 0);
     gtk_box_pack_start(GTK_BOX(hbox),
             chk_auto = gtk_check_button_new_with_label(
-                "Auto-Update"),
+                _("Auto-Update")),
             TRUE, TRUE, 0);
     gtk_widget_set_sensitive(chk_auto, FALSE);
 
     /* Origin. */
     gtk_table_attach(GTK_TABLE(table),
-            label = gtk_label_new("Origin"),
+            label = gtk_label_new(_("Origin")),
             0, 1, 1, 2, GTK_FILL, 0, 2, 4);
     gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
     gtk_table_attach(GTK_TABLE(table),
@@ -4354,7 +4466,7 @@ menu_cb_route_download(GtkAction *action)
 
     /* Destination. */
     gtk_table_attach(GTK_TABLE(table),
-            label = gtk_label_new("Destination"),
+            label = gtk_label_new(_("Destination")),
             0, 1, 2, 3, GTK_FILL, 0, 2, 4);
     gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
     gtk_table_attach(GTK_TABLE(table),
@@ -4363,9 +4475,9 @@ menu_cb_route_download(GtkAction *action)
     gtk_entry_set_completion(GTK_ENTRY(txt_to), to_comp);
     gtk_entry_set_width_chars(GTK_ENTRY(txt_to), 25);
 
-    g_signal_connect(G_OBJECT(chk_gps), "toggled",
+    g_signal_connect(G_OBJECT(chk_gps), _("toggled"),
                       G_CALLBACK(gps_toggled_from), txt_from);
-    g_signal_connect(G_OBJECT(chk_gps), "toggled",
+    g_signal_connect(G_OBJECT(chk_gps), _("toggled"),
                       G_CALLBACK(gps_toggled_auto), chk_auto);
 
     /* Initialize fields. */
@@ -4385,14 +4497,14 @@ menu_cb_route_download(GtkAction *action)
         from = gtk_entry_get_text(GTK_ENTRY(txt_from));
         if(!strlen(from))
         {
-            popup_error("Please specify a start location.");
+            popup_error(_("Please specify a start location."));
             continue;
         }
 
         to = gtk_entry_get_text(GTK_ENTRY(txt_to));
         if(!strlen(to))
         {
-            popup_error("Please specify an end location.");
+            popup_error(_("Please specify an end location."));
             continue;
         }
 
@@ -4408,15 +4520,15 @@ menu_cb_route_download(GtkAction *action)
                         buffer, &size, &bytes)))
         {
             gchar buffer[1024];
-            sprintf(buffer, "Failed to connect to GPX Directions server.\n%s",
+            sprintf(buffer,_("Failed to connect to GPX Directions server.\n%s"),
                     gnome_vfs_result_to_string(vfs_result));
             popup_error(buffer);
         }
         else if(strncmp(bytes, "<?xml", strlen("<?xml")))
         {
             /* Not an XML document - must be bad locations. */
-            popup_error("Could not generate directions. Make sure your "
-                    "locations are valid.");
+            popup_error(_("Could not generate directions. Make sure your "
+                    "locations are valid."));
             g_free(bytes);
             bytes = NULL;
         }
@@ -4466,11 +4578,15 @@ menu_cb_route_download(GtkAction *action)
                 }
 
                 hildon_banner_show_information(_window, NULL,
-                        "Route Downloaded");
+                        _("Route Downloaded"));
+                g_free(bytes);
             }
             else
-                popup_error("Error parsing GPX file.");
-            g_free(bytes);
+            {
+                popup_error(_("Error parsing GPX file."));
+                g_free(bytes);
+                bytes = NULL; /* Let them try again. */
+            }
         }
     }
 
@@ -4500,10 +4616,10 @@ menu_cb_route_open(GtkAction *action)
 
             map_force_redraw();
             hildon_banner_show_information(_window, NULL,
-                    "Route Opened");
+                    _("Route Opened"));
         }
         else
-            popup_error("Error parsing GPX file.");
+            popup_error(_("Error parsing GPX file."));
         g_free(buffer);
     }
 
@@ -4551,10 +4667,10 @@ menu_cb_track_open(GtkAction *action)
         if(parse_gpx(buffer, size, &_track, -1, ARRAY_CHUNK_SIZE))
         {
             map_force_redraw();
-            hildon_banner_show_information(_window, NULL, "Track Opened");
+            hildon_banner_show_information(_window, NULL, _("Track Opened"));
         }
         else
-            popup_error("Error parsing GPX file.");
+            popup_error(_("Error parsing GPX file."));
         g_free(buffer);
     }
 
@@ -4569,8 +4685,8 @@ menu_cb_track_open(GtkAction *action)
                     handle, (string), strlen((string)), &size))) \
     { \
         gchar buffer[1024]; \
-        sprintf(buffer, "Error while writing to file:\n%s\n" \
-                        "File is incomplete.", \
+        sprintf(buffer, _("Error while writing to file:\n%s\n" \
+                        "File is incomplete."), \
                 gnome_vfs_result_to_string(vfs_result)); \
         popup_error(buffer); \
         return FALSE; \
@@ -4659,9 +4775,9 @@ menu_cb_track_save(GtkAction *action)
                     GTK_FILE_CHOOSER_ACTION_SAVE))
     {
         if(write_gpx(handle, &_track))
-            hildon_banner_show_information(_window, NULL, "Track Saved");
+            hildon_banner_show_information(_window, NULL, _("Track Saved"));
         else
-            popup_error("Error writing GPX file.");
+            popup_error(_("Error writing GPX file."));
         gnome_vfs_close(handle);
     }
 
@@ -4679,7 +4795,7 @@ menu_cb_track_mark_way(GtkAction *action)
     {
         guint x1, y1;
         _track.wtail->point = _track.tail;
-        _track.wtail->desc = g_strdup("Track Waypoint");
+        _track.wtail->desc = g_strdup(_("Track Waypoint"));
         
         /** Instead of calling map_render_tracks(), we'll just add the waypoint
          * ourselves. */
@@ -4712,9 +4828,9 @@ menu_cb_route_save(GtkAction *action)
                     GTK_FILE_CHOOSER_ACTION_SAVE))
     {
         if(write_gpx(handle, &_route))
-            hildon_banner_show_information(_window, NULL, "Route Saved");
+            hildon_banner_show_information(_window, NULL, _("Route Saved"));
         else
-            popup_error("Error writing GPX file.");
+            popup_error(_("Error writing GPX file."));
         gnome_vfs_close(handle);
     }
 
@@ -4747,13 +4863,15 @@ menu_cb_show_tracks(GtkAction *action)
         _show_tracks |= TRACKS_MASK;
         map_render_tracks();
         MACRO_QUEUE_DRAW_AREA();
-        hildon_banner_show_information(_window, NULL, "Tracks are now shown");
+        hildon_banner_show_information(
+                _window, NULL, _("Tracks are now shown"));
     }
     else
     {
         _show_tracks &= ~TRACKS_MASK;
         map_force_redraw();
-        hildon_banner_show_information(_window, NULL, "Tracks are now hidden");
+        hildon_banner_show_information(
+                _window, NULL, _("Tracks are now hidden"));
     }
 
     vprintf("%s(): return\n", __PRETTY_FUNCTION__);
@@ -4771,13 +4889,15 @@ menu_cb_show_routes(GtkAction *action)
         _show_tracks |= ROUTES_MASK;
         map_render_tracks();
         MACRO_QUEUE_DRAW_AREA();
-        hildon_banner_show_information(_window, NULL, "Routes are now shown");
+        hildon_banner_show_information(
+                _window, NULL, _("Routes are now shown"));
     }
     else
     {
         _show_tracks &= ~ROUTES_MASK;
         map_force_redraw();
-        hildon_banner_show_information(_window, NULL, "Routes are now hidden");
+        hildon_banner_show_information(
+                _window, NULL, "Routes are now hidden");
     }
 
     vprintf("%s(): return\n", __PRETTY_FUNCTION__);
@@ -4804,7 +4924,7 @@ menu_cb_ac_lead(GtkAction *action)
     printf("%s()\n", __PRETTY_FUNCTION__);
 
     _center_mode = CENTER_LEAD;
-    hildon_banner_show_information(_window, NULL, "Auto-Center Mode: Lead");
+    hildon_banner_show_information(_window, NULL, _("Auto-Center Mode: Lead"));
     MACRO_RECALC_CENTER(new_center_unitx, new_center_unity);
     map_center_unit(new_center_unitx, new_center_unity);
 
@@ -4819,7 +4939,7 @@ menu_cb_ac_latlon(GtkAction *action)
     printf("%s()\n", __PRETTY_FUNCTION__);
 
     _center_mode = CENTER_LATLON;
-    hildon_banner_show_information(_window, NULL, "Auto-Center Mode: Lat/Lon");
+    hildon_banner_show_information(_window, NULL, _("Auto-Center Mode: Lat/Lon"));
     MACRO_RECALC_CENTER(new_center_unitx, new_center_unity);
     map_center_unit(new_center_unitx, new_center_unity);
 
@@ -4833,7 +4953,7 @@ menu_cb_ac_none(GtkAction *action)
     printf("%s()\n", __PRETTY_FUNCTION__);
 
     _center_mode = -_center_mode;
-    hildon_banner_show_information(_window, NULL, "Auto-Center Off");
+    hildon_banner_show_information(_window, NULL, _("Auto-Center Off"));
 
     vprintf("%s(): return\n", __PRETTY_FUNCTION__);
     return TRUE;
@@ -4939,38 +5059,39 @@ menu_cb_maps_dlarea(GtkAction *action)
     guint i;
     printf("%s()\n", __PRETTY_FUNCTION__);
 
-    dialog = gtk_dialog_new_with_buttons("Download Maps by Area",
+    dialog = gtk_dialog_new_with_buttons(_("Download Maps by Area"),
             GTK_WINDOW(_window), GTK_DIALOG_MODAL,
             GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
-            GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
             NULL);
 
     gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
-            button = gtk_button_new_with_label("Clear"));
-
+            button = gtk_button_new_with_label(_("Clear")));
     g_signal_connect(G_OBJECT(button), "clicked",
                       G_CALLBACK(dlarea_clear), &dlarea_info);
 
+    gtk_dialog_add_button(GTK_DIALOG(dialog),
+            GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
+
     gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
             dlarea_info.notebook = gtk_notebook_new(), TRUE, TRUE, 0);
     
     gtk_notebook_append_page(GTK_NOTEBOOK(dlarea_info.notebook),
             table = gtk_table_new(2, 3, FALSE),
-            label = gtk_label_new("Area"));
+            label = gtk_label_new(_("Area")));
 
     /* Clear button and Label Columns. */
     gtk_table_attach(GTK_TABLE(table),
-            label = gtk_label_new("Latitude"),
+            label = gtk_label_new(_("Latitude")),
             1, 2, 0, 1, GTK_FILL, 0, 4, 0);
     gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
     gtk_table_attach(GTK_TABLE(table),
-            label = gtk_label_new("Longitude"),
+            label = gtk_label_new(_("Longitude")),
             2, 3, 0, 1, GTK_FILL, 0, 4, 0);
     gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
 
     /* GPS. */
     gtk_table_attach(GTK_TABLE(table),
-            label = gtk_label_new("GPS Location"),
+            label = gtk_label_new(_("GPS Location")),
             0, 1, 1, 2, GTK_FILL, 0, 4, 0);
     gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
     gtk_table_attach(GTK_TABLE(table),
@@ -4986,7 +5107,7 @@ menu_cb_maps_dlarea(GtkAction *action)
 
     /* Center. */
     gtk_table_attach(GTK_TABLE(table),
-            label = gtk_label_new("View Center"),
+            label = gtk_label_new(_("View Center")),
             0, 1, 2, 3, GTK_FILL, 0, 4, 0);
     gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
     gtk_table_attach(GTK_TABLE(table),
@@ -5005,7 +5126,7 @@ menu_cb_maps_dlarea(GtkAction *action)
 
     /* Top Left. */
     gtk_table_attach(GTK_TABLE(table),
-            label = gtk_label_new("Top-Left"),
+            label = gtk_label_new(_("Top-Left")),
             0, 1, 3, 4, GTK_FILL, 0, 4, 0);
     gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
     gtk_table_attach(GTK_TABLE(table),
@@ -5019,7 +5140,7 @@ menu_cb_maps_dlarea(GtkAction *action)
 
     /* Bottom Right. */
     gtk_table_attach(GTK_TABLE(table),
-            label = gtk_label_new("Bottom-Right"),
+            label = gtk_label_new(_("Bottom-Right")),
             0, 1, 4, 5, GTK_FILL, 0, 4, 0);
     gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
     gtk_table_attach(GTK_TABLE(table),
@@ -5034,10 +5155,10 @@ menu_cb_maps_dlarea(GtkAction *action)
 
     gtk_notebook_append_page(GTK_NOTEBOOK(dlarea_info.notebook),
             table = gtk_table_new(5, 5, FALSE),
-            label = gtk_label_new("Zoom"));
+            label = gtk_label_new(_("Zoom")));
     gtk_table_attach(GTK_TABLE(table),
             label = gtk_label_new(
-                "Zoom Levels to Download: (0 -> most detail)"),
+                _("Zoom Levels to Download: (0 -> most detail)")),
             0, 5, 0, 1, GTK_FILL, 0, 4, 0);
     gtk_misc_set_alignment(GTK_MISC(label), 0.f, 0.5f);
     for(i = 0; i < MAX_ZOOM; i++)
@@ -5093,28 +5214,28 @@ menu_cb_maps_dlarea(GtkAction *action)
         text = gtk_entry_get_text(GTK_ENTRY(dlarea_info.txt_topleft_lat));
         start_lat = strtof(text, &error_check);
         if(text == error_check) {
-            popup_error("Invalid Top-Left Latitude");
+            popup_error(_("Invalid Top-Left Latitude"));
             continue;
         }
 
         text = gtk_entry_get_text(GTK_ENTRY(dlarea_info.txt_topleft_lon));
         start_lon = strtof(text, &error_check);
         if(text == error_check) {
-            popup_error("Invalid Top-Left Longitude");
+            popup_error(_("Invalid Top-Left Longitude"));
             continue;
         }
 
         text = gtk_entry_get_text(GTK_ENTRY(dlarea_info.txt_botright_lat));
         end_lat = strtof(text, &error_check);
         if(text == error_check) {
-            popup_error("Invalid Bottom-Right Latitude");
+            popup_error(_("Invalid Bottom-Right Latitude"));
             continue;
         }
 
         text = gtk_entry_get_text(GTK_ENTRY(dlarea_info.txt_botright_lon));
         end_lon = strtof(text, &error_check);
         if(text == error_check) {
-            popup_error("Invalid Bottom-Right Longitude");
+            popup_error(_("Invalid Bottom-Right Longitude"));
             continue;
         }
 
@@ -5152,7 +5273,8 @@ menu_cb_maps_dlarea(GtkAction *action)
         }
         text = gtk_entry_get_text(GTK_ENTRY(dlarea_info.txt_topleft_lat));
 
-        sprintf(buffer, "Confirm download of %d maps\n(up to about %.2f MB)\n",
+        sprintf(buffer,
+                _("Confirm download of %d maps\n(up to about %.2f MB)\n"),
                 num_maps,
                 num_maps * (strstr(_map_uri_format, "%s") ? 18e-3 : 6e-3));
         text = gtk_entry_get_text(GTK_ENTRY(dlarea_info.txt_topleft_lat));
@@ -5226,8 +5348,8 @@ menu_cb_enable_gps(GtkAction *action)
         }
         else
         {
-            popup_error("Cannot enable GPS until a GPS Receiver MAC "
-                    "is set in the Settings dialog box.");
+            popup_error(_("Cannot enable GPS until a GPS Receiver MAC "
+                    "is set in the Settings dialog box."));
             gtk_check_menu_item_set_active(
                     GTK_CHECK_MENU_ITEM(_menu_enable_gps_item), FALSE);
         }
@@ -5281,6 +5403,21 @@ menu_cb_settings(GtkAction *action)
     return TRUE;
 }
 
+static gboolean
+menu_cb_help(GtkAction *action)
+{
+    printf("%s()\n", __PRETTY_FUNCTION__);
+
+    printf("ossohelp_show(%s): %d\n", HELP_ID_INTRO,
+            ossohelp_show(_osso, HELP_ID_INTRO, OSSO_HELP_SHOW_DIALOG));
+    printf("%d = OSSO_ERROR\n", OSSO_ERROR);
+    printf("%d = OSSO_RPC_ERROR\n", OSSO_RPC_ERROR);
+    printf("%d = OSSO_INVALID\n", OSSO_INVALID);
+
+    vprintf("%s(): return\n", __PRETTY_FUNCTION__);
+    return TRUE;
+}
+
 static gboolean
 map_download_idle_refresh(ProgressUpdateInfo *pui)
 {