summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--AUTHORS2
-rw-r--r--COPYING340
-rw-r--r--ChangeLog319
-rw-r--r--FAQ31
-rw-r--r--INSTALL182
-rw-r--r--Makefile.am26
-rw-r--r--NEWS353
-rw-r--r--README57
-rw-r--r--TODO54
-rwxr-xr-xautogen.sh22
-rw-r--r--configure.in82
-rw-r--r--cvs-notes59
-rw-r--r--data/Makefile.am54
-rwxr-xr-xdata/cups-gfax32
-rw-r--r--data/gfax.desktop.in10
-rw-r--r--data/gfax.schemas.in286
-rw-r--r--data/gfax.spec95
-rw-r--r--data/icons/16x16/Makefile.am8
-rw-r--r--data/icons/16x16/gfax.pngbin0 -> 29726 bytes
-rw-r--r--data/icons/48x48/Makefile.am9
-rw-r--r--data/icons/48x48/gfax.pngbin0 -> 2547 bytes
-rw-r--r--data/icons/Makefile.am16
-rw-r--r--data/icons/scalable/Makefile.am8
-rw-r--r--data/icons/scalable/gfax.svg1248
-rwxr-xr-xgfax.in37
-rw-r--r--glade/gfax.glade5532
-rw-r--r--glade/send-druid.glade1241
-rw-r--r--intltool-extract.in875
-rw-r--r--intltool-merge.in1506
-rw-r--r--intltool-update.in1166
-rw-r--r--po/POTFILES.in20
-rw-r--r--po/de.po1244
-rw-r--r--po/en_CA.po1606
-rw-r--r--po/it.po1598
-rw-r--r--po/lv.po1569
-rw-r--r--po/nl.po1686
-rwxr-xr-xsrc/Defines.cs.in12
-rwxr-xr-xsrc/Makefile.am69
-rwxr-xr-xsrc/efax.cs605
-rwxr-xr-xsrc/evolution.cs134
-rwxr-xr-xsrc/fax.cs501
-rwxr-xr-xsrc/gfaxphonebook.cs498
-rwxr-xr-xsrc/gfaxprefs.cs302
-rw-r--r--src/gfaxsend.cs364
-rwxr-xr-xsrc/gui.cs1137
-rwxr-xr-xsrc/guitools.cs540
-rwxr-xr-xsrc/hylafax.cs950
-rw-r--r--src/main.cs243
-rwxr-xr-xsrc/newphonebook.cs187
-rwxr-xr-xsrc/phonebook.cs386
-rwxr-xr-xsrc/sendphonebook.cs242
51 files changed, 27543 insertions, 0 deletions
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..c985385
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,2 @@
+George Farris <farrisg@shaw.ca> - Main author
+Johannes Rohr <johannes@rohr.org> - German translation
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..d60c31a
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 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 Library 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
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..5e1ff49
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,319 @@
+0.7.7 release
+-------------
+2008-05-23 George Farris <george@gmsys.com>
+ *remove gfaxlpr script
+ *add cups backend cups-gfax script
+ *remove FAQ item about OpenOffice printer, Gfax should now work
+ with all cups enable software.
+
+2008-05-09 George Farris <george@gmsys.com>
+ *remove gnomeprint dependency
+ *added fax tracing menu item to debug trasmit agent problems
+ *added notification icon and system to work with cups printer
+ *updated everything to GPLv3
+
+2007-11-06 Martin Szulecki <gfax@sukimashita.com>
+ *fix toolbar to respect user's style
+ *use icon's from icon naming spec
+ *Remove G_About and use Gtk.AboutDialog
+ *enable column sorting in every treeview
+ *use DateTime.ParseExact for date string parsing
+ *add new column showing an icon related to the job status
+ *evolution import uses all fax contact fields now, not just BusinessFax
+ *fix alignment of column data
+ *improve liststore data logic
+ *display a human readable localized date in related columns
+ *fix job modification failing due to invalid transmitted job id
+ *fix autofoo for lib64 builds
+ *fix schema install killing gconfd
+ *update language files to changes
+ *trim all values when parsing queues
+ *hide some debug output into macros
+ *make G_ListView more generic and add column helpers for DateTime and Icons
+ *increase size of sender in job format to prevent cutting long sender names
+ *add prototype of new gfax tango icon
+
+0.7.6 release
+-------------
+2006-12-02 George Farris <george@gmsys.com>
+ *updated de.po translations
+ *added lv.po translations
+ *added it.po translations
+
+2006-11-29 George Farris <george@gmsys.com>
+ *added efax send status to the main window status view
+ *made the main window progressbar pulse when sending fax via efax
+
+2006-11-27 George Farris <george@gmsys.com>
+ *fix add button not enabled if adding just numbers to the phonebook
+
+2006-11-25 George Farris <george@gmsys.com>
+ *fix sending of busy faxes with efax, would only try once
+
+2006-11-17 George Farris <george@gmsys.com>
+ *added double click to view a received fax
+ *don't try to open a non existing phonebook file
+ *can now select all received faxes and delete them
+ *added double click to job modify in send tab
+ *fix callback event args for various gtk widgets
+
+2006-11-16 George Farris <george@gmsys.com>
+ *remove gfax.proc file use, interact with gui directly
+ *pulse progress bar when sending fax via efax
+ *update appbar line when sending fax via efax
+
+2006-11-14 George Farris <george@gmsys.com>
+ *change default queue auto refresh to 30 seconds.
+ *added check for permission to read fax from server, otherwise would hang
+ *fix bug with efax sending
+2006-11-14 Jean Louis argente <silver84000 at gmail.com>
+ *fix bug with ghostscript conversion
+
+2006-11-10 George Farris <george@gmsys.com>
+ *updated major network traffic to async operations
+ *when switching tabs make sure server status is updated in addition to queue
+ *make main progressbar show that there is network action
+ *fixed send time bug, was sending in the past
+
+2006-10-30 George Farris <george@gmsys.com>
+ *updated debian control file with proper dependancies
+
+2006-10-29 George Farris <george@gmsys.com>
+ *remove depreciated Gnome.About and start using Gtk.AboutDialog
+ *remove depreciated OptionMenu and use ComboBox
+
+2006-10-27 George Farris <george@gmsys.com>
+ *removed all Mgetty support - never really was there anyway:-)
+
+2006-10-27 Bart Verstraete <bartverstraete@telenet.be>
+ *added Dutch translation
+
+
+0.7.5 release
+-------------
+2006-10-25 George Farris <george@gmsys.com>
+ *added progressbar to main window for receiving faxes to view/print
+
+2006-10-23 George Farris <george@gmsys.com>
+ *added ability to download a fax from a hylafax server and view it
+ *fix - modify job was not changing phone number
+ *added delete button for received faxes
+
+2006-10-16 George Farris <george@gmsys.com>
+ *added "fax_viewer" schema item for viewing received faxes
+ *added fax viewer preference
+ *job cancel button should not be sensitive if no jobs selected on startup
+
+2006-08-31 George Farris <george@gmsys.com>
+ *changed all Mono.Posix modules to Mono.Unix
+ *added check for libgnomeprint dev package in configure.in
+
+
+0.7.4 release (Never really happend, is actually 0.7.5)
+-------------
+2005-12-22 George Farris <george@gmsys.com>
+ *added ability to modify a Hylafax job.
+
+2005-12-19 George Farris <george@gmsys.com>
+ *moved /var/spool/gfax to ~/.local/share/gfax/spool
+
+2005-12-16 George Farris <george@gmsys.com>
+ *added Evolution address book support (read only)
+ *fix crasher bug if entering text in "Current Phone Book" entry
+
+2005-12-09 George Farris <george@gmsys.com>
+ *fix return of no contacts, should have been 0 not null
+ *rename Contact class to GfaxContact so it doesn't conflict with Evolution
+
+2005-12-09 George Farris <george@gmsys.com>
+ *ported to new gtk-sharp-2.x api.
+ *changed gtk.combo widget to gtk.combobox, gtk.combo is depreciated
+ *updated to new file dialog in Gtk-2.x
+ *added shortcut for "New Fax"
+ *added error dialog if fax number is empty when "Send" is hit.
+ *removed preferences button, added Edit menu with preferences.
+
+2005-12-02 George Farris <george@gmsys.com>
+ *change gfax.proc file location to ~/.local/share/gfax/gfax.proc .
+ *deleted many unused variables
+ *automatically migrate phone books from ~/.etc/gfax to ~/.config/gfax.
+
+0.7.3 release
+-------------
+2005-02-28 George Farris <george@gmsys.com>
+ *Updated German translations.
+ *Removed listview tooltip, no longer required.
+
+0.7.2 release
+-------------
+2005-02-17 George Farris <george@gmsys.com>
+ *fix /tmp/gfax.proc file name creation race.
+ *fix Hylafax receive queue display.
+ *update make deb script
+ *add German translation.
+
+0.7.1 release
+-------------
+2005-02-17 George Farris <george@gmsys.com>
+ *fix menu bug.
+
+0.7.0 release
+-------------
+2005-02-15 George Farris <george@gmsys.com>
+ * Major point release please see the News file.
+
+0.6.3 release
+-------------
+2004-06-29 George Farris <george@gmsys.com>
+ *fix phone book typo.
+
+0.6.2 release
+-------------
+2004-06-29 George Farris <george@gmsys.com>
+ *fix phone number and org were swapped when sending a fax.
+
+0.6.1 release
+-------------
+2004-06-25 George Farris <george@gmsys.com>
+ *port to mono-beta3
+
+0.6.0 Point release
+-------------------
+2004-03-13 George Farris <george@gmsys.com>
+ *added user/password authentication in Hylafax.
+ *added check for existance of the SPOOLDIR directory
+ *make phone number have focus in send fax druid.
+ *run the main app after sending a fax with the wizard.
+
+2004-03-12 George Farris <george@gmsys.com>
+ *added delayed faxing sending capability
+ *set default icons for menu items.
+ *changed gfax.glade and send-druid.glade to support delayed faxing.
+ *added gconf key for storing hylafax password.
+
+2004-03-10 George Farris <george@gmsys.com>
+ *added "Send At" column to queue display.
+
+2004-03-06 George Farris <george@gmsys.com>
+ *Code cancel fax function in progressbar.
+
+2004-03-06 George Farris <george@gmsys.com>
+ *ported code to gtk#-0.17, minor changes in treeview code.
+
+Beta 9 release
+--------------
+2004-03-01 George Farris <george@gmsys.com>
+ *display number of send jobs in window title.
+ *added toggle to send fax window. you can now deselect numbers.
+ *addded queue selection to "Jobs" menu.
+ *when deleting jobs from a the Done queue it is refeshed properly.
+
+2004-02-29 George Farris <george@gmsys.com>
+ *added refresh queue status message to appbar if auto refresh.
+ *start auto refresh on program startup if enabled.
+
+2004-02-21 George Farris <george@gmsys.com>
+ *change socket read code so all data will be read in hylafax.cs
+ *added number of jobs in the queue to the status bar.
+
+Beta 8 release
+--------------
+2004-02-18 George Farris <george@gmsys.com>
+ *fix bug: send fax wizard didn't work with number from entry box.
+ *don't send the file to the fax server if no destinations set.
+
+2004-02-15 George Farris <george@gmsys.com>
+ *fix bug: add GConf.PropertyEditors.EditorShell shell in send class.
+
+
+Beta 7 release
+--------------
+2004-02-11 George Farris <george@gmsys.com>
+ *fix bug: send wizard fix - bad port:-)
+
+Beta 6 release
+--------------
+2004-02-11 George Farris <george@gmsys.com>
+ *remove glade errors when starting.
+ *changes to compile with gtk-sharp-0.15 and Mono-0.30.
+ *swap "Add" and "Clear" buttons for adding phone items.
+ *added stock icons to "Add" and "Clear" buttons.
+
+2004-01-13 George Farris <george@gmsys.com>
+ *clear phone book list items at appropriate times.
+ *added class for new phone book wizard.
+ *changes to main code to support new phone book wizard.
+ *Fix bug: deleting phone book correctly deletes the file.
+
+2004-01-06 George Farris <george@gmsys.com>
+ *new dialog in gfax.glade file for new phone book
+
+Beta 5 release
+--------------
+2003-12-29 George Farris <george@gmsys.com>
+ *created spec file for rpms.
+ *fixed schema installation, works for all users now.
+ *adding new phone book didn't work quite right, fixed.
+ *deleteing item in phonebook didn't allow saving after, fixed.
+ *now compiles with mono >= 0.28 and gtk-sharp-0.14.
+
+Beta 4 release
+--------------
+2003-06-14 George Farris <george@gmsys.com>
+ *send druid now displays numbers to send instead of "MULTIPLE NUMBERS."
+ *added toggle to send fax druid. you can now deselect numbers.
+ *resolution setting is now functional in Hylafax.
+ *email notification is now functional in Hylafax.
+
+2003-06-03 George Farris <george@gmsys.com>
+ *changed spool directory to /var/spool/gfax
+ *set "Rules Hint" in glade file so lists follow theme.
+ *Fix bug: don't delete file when sending file from Gfax.
+ *Fix bug: don't delete file if not in /var/spool/gfax.
+
+2003-06-02 George Farris <george@gmsys.com>
+ *Fix bug: Delete Job button active when no job.
+ *Fix bug: Delete item button active when no items selected.
+
+2003-05-27 George Farris <george@gmsys.com>
+ *sendphonebook.cs changes to support the send page in gfax
+ *added phonebook support to "New Fax" window.
+ *Fix bug: removed modal from About dialog.
+ *Fix bug: when adding numbers from phonebook in gfaxsend it doesn't display
+ a single number if the company is not set.
+ *Clear "New Fax" page proper if switching to main and back.
+
+Beta 3 release
+--------------
+2003-05-21 George Farris <george@gmsys.com>
+ *Make sure Delete and Edit buttons sensitive only when proper in phb page.
+ *Sendfax page now functional.
+ *Update Makefile to install schema on "make install".
+ *Make sure DeleteJob button is senitive at right time.
+ *Created gfaxlpr command for apps that fail with gfax like OpenOffice.
+
+2003-05-20 George Farris <george@gmsys.com>
+ *Fix bug: create phonebook directory if it doesn't exist.
+ *Fix bug: create "phonebooks" file if it doesn't exist.
+ *Add default directory for new phonebook (~/.etc/gfax).
+
+2003-05-17 George Farris <george@gmsys.com>
+ *Changed default queue to send queue.
+ *Added ability to delete Hylafax jobs.
+ *Made "Delete Job" button sensitive only when showing send queue.
+
+Beta 2 release
+--------------
+2003-05-15 George Farris <george@gmsys.com>
+ *Updated Gfax to compile with mono-0.24 and gtk-sharp-0.9
+ *Added functionality to the "Settings" menu.
+ *Added queue_refresh function to refresh the main and queue status on
+ regular intervals
+ *Added "refresh_queue_enabled" and "refresh_queue_interval" GConf items
+
+2003-04-19 George Farris <george@gmsys.com>
+ *Changed gfax directory from $HOME/.gfax to $HOME/.etc/gfax
+ its a fad,lets all do it:-) put your stuff in .etc
+
+Beta 1 release
+--------------
diff --git a/FAQ b/FAQ
new file mode 100644
index 0000000..0b3f46f
--- /dev/null
+++ b/FAQ
@@ -0,0 +1,31 @@
+Gfax Frequently asked questions.
+
+ 1). I get the following error after I install gfax:
+ Unhandled Exception: GConf.NoSuchKeyException: Key
+ '/apps/gfax/general/run_setup_at_start' not found in GConf
+ 2). How do I add Hylafax users and passwords on the fax server?
+ 3). How do I send an entire phone book?
+ 4). How do I send faxes from OpenOffice programs?
+ 5). How do I get cover pages working?
+
+ 1). (Q) I get the following error after I install gfax:
+ Unhandled Exception: GConf.NoSuchKeyException: Key
+ (A) Loging out and login back in should fix this. The GConfd
+ process is not picking up the new keys.
+
+ 2) (Q) How do I add Hylafax users and passwords on the fax server?
+ (A) Login to your server as "root" and addusers with the following
+ command:
+ faxadduser -a <secret password> -p <secret password> username
+ The -a and -p otions are passwords that you choose, -a must be given
+ for administrative rights to your jobs. Admin rights allow you to
+ remove jobs from the server.
+
+ 3) (Q) How do I send an entire phone book?
+ (A) When sending the facsimile choose the phonebook name and click "OK"
+ this will select every number in the selected phonebook. You may
+ de-select individual entries by un-checking them.
+
+ 4) (Q) How do I get cover pages working?
+ (A) Coverpage support is not yet included. Most people just add the
+ cover page from their word processor.
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000..b42a17a
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,182 @@
+Basic Installation
+==================
+
+ These are generic installation instructions.
+
+ The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation. It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions. Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, a file
+`config.cache' that saves the results of its tests to speed up
+reconfiguring, and a file `config.log' containing compiler output
+(useful mainly for debugging `configure').
+
+ If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release. If at some point `config.cache'
+contains results you don't want to keep, you may remove or edit it.
+
+ The file `configure.in' is used to create `configure' by a program
+called `autoconf'. You only need `configure.in' if you want to change
+it or regenerate `configure' using a newer version of `autoconf'.
+
+The simplest way to compile this package is:
+
+ 1. `cd' to the directory containing the package's source code and type
+ `./configure' to configure the package for your system. If you're
+ using `csh' on an old version of System V, you might need to type
+ `sh ./configure' instead to prevent `csh' from trying to execute
+ `configure' itself.
+
+ Running `configure' takes awhile. While running, it prints some
+ messages telling which features it is checking for.
+
+ 2. Type `make' to compile the package.
+
+ 3. Optionally, type `make check' to run any self-tests that come with
+ the package.
+
+ 4. Type `make install' to install the programs and any data files and
+ documentation.
+
+ 5. You can remove the program binaries and object files from the
+ source code directory by typing `make clean'. To also remove the
+ files that `configure' created (so you can compile the package for
+ a different kind of computer), type `make distclean'. There is
+ also a `make maintainer-clean' target, but that is intended mainly
+ for the package's developers. If you use it, you may have to get
+ all sorts of other programs in order to regenerate files that came
+ with the distribution.
+
+Compilers and Options
+=====================
+
+ Some systems require unusual options for compilation or linking that
+the `configure' script does not know about. You can give `configure'
+initial values for variables by setting them in the environment. Using
+a Bourne-compatible shell, you can do that on the command line like
+this:
+ CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
+
+Or on systems that have the `env' program, you can do it like this:
+ env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
+
+Compiling For Multiple Architectures
+====================================
+
+ You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory. To do this, you must use a version of `make' that
+supports the `VPATH' variable, such as GNU `make'. `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script. `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.
+
+ If you have to use a `make' that does not supports the `VPATH'
+variable, you have to compile the package for one architecture at a time
+in the source code directory. After you have installed the package for
+one architecture, use `make distclean' before reconfiguring for another
+architecture.
+
+Installation Names
+==================
+
+ By default, `make install' will install the package's files in
+`/usr/local/bin', `/usr/local/man', etc. You can specify an
+installation prefix other than `/usr/local' by giving `configure' the
+option `--prefix=PATH'.
+
+ You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files. If you
+give `configure' the option `--exec-prefix=PATH', the package will use
+PATH as the prefix for installing programs and libraries.
+Documentation and other data files will still use the regular prefix.
+
+ In addition, if you use an unusual directory layout you can give
+options like `--bindir=PATH' to specify different values for particular
+kinds of files. Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.
+
+ If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+Optional Features
+=================
+
+ Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System). The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+ For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+Specifying the System Type
+==========================
+
+ There may be some features `configure' can not figure out
+automatically, but needs to determine by the type of host the package
+will run on. Usually `configure' can figure that out, but if it prints
+a message saying it can not guess the host type, give it the
+`--host=TYPE' option. TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name with three fields:
+ CPU-COMPANY-SYSTEM
+
+See the file `config.sub' for the possible values of each field. If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the host type.
+
+ If you are building compiler tools for cross-compiling, you can also
+use the `--target=TYPE' option to select the type of system they will
+produce code for and the `--build=TYPE' option to select the type of
+system on which you are compiling the package.
+
+Sharing Defaults
+================
+
+ If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists. Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Operation Controls
+==================
+
+ `configure' recognizes the following options to control how it
+operates.
+
+`--cache-file=FILE'
+ Use and save the results of the tests in FILE instead of
+ `./config.cache'. Set FILE to `/dev/null' to disable caching, for
+ debugging `configure'.
+
+`--help'
+ Print a summary of the options to `configure', and exit.
+
+`--quiet'
+`--silent'
+`-q'
+ Do not print messages saying which checks are being made. To
+ suppress all normal output, redirect it to `/dev/null' (any error
+ messages will still be shown).
+
+`--srcdir=DIR'
+ Look for the package's source code in directory DIR. Usually
+ `configure' can determine that directory automatically.
+
+`--version'
+ Print the version of Autoconf used to generate the `configure'
+ script, and exit.
+
+`configure' also accepts some other, not widely useful, options.
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..af56e85
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,26 @@
+SUBDIRS = data src po
+
+bin_SCRIPTS = gfax
+bindir=$(prefix)/bin
+
+gfax: gfax.in config.log
+ sed -e "s|\@prefix\@|$(prefix)|" \
+ -e "s|\@eprefix\@|$(eprefix)|" < gfax.in > gfax
+
+INTLTOOL = \
+ intltool-extract.in \
+ intltool-merge.in \
+ intltool-update.in
+
+EXTRA_DIST = \
+ gfax.in \
+ $(INTLTOOL)
+
+CLEANFILES = \
+ gfax.exe \
+ gfax
+
+DISTCLEANFILES = \
+ intltool-extract \
+ intltool-merge \
+ intltool-update
diff --git a/NEWS b/NEWS
new file mode 100644
index 0000000..d7894d8
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,353 @@
+Whats new in gfax-0.7.7
+============================================
+Gfax should now work with all software that can print to a CUPS printer.
+
+Noteable change is that Gfax MUST be running BEFORE you try to use the
+fax system. It will minimise to the system tray.
+
+
+Whats new in gfax-0.7.6
+============================================
+The "Wow it actually works" release.
+
+Yes folks, if you check the Changelog you will find a significant amount
+of work has been done to polish this release. Many thanks to the crew
+on the mailing list who have been very helpful in testing and providing
+feedback.
+
+I would like to acknowledge and thank the following individuals for their
+patience, testing and feedback.
+ Jean Louis Argente
+ Sasa Ostrouska
+ Bart Verstraete
+ Aaron Peromsik
+
+Much work has been put into polishing Hylafax and Efax support.
+The following is a list of new or changed items. If you have tried Gfax in
+the past and have been disappointed we recommend you checkout the 0.7.6 version.
+We think you will be pleased. There is still work to be done but we
+have a great group of people providing feedback, which really helps.
+
+
+EFAX CHANGES:
+=============
+ -When sending a fax with Efax, the main status window will display the
+ progress and the progressbar will pulse while the fax is being transmitted.
+ -The appbar will display the "Sending fax..." state.
+ -There is no longer a gfax.proc file, the GUI is updated directly from the
+ efaxd thread.
+ -The queue scanning is now 30 seconds instead of 60 seconds for dealing with
+ faxes sent via Efax.
+
+HYLAFAX CHANGES:
+================
+ -Much of the network traffic is now asynchronous, which means Gfax will
+ not hang when getting status, switching tabs etc. More to follow in the
+ next version.
+ -Main progressbar now pulses when there is network traffic.
+ -Server status is now updated whenever the queue status is updated.
+ -Can now double click on a received facsimile to to view it.
+ -Can now select multiple or all received faxes and delete them.
+ -Double clicking on job to send will now popup job modify dialog in send tab.
+ -Gfax will check for permission to read fax from the fax server and popup a
+ notification if the user does not have permission to view the fax.
+
+OTHER CHANGES:
+==============
+ -Debian control file has been updated with proper dependancies.
+ -Removed depreciated Gnome.About and replaced with Gtk.AboutDialog.
+ -Removed depreciated OptionMenu and replaced ComboBox.
+ -Removed all Mgetty support - never really was there anyway:-)
+
+ -Added Latvian (lt.po) translation
+ -Added Dutch (nl.po) translation
+ -Updated German (de.po) translation
+ -Updated Italian (it.po) translation
+
+
+BUGS FIXED:
+===========
+ -Fix: "Add" button was not enabled if adding just numbers to the phonebook.
+ -Fix: When sending a fax via Efax, if the fax result was "Busy" Gfax would
+ not retry. Gfax will now try the set number of times (EfaxRetry).
+ -Fix: "Don't try to open a non existing phonebook file.
+ -Fix: Various callback event args have been changed for newer versions of
+ Gtk-Sharp, these have been updated.
+ -Fix: "Efax sending was broken in 0.7.5, now works.
+ -Fix: Ghostscript conversion of files for Efax was failing.
+ -Fix: Gfax was setting the time in the past due to a timezone bug,
+ consequently Hylafax jobs never ran and couldn't be modified.
+
+
+
+Whats new in gfax-0.7.5
+============================================
+Hylafax received facsimiles can now be viewed/printed or deleted.
+Evolution addressbooks are now supported. See Note 1 in the README.
+Hylafax jobs can be modified after sending.
+Newer GTK file dialog supported.
+Some other small UI changes.
+Gfax Phone books and spool directory is moved to ~/.config and ~/.local.
+Gfax Phonebooks will be moved automatically.
+Many bugs fixed.
+
+
+Whats new in gfax-0.7.4
+============================================
+There never really was a 0.7.4 release, I was just messing with your mind.
+
+Whats new in gfax-0.7.3
+============================================
+Updated German translation.
+Deleted status tooltips that are not used anymore due
+to clear text status words.
+
+Whats new in gfax-0.7.2
+============================================
+fix /tmp/gfax.proc file name creation race.
+fix Hylafax receive queue display.
+update make deb script
+add German translation.
+
+
+Whats new in gfax-0.7.1
+============================================
+Bad release forget about it:-)
+
+
+Whats new in gfax-0.7.0
+============================================
+Major UI change and improvements, lots of HIG changes.
+Much better phonebook support for creating phonebooks.
+Efax support has been added.
+Build tools changed to use automake/autoconf.
+Full gettext support for multiple languages.
+Many bugs fixed.
+
+
+
+
+Whats new in gfax-0.6.4
+============================================
+Bug fix release. Toggle in list of items to send was not active.
+
+Whats new in gfax-0.6.3
+============================================
+Bug fix release. Stupid typo on my part stopped phonebook working
+properly.
+
+Whats new in gfax-0.6.2
+============================================
+Bug fix release. When sending a fax and selecting a number from the
+phone book, the number and organization entry were swapped.
+
+Whats new in gfax-0.6.1
+============================================
+Changes have been made to allow Gfax to compile against mono-beta3 (0.96)
+and Gtk#-0.98 or higher, will probably not work with any earlier versions.
+This is in preparation for the up coming Mono 1.0 release.
+
+
+Whats new in gfax-0.6.0, Major point release
+============================================
+Changes have been made to allow Gfax to compile against Gtk#-0.17,
+and will probably not work with any earlier versions.
+
+Full username and password authentication is now working in Hylafax.
+Authentication can now be either by allowing the machine host name or
+IP address or system administrators can add Hylafax users and passwords
+for their fax server (see FAQ).
+
+Gfax now runs the main application after sending a fax with the send
+wizard, enabling immediate status of the fax job to be viewed.
+
+Gfax now fully supports delayed sending of facsimiles with from the
+send wizard and the main application. Facsimiles can be delayed up to
+30 days in the future.
+
+Status queue displays have been updated to display the "Send At" time
+for all jobs.
+
+While transferring jobs to the hylafax server the user can press the
+"Cancel" button, deleting the job/file on the fax server and returning
+to the main display.
+
+Gfax-0.6 is now in updated on the GNOME CVS repository.
+
+
+Whats new in gfax-0.6beta9:
+===========================
+Network status queue data reception is much better and should work
+without problem now. Previously Gfax would crash or the entire queue
+would not be displayed if there were many jobs.
+
+Gfax will now display the number of jobs left in the Send queue in
+the window title bar so one can track send status when Gfax is
+minimized.
+
+The total number of jobs displayed in the status line at the bottom
+of the window. This status line will also show when Gfax is
+auto-refreshing the queue.
+
+Queue selection has been added to the "Job" menu.
+
+When sending a fax from the "New Fax" button, fax destinations can be
+deselected. You can now select an entire phone book and then deselect
+a few numbers.
+
+Bug fixes:
+----------
+ *start auto refresh on program startup if enabled.
+ *change socket read code so all data will be read in hylafax.cs
+ *when deleting jobs from the Done queue it is refreshed properly.
+
+
+
+
+Whats new in gfax-0.6beta8:
+===========================
+Well it turns out that the beta7 didn't quite do the job. The
+Send Wizrad worked with a phone book item but not entering a
+number in the entry box, this is now fixed. Also the fax wizard
+would send the fax to the server even if there weren't any valid
+destinations, this is also fixed.
+
+
+Whats new in gfax-0.6beta7:
+===========================
+This is just a quick bug fix as beta6 send wizard was bad.
+
+
+Whats new in gfax-0.6beta6:
+===========================
+Ported to mono >= 0.30 and gtk-sharp-0.15.
+It should work on the likes of Fedora Core 1 and Redhat 9 to name a few.
+
+If you run Fedora try our yum repository for installation, see
+http://gfax.cowlug.org for more information.
+
+The biggest news is a new wizard to add phone books. The old way of
+adding phone books was prone to error and not intuitive at all.
+
+
+Bug fixes:
+----------
+ *remove glade errors when starting.
+ *clear phone book list items at appropriate times.
+ *deleting phone book correctly deletes the file.
+
+Changes:
+---------
+ *compile with gtk-sharp-0.15 and Mono-0.30.
+ *swap "Add" and "Clear" buttons for adding phone items.
+ *added stock icons to "Add" and "Clear" buttons.
+ *added class for new phone book wizard.
+ *changes to main code to support new phone book wizard.
+ *new dialog in gfax.glade file for new phone book
+
+
+
+
+
+Whats new in gfax-0.6beta5:
+===========================
+This version is basically a port to mono >= 0.28 and gtk-sharp-0.14.
+It should work on the likes of Fedora Core 1 and Redhat 9 to name a few.
+
+This is the first version with a proper working spec file for building
+rpms.
+
+Fedora Core 1 users note:
+Unless one has the CVS version of Orbit gfax will crash upon exit, this
+is not a problem, everything still works fine. Fedora Core 2 will most
+likely have this fixed.
+
+Bug fixes:
+----------
+ *created spec file for rpms.
+ *fixed schema installation, works for all users now.
+ *adding new phone book didn't work quite right, fixed.
+ *deleteing item in phonebook didn't allow saving after, fixed.
+ *now compiles with mono >= 0.28 and gtk-sharp-0.14.
+
+Changes:
+----------
+ *none.
+
+Whats new in gfax-0.6beta4:
+===========================
+The send druid now displays all the numbers that you have choosen to send
+the fax to. Each number in the list is preceded with a check mark which
+allows you to deselect numbers in your list. For example:
+ -Print to a fax to send it.
+ -Press the "Phonebook" button and select a phonebook from the "Phone Books"
+ list and press "OK".
+ -You should now see all the numbers that were in your phone book.
+ -Deselect desired numbers by toggling the checkmark off.
+
+Numbers may be "built up" by continually selecting phone books, phone book
+items or manually entering a number in the entry provided.
+
+Stretching the druid expands the list properly.
+
+Other changes to the send druid include the ability to change the facsimile
+resolution, email address and notification feature. Notification and
+resolution settings previously didn't get transmitted to hylafax, they are
+now working.
+
+Bug fixes:
+----------
+ *Don't delete your file when sending the file from the "New Fax" fucntion.
+ *Don't delete your file if piped in from the command line.
+ *Delete Job button was active when no jobs to delete.
+ *Delete item button active when no items selected.
+ *Removed modal setting from About dialog.
+ *When adding numbers from a phone book in the send druid it wouldn't
+ display a single number if the organization was not set.
+
+Changes:
+----------
+ *Send druid now displays numbers to send instead of "MULTIPLE NUMBERS."
+ *Added toggle to send druid, you can now deselect numbers.
+ *Resolution setting is now functional for Hylafax.
+ *Email notification is now functional for Hylafax.
+ *Changed spool directory location to /var/spool/gfax
+ *Set "Rules Hint" in glade file so lists follow theme.
+ *Added phonebook support to "New Fax" function.
+ *Clear "New Fax" page properly if switching to main and back.
+
+
+Whats new in gfax-0.6beta3:
+===========================
+This release should be far more functional that previous releases, please join
+the mail list and help with bug reports. Many thanks to Stephan Sachse for
+his feedback.
+
+Bug fixes:
+----------
+ *create phonebook directory (~/.etc/gfax/) if it doesn't exist.
+ *create "phonebooks" file if it doesn't exist.
+
+Changes:
+----------
+ *Changed the default queue that is displayed on startup to the send queue.
+ *Added ability to delete Hylafax jobs.
+ *Made "Delete Job" button sensitive only when showing send queue.
+
+ *Gfax now attempts to display the proper sensitivity for many
+ buttons, such as "Delete" and "Edit" in the Phonebooks page.
+
+ *The send fax page is now functional and postscript files can be sent
+ directly from gfax.
+
+ *The makefile has been updated to install schema on "make install", you
+ will no longer have to do a seperate "make schema".
+
+ *When creating a new phone book the base directory defaults to ~/.etc/gfax
+ so users will only have to enter a file name and not the entire path.
+
+ *Created a gfaxlpr command for use with apps like OpenOffice. It seem that
+ reading input in the shell sometimes fails so gfaxlpr does nothing but
+ read from the standard input. Hopefully this will work better for
+ printing from applications. See the INSTALL file for more information
+ about defining printers in OpenOffice.
diff --git a/README b/README
new file mode 100644
index 0000000..255133c
--- /dev/null
+++ b/README
@@ -0,0 +1,57 @@
+The GFAX project aims to provide a free front end to the various
+facsimile programs available for Linux and other operating systems
+that use GNOME.
+
+GFAX provides the familiar "pop up" window and phone book support
+when one "prints" to a "fax" printer.
+
+This is a GNOME-2.x port of Gfax.
+
+This version has the following features:
+
+ - Works with Hylafax and Efax
+ - View status of Hylafax server, send, done and receive queues.
+ - Delete jobs in send queues.
+ - Modify jobs in send queue. Number, time to send etc.
+ - Download, view, print and delete received faxes on the Hylafax server.
+ - Delayed sending of Hylafax jobs, up to 30 days in the future.
+ - Both IP and username/password authentication for Hylafax.
+ - Cancel partially sent jobs, (while sending file to Hylafax server).
+ - Retrieves and displays total number of jobs in queue.
+ - Number of jobs in send queue displays in icon in task bar.
+ - Auto timed refresh of server and queue status can be toggled on or off.
+ - Complete list of jobs in queues with status and time to send.
+
+ - Phonebooks
+ - Define Gfax phone books.
+ - Use your Evolution Adressbooks - See Note 1.
+ - Add and delete entries to Gfax phone books.
+ - Send fax to entire phonebook easily.
+ - Convenient wizard for adding new phonebooks.
+ - Deselect individual numbers form outgoing list.
+
+ - Can fax postscript documents from the command line as well via
+ Gnome print, OpenOffice and most other X applications.
+ - Faxing of postscript files straight from Gfax.
+
+
+NOTES:
+ 1) Evolution addressbooks are read only at the moment.
+
+WHEN BUILDING
+If you are building from source you should run autogen.sh or configure with
+the following:
+ --prefix=/usr --sysconfdir=/etc
+Of course you may choose to substitute /usr and /etc with the locations that
+your system is configured with.
+
+There are many things to do but C# is highly productive and I'm sure Gfax
+will benefit from being written in it and move forward rapidly.
+
+Please join the gfax mail list for bugs, support, feature requests, flames
+and other discussion.
+
+Gfax mail list site: http://www.cowlug.org/mailman/listinfo/gfax
+
+Thanks.
+George Farris - farrisg@shaw.ca
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..1d7e309
--- /dev/null
+++ b/TODO
@@ -0,0 +1,54 @@
+- Add debug on or off for efax and Hylafax
+
+- allow customizing phonebook location (central server)
+- add Nautilus script to fax file. (0.7.7)
+
+- Add small daemon to watch cups output and run gfax.
+
+- evolution phonebook as a plugin to avoid dependencies (0.7.7)
+- add cancel button when receiving a fax to view (0.7.7)
+- receive support for efax (0.7.7)
+
+- allow re-queue job from done queue (0.7.7)
+- add libnotify support for sedning faxes etc
+
+- move transmit progressbar to main window when faxing from there
+
+- convert many types of files for faxing so we can send more than just *.ps
+- preview outgoing file before sending.
+
+- add gnome-keyring support.
+
+- install OpenOffice.org printer (maybe not)
+
+- cover page stuff.
+- add emailing
+- add log of numbers called.
+- modify multiple jobs. (0.7.7)
+
+- Documentation via Yelp (0.7.7)
+
+- Add good error checking to all Hylafax operations
+
+- add searching phone number on send fax page. (auto search)
+- add help.
+- show "my" sent faxes or all faxes or sort at least
+- query entire job information, destination company etc.
+
+- change transmit agent to enum so the property editor works right.
+- change main listview to object
+- clean up my variable naming :-)
+
+D-Bus support
+
+D-Bus support needs to be added for Efax. Basically the efax thread will
+communicate via dbus. It should initially be able to do the following:
+
+From gfax to efax
+ start queue loop
+ cancel job
+
+From efax to gfax
+ job id currently working on
+ job status
+ received fax - later, receive support isn't in yet.
diff --git a/autogen.sh b/autogen.sh
new file mode 100755
index 0000000..387dc65
--- /dev/null
+++ b/autogen.sh
@@ -0,0 +1,22 @@
+#!/bin/sh
+# Run this to generate all the initial makefiles, etc.
+
+srcdir=`dirname $0`
+test -z "$srcdir" && srcdir=.
+
+PKG_NAME="gfax"
+
+(test -f $srcdir/configure.in \
+ && test -f $srcdir/ChangeLog \
+ && test -d $srcdir/src) || {
+ echo -n "**Error**: Directory "\`$srcdir\'" does not look like the"
+ echo " top-level gfax directory"
+ exit 1
+}
+
+
+which gnome-autogen.sh || {
+ echo "You need to install gnome-common from the GNOME CVS"
+ exit 1
+}
+USE_GNOME2_MACROS=1 . gnome-autogen.sh
diff --git a/configure.in b/configure.in
new file mode 100644
index 0000000..5f45c72
--- /dev/null
+++ b/configure.in
@@ -0,0 +1,82 @@
+AC_INIT(src/main.cs)
+#AC_CANONICAL_SYSTEM
+AM_INIT_AUTOMAKE(gfax, 0.7.7)
+AM_MAINTAINER_MODE
+AM_CONFIG_HEADER(config.h)
+
+GNOME_COMMON_INIT
+GNOME_DOC_INIT
+
+AC_PROG_INSTALL
+AC_PROG_CC
+AC_ISC_POSIX
+AC_HEADER_STDC
+AC_PROG_INTLTOOL([0.25])
+AM_PROG_LIBTOOL
+#
+# Find gconftool-2
+#
+AC_PATH_PROG(GCONFTOOL, gconftool-2)
+AM_GCONF_SOURCE_2
+
+#
+# Setup GETTEXT
+#
+ALL_LINGUAS="en_CA de nl it lv"
+GETTEXT_PACKAGE=gfax
+AC_SUBST(GETTEXT_PACKAGE)
+AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [Gettext package])
+AM_GLIB_GNU_GETTEXT
+
+#
+# Find pkg-config
+#
+AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
+if test "x$PKG_CONFIG" = "xno"; then
+ AC_MSG_ERROR([You need to install pkg-config])
+fi
+
+#
+# Find mcs
+#
+AC_PATH_PROG(MCS, mcs)
+if test "x$MCS" = "x"; then
+ AC_MSG_ERROR([Can't find mcs in your PATH])
+fi
+
+#
+
+AM_CONDITIONAL(GCONF_SCHEMAS_INSTALL, true)
+
+#
+# Use DBus# to export our remote control if available.
+#
+PKG_CHECK_MODULES(DBUS, dbus-sharp, ENABLE_DBUS="yes", ENABLE_DBUS="no")
+AC_ARG_ENABLE(dbus,
+ [ --enable-dbus=[no/yes] compile with dbus support (default: yes)],
+ ENABLE_DBUS="$enableval")
+AM_CONDITIONAL(ENABLE_DBUS, test "$ENABLE_DBUS" = "yes")
+AC_SUBST(DBUS_LIBS)
+
+
+libpath=`basename ${libdir}`
+
+AC_SUBST(install_sh)
+
+#
+# Gfax needs Gtk# Gnome# GConf#
+#
+PKG_CHECK_MODULES(GFAX, glib-sharp-2.0 gtk-sharp-2.0 gnome-sharp-2.0 gconf-sharp-2.0 gconf-sharp-peditors-2.0
+ glade-sharp-2.0 evolution-sharp)
+AC_SUBST(GFAX_LIBS)
+
+AC_OUTPUT([
+Makefile
+data/Makefile
+src/Makefile
+po/Makefile.in
+data/icons/Makefile
+data/icons/16x16/Makefile
+data/icons/48x48/Makefile
+data/icons/scalable/Makefile
+])
diff --git a/cvs-notes b/cvs-notes
new file mode 100644
index 0000000..de4a996
--- /dev/null
+++ b/cvs-notes
@@ -0,0 +1,59 @@
+Build Ubuntu package with
+ dpkg-buildpackage -rfakeroot
+
+My CVS notes
+
+CHECKOUT
+--------
+Check out the current working branch and prune directories
+ cvs co -P gfax
+This would assume you have changed from the HEAD branch.
+To checkout a named tag
+ cvs co -P -r gfax_0_7_2 gfax
+
+While branch names refer to the latest code at the end of a
+branch (and as such, are dynamic), tag names refer
+to the static version of code that existed upon the tag's creation.
+As a result, you cannot commit changes back into the tree at the
+tagged place that you checked them out from.
+
+
+NEW RELEASE
+-----------
+To create a new branch:
+Branch name is gfax_0_7, the <tag> tag works on the working
+copy so you should do a HEAD checkout first.
+ cvs co -P gfax
+ cvs tag -r gfax_0_7
+Use this when releaseing a new version of the program
+Access the branch with:
+ cvs co -P -r gfax_0_7
+
+To find out what branch a file is on do this:
+ cvs status -v filename
+
+
+ADD FILE
+--------
+To add a file to the repository, create the file locally and then add it:
+ cvs add filename
+ cvs commit
+
+MERGE release back to HEAD
+--------------------------
+Checkout HEAD first
+ cvs co -P -r HEAD
+now merge tag (maybe from branch)
+ cvs update -j gfax_0_7
+then commit
+ cvs commit
+You can only do this once per branch, after that you must merge the branch
+and file version:
+ cvs update -j 1.2.2.2 -j gfax_0_7 src/gui.cs
+
+
+Move to branch
+ cvs update -r gfax_0_7
+Move back to HEAD
+ cvs update -A
+
diff --git a/data/Makefile.am b/data/Makefile.am
new file mode 100644
index 0000000..e782b80
--- /dev/null
+++ b/data/Makefile.am
@@ -0,0 +1,54 @@
+SUBDIRS = icons
+
+desktop_in_files=gfax.desktop.in
+desktop_files=$(desktop_in_files:.desktop.in=.desktop)
+@INTLTOOL_DESKTOP_RULE@
+
+Applicationsdir = $(datadir)/applications
+Applications_DATA = $(desktop_files)
+
+schemas_in_files = gfax.schemas.in
+schemasdir = $(GCONF_SCHEMA_FILE_DIR)
+schemas_DATA = $(schemas_in_files:.schemas.in=.schemas)
+
+@INTLTOOL_SCHEMAS_RULE@
+
+if GCONF_SCHEMAS_INSTALL
+install-data-local:
+ if test -z "$(DESTDIR)" ; then \
+ for p in $(schemas_DATA) ; do \
+ GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule $(srcdir)/$$p ; \
+ done \
+ fi
+else
+install-data-local:
+endif
+
+cups-gfax:
+backenddir = /usr/lib/cups/backend
+backend_EXEC = cups-gfax
+
+backend_availabledir = /usr/lib/cups/backend-available
+backend_available_EXEC = cups-gfax
+
+install-exec-hook:
+ $(INSTALL_PROGRAM) $(backend_EXEC) $(backenddir)
+ $(INSTALL_PROGRAM) $(backend_available_EXEC) $(backend_availabledir)
+ lpadmin -p Gfax_Facsimile_Printer -v cups-gfax:/ -E
+
+uninstall-local:
+ rm -f $(backenddir)/$(backend_EXEC)
+ rm -f $(backend_availabledir)/$(backend_available_EXEC)
+ lpadmin -x Gfax_Facsimile_Printer
+
+EXTRA_DIST = \
+ $(backend_EXEC) \
+ $(backend_available_EXEC) \
+ $(desktop_in_files) \
+ $(desktop_files) \
+ $(schemas_in_files) \
+ $(schemas_DATA)
+
+DISTCLEANFILES = \
+ $(desktop_files) \
+ $(schemas_DATA)
diff --git a/data/cups-gfax b/data/cups-gfax
new file mode 100755
index 0000000..59165fe
--- /dev/null
+++ b/data/cups-gfax
@@ -0,0 +1,32 @@
+#!/bin/bash
+# GFAX - Gnome fax application
+# Copyright (C) 2003 - 2008 George A. Farris
+#
+# 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 3 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 Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+if [ $# == 0 ] ; then
+ echo "file cups-gfax:/ \"Unknown\" \"Gfax Facsimile Printer\""
+ exit 0
+fi
+
+RNAME=G$$
+# don't change this spool directory, gfax uses it.
+mkdir -p /var/spool/gfax/$2
+chmod 777 /var/spool/gfax/$2
+SPOOL_DIR=/var/spool/gfax/$2
+cp $6 $SPOOL_DIR/D.$RNAME
+chmod 666 $SPOOL_DIR/D.$RNAME
+
+exit 0
diff --git a/data/gfax.desktop.in b/data/gfax.desktop.in
new file mode 100644
index 0000000..d8b5d96
--- /dev/null
+++ b/data/gfax.desktop.in
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Version=1.0
+_Name=Gfax Facsimile Program
+_Comment=Send and Receive Facsimiles
+Exec=gfax
+Icon=gfax
+StartupNotify=true
+Terminal=false
+Type=Application
+Categories=GNOME;GTK;Office;
diff --git a/data/gfax.schemas.in b/data/gfax.schemas.in
new file mode 100644
index 0000000..1f88f78
--- /dev/null
+++ b/data/gfax.schemas.in
@@ -0,0 +1,286 @@
+<gconfschemafile>
+ <schemalist>
+ <schema>
+ <key>/schemas/apps/gfax/general/refresh_queue_interval</key>
+ <applyto>/apps/gfax/general/refresh_queue_interval</applyto>
+ <owner>gfax</owner>
+ <type>int</type>
+ <locale name="C"></locale>
+ <default>30</default>
+ </schema>
+ <schema>
+ <key>/schemas/apps/gfax/general/run_setup_at_start</key>
+ <applyto>/apps/gfax/general/run_setup_at_start</applyto>
+ <owner>gfax</owner>
+ <type>bool</type>
+ <locale name="C"></locale>
+ <default>true</default>
+ </schema>
+ <schema>
+ <key>/schemas/apps/gfax/general/log_enabled</key>
+ <applyto>/apps/gfax/general/log_enabled</applyto>
+ <owner>gfax</owner>
+ <type>bool</type>
+ <locale name="C"></locale>
+ <default>false</default>
+ </schema>
+ <schema>
+ <key>/schemas/apps/gfax/general/refresh_queue_enabled</key>
+ <applyto>/apps/gfax/general/refresh_queue_enabled</applyto>
+ <owner>gfax</owner>
+ <type>bool</type>
+ <locale name="C"></locale>
+ <default>false</default>
+ </schema>
+ <schema>
+ <key>/schemas/apps/gfax/general/send_now</key>
+ <applyto>/apps/gfax/general/send_now</applyto>
+ <owner>gfax</owner>
+ <type>bool</type>
+ <locale name="C"></locale>
+ <default>true</default>
+ </schema>
+ <schema>
+ <key>/schemas/apps/gfax/general/email_notify</key>
+ <applyto>/apps/gfax/general/email_notify</applyto>
+ <owner>gfax</owner>
+ <type>bool</type>
+ <locale name="C"></locale>
+ <default>true</default>
+ </schema>
+ <schema>
+ <key>/schemas/apps/gfax/general/cover_page</key>
+ <applyto>/apps/gfax/general/cover_page</applyto>
+ <owner>gfax</owner>
+ <type>bool</type>
+ <locale name="C"></locale>
+ <default>false</default>
+ </schema>
+ <schema>
+ <key>/schemas/apps/gfax/general/hi_resolution</key>
+ <applyto>/apps/gfax/general/hi_resolution</applyto>
+ <owner>gfax</owner>
+ <type>bool</type>
+ <locale name="C"></locale>
+ <default>true</default>
+ </schema>
+ <schema>
+ <key>/schemas/apps/gfax/general/faxtracing</key>
+ <applyto>/apps/gfax/general/faxtracing</applyto>
+ <owner>gfax</owner>
+ <type>bool</type>
+ <locale name="C"></locale>
+ <default>false</default>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/gfax/general/phone_prefix</key>
+ <applyto>/apps/gfax/general/phone_prefix</applyto>
+ <owner>gfax</owner>
+ <type>string</type>
+ <locale name="C"></locale>
+ <default>none</default>
+ </schema>
+ <schema>
+ <key>/schemas/apps/gfax/general/fax_number</key>
+ <applyto>/apps/gfax/general/fax_number</applyto>
+ <owner>gfax</owner>
+ <type>string</type>
+ <locale name="C"></locale>
+ <default></default>
+ </schema>
+ <schema>
+ <key>/schemas/apps/gfax/general/email_address</key>
+ <applyto>/apps/gfax/general/email_address</applyto>
+ <owner>gfax</owner>
+ <type>string</type>
+ <locale name="C"></locale>
+ <default></default>
+ </schema>
+ <schema>
+ <key>/schemas/apps/gfax/general/transmit_agent</key>
+ <applyto>/apps/gfax/general/transmit_agent</applyto>
+ <owner>gfax</owner>
+ <type>string</type>
+ <locale name="C"></locale>
+ <default>hylafax</default>
+ </schema>
+ <schema>
+ <key>/schemas/apps/gfax/general/fax_viewer</key>
+ <applyto>/apps/gfax/general/fax_viewer</applyto>
+ <owner>gfax</owner>
+ <type>string</type>
+ <locale name="C"></locale>
+ <default>evince</default>
+ </schema>
+ <schema>
+ <key>/schemas/apps/gfax/transport/hylafax/hostname</key>
+ <applyto>/apps/gfax/transport/hylafax/hostname</applyto>
+ <owner>gfax</owner>
+ <type>string</type>
+ <locale name="C"></locale>
+ <default>localhost</default>
+ </schema>
+ <schema>
+ <key>/schemas/apps/gfax/transport/hylafax/port</key>
+ <applyto>/apps/gfax/transport/hylafax/port</applyto>
+ <owner>gfax</owner>
+ <type>string</type>
+ <locale name="C"></locale>
+ <default>4559</default>
+ </schema>
+ <schema>
+ <key>/schemas/apps/gfax/transport/hylafax/username</key>
+ <applyto>/apps/gfax/transport/hylafax/username</applyto>
+ <owner>gfax</owner>
+ <type>string</type>
+ <locale name="C"></locale>
+ <default></default>
+ </schema>
+ <schema>
+ <key>/schemas/apps/gfax/transport/hylafax/password</key>
+ <applyto>/apps/gfax/transport/hylafax/password</applyto>
+ <owner>gfax</owner>
+ <type>string</type>
+ <locale name="C"></locale>
+ <default></default>
+ </schema>
+
+
+
+ <schema>
+ <key>/schemas/apps/gfax/transport/efax/efax_modem_device</key>
+ <applyto>/apps/gfax/transport/efax/efax_modem_device</applyto>
+ <owner>gfax</owner>
+ <type>string</type>
+ <default>ttyS0</default>
+ <locale name="C">
+ <short>Modem Device</short>
+ <long>The serial port the modem is connected too. Typical values are ttyS0, cua0 or modem.</long>
+ </locale>
+ </schema>
+ <schema>
+ <key>/schemas/apps/gfax/transport/efax/efax_modem_init</key>
+ <applyto>/apps/gfax/transport/efax/efax_modem_init</applyto>
+ <owner>gfax</owner>
+ <type>string</type>
+ <locale name="C">
+ <short>Modem initialization string</short>
+ <long>The initialization code that is sent to the modem.</long>
+ </locale>
+ <default></default>
+ </schema>
+ <schema>
+ <key>/schemas/apps/gfax/transport/efax/efax_modem_fcinit</key>
+ <applyto>/apps/gfax/transport/efax/efax_modem_fcinit</applyto>
+ <owner>gfax</owner>
+ <type>string</type>
+ <locale name="C"></locale>
+ <default></default>
+ </schema>
+ <schema>
+ <key>/schemas/apps/gfax/transport/efax/efax_modem_reset</key>
+ <applyto>/apps/gfax/transport/efax/efax_modem_reset</applyto>
+ <owner>gfax</owner>
+ <type>string</type>
+ <locale name="C">
+ <short>Modem reset string</short>
+ <long>The reset code that resets the modem to a power up state. The -Kz code works with most modems.</long>
+ </locale>
+ <default>-kZ</default>
+ </schema>
+ <schema>
+ <key>/schemas/apps/gfax/transport/efax/efax_modem_speaker_mode</key>
+ <applyto>/apps/gfax/transport/efax/efax_modem_speaker_mode</applyto>
+ <owner>gfax</owner>
+ <type>int</type>
+ <default>1</default>
+ <locale name="C">
+ <long>0:never, 1:until carrier, 2:always, 3:on receive only</long>
+ </locale>
+ </schema>
+ <schema>
+ <key>/schemas/apps/gfax/transport/efax/efax_modem_speaker_volume</key>
+ <applyto>/apps/gfax/transport/efax/efax_modem_speaker_volume</applyto>
+ <owner>gfax</owner>
+ <type>int</type>
+ <default>0</default>
+ <locale name="C">
+ <long>0:very low, 1:low, 2:medium, 3:high</long>
+ </locale>
+ </schema>
+ <schema>
+ <key>/schemas/apps/gfax/transport/efax/efax_modem_class</key>
+ <applyto>/apps/gfax/transport/efax/efax_modem_class</applyto>
+ <owner>gfax</owner>
+ <type>string</type>
+ <locale name="C">
+ <long>Not currently used.</long>
+ </locale>
+ <default>auto</default>
+ </schema>
+ <schema>
+ <key>/schemas/apps/gfax/transport/efax/efax_modem_capabilities</key>
+ <applyto>/apps/gfax/transport/efax/efax_modem_capabilities</applyto>
+ <owner>gfax</owner>
+ <type>string</type>
+ <locale name="C">
+ <long>Not currently used.</long>
+ </locale>
+ <default></default>
+ </schema>
+ <schema>
+ <key>/schemas/apps/gfax/transport/efax/efax_lockfile</key>
+ <applyto>/apps/gfax/transport/efax/efax_lockfile</applyto>
+ <owner>gfax</owner>
+ <type>string</type>
+ <locale name="C">
+ <long>The name of the lock file according to your system's conventions. If you're running Linux you shouldn't have to touch this.</long>
+ </locale>
+ <default>/var/lock/LCK..</default>
+ </schema>
+ <schema>
+ <key>/schemas/apps/gfax/transport/efax/efax_page_header</key>
+ <applyto>/apps/gfax/transport/efax/efax_page_header</applyto>
+ <owner>gfax</owner>
+ <type>string</type>
+ <locale name="C">
+ </locale>
+ <default></default>
+ </schema>
+ <schema>
+ <key>/schemas/apps/gfax/transport/efax/efax_retries</key>
+ <applyto>/apps/gfax/transport/efax/efax_retries</applyto>
+ <owner>gfax</owner>
+ <type>int</type>
+ <locale name="C"></locale>
+ <default>10</default>
+ </schema>
+ <schema>
+ <key>/schemas/apps/gfax/transport/efax/efax_next_jobid</key>
+ <applyto>/apps/gfax/transport/efax/efax_next_jobid</applyto>
+ <owner>gfax</owner>
+ <type>int</type>
+ <locale name="C"></locale>
+ <default>0</default>
+ </schema>
+ <schema>
+ <key>/schemas/apps/gfax/transport/efax/efax_papersize</key>
+ <applyto>/apps/gfax/transport/efax/efax_papersize</applyto>
+ <owner>gfax</owner>
+ <type>string</type>
+ <locale name="C"></locale>
+ <default>letter</default>
+ </schema>
+ <schema>
+ <key>/schemas/apps/gfax/transport/efax/efax_debug_messages</key>
+ <applyto>/apps/gfax/transport/efax/efax_debug_messages</applyto>
+ <owner>gfax</owner>
+ <type>string</type>
+ <locale name="C"></locale>
+ <default>c</default>
+ </schema>
+
+
+ </schemalist>
+</gconfschemafile>
diff --git a/data/gfax.spec b/data/gfax.spec
new file mode 100644
index 0000000..3530a15
--- /dev/null
+++ b/data/gfax.spec
@@ -0,0 +1,95 @@
+# created by RPM Builder for Anjuta, v0.1.2
+# http://arpmbuilder.sourceforge.net
+# Thu Dec 11 20:34:57 2003
+
+%define gfax 0.7.5
+#%define anjuta_plugindir /usr/lib/anjuta
+%define _prefix /usr
+
+Summary: Gnome facsimile software
+Name: gfax
+Version: 0.7.5
+Release: 1
+Vendor: George Farris (george@gmsys.com>
+Packager: George Farris (george@gmsys.com>
+Group: Office
+License: GPL
+Source0: %{name}-%{version}.tar.gz
+Url: http://gfax.cowlug.org
+BuildRoot: /var/tmp/gfax
+BuildArch: noarch
+Requires: mono >= 1.0, gtk-sharp >= 1.0, efax >= .9
+# Buildrequires: (none)
+# Conflicts: (none)
+# Provides: (none)
+Obsoletes: gfax
+
+%description
+Gfax is a popup tool for easily sending
+facsimilies by printing to a fax printer.
+
+%prep
+%setup -q
+
+%build
+[ ! -f Makefile ] || make clean
+make schema
+make
+
+%install
+rm -rf $RPM_BUILD_ROOT
+mkdir -p $RPM_BUILD_ROOT/etc/gconf/schemas
+mkdir -p $RPM_BUILD_ROOT/usr/bin
+mkdir -p $RPM_BUILD_ROOT/usr/lib/gfax
+mkdir -p $RPM_BUILD_ROOT/usr/share/gfax
+mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps
+mkdir -p $RPM_BUILD_ROOT/usr/share/applications
+mkdir -p $RPM_BUILD_ROOT/var/spool/gfax
+
+install -m 644 data/gfax.schema $RPM_BUILD_ROOT/etc/gconf/schemas/gfax.schemas
+install -m 755 src/gfax.exe $RPM_BUILD_ROOT/usr/lib/gfax/gfax.exe
+install -m 755 gfax $RPM_BUILD_ROOT/usr/bin/gfax
+install -m 755 gfaxlpr $RPM_BUILD_ROOT/usr/bin/gfaxlpr
+install -m 644 pixmaps/gfax.png $RPM_BUILD_ROOT/usr/share/pixmaps/gfax.png
+install -m 644 data/gfax.desktop $RPM_BUILD_ROOT/usr/share/applications/gfax.desktop
+install -m 755 scripts/printer-setup.sh $RPM_BUILD_ROOT/usr/share/gfax/printer-setup.sh
+install -m 644 data/fax-g3.profile $RPM_BUILD_ROOT/usr/share/gfax/fax-g3.profile
+install -m 644 data/GFAX.xml $RPM_BUILD_ROOT/usr/share/gfax/GFAX.xml
+install -m 644 data/GNOME-GFAX-PS.xml $RPM_BUILD_ROOT/usr/share/gfax/GNOME-GFAX-PS.xml
+
+chmod 777 $RPM_BUILD_ROOT/var/spool/gfax
+
+#[ -n "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
+
+for doc in AUTHORS COPYING README INSTALL NEWS TODO ChangeLog; do
+ rm -f $RPM_BUILD_ROOT%{_prefix}/doc/gfax/$doc;
+done;
+
+rm -f $RPM_BUILD_ROOT%{gfax};
+
+%clean
+[ -n "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
+
+%post
+export GCONF_CONFIG_SOURCE=`gconftool-2 --get-default-source`
+gconftool-2 --makefile-install-rule %{_sysconfdir}/gconf/schemas/gfax.schemas > /dev/null
+killall -HUP gconfd-2
+# run the printer install
+%{_datadir}/gfax/printer-setup.sh --install
+
+%preun
+%{_datadir}/gfax/printer-setup.sh --remove
+
+%files
+%defattr(-,root,root)
+%config %{_sysconfdir}/gconf/schemas/*.schemas
+%{_libdir}/gfax/gfax.exe
+%{_bindir}/gfax
+%{_bindir}/gfaxlpr
+%{_datadir}/applications/*.desktop
+%{_datadir}/pixmaps/*
+%{_datadir}/gfax/*
+%defattr(-, root, root, 0777)
+%{_localstatedir}/spool/gfax/
+
+%doc AUTHORS COPYING ChangeLog README INSTALL NEWS TODO
diff --git a/data/icons/16x16/Makefile.am b/data/icons/16x16/Makefile.am
new file mode 100644
index 0000000..1e7e42b
--- /dev/null
+++ b/data/icons/16x16/Makefile.am
@@ -0,0 +1,8 @@
+icondir = $(datadir)/icons/hicolor/16x16/apps
+icon_DATA = gfax.png
+
+EXTRA_DIST = \
+ $(icon_DATA)
+
+clean-local :
+ rm -f *~
diff --git a/data/icons/16x16/gfax.png b/data/icons/16x16/gfax.png
new file mode 100644
index 0000000..e0cb102
--- /dev/null
+++ b/data/icons/16x16/gfax.png
Binary files differ
diff --git a/data/icons/48x48/Makefile.am b/data/icons/48x48/Makefile.am
new file mode 100644
index 0000000..db441f6
--- /dev/null
+++ b/data/icons/48x48/Makefile.am
@@ -0,0 +1,9 @@
+icondir = $(datadir)/icons/hicolor/48x48/apps
+icon_DATA = \
+ gfax.png
+
+EXTRA_DIST = \
+ $(icon_DATA)
+
+clean-local :
+ rm -f *~
diff --git a/data/icons/48x48/gfax.png b/data/icons/48x48/gfax.png
new file mode 100644
index 0000000..49c3db3
--- /dev/null
+++ b/data/icons/48x48/gfax.png
Binary files differ
diff --git a/data/icons/Makefile.am b/data/icons/Makefile.am
new file mode 100644
index 0000000..714218d
--- /dev/null
+++ b/data/icons/Makefile.am
@@ -0,0 +1,16 @@
+
+SUBDIRS = 16x16 48x48 scalable
+
+gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/hicolor
+
+install-data-hook:
+ @-if test -z "$(DESTDIR)"; then \
+ echo "Updating Gtk icon cache."; \
+ $(gtk_update_icon_cache); \
+ else \
+ echo "*** Icon cache not updated. After install, run this:"; \
+ echo "*** $(gtk_update_icon_cache)"; \
+ fi
+
+clean-local :
+ rm -f *~
diff --git a/data/icons/scalable/Makefile.am b/data/icons/scalable/Makefile.am
new file mode 100644
index 0000000..6e73d64
--- /dev/null
+++ b/data/icons/scalable/Makefile.am
@@ -0,0 +1,8 @@
+icondir = $(datadir)/icons/hicolor/scalable/apps
+icon_DATA = gfax.svg
+
+EXTRA_DIST = \
+ $(icon_DATA)
+
+clean-local :
+ rm -f *~
diff --git a/data/icons/scalable/gfax.svg b/data/icons/scalable/gfax.svg
new file mode 100644
index 0000000..8d1804a
--- /dev/null
+++ b/data/icons/scalable/gfax.svg
@@ -0,0 +1,1248 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ sodipodi:docname="fax-old.svg"
+ sodipodi:docbase="/home/mszulecki/Desktop"
+ inkscape:version="0.45.1"
+ sodipodi:version="0.32"
+ id="svg2994"
+ height="48"
+ width="48"
+ version="1.0"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/mszulecki/Desktop/fax-mid.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs3">
+ <linearGradient
+ id="linearGradient3489">
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="0"
+ id="stop3491" />
+ <stop
+ id="stop3497"
+ offset="0.5"
+ style="stop-color:#babdb6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1;"
+ offset="1"
+ id="stop3493" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3471">
+ <stop
+ style="stop-color:#2e3436;stop-opacity:1;"
+ offset="0"
+ id="stop3473" />
+ <stop
+ id="stop3487"
+ offset="0.5"
+ style="stop-color:#000000;stop-opacity:1;" />
+ <stop
+ style="stop-color:#8d999d;stop-opacity:1;"
+ offset="1"
+ id="stop3475" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3455">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop3457" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0.1875;"
+ offset="1"
+ id="stop3459" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3435">
+ <stop
+ style="stop-color:#eee9cc;stop-opacity:1;"
+ offset="0"
+ id="stop3437" />
+ <stop
+ style="stop-color:#c5bf9a;stop-opacity:1;"
+ offset="1"
+ id="stop3439" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3425">
+ <stop
+ style="stop-color:#5d5f5a;stop-opacity:0.61458331;"
+ offset="0"
+ id="stop3427" />
+ <stop
+ style="stop-color:#555753;stop-opacity:0;"
+ offset="1"
+ id="stop3429" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3393">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop3395" />
+ <stop
+ id="stop3401"
+ offset="0.39024389"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop3397" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3351">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0.51041669;"
+ offset="0"
+ id="stop3353" />
+ <stop
+ style="stop-color:#bbbbb3;stop-opacity:1;"
+ offset="1"
+ id="stop3355" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3343">
+ <stop
+ style="stop-color:#f7f5e8;stop-opacity:1;"
+ offset="0"
+ id="stop3345" />
+ <stop
+ style="stop-color:#b7ab6e;stop-opacity:1;"
+ offset="1"
+ id="stop3347" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3263">
+ <stop
+ style="stop-color:#d0dfef;stop-opacity:1;"
+ offset="0"
+ id="stop3265" />
+ <stop
+ id="stop3271"
+ offset="0.09756097"
+ style="stop-color:#639ad6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#1065bf;stop-opacity:1;"
+ offset="1"
+ id="stop3267" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3796">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop3798" />
+ <stop
+ id="stop3806"
+ offset="0.25"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop3804"
+ offset="0.5"
+ style="stop-color:#ffffff;stop-opacity:0.46875;" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0.36458334;"
+ offset="1"
+ id="stop3800" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3788">
+ <stop
+ style="stop-color:#f7f5e3;stop-opacity:1;"
+ offset="0"
+ id="stop3790" />
+ <stop
+ style="stop-color:#d8d3b7;stop-opacity:1;"
+ offset="1"
+ id="stop3792" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3678">
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="0"
+ id="stop3680" />
+ <stop
+ id="stop3686"
+ offset="0.5"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ style="stop-color:#818173;stop-opacity:1;"
+ offset="1"
+ id="stop3682" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5060">
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0"
+ id="stop5062" />
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="1"
+ id="stop5064" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5048">
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="0"
+ id="stop5050" />
+ <stop
+ id="stop5056"
+ offset="0.5"
+ style="stop-color:black;stop-opacity:1;" />
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="1"
+ id="stop5052" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4762">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0.12371134;"
+ offset="0.0000000"
+ id="stop4764" />
+ <stop
+ id="stop4768"
+ offset="0.10344828"
+ style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop4766" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4741">
+ <stop
+ id="stop4743"
+ offset="0.0000000"
+ style="stop-color:#dcdcda;stop-opacity:1.0000000;" />
+ <stop
+ id="stop4745"
+ offset="1.0000000"
+ style="stop-color:#bab9b7;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4733">
+ <stop
+ id="stop4735"
+ offset="0.0000000"
+ style="stop-color:#000000;stop-opacity:0.23711340;" />
+ <stop
+ id="stop4737"
+ offset="1"
+ style="stop-color:#000000;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4698">
+ <stop
+ id="stop4700"
+ offset="0.0000000"
+ style="stop-color:#fffffd;stop-opacity:1.0000000;" />
+ <stop
+ style="stop-color:#bbbbb9;stop-opacity:1.0000000;"
+ offset="0.50000000"
+ id="stop4706" />
+ <stop
+ id="stop4702"
+ offset="1.0000000"
+ style="stop-color:#000000;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4688">
+ <stop
+ id="stop4690"
+ offset="0.0000000"
+ style="stop-color:#666666;stop-opacity:1.0000000;" />
+ <stop
+ id="stop4692"
+ offset="1"
+ style="stop-color:#000000;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4680"
+ inkscape:collect="always">
+ <stop
+ id="stop4682"
+ offset="0"
+ style="stop-color:#f7f6f5;stop-opacity:1;" />
+ <stop
+ id="stop4684"
+ offset="1"
+ style="stop-color:#f7f6f5;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4668">
+ <stop
+ id="stop4670"
+ offset="0"
+ style="stop-color:#8e8d87;stop-opacity:1;" />
+ <stop
+ style="stop-color:#cbc9c1;stop-opacity:1.0000000;"
+ offset="0.27586207"
+ id="stop4676" />
+ <stop
+ id="stop4672"
+ offset="1.0000000"
+ style="stop-color:#8e8d87;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient259">
+ <stop
+ id="stop260"
+ offset="0.0000000"
+ style="stop-color:#e0e0e0;stop-opacity:1.0000000;" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1.0000000;"
+ offset="0.40546969"
+ id="stop4886" />
+ <stop
+ style="stop-color:#cdcdcd;stop-opacity:1.0000000;"
+ offset="0.53448278"
+ id="stop4884" />
+ <stop
+ id="stop261"
+ offset="1.0000000"
+ style="stop-color:#494949;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient15662">
+ <stop
+ id="stop15664"
+ offset="0.0000000"
+ style="stop-color:#ffffff;stop-opacity:0.0000000;" />
+ <stop
+ id="stop15666"
+ offset="1.0000000"
+ style="stop-color:#f8f8f8;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4698"
+ id="radialGradient2668"
+ gradientUnits="userSpaceOnUse"
+ cx="9.129549"
+ cy="26.925594"
+ fx="9.129549"
+ fy="26.925594"
+ r="2.1227016" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4733"
+ id="linearGradient3650"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.8039248,0,0,0.3481283,-49.369132,3.268642)"
+ x1="9.8698082"
+ y1="57.22765"
+ x2="9.9128132"
+ y2="72.064316" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4680"
+ id="linearGradient3654"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.3437951,0,0,0.4230498,-49.744657,2.5638724)"
+ x1="10.338233"
+ y1="64.65226"
+ x2="10.338233"
+ y2="54.136139" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4688"
+ id="linearGradient3656"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.3437951,0,0,0.4230498,-49.744657,2.5638724)"
+ x1="9.7316532"
+ y1="70.724976"
+ x2="9.7052784"
+ y2="62.282467" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient15662"
+ id="linearGradient3659"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2353602,0,0,0.9226533,-50.361327,0.655187)"
+ x1="20.771229"
+ y1="25.140253"
+ x2="20.7178"
+ y2="19.337463" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient259"
+ id="linearGradient3662"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.0096589,0,0,1.1913075,-51.065407,2.352236)"
+ x1="25.056711"
+ y1="3.6785457"
+ x2="24.789707"
+ y2="25.247311" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4762"
+ id="linearGradient3665"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4503119,0,0,0.6924193,-48.769105,2.391069)"
+ x1="15.387969"
+ y1="32.539238"
+ x2="15.487823"
+ y2="62.101261" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4741"
+ id="linearGradient3669"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.2915433,0,0,0.47548,-49.38983,0.652414)"
+ x1="1.845643"
+ y1="88.29493"
+ x2="18.972126"
+ y2="88.29493" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4668"
+ id="linearGradient3672"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.2775226,0,0,0.4671811,-49.160485,-0.3062291)"
+ x1="1.845643"
+ y1="88.29493"
+ x2="18.972126"
+ y2="88.29493" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5048"
+ id="linearGradient3718"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
+ x1="302.85715"
+ y1="366.64789"
+ x2="302.85715"
+ y2="609.50507" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5060"
+ id="radialGradient3720"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
+ cx="605.71429"
+ cy="486.64789"
+ fx="605.71429"
+ fy="486.64789"
+ r="117.14286" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5060"
+ id="radialGradient3722"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
+ cx="605.71429"
+ cy="486.64789"
+ fx="605.71429"
+ fy="486.64789"
+ r="117.14286" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3678"
+ id="linearGradient3759"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9725668,0,0,0.966689,7.25186e-2,-1.7436363)"
+ x1="28.109272"
+ y1="2.8554084"
+ x2="28.12031"
+ y2="24.4415" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3678"
+ id="linearGradient3778"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9725668,0,0,-0.4561618,7.2519e-2,56.030609)"
+ x1="28.109272"
+ y1="2.8554084"
+ x2="28.12031"
+ y2="24.4415" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3788"
+ id="linearGradient3794"
+ x1="26.21022"
+ y1="25.007664"
+ x2="44.195992"
+ y2="25.007664"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-9)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3796"
+ id="linearGradient3802"
+ x1="27.625"
+ y1="49.875004"
+ x2="11.5"
+ y2="18.879631"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-1)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3263"
+ id="linearGradient3269"
+ x1="15.976779"
+ y1="12.5"
+ x2="40.023181"
+ y2="12.5"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3263"
+ id="linearGradient3312"
+ gradientUnits="userSpaceOnUse"
+ x1="15.976779"
+ y1="12.5"
+ x2="40.023181"
+ y2="12.5" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3263"
+ id="linearGradient3314"
+ gradientUnits="userSpaceOnUse"
+ x1="15.976779"
+ y1="12.5"
+ x2="40.023181"
+ y2="12.5" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3343"
+ id="linearGradient3349"
+ x1="28.155239"
+ y1="27.000004"
+ x2="47.000004"
+ y2="42.745155"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3351"
+ id="linearGradient3357"
+ x1="28"
+ y1="27.993532"
+ x2="23.673998"
+ y2="18.758085"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3393"
+ id="linearGradient3399"
+ x1="27.294954"
+ y1="1.0549816"
+ x2="27.170763"
+ y2="15.897858"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3425"
+ id="radialGradient3431"
+ cx="3.2289779"
+ cy="42.688133"
+ fx="3.2289779"
+ fy="42.688133"
+ r="4.6581446"
+ gradientTransform="matrix(-1.0268566,3.9014044e-7,0,-0.7471463,6.5446771,74.55405)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3435"
+ id="linearGradient3444"
+ gradientUnits="userSpaceOnUse"
+ x1="0.5"
+ y1="28"
+ x2="10.5"
+ y2="28"
+ gradientTransform="matrix(1,0,0,1.0416667,0.5,-0.1666666)" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3455"
+ id="radialGradient3461"
+ cx="5.9611902"
+ cy="21.458408"
+ fx="5.9611902"
+ fy="21.458408"
+ r="3.5000001"
+ gradientTransform="matrix(-1.0259349,0,6.3570473e-8,-0.6060637,11.516743,32.565032)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3471"
+ id="linearGradient3477"
+ x1="23.813713"
+ y1="17.338293"
+ x2="24.034283"
+ y2="15.593145"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.0043458,0,0,0.6710068,-3.3332254e-2,5.4513908)" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3425"
+ id="radialGradient3426"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0268566,3.9014044e-7,0,-0.7471463,6.5446771,74.55405)"
+ cx="3.2289779"
+ cy="42.688133"
+ fx="3.2289779"
+ fy="42.688133"
+ r="4.6581446" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5048"
+ id="linearGradient3428"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
+ x1="302.85715"
+ y1="366.64789"
+ x2="302.85715"
+ y2="609.50507" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5060"
+ id="radialGradient3430"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
+ cx="605.71429"
+ cy="486.64789"
+ fx="605.71429"
+ fy="486.64789"
+ r="117.14286" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5060"
+ id="radialGradient3432"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
+ cx="605.71429"
+ cy="486.64789"
+ fx="605.71429"
+ fy="486.64789"
+ r="117.14286" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3343"
+ id="linearGradient3434"
+ gradientUnits="userSpaceOnUse"
+ x1="28.155239"
+ y1="27.000004"
+ x2="47.000004"
+ y2="42.745155"
+ gradientTransform="translate(70,0)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3788"
+ id="linearGradient3436"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(70,-9)"
+ x1="26.21022"
+ y1="25.007664"
+ x2="44.195992"
+ y2="25.007664" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3796"
+ id="linearGradient3438"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(70,-1)"
+ x1="27.625"
+ y1="49.875004"
+ x2="11.5"
+ y2="18.879631" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3471"
+ id="linearGradient3440"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.0043458,0,0,0.6710068,69.966668,5.4513908)"
+ x1="23.813713"
+ y1="17.338293"
+ x2="24.034283"
+ y2="15.593145" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3678"
+ id="linearGradient3442"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9725668,0,0,0.966689,70.072519,-1.7436363)"
+ x1="28.109272"
+ y1="2.8554084"
+ x2="28.12031"
+ y2="24.4415" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3393"
+ id="linearGradient3445"
+ gradientUnits="userSpaceOnUse"
+ x1="27.294954"
+ y1="1.0549816"
+ x2="27.170763"
+ y2="15.897858"
+ gradientTransform="translate(70,0)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3351"
+ id="linearGradient3447"
+ gradientUnits="userSpaceOnUse"
+ x1="28"
+ y1="27.993532"
+ x2="23.673998"
+ y2="18.758085"
+ gradientTransform="translate(70,0)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3263"
+ id="linearGradient3449"
+ gradientUnits="userSpaceOnUse"
+ x1="15.976779"
+ y1="12.5"
+ x2="40.023181"
+ y2="12.5" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3263"
+ id="linearGradient3451"
+ gradientUnits="userSpaceOnUse"
+ x1="15.976779"
+ y1="12.5"
+ x2="40.023181"
+ y2="12.5" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3263"
+ id="linearGradient3453"
+ gradientUnits="userSpaceOnUse"
+ x1="15.976779"
+ y1="12.5"
+ x2="40.023181"
+ y2="12.5" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3489"
+ id="linearGradient3456"
+ gradientUnits="userSpaceOnUse"
+ x1="14.5"
+ y1="33"
+ x2="14.5"
+ y2="31"
+ gradientTransform="translate(70,0)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3435"
+ id="linearGradient3458"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.0416667,70.5,-0.1666666)"
+ x1="0.5"
+ y1="28"
+ x2="10.5"
+ y2="28" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3455"
+ id="radialGradient3460"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.0259349,0,6.3570473e-8,-0.6060637,81.516743,32.565032)"
+ cx="5.9611902"
+ cy="21.458408"
+ fx="5.9611902"
+ fy="21.458408"
+ r="3.5000001" />
+ </defs>
+ <sodipodi:namedview
+ inkscape:window-y="96"
+ inkscape:window-x="696"
+ inkscape:window-height="1004"
+ inkscape:window-width="1113"
+ inkscape:guide-bbox="false"
+ showguides="true"
+ inkscape:document-units="px"
+ inkscape:grid-bbox="true"
+ showgrid="false"
+ inkscape:current-layer="g3375"
+ inkscape:cy="13.924883"
+ inkscape:cx="79.552498"
+ inkscape:zoom="8"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1"
+ bordercolor="#666"
+ pagecolor="#ffffff"
+ id="base"
+ inkscape:showpageshadow="false"
+ fill="#729fcf"
+ width="48px"
+ height="48px"
+ inkscape:object-paths="false"
+ showborder="true"
+ borderlayer="false" />
+ <metadata
+ id="metadata4">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title>Fax Device</dc:title>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Martin Szulecki</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <cc:license
+ rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
+ <dc:source>http://sukimashita.com</dc:source>
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>fax</rdf:li>
+ <rdf:li>print</rdf:li>
+ <rdf:li>hylafax</rdf:li>
+ <rdf:li>gfax</rdf:li>
+ <rdf:li>efax</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ </cc:Work>
+ <cc:License
+ rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/Reproduction" />
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/Distribution" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/Notice" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/Attribution" />
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/ShareAlike" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:groupmode="layer"
+ inkscape:label="Layer 1"
+ id="layer1" />
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="arrow">
+ <path
+ sodipodi:type="arc"
+ style="opacity:1;color:#000000;fill:url(#radialGradient3431);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path3423"
+ sodipodi:cx="3.1047866"
+ sodipodi:cy="42.566624"
+ sodipodi:rx="4.6571798"
+ sodipodi:ry="3.5705044"
+ d="M 7.5941186,41.616692 A 4.6571798,3.5705044 0 1 1 7.5847913,41.591153"
+ sodipodi:start="6.0138927"
+ sodipodi:end="12.28965"
+ sodipodi:open="true"
+ transform="matrix(1.0733887,0,0,0.823545,3.6544202,9.3203376)" />
+ <path
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#2e3436;stroke-width:1px;stroke-linecap:square;stroke-linejoin:round;stroke-opacity:1"
+ d="M 5.7128073,42.225097 C 7.7619664,48.620957 10.804657,39.120311 10.804657,39.120311"
+ id="path3499"
+ sodipodi:nodetypes="cc" />
+ <g
+ transform="matrix(2.0685234e-2,0,0,2.0904881e-2,45.398183,41.150299)"
+ id="g3409"
+ style="display:inline">
+ <rect
+ style="opacity:0.40206185;color:#000000;fill:url(#linearGradient3718);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="rect3411"
+ width="1339.6335"
+ height="478.35718"
+ x="-1559.2523"
+ y="-150.69685" />
+ <path
+ style="opacity:0.40206185;color:#000000;fill:url(#radialGradient3720);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
+ id="path3413"
+ sodipodi:nodetypes="cccc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ id="path3415"
+ d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
+ style="opacity:0.40206185;color:#000000;fill:url(#radialGradient3722);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ <rect
+ ry="0.54325145"
+ rx="0.40263012"
+ y="34.5"
+ x="12.5"
+ height="8.999999"
+ width="31"
+ id="rect3755"
+ style="opacity:1;color:#000000;fill:#a49d7e;fill-opacity:1;fill-rule:evenodd;stroke:#555753;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <path
+ style="color:#000000;fill:url(#linearGradient3349);fill-opacity:1.0;fill-rule:evenodd;stroke:#555753;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 7.039924,12.500002 L 43.960079,12.500002 L 46.500002,18.043253 L 46.500002,40.95675 C 46.500002,41.257712 46.310168,41.500002 46.074364,41.500002 C 33.861018,42.482624 16.807814,42.504394 4.9256378,41.500002 C 4.6898347,41.500002 4.5000004,41.257712 4.5000004,40.95675 L 4.5000004,18.043253 L 7.039924,12.500002 z "
+ id="rect3742"
+ sodipodi:nodetypes="ccccccccc" />
+ <path
+ style="color:#000000;fill:#eeeeec;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 7.902631,13.500002 L 43.09737,13.500002 L 45.5,18.515324 L 5.5,18.515324 L 7.902631,13.500002 z "
+ id="path3784"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path3786"
+ d="M 7.902631,13.500002 L 43.09737,13.500002 L 45.5,18.515324 L 5.5,18.515324 L 7.902631,13.500002 z "
+ style="color:#000000;fill:url(#linearGradient3794);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <path
+ sodipodi:nodetypes="ccccccccc"
+ id="path3780"
+ d="M 7.77844,13.500002 L 43.283657,13.500002 L 45.5,18.515324 L 45.5,40.008488 C 45.5,40.280787 45.320427,40.500002 45.09737,40.500002 C 33.316133,41.216954 17.064965,41.412566 5.90263,40.500002 C 5.679573,40.500002 5.5,40.280787 5.5,40.008488 L 5.5,18.515324 L 7.77844,13.500002 z "
+ style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3802);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;opacity:0.48255814" />
+ <path
+ style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3477);stroke-width:0.99999988;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 13.687637,16.187905 L 42.249726,16.187905 L 42.499998,16.750001 L 13.499999,16.750001 L 13.687637,16.187905 z "
+ id="rect3808"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="color:#000000;fill:url(#linearGradient3759);fill-opacity:1;fill-rule:evenodd;stroke:#555753;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 15.466779,1.5 L 40.533222,1.5 C 41.068817,1.5 41.500001,1.974201 41.500001,2.56323 L 41.500001,16.500001 L 14.5,16.500001 L 14.5,2.56323 C 14.5,1.974201 14.931184,1.5 15.466779,1.5 z "
+ id="rect2672"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3399);stroke-width:0.99999988;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 15.872806,2.5 L 40.127195,2.5 C 40.333729,2.5 40.5,2.736603 40.5,3.030499 L 40.5,16.500001 L 15.5,16.500001 L 15.5,3.030499 C 15.5,2.736603 15.666271,2.5 15.872806,2.5 z "
+ id="rect3693"
+ sodipodi:nodetypes="ccccccc" />
+ <g
+ id="g3744"
+ transform="matrix(0.9132085,0,0,1,2.4301717,-1)">
+ <path
+ id="path3704"
+ d="M 16.500039,7.5 L 39.49996,7.5"
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#babdb6;stroke-width:1.04644144px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#babdb6;stroke-width:1.04644144px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 16.500039,9.5 L 39.49996,9.5"
+ id="path3706" />
+ <path
+ id="path3708"
+ d="M 16.500039,11.5 L 39.49996,11.5"
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#babdb6;stroke-width:1.04644144px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#babdb6;stroke-width:1.04644144px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 16.5,13.5 L 27.999997,13.5"
+ id="path3710" />
+ <path
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#babdb6;stroke-width:1.04644144px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 16.500039,5.5 L 39.49996,5.5"
+ id="path3716" />
+ </g>
+ <path
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;opacity:0.5755814"
+ d="M 5.50004,18.5 L 45.499958,18.5"
+ id="path3782"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="color:#000000;fill:#2e3436;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3357);stroke-width:0.99999988;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;opacity:1"
+ d="M 13.5,20.5 L 43.5,20.5 L 43.120957,26.5 L 13.816947,26.5 L 13.5,20.5 z "
+ id="rect2266"
+ sodipodi:nodetypes="ccccc" />
+ <g
+ transform="matrix(0.9132085,0,0,1,0.4301713,11)"
+ id="g3251"
+ style="fill:none;stroke:url(#linearGradient3269)">
+ <path
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:url(#linearGradient3312);stroke-width:1.04644144px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 16.500039,11.5 L 31.834679,11.5"
+ id="path3257"
+ sodipodi:nodetypes="cc" />
+ <path
+ id="path3259"
+ d="M 16.5,13.5 L 23.619836,13.5"
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:url(#linearGradient3314);stroke-width:1.04644144px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
+ sodipodi:nodetypes="cc" />
+ </g>
+ <path
+ sodipodi:type="arc"
+ style="opacity:1;color:#000000;fill:#ef2929;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path3274"
+ sodipodi:cx="33.780079"
+ sodipodi:cy="38.934025"
+ sodipodi:rx="1.1177231"
+ sodipodi:ry="1.1177231"
+ d="M 34.857519,38.636655 A 1.1177231,1.1177231 0 1 1 34.85528,38.62866"
+ sodipodi:start="6.0138927"
+ sodipodi:end="12.28965"
+ sodipodi:open="true"
+ transform="matrix(1.341736,0,0,1.3417094,-12.823948,-15.738115)" />
+ <path
+ transform="matrix(1.341736,0,0,1.3417094,-4.8239479,-15.738117)"
+ sodipodi:open="true"
+ sodipodi:end="12.28965"
+ sodipodi:start="6.0138927"
+ d="M 34.857519,38.636655 A 1.1177231,1.1177231 0 1 1 34.85528,38.62866"
+ sodipodi:ry="1.1177231"
+ sodipodi:rx="1.1177231"
+ sodipodi:cy="38.934025"
+ sodipodi:cx="33.780079"
+ id="path3276"
+ style="opacity:1;color:#000000;fill:#729fcf;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:1;color:#000000;fill:#babdb6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path3278"
+ sodipodi:cx="33.780079"
+ sodipodi:cy="38.934025"
+ sodipodi:rx="1.1177231"
+ sodipodi:ry="1.1177231"
+ d="M 34.857519,38.636655 A 1.1177231,1.1177231 0 1 1 34.85528,38.62866"
+ sodipodi:start="6.0138927"
+ sodipodi:end="12.28965"
+ sodipodi:open="true"
+ transform="matrix(1.341736,0,0,1.3417094,-8.8239479,-15.738115)" />
+ <rect
+ style="opacity:1;color:#000000;fill:#555753;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="rect3282"
+ width="2"
+ height="1"
+ x="13"
+ y="28" />
+ <rect
+ y="31"
+ x="17"
+ height="2"
+ width="3"
+ id="rect3286"
+ style="opacity:1;color:#000000;fill:#aaada5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <rect
+ style="opacity:1;color:#000000;fill:#aaada5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="rect3288"
+ width="3"
+ height="2"
+ x="21"
+ y="31" />
+ <rect
+ y="34"
+ x="13"
+ height="2"
+ width="3"
+ id="rect3290"
+ style="opacity:1;color:#000000;fill:#aaada5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <rect
+ style="opacity:1;color:#000000;fill:#aaada5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="rect3292"
+ width="3"
+ height="2"
+ x="17"
+ y="34" />
+ <rect
+ y="34"
+ x="21"
+ height="2"
+ width="3"
+ id="rect3294"
+ style="opacity:1;color:#000000;fill:#aaada5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <rect
+ style="opacity:1;color:#000000;fill:#aaada5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="rect3296"
+ width="3"
+ height="2"
+ x="13"
+ y="37" />
+ <rect
+ y="37"
+ x="17"
+ height="2"
+ width="3"
+ id="rect3298"
+ style="opacity:1;color:#000000;fill:#aaada5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <rect
+ style="opacity:1;color:#000000;fill:#aaada5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="rect3300"
+ width="3"
+ height="2"
+ x="21"
+ y="37" />
+ <rect
+ y="31"
+ x="25"
+ height="2"
+ width="3"
+ id="rect3324"
+ style="opacity:1;color:#000000;fill:#aaada5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <rect
+ style="opacity:1;color:#000000;fill:#aaada5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="rect3326"
+ width="3"
+ height="2"
+ x="25"
+ y="34" />
+ <rect
+ y="37"
+ x="25"
+ height="2"
+ width="3"
+ id="rect3328"
+ style="opacity:1;color:#000000;fill:#aaada5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <path
+ style="color:#000000;fill:#ffffff;fill-opacity:0.38853502;fill-rule:evenodd;stroke:none;stroke-width:0.99999988;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 14.177094,26.116106 C 23.139516,20.634402 33.449536,24.644887 42.78501,21.06533 C 33.189064,21.06533 23.593117,21.06533 13.99717,21.06533 C 14.057145,22.748922 14.11712,24.432515 14.177094,26.116106 z "
+ id="path3330" />
+ <g
+ id="g3375"
+ transform="translate(0,-1)">
+ <rect
+ style="opacity:1;color:#000000;fill:#babdb6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="rect3304"
+ width="2"
+ height="1"
+ x="31"
+ y="31" />
+ <rect
+ y="31"
+ x="34"
+ height="1"
+ width="2"
+ id="rect3306"
+ style="opacity:1;color:#000000;fill:#babdb6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <rect
+ style="opacity:1;color:#000000;fill:#babdb6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="rect3308"
+ width="2"
+ height="1"
+ x="37"
+ y="31" />
+ <rect
+ y="31"
+ x="40"
+ height="1"
+ width="2"
+ id="rect3310"
+ style="opacity:1;color:#000000;fill:#babdb6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <rect
+ y="33"
+ x="31"
+ height="1"
+ width="2"
+ id="rect3316"
+ style="opacity:1;color:#000000;fill:#babdb6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <rect
+ style="opacity:1;color:#000000;fill:#babdb6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="rect3318"
+ width="2"
+ height="1"
+ x="34"
+ y="33" />
+ <rect
+ y="33"
+ x="37"
+ height="1"
+ width="2"
+ id="rect3320"
+ style="opacity:1;color:#000000;fill:#babdb6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <rect
+ style="opacity:1;color:#000000;fill:#babdb6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="rect3322"
+ width="2"
+ height="1"
+ x="40"
+ y="33" />
+ <rect
+ y="30"
+ x="31"
+ height="1"
+ width="2"
+ id="rect3359"
+ style="opacity:1;color:#000000;fill:#f7f8f7;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <rect
+ style="opacity:1;color:#000000;fill:#f7f8f7;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="rect3361"
+ width="2"
+ height="1"
+ x="34"
+ y="30" />
+ <rect
+ y="30"
+ x="37"
+ height="1"
+ width="2"
+ id="rect3363"
+ style="opacity:1;color:#000000;fill:#f7f8f7;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <rect
+ style="opacity:1;color:#000000;fill:#f7f8f7;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="rect3365"
+ width="2"
+ height="1"
+ x="40"
+ y="30" />
+ <rect
+ style="opacity:1;color:#000000;fill:#f7f8f7;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="rect3367"
+ width="2"
+ height="1"
+ x="31"
+ y="32" />
+ <rect
+ y="32"
+ x="34"
+ height="1"
+ width="2"
+ id="rect3369"
+ style="opacity:1;color:#000000;fill:#f7f8f7;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <rect
+ style="opacity:1;color:#000000;fill:#f7f8f7;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="rect3371"
+ width="2"
+ height="1"
+ x="37"
+ y="32" />
+ <rect
+ y="32"
+ x="40"
+ height="1"
+ width="2"
+ id="rect3373"
+ style="opacity:1;color:#000000;fill:#f7f8f7;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ <rect
+ y="28"
+ x="16"
+ height="1"
+ width="2"
+ id="rect3407"
+ style="opacity:1;color:#000000;fill:#555753;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <path
+ style="color:#000000;fill:url(#linearGradient3444);fill-opacity:1;fill-rule:evenodd;stroke:#555753;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 3.114489,16.500001 L 8.885511,16.500001 C 9.779938,16.500001 10.5,17.307763 10.5,18.311127 L 10.5,39.688875 C 10.5,40.692239 9.7799379,41.500001 8.885511,41.500001 L 3.114489,41.500001 C 2.2200621,41.500001 1.5,40.692239 1.5,39.688875 L 1.5,18.311127 C 1.5,17.307763 2.2200621,16.500001 3.114489,16.500001 z "
+ id="rect3433"
+ sodipodi:nodetypes="ccccccccc" />
+ <path
+ sodipodi:nodetypes="ccccccccc"
+ id="path3446"
+ d="M 3.889701,17.499999 L 8.0482037,17.437903 C 8.8265283,17.437903 9.6015241,17.543153 9.4773326,19.025108 L 9.5000003,38.833763 C 9.5000003,39.756858 8.9733878,40.499999 8.3192547,40.499999 L 3.6807457,40.499999 C 3.0266126,40.499999 2.5,39.756858 2.5,38.833763 L 2.7089553,18.776725 C 2.7089553,17.853631 3.2355678,17.499999 3.889701,17.499999 z "
+ style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;opacity:0.44186047" />
+ <path
+ style="color:#000000;fill:url(#radialGradient3461);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 3.2559592,17.348709 L 7.5620191,17.31371 C 8.3679612,17.31371 9.1704568,17.373033 9.0418583,18.208316 L 9.0653299,22.045922 L 1.816947,22.045922 L 2.0333167,18.068318 C 2.0333167,17.548029 2.5786153,17.348709 3.2559592,17.348709 z "
+ id="path3453"
+ sodipodi:nodetypes="ccccccc" />
+ <rect
+ style="opacity:1;color:#000000;fill:#aaada5;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="rect3463"
+ width="3"
+ height="2"
+ x="13"
+ y="31" />
+ </g>
+</svg>
diff --git a/gfax.in b/gfax.in
new file mode 100755
index 0000000..6079139
--- /dev/null
+++ b/gfax.in
@@ -0,0 +1,37 @@
+#!/bin/bash
+# GFAX - Gnome fax application
+# Copyright (C) 2003 - 2008 George A. Farris
+#
+# 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 3 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 Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+RNAME=G$$
+# don't change this spool directory, gfax uses it.
+SPOOL_DIR=~/.local/share/gfax/spool
+STD=no
+
+if [ -s /dev/stdin ]; then
+ cat > $SPOOL_DIR/D.$RNAME
+ STD=yes
+fi
+
+if [ $STD = "yes" ]; then
+ exec mono @prefix@/lib/gfax/gfax.exe -f $SPOOL_DIR/D.$RNAME &
+ #rm -f $SPOOL_DIR/D.$RNAME
+ exit 0
+fi
+
+# If it's not a fax piped in on stdin, pass everything straight through to
+# mono-gfax.
+mono @prefix@/lib/gfax/gfax.exe $@
diff --git a/glade/gfax.glade b/glade/gfax.glade
new file mode 100644
index 0000000..b25fec0
--- /dev/null
+++ b/glade/gfax.glade
@@ -0,0 +1,5532 @@
+<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
+<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
+
+<glade-interface>
+<requires lib="gnome"/>
+<requires lib="bonobo"/>
+
+<widget class="GnomeApp" id="GfaxWindow">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Gfax</property>
+ <property name="type">GTK_WINDOW_TOPLEVEL</property>
+ <property name="window_position">GTK_WIN_POS_NONE</property>
+ <property name="modal">False</property>
+ <property name="default_width">639</property>
+ <property name="default_height">479</property>
+ <property name="resizable">True</property>
+ <property name="destroy_with_parent">False</property>
+ <property name="decorated">True</property>
+ <property name="skip_taskbar_hint">False</property>
+ <property name="skip_pager_hint">False</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
+ <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+ <property name="focus_on_map">True</property>
+ <property name="urgency_hint">False</property>
+ <property name="enable_layout_config">True</property>
+ <signal name="delete_event" handler="on_mainWindow_delete_event" last_modification_time="Fri, 24 Jan 2003 22:07:16 GMT"/>
+ <signal name="window_state_event" handler="on_mainWindow_window_state_event" last_modification_time="Fri, 02 May 2008 21:07:10 GMT"/>
+
+ <child internal-child="dock">
+ <widget class="BonoboDock" id="dock1">
+ <property name="visible">True</property>
+ <property name="allow_floating">True</property>
+
+ <child>
+ <widget class="BonoboDockItem" id="dockitem1">
+ <property name="visible">True</property>
+ <property name="shadow_type">GTK_SHADOW_OUT</property>
+
+ <child>
+ <widget class="GtkMenuBar" id="menubar1">
+ <property name="visible">True</property>
+ <property name="pack_direction">GTK_PACK_DIRECTION_LTR</property>
+ <property name="child_pack_direction">GTK_PACK_DIRECTION_LTR</property>
+
+ <child>
+ <widget class="GtkMenuItem" id="file1">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Fax</property>
+ <property name="use_underline">True</property>
+
+ <child>
+ <widget class="GtkMenu" id="file1_menu">
+
+ <child>
+ <widget class="GtkImageMenuItem" id="newfax">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">New Fax</property>
+ <property name="use_underline">True</property>
+ <signal name="activate" handler="on_newfax_activate"/>
+ <accelerator key="N" modifiers="GDK_CONTROL_MASK" signal="activate"/>
+
+ <child internal-child="image">
+ <widget class="GtkImage" id="image38">
+ <property name="visible">True</property>
+ <property name="stock">gtk-new</property>
+ <property name="icon_size">1</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkSeparatorMenuItem" id="separator1">
+ <property name="visible">True</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkImageMenuItem" id="exit1">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Exit</property>
+ <property name="use_underline">True</property>
+ <signal name="activate" handler="on_exit1_activate"/>
+ <accelerator key="Q" modifiers="GDK_CONTROL_MASK" signal="activate"/>
+
+ <child internal-child="image">
+ <widget class="GtkImage" id="image39">
+ <property name="visible">True</property>
+ <property name="stock">gtk-quit</property>
+ <property name="icon_size">1</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkMenuItem" id="edit1">
+ <property name="visible">True</property>
+ <property name="stock_item">GNOMEUIINFO_MENU_EDIT_TREE</property>
+
+ <child>
+ <widget class="GtkMenu" id="edit1_menu">
+
+ <child>
+ <widget class="GtkImageMenuItem" id="preferences">
+ <property name="visible">True</property>
+ <property name="stock_item">GNOMEUIINFO_MENU_PREFERENCES_ITEM</property>
+ <signal name="activate" handler="on_preferences_activate" last_modification_time="Sat, 10 Dec 2005 22:01:40 GMT"/>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkMenuItem" id="settings1">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Settings</property>
+ <property name="use_underline">True</property>
+
+ <child>
+ <widget class="GtkMenu" id="settings1_menu">
+
+ <child>
+ <widget class="GtkCheckMenuItem" id="AutoQRefreshCheckMenuItem">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Auto Refresh Queue</property>
+ <property name="use_underline">True</property>
+ <property name="active">False</property>
+ <signal name="activate" handler="on_auto_queue_refresh_check_menu_item_activate" last_modification_time="Thu, 15 May 2003 20:30:47 GMT"/>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkCheckMenuItem" id="EmailNotificationCheckMenuItem">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">E-Mail Notification</property>
+ <property name="use_underline">True</property>
+ <property name="active">False</property>
+ <signal name="activate" handler="on_email_notification_check_menu_item_activate" last_modification_time="Thu, 15 May 2003 20:30:47 GMT"/>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkCheckMenuItem" id="HiResolutionModeCheckMenuItem">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Hi Resolution Mode</property>
+ <property name="use_underline">True</property>
+ <property name="active">False</property>
+ <signal name="activate" handler="on_hi_resolution_mode_check_menu_item_activate" last_modification_time="Thu, 15 May 2003 20:30:47 GMT"/>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkCheckMenuItem" id="LogEnabledCheckMenuItem">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Log Enabled</property>
+ <property name="use_underline">True</property>
+ <property name="active">False</property>
+ <signal name="activate" handler="on_log_enabled_check_menu_item_activate" last_modification_time="Sat, 26 Apr 2003 18:01:22 GMT"/>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkCheckMenuItem" id="FaxTracingCheckMenuItem">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Fax Tracing </property>
+ <property name="use_underline">True</property>
+ <property name="active">False</property>
+ <signal name="activate" handler="on_fax_tracing_check_menuItem_activate" last_modification_time="Fri, 09 May 2008 21:57:13 GMT"/>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkMenuItem" id="help1">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Help</property>
+ <property name="use_underline">True</property>
+
+ <child>
+ <widget class="GtkMenu" id="help1_menu">
+
+ <child>
+ <widget class="GtkImageMenuItem" id="about1">
+ <property name="visible">True</property>
+ <property name="stock_item">GNOMEUIINFO_MENU_ABOUT_ITEM</property>
+ <signal name="activate" handler="on_about_activate"/>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="placement">BONOBO_DOCK_TOP</property>
+ <property name="band">0</property>
+ <property name="position">0</property>
+ <property name="offset">0</property>
+ <property name="behavior">BONOBO_DOCK_ITEM_BEH_EXCLUSIVE|BONOBO_DOCK_ITEM_BEH_NEVER_VERTICAL</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="BonoboDockItem" id="MainDock">
+ <property name="visible">True</property>
+ <property name="shadow_type">GTK_SHADOW_OUT</property>
+
+ <child>
+ <widget class="GtkToolbar" id="mainToolbar">
+ <property name="visible">True</property>
+ <property name="orientation">GTK_ORIENTATION_HORIZONTAL</property>
+ <property name="toolbar_style">GTK_TOOLBAR_BOTH_HORIZ</property>
+ <property name="tooltips">True</property>
+ <property name="show_arrow">True</property>
+
+ <child>
+ <widget class="GtkToolButton" id="NewFaxButton">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">New Fax</property>
+ <property name="use_underline">True</property>
+ <property name="stock_id">gtk-new</property>
+ <property name="visible_horizontal">True</property>
+ <property name="visible_vertical">True</property>
+ <property name="is_important">True</property>
+ <signal name="clicked" handler="on_NewFaxButton_clicked" last_modification_time="Mon, 24 Mar 2003 23:31:10 GMT"/>
+ <accelerator key="N" modifiers="GDK_CONTROL_MASK" signal="clicked"/>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="homogeneous">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkToolButton" id="PhonebookButton">
+ <property name="visible">True</property>
+ <property name="tooltip" translatable="yes">Open phone book</property>
+ <property name="label" translatable="yes">Phone Book</property>
+ <property name="use_underline">True</property>
+ <property name="visible_horizontal">True</property>
+ <property name="visible_vertical">True</property>
+ <property name="is_important">True</property>
+ <signal name="clicked" handler="on_PhonebookButton_clicked" last_modification_time="Mon, 24 Mar 2003 23:31:58 GMT"/>
+ <accelerator key="B" modifiers="GDK_CONTROL_MASK" signal="clicked"/>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="homogeneous">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkSeparatorToolItem" id="separatortoolitem1">
+ <property name="visible">True</property>
+ <property name="draw">True</property>
+ <property name="visible_horizontal">True</property>
+ <property name="visible_vertical">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="homogeneous">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkToolButton" id="exitButton">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Exit</property>
+ <property name="use_underline">True</property>
+ <property name="stock_id">gtk-quit</property>
+ <property name="visible_horizontal">True</property>
+ <property name="visible_vertical">True</property>
+ <property name="is_important">True</property>
+ <signal name="clicked" handler="on_exitButton_clicked"/>
+ <accelerator key="Q" modifiers="GDK_CONTROL_MASK" signal="clicked"/>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="homogeneous">True</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="placement">BONOBO_DOCK_TOP</property>
+ <property name="band">1</property>
+ <property name="position">0</property>
+ <property name="offset">0</property>
+ <property name="behavior">BONOBO_DOCK_ITEM_BEH_EXCLUSIVE</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkVBox" id="vbox69">
+ <property name="border_width">6</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">12</property>
+
+ <child>
+ <widget class="GtkNotebook" id="StatusNotebook">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="show_tabs">True</property>
+ <property name="show_border">True</property>
+ <property name="tab_pos">GTK_POS_TOP</property>
+ <property name="scrollable">False</property>
+ <property name="enable_popup">False</property>
+ <signal name="switch_page" handler="on_StatusNotebook_switch_page"/>
+
+ <child>
+ <widget class="GtkVBox" id="vbox72">
+ <property name="border_width">6</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">6</property>
+
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow26">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+
+ <child>
+ <widget class="GtkTreeView" id="StatusList">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="headers_visible">True</property>
+ <property name="rules_hint">True</property>
+ <property name="reorderable">False</property>
+ <property name="enable_search">True</property>
+ <property name="fixed_height_mode">False</property>
+ <property name="hover_selection">False</property>
+ <property name="hover_expand">False</property>
+ <signal name="row_activated" handler="on_StatusList_row_activated" last_modification_time="Fri, 17 Nov 2006 21:52:23 GMT"/>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHBox" id="hbox51">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">6</property>
+
+ <child>
+ <widget class="GtkLabel" id="label409">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkButton" id="DeleteJobButton">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <signal name="clicked" handler="on_DeleteJobButton_clicked"/>
+
+ <child>
+ <widget class="GtkAlignment" id="alignment10">
+ <property name="visible">True</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+ <property name="top_padding">0</property>
+ <property name="bottom_padding">0</property>
+ <property name="left_padding">0</property>
+ <property name="right_padding">0</property>
+
+ <child>
+ <widget class="GtkHBox" id="hbox51">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">2</property>
+
+ <child>
+ <widget class="GtkImage" id="image27">
+ <property name="visible">True</property>
+ <property name="stock">gtk-cancel</property>
+ <property name="icon_size">4</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label424">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Cancel Job</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkButton" id="ModifyJobButton">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <signal name="clicked" handler="on_ModifyJobButton_clicked" last_modification_time="Tue, 20 Dec 2005 19:42:49 GMT"/>
+
+ <child>
+ <widget class="GtkAlignment" id="alignment11">
+ <property name="visible">True</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+ <property name="top_padding">0</property>
+ <property name="bottom_padding">0</property>
+ <property name="left_padding">0</property>
+ <property name="right_padding">0</property>
+
+ <child>
+ <widget class="GtkHBox" id="hbox59">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">2</property>
+
+ <child>
+ <widget class="GtkImage" id="image34">
+ <property name="visible">True</property>
+ <property name="stock">gtk-edit</property>
+ <property name="icon_size">4</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label425">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Modify Job</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="tab_expand">False</property>
+ <property name="tab_fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label404">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Facsimiles to Send</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow28">
+ <property name="border_width">6</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+
+ <child>
+ <widget class="GtkTreeView" id="JobsCompleteList">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="headers_visible">True</property>
+ <property name="rules_hint">True</property>
+ <property name="reorderable">False</property>
+ <property name="enable_search">True</property>
+ <property name="fixed_height_mode">False</property>
+ <property name="hover_selection">False</property>
+ <property name="hover_expand">False</property>
+ <signal name="row_activated" handler="on_JobsCompleteList_row_activated" last_modification_time="Fri, 17 Nov 2006 21:52:12 GMT"/>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="tab_expand">False</property>
+ <property name="tab_fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label405">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Completed Jobs</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkVBox" id="vbox75">
+ <property name="border_width">6</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">6</property>
+
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow27">
+ <property name="border_width">6</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+
+ <child>
+ <widget class="GtkTreeView" id="JobsReceivedList">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="headers_visible">True</property>
+ <property name="rules_hint">True</property>
+ <property name="reorderable">False</property>
+ <property name="enable_search">True</property>
+ <property name="fixed_height_mode">False</property>
+ <property name="hover_selection">False</property>
+ <property name="hover_expand">False</property>
+ <signal name="row_activated" handler="on_JobsReceivedList_row_activated" last_modification_time="Fri, 17 Nov 2006 20:09:02 GMT"/>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHBox" id="hbox60">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkLabel" id="label427">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkButton" id="ViewPrintButton">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <signal name="clicked" handler="on_ViewPrintButton_clicked" last_modification_time="Mon, 16 Oct 2006 18:22:45 GMT"/>
+
+ <child>
+ <widget class="GtkAlignment" id="alignment12">
+ <property name="visible">True</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+ <property name="top_padding">0</property>
+ <property name="bottom_padding">0</property>
+ <property name="left_padding">0</property>
+ <property name="right_padding">0</property>
+
+ <child>
+ <widget class="GtkHBox" id="hbox61">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">2</property>
+
+ <child>
+ <widget class="GtkImage" id="image35">
+ <property name="visible">True</property>
+ <property name="stock">gtk-print-preview</property>
+ <property name="icon_size">4</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label429">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">View / Print</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkButton" id="RecvfaxDeleteButton">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <signal name="clicked" handler="on_RecvfaxDeleteButton_clicked" last_modification_time="Wed, 25 Oct 2006 20:15:55 GMT"/>
+
+ <child>
+ <widget class="GtkAlignment" id="alignment13">
+ <property name="visible">True</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+ <property name="top_padding">0</property>
+ <property name="bottom_padding">0</property>
+ <property name="left_padding">0</property>
+ <property name="right_padding">0</property>
+
+ <child>
+ <widget class="GtkHBox" id="hbox63">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">2</property>
+
+ <child>
+ <widget class="GtkImage" id="image36">
+ <property name="visible">True</property>
+ <property name="stock">gtk-delete</property>
+ <property name="icon_size">4</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label432">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Delete</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">6</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="tab_expand">False</property>
+ <property name="tab_fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label406">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Received Facsimiles</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkVBox" id="vbox70">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">6</property>
+
+ <child>
+ <widget class="GtkLabel" id="label407">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Fax Status:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow25">
+ <property name="height_request">80</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+
+ <child>
+ <widget class="GtkTextView" id="StatusText">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="overwrite">False</property>
+ <property name="accepts_tab">True</property>
+ <property name="justification">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap_mode">GTK_WRAP_NONE</property>
+ <property name="cursor_visible">True</property>
+ <property name="pixels_above_lines">0</property>
+ <property name="pixels_below_lines">0</property>
+ <property name="pixels_inside_wrap">0</property>
+ <property name="left_margin">0</property>
+ <property name="right_margin">0</property>
+ <property name="indent">0</property>
+ <property name="text" translatable="yes"></property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child internal-child="appbar">
+ <widget class="GnomeAppBar" id="Appbar">
+ <property name="visible">True</property>
+ <property name="has_progress">True</property>
+ <property name="has_status">True</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+</widget>
+
+<widget class="GtkWindow" id="FirstTimeWindow">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Gfax - New user setup</property>
+ <property name="type">GTK_WINDOW_TOPLEVEL</property>
+ <property name="window_position">GTK_WIN_POS_NONE</property>
+ <property name="modal">False</property>
+ <property name="resizable">True</property>
+ <property name="destroy_with_parent">False</property>
+ <property name="decorated">True</property>
+ <property name="skip_taskbar_hint">False</property>
+ <property name="skip_pager_hint">False</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
+ <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+ <property name="focus_on_map">True</property>
+ <property name="urgency_hint">False</property>
+ <signal name="delete_event" handler="on_FirstTimeWindow_delete_event" last_modification_time="Tue, 18 Mar 2003 05:27:05 GMT"/>
+
+ <child>
+ <widget class="GnomeDruid" id="FirstTimeDruid">
+ <property name="border_width">4</property>
+ <property name="visible">True</property>
+ <property name="show_help">False</property>
+ <signal name="cancel" handler="on_FirstTimeDruid_cancel" last_modification_time="Tue, 18 Mar 2003 05:34:00 GMT"/>
+
+ <child>
+ <widget class="GnomeDruidPageEdge" id="FirstTimeDruidPageStart">
+ <property name="visible">True</property>
+ <property name="position">GNOME_EDGE_START</property>
+ <property name="title" translatable="yes">Gfax - Gnome facsimile program</property>
+ <property name="text" translatable="yes">Welcome to Gfax!
+
+
+Gfax is a GNOME facsimile program that provides
+the familiar &quot;popup&quot; window when printing to a fax
+printer.
+
+The following pages will help you to setup Gfax.</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GnomeDruidPageStandard" id="druidpagestandard5">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Gfax - Facsimile Transport Agent</property>
+
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="druid-vbox5">
+ <property name="border_width">16</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">6</property>
+
+ <child>
+ <widget class="GtkVBox" id="vbox34">
+ <property name="border_width">16</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkVBox" id="vbox35">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkLabel" id="label211">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">First we must choose a transport agent.
+
+A transport agent is a software package that is responsible for
+actually sending the facsimile with your modem. If you don't have
+one of these installed you should hit cancel here and install
+a transport agent first.
+
+Transport agents can be found at the following URL's but you should
+check your distribution CD first..
+
+Hylafax - http://www.hylafax.org
+Efax - http://www.cce.com/efax</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">2</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkFrame" id="frame18">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="label_yalign">0.5</property>
+ <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+
+ <child>
+ <widget class="GtkHBox" id="hbox18">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkVBox" id="vbox36">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkVBox" id="vbox37">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkRadioButton" id="HylafaxRadioButton">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Hylafax - Choose this for network faxing.</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <signal name="clicked" handler="on_HylafaxRadioButton_clicked" last_modification_time="Sat, 22 Mar 2003 18:12:08 GMT"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkRadioButton" id="EfaxRadioButton">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Efax</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">True</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">HylafaxRadioButton</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label212">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Transport Agent</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">5</property>
+ <property name="expand">True</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GnomeDruidPageStandard" id="druidpagestandard6">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Gfax - Modem Selection</property>
+
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="druid-vbox6">
+ <property name="border_width">16</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">6</property>
+
+ <child>
+ <widget class="GtkNotebook" id="AgentTab">
+ <property name="visible">True</property>
+ <property name="show_tabs">False</property>
+ <property name="show_border">False</property>
+ <property name="tab_pos">GTK_POS_TOP</property>
+ <property name="scrollable">False</property>
+ <property name="enable_popup">False</property>
+
+ <child>
+ <widget class="GtkFrame" id="frame22">
+ <property name="border_width">12</property>
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="label_yalign">0.5</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+
+ <child>
+ <widget class="GtkVBox" id="vbox46">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkLabel" id="label236">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">
+Please enter your Hylafax server information here. If you are running Hylafax on the same computer That you are using Gfax on then &quot;Host Name&quot; should be set to &quot;localhost&quot;.
+</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">True</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.239999994636</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHBox" id="hbox22">
+ <property name="border_width">6</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkVBox" id="vbox47">
+ <property name="visible">True</property>
+ <property name="homogeneous">True</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkLabel" id="label237">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Host Name:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">1</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label238">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">IP Port:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_RIGHT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">1</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label239">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Username:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">1</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">6</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkVBox" id="vbox48">
+ <property name="visible">True</property>
+ <property name="homogeneous">True</property>
+ <property name="spacing">12</property>
+
+ <child>
+ <widget class="GtkEntry" id="HylafaxHostnameEntry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ <property name="width_chars">45</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="HylafaxPortEntry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes">4559</property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="HylafaxUsernameEntry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label230">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Server&lt;/b&gt;</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="tab_expand">False</property>
+ <property name="tab_fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="HylafaxTab">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Hylafax</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkVBox" id="vbox38">
+ <property name="border_width">5</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">5</property>
+
+ <child>
+ <widget class="GtkLabel" id="label213">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Gfax can inform the Efax transport agent which
+serial port your modem is connected to.</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkVBox" id="vbox39">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkFrame" id="frame19">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="label_yalign">0.5</property>
+ <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+
+ <child>
+ <widget class="GtkVBox" id="vbox40">
+ <property name="border_width">14</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkLabel" id="label214">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Which serial port is your modem connected to?</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_CENTER</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">10</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkCombo" id="combo2">
+ <property name="visible">True</property>
+ <property name="value_in_list">False</property>
+ <property name="allow_empty">True</property>
+ <property name="case_sensitive">False</property>
+ <property name="enable_arrow_keys">True</property>
+ <property name="enable_arrows_always">False</property>
+
+ <child internal-child="entry">
+ <widget class="GtkEntry" id="ModemEntry">
+ <property name="visible">True</property>
+ <property name="tooltip" translatable="yes">The serial port the modem is on - ttyS0 is COM1, ttyS1 is COM2 etc.</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ </child>
+
+ <child internal-child="list">
+ <widget class="GtkList" id="list1">
+ <property name="visible">True</property>
+ <property name="selection_mode">GTK_SELECTION_BROWSE</property>
+
+ <child>
+ <widget class="GtkListItem" id="listitem1">
+ <property name="visible">True</property>
+
+ <child>
+ <widget class="GtkLabel" id="label215">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">modem</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkListItem" id="listitem2">
+ <property name="visible">True</property>
+
+ <child>
+ <widget class="GtkLabel" id="label216">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">ttyS0</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkListItem" id="listitem3">
+ <property name="visible">True</property>
+
+ <child>
+ <widget class="GtkLabel" id="label217">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">ttyS1</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkListItem" id="listitem4">
+ <property name="visible">True</property>
+
+ <child>
+ <widget class="GtkLabel" id="label218">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">ttyS2</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkListItem" id="listitem5">
+ <property name="visible">True</property>
+
+ <child>
+ <widget class="GtkLabel" id="label219">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">ttyS3</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkListItem" id="listitem6">
+ <property name="visible">True</property>
+
+ <child>
+ <widget class="GtkLabel" id="label220">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">12</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label221">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Modem Connection</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="tab_expand">False</property>
+ <property name="tab_fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="MgettyTab">
+ <property name="label" translatable="yes">Mgetty</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GnomeDruidPageStandard" id="druidpagestandard7">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Gfax - Phone Number Information</property>
+
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="druid-vbox7">
+ <property name="border_width">16</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">6</property>
+
+ <child>
+ <widget class="GtkVBox" id="vbox41">
+ <property name="border_width">12</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkLabel" id="label222">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Please enter your facsimile number.
+
+This number is placed in the top one line header that is placed
+on all outgoing facsimiles.
+
+You may also choose a default dial prefix. Many companies in
+North America use the number &quot;9&quot; to reach an outside line.
+</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkVBox" id="vbox42">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkHBox" id="hbox23">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkVBox" id="vbox49">
+ <property name="visible">True</property>
+ <property name="homogeneous">True</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkLabel" id="label223">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Facsimile Number:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">1</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label224">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Dial Prefix:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">1</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkVBox" id="vbox50">
+ <property name="border_width">6</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">True</property>
+ <property name="spacing">12</property>
+
+ <child>
+ <widget class="GtkEntry" id="FaxNumberEntry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="DialPrefixEntry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GnomeDruidPageStandard" id="druidpagestandard8">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Gfax - E-Mail Address</property>
+
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="druid-vbox8">
+ <property name="border_width">16</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">6</property>
+
+ <child>
+ <widget class="GtkVBox" id="vbox44">
+ <property name="border_width">12</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkLabel" id="label226">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Hylafax and Mgetty+Sendfax can both be requested to send
+results of facsimile transmission to an email address.
+
+If you require this feature please enter your email address
+here. It's a good idea to include this even if you don't
+use it immediately, you can enable and disable it in the
+preferences section of Gfax.
+ </property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">12</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHBox" id="hbox24">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkLabel" id="label240">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">E-Mail Address:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">1</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="EmailAddressEntry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ <property name="width_chars">45</property>
+ </widget>
+ <packing>
+ <property name="padding">6</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GnomeDruidPageEdge" id="DruidPageFinish">
+ <property name="visible">True</property>
+ <property name="position">GNOME_EDGE_FINISH</property>
+ <property name="title" translatable="yes">Gfax - Setup Complete</property>
+ <property name="text" translatable="yes">Gfax setup is now complete!
+
+Gfax is configurable; there are other configuration
+options available under the preferences menu.
+
+You can run this first time setup at any time from
+the preferences section.
+
+Default preferences have been choosen for the
+transport agent you chose, you may want to
+customise them.</property>
+ <signal name="finish" handler="on_DruidPageFinish_finish" last_modification_time="Tue, 18 Mar 2003 05:43:37 GMT"/>
+ </widget>
+ </child>
+ </widget>
+ </child>
+</widget>
+
+<widget class="GtkDialog" id="PrefsDialog">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Gfax - Preferences</property>
+ <property name="type">GTK_WINDOW_TOPLEVEL</property>
+ <property name="window_position">GTK_WIN_POS_NONE</property>
+ <property name="modal">False</property>
+ <property name="resizable">True</property>
+ <property name="destroy_with_parent">False</property>
+ <property name="decorated">True</property>
+ <property name="skip_taskbar_hint">False</property>
+ <property name="skip_pager_hint">False</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+ <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+ <property name="focus_on_map">True</property>
+ <property name="urgency_hint">False</property>
+ <property name="has_separator">True</property>
+ <signal name="delete_event" handler="on_PrefsDialog_delete_event" last_modification_time="Sun, 23 Mar 2003 17:09:52 GMT"/>
+
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="dialog-vbox2">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child internal-child="action_area">
+ <widget class="GtkHButtonBox" id="dialog-action_area2">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+ <child>
+ <widget class="GtkButton" id="HelpButton">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-help</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="response_id">-11</property>
+ <signal name="clicked" handler="on_HelpButton_clicked" last_modification_time="Sun, 23 Mar 2003 17:10:24 GMT"/>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkButton" id="CloseButton">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-close</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="response_id">-7</property>
+ <signal name="clicked" handler="on_CloseButton_clicked" last_modification_time="Sun, 23 Mar 2003 17:10:13 GMT"/>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkNotebook" id="PrefsNotebook">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="show_tabs">True</property>
+ <property name="show_border">True</property>
+ <property name="tab_pos">GTK_POS_TOP</property>
+ <property name="scrollable">False</property>
+ <property name="enable_popup">False</property>
+
+ <child>
+ <widget class="GtkVBox" id="vbox51">
+ <property name="border_width">6</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkFrame" id="frame23">
+ <property name="border_width">6</property>
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="label_yalign">0.5</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+
+ <child>
+ <widget class="GtkHBox" id="hbox25">
+ <property name="border_width">12</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkRadioButton" id="HylafaxRadioButton">
+ <property name="border_width">10</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Hylafax</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">True</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="system_tab_changed" last_modification_time="Sun, 23 Mar 2003 17:35:59 GMT"/>
+ <signal name="toggled" handler="radio_button_toggled" last_modification_time="Sun, 23 Mar 2003 17:35:59 GMT"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkRadioButton" id="EfaxRadioButton">
+ <property name="border_width">10</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Efax</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">HylafaxRadioButton</property>
+ <signal name="toggled" handler="system_tab_changed" last_modification_time="Sun, 23 Mar 2003 17:36:25 GMT"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label311">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;&lt;big&gt;Fax Transport Agent&lt;/big&gt;&lt;/b&gt;</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">6</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkFrame" id="frame24">
+ <property name="border_width">6</property>
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="label_yalign">0.5</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+
+ <child>
+ <widget class="GtkHBox" id="hbox26">
+ <property name="border_width">12</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkVBox" id="vbox52">
+ <property name="visible">True</property>
+ <property name="homogeneous">True</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkLabel" id="label312">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Facsimile Number:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">1</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label313">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Dial Prefix:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">1</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkVBox" id="vbox53">
+ <property name="border_width">6</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">True</property>
+ <property name="spacing">6</property>
+
+ <child>
+ <widget class="GtkEntry" id="FaxNumberEntry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ <signal name="changed" handler="system_tab_changed" last_modification_time="Sun, 23 Mar 2003 17:36:44 GMT"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="DialPrefixEntry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ <signal name="changed" handler="system_tab_changed" last_modification_time="Sun, 23 Mar 2003 17:37:06 GMT"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label314">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;&lt;big&gt;Phone Information&lt;/big&gt;&lt;/b&gt;</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">6</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkFrame" id="frame31">
+ <property name="border_width">6</property>
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="label_yalign">0.5</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+
+ <child>
+ <widget class="GtkHBox" id="hbox62">
+ <property name="border_width">12</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkVBox" id="vbox76">
+ <property name="visible">True</property>
+ <property name="homogeneous">True</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkLabel" id="label431">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"> Program: </property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">1</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkVBox" id="vbox77">
+ <property name="visible">True</property>
+ <property name="homogeneous">True</property>
+ <property name="spacing">6</property>
+
+ <child>
+ <widget class="GtkEntry" id="FaxViewerEntry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">â—</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label430">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;&lt;big&gt;Facsimile Viewer Program&lt;/big&gt;&lt;/b&gt;</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="tab_expand">False</property>
+ <property name="tab_fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label306">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">System</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkFrame" id="frame25">
+ <property name="border_width">12</property>
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="label_yalign">0.5</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow20">
+ <property name="visible">True</property>
+ <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+ <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+
+ <child>
+ <widget class="GtkViewport" id="viewport2">
+ <property name="visible">True</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+
+ <child>
+ <widget class="GtkTable" id="table11">
+ <property name="border_width">24</property>
+ <property name="visible">True</property>
+ <property name="n_rows">3</property>
+ <property name="n_columns">2</property>
+ <property name="homogeneous">False</property>
+ <property name="row_spacing">6</property>
+ <property name="column_spacing">6</property>
+
+ <child>
+ <widget class="GtkLabel" id="label315">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Port Number:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_CENTER</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">1</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options"></property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label316">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Username:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_CENTER</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">1</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label317">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Hostname:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_CENTER</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">1</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="HylafaxUsernameEntry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="HylafaxPortEntry">
+ <property name="visible">True</property>
+ <property name="tooltip" translatable="yes">The TCP/IP port number of the fax server. Default hylafax port is 4559.</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes">4559</property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="HylafaxHostnameEntry">
+ <property name="visible">True</property>
+ <property name="tooltip" translatable="yes">The host name of the network fax server. Enter &quot;localhost&quot; if you are not using a network fax server.</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes">localhost</property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ <property name="width_chars">40</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label318">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;&lt;big&gt;Hylafax Setup&lt;/big&gt;&lt;/b&gt;</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="tab_expand">False</property>
+ <property name="tab_fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label307">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Hylafax</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkFrame" id="frame27">
+ <property name="border_width">12</property>
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="label_yalign">0.5</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+
+ <child>
+ <widget class="GtkVBox" id="vbox55">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow24">
+ <property name="border_width">10</property>
+ <property name="visible">True</property>
+ <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+ <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+
+ <child>
+ <widget class="GtkViewport" id="viewport4">
+ <property name="visible">True</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+
+ <child>
+ <widget class="GtkTable" id="table13">
+ <property name="border_width">10</property>
+ <property name="visible">True</property>
+ <property name="n_rows">4</property>
+ <property name="n_columns">2</property>
+ <property name="homogeneous">False</property>
+ <property name="row_spacing">10</property>
+ <property name="column_spacing">6</property>
+
+ <child>
+ <widget class="GtkCombo" id="combo4">
+ <property name="visible">True</property>
+ <property name="value_in_list">False</property>
+ <property name="allow_empty">True</property>
+ <property name="case_sensitive">False</property>
+ <property name="enable_arrow_keys">True</property>
+ <property name="enable_arrows_always">False</property>
+
+ <child internal-child="entry">
+ <widget class="GtkEntry" id="EfaxModemDeviceEntry">
+ <property name="visible">True</property>
+ <property name="tooltip" translatable="yes">The serial port the modem is on - ttyS0 is COM1, ttyS1 is COM2 etc.</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ <signal name="changed" handler="efax_setup_changed"/>
+ </widget>
+ </child>
+
+ <child internal-child="list">
+ <widget class="GtkList" id="list3">
+ <property name="visible">True</property>
+ <property name="selection_mode">GTK_SELECTION_BROWSE</property>
+
+ <child>
+ <widget class="GtkListItem" id="listitem13">
+ <property name="visible">True</property>
+
+ <child>
+ <widget class="GtkLabel" id="label346">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">modem</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkListItem" id="listitem14">
+ <property name="visible">True</property>
+
+ <child>
+ <widget class="GtkLabel" id="label347">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">ttyS0</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkListItem" id="listitem15">
+ <property name="visible">True</property>
+
+ <child>
+ <widget class="GtkLabel" id="label348">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">ttyS1</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkListItem" id="listitem16">
+ <property name="visible">True</property>
+
+ <child>
+ <widget class="GtkLabel" id="label349">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">ttyS2</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkListItem" id="listitem17">
+ <property name="visible">True</property>
+
+ <child>
+ <widget class="GtkLabel" id="label350">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">ttyS3</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkListItem" id="listitem18">
+ <property name="visible">True</property>
+
+ <child>
+ <widget class="GtkLabel" id="label351">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">cua1</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkListItem" id="listitem19">
+ <property name="visible">True</property>
+
+ <child>
+ <widget class="GtkLabel" id="label352">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">cua2</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkListItem" id="listitem20">
+ <property name="visible">True</property>
+
+ <child>
+ <widget class="GtkLabel" id="label353">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label418">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Modem Type:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_CENTER</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">1</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label419">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Speaker Volume:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_CENTER</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">1</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label365">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Page Size:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_CENTER</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">1</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label343">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Modem Port:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_CENTER</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">1</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">4</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkComboBox" id="EfaxPapersizeComboBox">
+ <property name="visible">True</property>
+ <property name="items" translatable="yes">letter
+legal
+a4</property>
+ <property name="add_tearoffs">False</property>
+ <property name="focus_on_click">True</property>
+ <signal name="changed" handler="efax_setup_changed" last_modification_time="Mon, 30 Oct 2006 04:32:33 GMT"/>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">fill</property>
+ <property name="y_options">fill</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkComboBox" id="EfaxModemSpeakerVolumeComboBox">
+ <property name="visible">True</property>
+ <property name="items" translatable="yes">Very Low
+Low
+Medium
+High</property>
+ <property name="add_tearoffs">False</property>
+ <property name="focus_on_click">True</property>
+ <signal name="changed" handler="efax_setup_changed" last_modification_time="Mon, 30 Oct 2006 04:52:12 GMT"/>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">fill</property>
+ <property name="y_options">fill</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkComboBox" id="EfaxModemTypeComboBox">
+ <property name="visible">True</property>
+ <property name="items" translatable="yes">ATT (Dataport, Paradyne)
+Motorola (Power Modem, 3400 Pro,...
+QuickComm (Spirit II)
+USR (Courier, Sportster)
+Multi-Tech (for bit reversal)
+User Defined
+</property>
+ <property name="add_tearoffs">False</property>
+ <property name="focus_on_click">True</property>
+ <signal name="changed" handler="efax_setup_changed" last_modification_time="Mon, 30 Oct 2006 04:54:19 GMT"/>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options">fill</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label367">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;&lt;big&gt;Efax Setup&lt;/big&gt;&lt;/b&gt;</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="tab_expand">False</property>
+ <property name="tab_fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label308">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Efax</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkVBox" id="vbox56">
+ <property name="border_width">6</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">True</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkFrame" id="frame28">
+ <property name="border_width">6</property>
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="label_yalign">0.5</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+
+ <child>
+ <widget class="GtkVBox" id="vbox57">
+ <property name="border_width">3</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkHBox" id="hbox57">
+ <property name="border_width">3</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">12</property>
+
+ <child>
+ <widget class="GtkLabel" id="label416">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkCheckButton" id="EmailNotifyCheckButton">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Send Email Notification</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="user_tab_changed" last_modification_time="Sun, 23 Mar 2003 18:22:52 GMT"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHBox" id="hbox29">
+ <property name="border_width">3</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">12</property>
+
+ <child>
+ <widget class="GtkLabel" id="label417">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label368">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">E-Mail Address:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">1</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">2</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="EmailAddressEntry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ <property name="width_chars">40</property>
+ <signal name="changed" handler="user_tab_changed" last_modification_time="Sun, 23 Mar 2003 18:23:00 GMT"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label369">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;&lt;big&gt;E-Mail Notification&lt;/big&gt;&lt;/b&gt;</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkFrame" id="frame29">
+ <property name="border_width">6</property>
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="label_yalign">0.5</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+
+ <child>
+ <widget class="GtkVBox" id="vbox58">
+ <property name="border_width">3</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkHBox" id="hbox56">
+ <property name="border_width">3</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">12</property>
+
+ <child>
+ <widget class="GtkLabel" id="label415">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkCheckButton" id="SendNowCheckButton">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Send Immediately</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="user_tab_changed" last_modification_time="Sun, 23 Mar 2003 18:23:12 GMT"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHBox" id="hbox55">
+ <property name="border_width">3</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">12</property>
+
+ <child>
+ <widget class="GtkLabel" id="label414">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkCheckButton" id="FaxLogCheckButton">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Fax log enabled</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="user_tab_changed" last_modification_time="Sun, 23 Mar 2003 20:22:43 GMT"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label370">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;&lt;big&gt;Transmit Properties&lt;/big&gt;&lt;/b&gt;</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkFrame" id="frame30">
+ <property name="border_width">6</property>
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="label_yalign">0.5</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+
+ <child>
+ <widget class="GtkVBox" id="vbox59">
+ <property name="border_width">3</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkHBox" id="hbox53">
+ <property name="border_width">3</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">12</property>
+
+ <child>
+ <widget class="GtkLabel" id="label412">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkCheckButton" id="CoverPageCheckButton">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Use Cover Page</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="user_tab_changed" last_modification_time="Sun, 23 Mar 2003 18:24:29 GMT"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHBox" id="hbox54">
+ <property name="border_width">3</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">12</property>
+
+ <child>
+ <widget class="GtkLabel" id="label413">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkCheckButton" id="HiResCheckButton">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Use Fine Resolution</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="user_tab_changed" last_modification_time="Sun, 23 Mar 2003 18:23:33 GMT"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label371">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;&lt;big&gt;Fax Properties&lt;/big&gt;&lt;/b&gt;</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="tab_expand">False</property>
+ <property name="tab_fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label309">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">User</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+</widget>
+
+<widget class="GtkDialog" id="HylafaxProgressDialog">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Gfax - Transmission Progress</property>
+ <property name="type">GTK_WINDOW_TOPLEVEL</property>
+ <property name="window_position">GTK_WIN_POS_NONE</property>
+ <property name="modal">False</property>
+ <property name="resizable">True</property>
+ <property name="destroy_with_parent">True</property>
+ <property name="decorated">True</property>
+ <property name="skip_taskbar_hint">False</property>
+ <property name="skip_pager_hint">False</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+ <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+ <property name="focus_on_map">True</property>
+ <property name="urgency_hint">False</property>
+ <property name="has_separator">True</property>
+
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="dialog-vbox3">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child internal-child="action_area">
+ <widget class="GtkHButtonBox" id="dialog-action_area3">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+ <child>
+ <widget class="GtkButton" id="HylafaxProgressCancelButton">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-cancel</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="response_id">0</property>
+ <signal name="clicked" handler="on_HylafaxProgressCancelButton_clicked" last_modification_time="Wed, 02 Apr 2003 02:28:12 GMT"/>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkButton" id="HylafaxProgressCloseButton">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-close</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="response_id">-7</property>
+ <signal name="clicked" handler="on_HylafaxProgressCloseButton_clicked" last_modification_time="Wed, 02 Apr 2003 02:36:50 GMT"/>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkNotebook" id="HylafaxProgressNotebook">
+ <property name="visible">True</property>
+ <property name="show_tabs">False</property>
+ <property name="show_border">False</property>
+ <property name="tab_pos">GTK_POS_TOP</property>
+ <property name="scrollable">False</property>
+ <property name="enable_popup">False</property>
+
+ <child>
+ <widget class="GtkVBox" id="vbox61">
+ <property name="border_width">5</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">True</property>
+ <property name="spacing">10</property>
+
+ <child>
+ <widget class="GtkHBox" id="hbox39">
+ <property name="border_width">12</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">6</property>
+
+ <child>
+ <widget class="GtkImage" id="image3">
+ <property name="visible">True</property>
+ <property name="stock">gtk-print</property>
+ <property name="icon_size">6</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label381">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Transmitting facsimile to
+Hylafax server.</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkProgressBar" id="HylafaxProgressbar">
+ <property name="visible">True</property>
+ <property name="orientation">GTK_PROGRESS_LEFT_TO_RIGHT</property>
+ <property name="fraction">0</property>
+ <property name="pulse_step">0.10000000149</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ </widget>
+ <packing>
+ <property name="padding">12</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="tab_expand">False</property>
+ <property name="tab_fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label379">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">label379</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHBox" id="hbox37">
+ <property name="border_width">12</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">6</property>
+
+ <child>
+ <widget class="GtkImage" id="image1">
+ <property name="visible">True</property>
+ <property name="stock">gtk-dialog-info</property>
+ <property name="icon_size">6</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label382">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Your facsimile was sucessfully
+ transmitted!</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="tab_expand">False</property>
+ <property name="tab_fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label380">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">oklabel</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHBox" id="hbox38">
+ <property name="border_width">12</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">6</property>
+
+ <child>
+ <widget class="GtkImage" id="image2">
+ <property name="visible">True</property>
+ <property name="stock">gtk-dialog-error</property>
+ <property name="icon_size">6</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label384">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">There was an error transmitting
+your facsimile to the server!</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="tab_expand">False</property>
+ <property name="tab_fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label383">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">label383</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+</widget>
+
+<widget class="GtkDialog" id="NewPhoneBookDialog">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">New phone book</property>
+ <property name="type">GTK_WINDOW_TOPLEVEL</property>
+ <property name="window_position">GTK_WIN_POS_NONE</property>
+ <property name="modal">False</property>
+ <property name="resizable">True</property>
+ <property name="destroy_with_parent">True</property>
+ <property name="decorated">True</property>
+ <property name="skip_taskbar_hint">False</property>
+ <property name="skip_pager_hint">False</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+ <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+ <property name="focus_on_map">True</property>
+ <property name="urgency_hint">False</property>
+ <property name="has_separator">True</property>
+ <signal name="delete_event" handler="on_NewPhoneBookDialog_delete_event" last_modification_time="Mon, 12 Jan 2004 21:39:07 GMT"/>
+
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="dialog-vbox4">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child internal-child="action_area">
+ <widget class="GtkHButtonBox" id="dialog-action_area4">
+ <property name="height_request">1</property>
+ <property name="sensitive">False</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GnomeDruid" id="NewPhoneBookDruid">
+ <property name="border_width">4</property>
+ <property name="visible">True</property>
+ <property name="show_help">False</property>
+ <signal name="cancel" handler="on_NewPhoneBookDruid_cancel" last_modification_time="Mon, 12 Jan 2004 23:05:32 GMT"/>
+
+ <child>
+ <widget class="GnomeDruidPageEdge" id="druidpageedge1">
+ <property name="visible">True</property>
+ <property name="position">GNOME_EDGE_START</property>
+ <property name="title" translatable="yes">Gfax - Add new phone book.</property>
+ <property name="text" translatable="yes">This will lead you through the process
+of creating a new phone book.</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GnomeDruidPageStandard" id="BookDruidPageStandard">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Gfax - Add new phone book.</property>
+ <signal name="next" handler="on_BookDruidPageStandard_next" last_modification_time="Thu, 15 Dec 2005 23:31:40 GMT"/>
+
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="vbox66">
+ <property name="border_width">16</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">6</property>
+
+ <child>
+ <widget class="GtkVBox" id="vbox67">
+ <property name="visible">True</property>
+ <property name="homogeneous">True</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkLabel" id="label392">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Please enter the type of phone book you are creating.</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.300000011921</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkTable" id="table15">
+ <property name="border_width">12</property>
+ <property name="visible">True</property>
+ <property name="n_rows">2</property>
+ <property name="n_columns">2</property>
+ <property name="homogeneous">True</property>
+ <property name="row_spacing">0</property>
+ <property name="column_spacing">3</property>
+
+ <child>
+ <widget class="GtkRadioButton" id="EvolutionRadioButton">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+
+ <child>
+ <widget class="GtkAlignment" id="alignment5">
+ <property name="visible">True</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+ <property name="top_padding">0</property>
+ <property name="bottom_padding">0</property>
+ <property name="left_padding">0</property>
+ <property name="right_padding">0</property>
+
+ <child>
+ <widget class="GtkHBox" id="hbox44">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">2</property>
+
+ <child>
+ <widget class="GtkImage" id="image8">
+ <property name="visible">True</property>
+ <property name="icon_size">4</property>
+ <property name="icon_name">internet-mail</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label393">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Evolution</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkRadioButton" id="LDAPRadioButton">
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">EvolutionRadioButton</property>
+
+ <child>
+ <widget class="GtkAlignment" id="alignment6">
+ <property name="visible">True</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+ <property name="top_padding">0</property>
+ <property name="bottom_padding">0</property>
+ <property name="left_padding">0</property>
+ <property name="right_padding">0</property>
+
+ <child>
+ <widget class="GtkHBox" id="hbox45">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">2</property>
+
+ <child>
+ <widget class="GtkImage" id="image9">
+ <property name="visible">True</property>
+ <property name="icon_size">4</property>
+ <property name="icon_name">network-server</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label394">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">LDAP</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkRadioButton" id="DatabaseRadioButton">
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">EvolutionRadioButton</property>
+
+ <child>
+ <widget class="GtkAlignment" id="alignment7">
+ <property name="visible">True</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+ <property name="top_padding">0</property>
+ <property name="bottom_padding">0</property>
+ <property name="left_padding">0</property>
+ <property name="right_padding">0</property>
+
+ <child>
+ <widget class="GtkHBox" id="hbox46">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">2</property>
+
+ <child>
+ <widget class="GtkImage" id="image10">
+ <property name="visible">True</property>
+ <property name="icon_size">4</property>
+ <property name="icon_name">x-office-address-book</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label395">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Database</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkRadioButton" id="GfaxRadioButton">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">True</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">EvolutionRadioButton</property>
+
+ <child>
+ <widget class="GtkAlignment" id="alignment8">
+ <property name="visible">True</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+ <property name="top_padding">0</property>
+ <property name="bottom_padding">0</property>
+ <property name="left_padding">0</property>
+ <property name="right_padding">0</property>
+
+ <child>
+ <widget class="GtkHBox" id="hbox47">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">2</property>
+
+ <child>
+ <widget class="GtkImage" id="image11">
+ <property name="visible">True</property>
+ <property name="icon_size">4</property>
+ <property name="icon_name">x-office-address-book</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label396">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Gfax</property>
+ <property name="use_underline">True</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="y_options">expand</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GnomeDruidPageStandard" id="druidpagestandard12">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Gfax - Add new phone book.</property>
+ <signal name="next" handler="on_druidpagestandard12_next" last_modification_time="Fri, 16 Dec 2005 17:35:44 GMT"/>
+
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="vbox64">
+ <property name="border_width">16</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">6</property>
+
+ <child>
+ <widget class="GtkVBox" id="vbox65">
+ <property name="border_width">50</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">True</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkLabel" id="label391">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Please enter a name for your new phone book.</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="NewPhoneBookNameEntry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="has_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GnomeDruidPageStandard" id="EvoDruidPageStandard">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Evolution Address books</property>
+
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="druid-vbox11">
+ <property name="border_width">16</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">6</property>
+
+ <child>
+ <widget class="GtkVBox" id="vbox73">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkLabel" id="label420">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Please select the Evolution address books that you would
+like to use.
+
+These are only local address books and will only include
+contacts with facsimile numbers.</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.300000011921</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow29">
+ <property name="border_width">6</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+
+ <child>
+ <widget class="GtkTreeView" id="EvolutionTreeView">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="headers_visible">True</property>
+ <property name="rules_hint">False</property>
+ <property name="reorderable">False</property>
+ <property name="enable_search">True</property>
+ <property name="fixed_height_mode">False</property>
+ <property name="hover_selection">False</property>
+ <property name="hover_expand">False</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GnomeDruidPageEdge" id="NewPhoneBookDruidEdge">
+ <property name="visible">True</property>
+ <property name="position">GNOME_EDGE_FINISH</property>
+ <property name="title" translatable="yes">Gfax - Add new phone book.</property>
+ <property name="text" translatable="yes">Complete...
+
+Your new phone book is ready.
+If this is a Gfax type phone book you may
+now add items.
+
+Evolution phone books are read only
+but may be change through Evolution.</property>
+ <signal name="finish" handler="on_NewPhoneBookDruidEdge_finish" last_modification_time="Mon, 12 Jan 2004 22:54:17 GMT"/>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+</widget>
+
+<widget class="GtkDialog" id="PasswordDialog">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Password Dialog</property>
+ <property name="type">GTK_WINDOW_TOPLEVEL</property>
+ <property name="window_position">GTK_WIN_POS_NONE</property>
+ <property name="modal">False</property>
+ <property name="resizable">True</property>
+ <property name="destroy_with_parent">False</property>
+ <property name="decorated">True</property>
+ <property name="skip_taskbar_hint">False</property>
+ <property name="skip_pager_hint">False</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+ <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+ <property name="focus_on_map">True</property>
+ <property name="urgency_hint">False</property>
+ <property name="has_separator">True</property>
+
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="dialog-vbox5">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child internal-child="action_area">
+ <widget class="GtkHButtonBox" id="dialog-action_area5">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+ <child>
+ <widget class="GtkButton" id="cancelbutton1">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-cancel</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="response_id">-6</property>
+ <signal name="clicked" handler="on_cancelbutton_clicked" last_modification_time="Sat, 13 Mar 2004 04:48:54 GMT"/>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkButton" id="okbutton1">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-ok</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="response_id">-5</property>
+ <signal name="clicked" handler="on_okbutton_clicked" last_modification_time="Sat, 13 Mar 2004 04:48:41 GMT"/>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkVBox" id="vbox68">
+ <property name="border_width">12</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">12</property>
+
+ <child>
+ <widget class="GtkHBox" id="hbox50">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkImage" id="image22">
+ <property name="visible">True</property>
+ <property name="stock">gtk-dialog-question</property>
+ <property name="icon_size">6</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label403">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Please enter the password
+for your fax server.</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.419999986887</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="PasswordEntry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="has_focus">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">False</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ <signal name="activate" handler="on_PasswordEntry_activate" last_modification_time="Sat, 13 Mar 2004 04:47:52 GMT"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkCheckButton" id="PasswordCheckbutton">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Remember this password</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="on_PasswordCheckbutton_toggled" last_modification_time="Sat, 13 Mar 2004 05:38:35 GMT"/>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+</widget>
+
+<widget class="GtkDialog" id="ModifyJobDialog">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Gfax - Modify Job</property>
+ <property name="type">GTK_WINDOW_TOPLEVEL</property>
+ <property name="window_position">GTK_WIN_POS_NONE</property>
+ <property name="modal">False</property>
+ <property name="resizable">False</property>
+ <property name="destroy_with_parent">True</property>
+ <property name="decorated">True</property>
+ <property name="skip_taskbar_hint">False</property>
+ <property name="skip_pager_hint">False</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+ <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+ <property name="focus_on_map">True</property>
+ <property name="urgency_hint">False</property>
+ <property name="has_separator">True</property>
+
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="dialog-vbox6">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child internal-child="action_area">
+ <widget class="GtkHButtonBox" id="dialog-action_area6">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+ <child>
+ <widget class="GtkButton" id="cancelbutton2">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-cancel</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="response_id">-6</property>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkButton" id="okbutton2">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-ok</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="response_id">-5</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkVBox" id="vbox74">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkHBox" id="hbox58">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkImage" id="image33">
+ <property name="visible">True</property>
+ <property name="stock">gtk-dialog-info</property>
+ <property name="icon_size">6</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ </widget>
+ <packing>
+ <property name="padding">6</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label421">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Alter facsimile job parameters&lt;/b&gt;</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.0799999982119</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkTable" id="table16">
+ <property name="border_width">6</property>
+ <property name="visible">True</property>
+ <property name="n_rows">3</property>
+ <property name="n_columns">2</property>
+ <property name="homogeneous">False</property>
+ <property name="row_spacing">6</property>
+ <property name="column_spacing">6</property>
+
+ <child>
+ <widget class="GtkLabel" id="label422">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Fax Number:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_RIGHT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">1</property>
+ <property name="yalign">0</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label423">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Time to send:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_RIGHT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">1</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkEntry" id="ModifyJobNumberEntry">
+ <property name="visible">True</property>
+ <property name="editable">True</property>
+ <property name="visibility">True</property>
+ <property name="max_length">0</property>
+ <property name="text" translatable="yes"></property>
+ <property name="has_frame">True</property>
+ <property name="invisible_char">*</property>
+ <property name="activates_default">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GnomeDateEdit" id="ModifyJobDate">
+ <property name="visible">True</property>
+ <property name="has_focus">True</property>
+ <property name="dateedit_flags">GNOME_DATE_EDIT_SHOW_TIME|GNOME_DATE_EDIT_24_HR</property>
+ <property name="lower_hour">0</property>
+ <property name="upper_hour">23</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label426">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Maximum Dials:</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_RIGHT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">1</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">fill</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkSpinButton" id="MaxDialsSpinbutton">
+ <property name="visible">True</property>
+ <property name="tooltip" translatable="yes">Make no more than &lt;maxdials&gt; calls in attempting to send the facsimile. Once &lt;maxdials&gt; has been reached, the job will be killed.</property>
+ <property name="can_focus">True</property>
+ <property name="climb_rate">1</property>
+ <property name="digits">0</property>
+ <property name="numeric">False</property>
+ <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+ <property name="snap_to_ticks">False</property>
+ <property name="wrap">False</property>
+ <property name="adjustment">2 1 20 1 10 10</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+</widget>
+
+</glade-interface>
diff --git a/glade/send-druid.glade b/glade/send-druid.glade
new file mode 100644
index 0000000..dd05e75
--- /dev/null
+++ b/glade/send-druid.glade
@@ -0,0 +1,1241 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
+<!--*- mode: xml -*-->
+<glade-interface>
+ <requires lib="gnome"/>
+ <widget class="GtkDialog" id="NewFaxDialog">
+ <property name="visible">True</property>
+ <property name="border_width">6</property>
+ <property name="title" translatable="yes">Send Fax</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+ <property name="skip_taskbar_hint">True</property>
+ <property name="skip_pager_hint">True</property>
+ <property name="has_separator">False</property>
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="dialog-vbox6">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkNotebook" id="notebook1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <child>
+ <widget class="GtkFrame" id="frame31">
+ <property name="visible">True</property>
+ <property name="border_width">6</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+ <child>
+ <widget class="GtkVBox" id="vbox71">
+ <property name="visible">True</property>
+ <property name="border_width">6</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkTable" id="table7">
+ <property name="visible">True</property>
+ <property name="n_rows">2</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <widget class="GtkHBox" id="hbox54">
+ <property name="visible">True</property>
+ <property name="spacing">4</property>
+ <child>
+ <widget class="GnomeEntry" id="entry17">
+ <property name="visible">True</property>
+ <property name="max_saved">10</property>
+ <child internal-child="entry">
+ <widget class="GtkEntry" id="FilenameEntry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip" translatable="yes">Enter a phone number and hit &lt;enter&gt;.</property>
+ <property name="invisible_char">*</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkButton" id="BrowseButton">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Browse</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ <signal name="clicked" handler="on_BrowseButton_clicked"/>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox31">
+ <property name="visible">True</property>
+ <property name="spacing">4</property>
+ <child>
+ <widget class="GnomeEntry" id="entry16">
+ <property name="visible">True</property>
+ <property name="max_saved">10</property>
+ <child internal-child="entry">
+ <widget class="GtkEntry" id="NumberEntry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip" translatable="yes">Enter a phone number and hit &lt;enter&gt;.</property>
+ <property name="invisible_char">*</property>
+ <signal name="activate" handler="on_NumberEntry_activate"/>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkButton" id="PhoneButton">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Phone Book</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ <signal name="clicked" handler="on_PhoneButton_clicked"/>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label160">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Postscript file:</property>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label159">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Fax number:</property>
+ <property name="justify">GTK_JUSTIFY_CENTER</property>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow16">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <child>
+ <widget class="GtkTreeView" id="ItemTreeview">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="rules_hint">True</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;New fax information&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label411">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Job</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkFrame" id="frame32">
+ <property name="visible">True</property>
+ <property name="border_width">6</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+ <child>
+ <widget class="GtkAlignment" id="alignment12">
+ <property name="visible">True</property>
+ <property name="top_padding">6</property>
+ <property name="left_padding">12</property>
+ <child>
+ <widget class="GtkTable" id="table8">
+ <property name="visible">True</property>
+ <property name="n_rows">3</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">3</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <widget class="GtkCheckButton" id="ResolutionCheckbutton">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Fine resolution</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label414">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GnomeDateEdit" id="SendDateedit">
+ <property name="visible">True</property>
+ <property name="dateedit_flags">GNOME_DATE_EDIT_SHOW_TIME | GNOME_DATE_EDIT_24_HR</property>
+ <property name="lower_hour">0</property>
+ <property name="upper_hour">23</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkCheckButton" id="SendCheckbutton">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Send immediately</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="on_SendCheckButton_toggled"/>
+ </widget>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="EmailEntry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">*</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkCheckButton" id="EmailCheckbutton">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">E-Mail job results to:</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label413">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Facsimile Job Details&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label412">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Details</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ <property name="position">1</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">6</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <widget class="GtkHButtonBox" id="dialog-action_area6">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+ <child>
+ <widget class="GtkButton" id="CancelButton">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="label">gtk-cancel</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">-6</property>
+ <signal name="clicked" handler="on_CancelButton_clicked"/>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkButton" id="SendfaxButton">
+ <property name="visible">True</property>
+ <property name="tooltip" translatable="yes">Transmit the fax</property>
+ <property name="response_id">0</property>
+ <signal name="clicked" handler="on_SendfaxButton_clicked"/>
+ <accelerator key="P" modifiers="GDK_CONTROL_MASK" signal="clicked"/>
+ <child>
+ <widget class="GtkAlignment" id="alignment11">
+ <property name="visible">True</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+ <child>
+ <widget class="GtkHBox" id="hbox52">
+ <property name="visible">True</property>
+ <property name="spacing">2</property>
+ <child>
+ <widget class="GtkImage" id="image28">
+ <property name="visible">True</property>
+ <property name="stock">gtk-print</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label410">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Send</property>
+ <property name="use_underline">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <widget class="GtkDialog" id="PhbookDialog">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Gfax - Phone Book Selection</property>
+ <property name="modal">True</property>
+ <property name="default_width">550</property>
+ <property name="default_height">350</property>
+ <property name="destroy_with_parent">True</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="dialog-vbox1">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkFrame" id="frame8">
+ <property name="visible">True</property>
+ <property name="border_width">6</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+ <child>
+ <widget class="GtkVBox" id="vbox18">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkLabel" id="label41">
+ <property name="visible">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox12">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkFrame" id="frame9">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow5">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="border_width">5</property>
+ <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <child>
+ <widget class="GtkTreeView" id="book_treeview">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="rules_hint">True</property>
+ <signal name="row_activated" handler="on_book_treeview_row_activated"/>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label17">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Phone Books</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkFrame" id="frame10">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow6">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="border_width">5</property>
+ <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <child>
+ <widget class="GtkTreeView" id="list_treeview">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="rules_hint">True</property>
+ <signal name="row_activated" handler="on_list_treeview_row_activated"/>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label18">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Phone Book Item List</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox20">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkImage" id="image2">
+ <property name="visible">True</property>
+ <property name="icon_size">5</property>
+ <property name="icon_name">x-office-address-book</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label19">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;&lt;big&gt;Current Phone Books&lt;/big&gt;&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <widget class="GtkHButtonBox" id="dialog-action_area1">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+ <child>
+ <widget class="GtkButton" id="helpbutton1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="label">gtk-help</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">-11</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkButton" id="cancel_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="label">gtk-cancel</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">-6</property>
+ <signal name="clicked" handler="on_cancel_button_clicked"/>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="ok_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="label">gtk-ok</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">-5</property>
+ <signal name="clicked" handler="on_ok_button_clicked"/>
+ </widget>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <widget class="GtkWindow" id="PhbookWindow">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Gfax - Phone books</property>
+ <property name="default_width">600</property>
+ <signal name="delete_event" handler="on_PhbookWindow_delete_event"/>
+ <child>
+ <widget class="GtkVBox" id="vbox28">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkMenuBar" id="menubar1">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkMenuItem" id="menuitem4">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_File</property>
+ <property name="use_underline">True</property>
+ <child>
+ <widget class="GtkMenu" id="menuitem4_menu">
+ <child>
+ <widget class="GtkImageMenuItem" id="New">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Add</property>
+ <property name="use_underline">True</property>
+ <signal name="activate" handler="on_New_activate"/>
+ <child internal-child="image">
+ <widget class="GtkImage" id="image32">
+ <property name="visible">True</property>
+ <property name="stock">gtk-add</property>
+ <property name="icon_size">1</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkImageMenuItem" id="SaveAndClose">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Save and Close</property>
+ <property name="use_underline">True</property>
+ <signal name="activate" handler="on_SaveAndClose_activate"/>
+ <child internal-child="image">
+ <widget class="GtkImage" id="image33">
+ <property name="visible">True</property>
+ <property name="stock">gtk-floppy</property>
+ <property name="icon_size">1</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkSeparatorMenuItem" id="separatormenuitem1">
+ <property name="visible">True</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkImageMenuItem" id="Delete">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Delete</property>
+ <property name="use_underline">True</property>
+ <signal name="activate" handler="on_Delete_activate"/>
+ <child internal-child="image">
+ <widget class="GtkImage" id="image34">
+ <property name="visible">True</property>
+ <property name="stock">gtk-delete</property>
+ <property name="icon_size">1</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkSeparatorMenuItem" id="separator1">
+ <property name="visible">True</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkImageMenuItem" id="Close">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Close</property>
+ <property name="use_underline">True</property>
+ <signal name="activate" handler="on_Close_activate"/>
+ <child internal-child="image">
+ <widget class="GtkImage" id="image35">
+ <property name="visible">True</property>
+ <property name="stock">gtk-close</property>
+ <property name="icon_size">1</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHandleBox" id="handlebox2">
+ <property name="visible">True</property>
+ <property name="shadow_type">GTK_SHADOW_OUT</property>
+ <child>
+ <widget class="GtkToolbar" id="toolbar1">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkToolButton" id="SaveCloseButton">
+ <property name="visible">True</property>
+ <property name="tooltip" translatable="yes">Save and Close</property>
+ <property name="is_important">True</property>
+ <property name="label" translatable="yes">Save and close</property>
+ <property name="use_underline">True</property>
+ <property name="stock_id">gtk-save</property>
+ <signal name="clicked" handler="on_SaveCloseButton_clicked"/>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkToolItem" id="toolitem1">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkVSeparator" id="vseparator1">
+ <property name="visible">True</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="homogeneous">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkToolButton" id="NewPhonebookButton">
+ <property name="visible">True</property>
+ <property name="tooltip" translatable="yes">New phone book</property>
+ <property name="is_important">True</property>
+ <property name="label" translatable="yes">Add</property>
+ <property name="use_underline">True</property>
+ <property name="stock_id">gtk-add</property>
+ <signal name="clicked" handler="on_NewPhonebookButton_clicked"/>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkToolButton" id="DeletePhonebookButton">
+ <property name="visible">True</property>
+ <property name="tooltip" translatable="yes">Delete phone book</property>
+ <property name="is_important">True</property>
+ <property name="label" translatable="yes">Delete</property>
+ <property name="use_underline">True</property>
+ <property name="stock_id">gtk-delete</property>
+ <signal name="clicked" handler="on_DeletePhonebookButton_clicked"/>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkToolItem" id="toolitem2">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkVSeparator" id="vseparator2">
+ <property name="visible">True</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="homogeneous">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkToolButton" id="CloseButton">
+ <property name="visible">True</property>
+ <property name="tooltip" translatable="yes">Close</property>
+ <property name="is_important">True</property>
+ <property name="label" translatable="yes">Close</property>
+ <property name="use_underline">True</property>
+ <property name="stock_id">gtk-close</property>
+ <signal name="clicked" handler="on_CloseButton_clicked"/>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHSeparator" id="hseparator8">
+ <property name="visible">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkFrame" id="frame23">
+ <property name="visible">True</property>
+ <property name="border_width">6</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+ <child>
+ <widget class="GtkHBox" id="hbox30">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkVBox" id="vbox23">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkFrame" id="frame24">
+ <property name="visible">True</property>
+ <property name="border_width">6</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+ <child>
+ <widget class="GtkComboBoxEntry" id="PhonebookComboBox">
+ <property name="visible">True</property>
+ <property name="items" translatable="yes"></property>
+ <signal name="changed" handler="on_PhonebookComboBox_changed"/>
+ <child internal-child="entry">
+ <widget class="GtkEntry" id="comboboxentry-entry1">
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label58">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Current Phone Book</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="padding">5</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkFrame" id="frame25">
+ <property name="visible">True</property>
+ <property name="border_width">6</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+ <child>
+ <widget class="GtkTable" id="table1">
+ <property name="visible">True</property>
+ <property name="n_rows">7</property>
+ <property name="n_columns">1</property>
+ <child>
+ <widget class="GtkVBox" id="vbox25">
+ <property name="visible">True</property>
+ <property name="border_width">5</property>
+ <child>
+ <widget class="GtkEntry" id="EditPhbNumberEntry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">*</property>
+ <signal name="changed" handler="on_EditPhbNumberEntry_changed"/>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkVBox" id="vbox29">
+ <property name="visible">True</property>
+ <property name="border_width">5</property>
+ <property name="spacing">5</property>
+ <child>
+ <widget class="GtkHBox" id="hbox31">
+ <property name="visible">True</property>
+ <property name="spacing">5</property>
+ <property name="homogeneous">True</property>
+ <child>
+ <widget class="GtkButton" id="AddButton">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="response_id">0</property>
+ <signal name="clicked" handler="on_AddButton_clicked"/>
+ <child>
+ <widget class="GtkAlignment" id="alignment6">
+ <property name="visible">True</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+ <child>
+ <widget class="GtkHBox" id="hbox32">
+ <property name="visible">True</property>
+ <property name="spacing">2</property>
+ <child>
+ <widget class="GtkImage" id="image9">
+ <property name="visible">True</property>
+ <property name="stock">gtk-add</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label62">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Add</property>
+ <property name="use_underline">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkButton" id="UpdateButton">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="response_id">0</property>
+ <signal name="clicked" handler="on_UpdateButton_clicked"/>
+ <child>
+ <widget class="GtkAlignment" id="alignment8">
+ <property name="visible">True</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+ <child>
+ <widget class="GtkHBox" id="hbox35">
+ <property name="visible">True</property>
+ <property name="spacing">2</property>
+ <child>
+ <widget class="GtkImage" id="image12">
+ <property name="visible">True</property>
+ <property name="stock">gtk-apply</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label68">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Update</property>
+ <property name="use_underline">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkButton" id="ClearButton">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="response_id">0</property>
+ <signal name="clicked" handler="on_ClearButton_clicked"/>
+ <child>
+ <widget class="GtkAlignment" id="alignment7">
+ <property name="visible">True</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+ <child>
+ <widget class="GtkHBox" id="hbox33">
+ <property name="visible">True</property>
+ <property name="spacing">2</property>
+ <child>
+ <widget class="GtkImage" id="image10">
+ <property name="visible">True</property>
+ <property name="stock">gtk-clear</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label63">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Clear</property>
+ <property name="use_underline">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="top_attach">6</property>
+ <property name="bottom_attach">7</property>
+ <property name="x_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkVBox" id="vbox27">
+ <property name="visible">True</property>
+ <property name="border_width">5</property>
+ <child>
+ <widget class="GtkEntry" id="EditPhbCompanyEntry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">*</property>
+ <signal name="changed" handler="on_EditPhbCompanyEntry_changed"/>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="top_attach">5</property>
+ <property name="bottom_attach">6</property>
+ <property name="x_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkVBox" id="vbox26">
+ <property name="visible">True</property>
+ <property name="border_width">5</property>
+ <child>
+ <widget class="GtkEntry" id="EditPhbNameEntry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">*</property>
+ <signal name="changed" handler="on_EditPhbNameEntry_changed"/>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label61">
+ <property name="visible">True</property>
+ <property name="xalign">0.05000000074505806</property>
+ <property name="label" translatable="yes">Organization</property>
+ <property name="justify">GTK_JUSTIFY_CENTER</property>
+ </widget>
+ <packing>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label60">
+ <property name="visible">True</property>
+ <property name="xalign">0.05000000074505806</property>
+ <property name="label" translatable="yes">Contact</property>
+ <property name="justify">GTK_JUSTIFY_CENTER</property>
+ </widget>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label59">
+ <property name="visible">True</property>
+ <property name="xalign">0.05000000074505806</property>
+ <property name="label" translatable="yes">Number</property>
+ <property name="justify">GTK_JUSTIFY_CENTER</property>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label64">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">New Entry</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkFrame" id="frame26">
+ <property name="visible">True</property>
+ <property name="border_width">6</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow10">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <child>
+ <widget class="GtkTreeView" id="ItemTreeview">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="border_width">6</property>
+ <property name="rules_hint">True</property>
+ <signal name="key_press_event" handler="on_ItemTreeview_key_press_event"/>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label65">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">New Item</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">5</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox34">
+ <property name="visible">True</property>
+ <property name="spacing">2</property>
+ <child>
+ <widget class="GtkImage" id="image11">
+ <property name="visible">True</property>
+ <property name="stock">gtk-justify-fill</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label66">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;&lt;big&gt;Edit Phone book&lt;/big&gt;&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkStatusbar" id="Statusbar">
+ <property name="visible">True</property>
+ <property name="has_resize_grip">False</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+</glade-interface>
diff --git a/intltool-extract.in b/intltool-extract.in
new file mode 100644
index 0000000..ae393ac
--- /dev/null
+++ b/intltool-extract.in
@@ -0,0 +1,875 @@
+#!@INTLTOOL_PERL@ -w
+# -*- Mode: perl; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+
+#
+# The Intltool Message Extractor
+#
+# Copyright (C) 2000-2001, 2003 Free Software Foundation.
+#
+# Intltool 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.
+#
+# Intltool 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+#
+# Authors: Kenneth Christiansen <kenneth@gnu.org>
+# Darin Adler <darin@bentspoon.com>
+#
+
+## Release information
+my $PROGRAM = "intltool-extract";
+my $PACKAGE = "intltool";
+my $VERSION = "0.37.1";
+
+## Loaded modules
+use strict;
+use File::Basename;
+use Getopt::Long;
+
+## Scalars used by the option stuff
+my $TYPE_ARG = "0";
+my $LOCAL_ARG = "0";
+my $HELP_ARG = "0";
+my $VERSION_ARG = "0";
+my $UPDATE_ARG = "0";
+my $QUIET_ARG = "0";
+my $SRCDIR_ARG = ".";
+
+my $FILE;
+my $OUTFILE;
+
+my $gettext_type = "";
+my $input;
+my %messages = ();
+my %loc = ();
+my %count = ();
+my %comments = ();
+my $strcount = 0;
+
+my $XMLCOMMENT = "";
+
+## Use this instead of \w for XML files to handle more possible characters.
+my $w = "[-A-Za-z0-9._:]";
+
+## Always print first
+$| = 1;
+
+## Handle options
+GetOptions (
+ "type=s" => \$TYPE_ARG,
+ "local|l" => \$LOCAL_ARG,
+ "help|h" => \$HELP_ARG,
+ "version|v" => \$VERSION_ARG,
+ "update" => \$UPDATE_ARG,
+ "quiet|q" => \$QUIET_ARG,
+ "srcdir=s" => \$SRCDIR_ARG,
+ ) or &error;
+
+&split_on_argument;
+
+
+## Check for options.
+## This section will check for the different options.
+
+sub split_on_argument {
+
+ if ($VERSION_ARG) {
+ &version;
+
+ } elsif ($HELP_ARG) {
+ &help;
+
+ } elsif ($LOCAL_ARG) {
+ &place_local;
+ &extract;
+
+ } elsif ($UPDATE_ARG) {
+ &place_normal;
+ &extract;
+
+ } elsif (@ARGV > 0) {
+ &place_normal;
+ &message;
+ &extract;
+
+ } else {
+ &help;
+
+ }
+}
+
+sub place_normal {
+ $FILE = $ARGV[0];
+ $OUTFILE = "$FILE.h";
+
+ my $dirname = dirname ($OUTFILE);
+ if (! -d "$dirname" && $dirname ne "") {
+ system ("mkdir -p $dirname");
+ }
+}
+
+sub place_local {
+ $FILE = $ARGV[0];
+ $OUTFILE = fileparse($FILE, ());
+ if (!-e "tmp/") {
+ system("mkdir tmp/");
+ }
+ $OUTFILE = "./tmp/$OUTFILE.h"
+}
+
+sub determine_type {
+ if ($TYPE_ARG =~ /^gettext\/(.*)/) {
+ $gettext_type=$1
+ }
+}
+
+## Sub for printing release information
+sub version{
+ print <<_EOF_;
+${PROGRAM} (${PACKAGE}) $VERSION
+Copyright (C) 2000, 2003 Free Software Foundation, Inc.
+Written by Kenneth Christiansen, 2000.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+_EOF_
+ exit;
+}
+
+## Sub for printing usage information
+sub help {
+ print <<_EOF_;
+Usage: ${PROGRAM} [OPTION]... [FILENAME]
+Generates a header file from an XML source file.
+
+It grabs all strings between <_translatable_node> and its end tag in
+XML files. Read manpage (man ${PROGRAM}) for more info.
+
+ --type=TYPE Specify the file type of FILENAME. Currently supports:
+ "gettext/glade", "gettext/ini", "gettext/keys"
+ "gettext/rfc822deb", "gettext/schemas",
+ "gettext/scheme", "gettext/xml", "gettext/quoted",
+ "gettext/quotedxml"
+ -l, --local Writes output into current working directory
+ (conflicts with --update)
+ --update Writes output into the same directory the source file
+ reside (conflicts with --local)
+ --srcdir Root of the source tree
+ -v, --version Output version information and exit
+ -h, --help Display this help and exit
+ -q, --quiet Quiet mode
+
+Report bugs to http://bugzilla.gnome.org/ (product name "$PACKAGE")
+or send email to <xml-i18n-tools\@gnome.org>.
+_EOF_
+ exit;
+}
+
+## Sub for printing error messages
+sub error{
+ print STDERR "Try `${PROGRAM} --help' for more information.\n";
+ exit;
+}
+
+sub message {
+ print "Generating C format header file for translation.\n" unless $QUIET_ARG;
+}
+
+sub extract {
+ &determine_type;
+
+ &convert;
+
+ open OUT, ">$OUTFILE";
+ binmode (OUT) if $^O eq 'MSWin32';
+ &msg_write;
+ close OUT;
+
+ print "Wrote $OUTFILE\n" unless $QUIET_ARG;
+}
+
+sub convert {
+
+ ## Reading the file
+ {
+ local (*IN);
+ local $/; #slurp mode
+ open (IN, "<$SRCDIR_ARG/$FILE") || die "can't open $SRCDIR_ARG/$FILE: $!";
+ $input = <IN>;
+ }
+
+ &type_ini if $gettext_type eq "ini";
+ &type_keys if $gettext_type eq "keys";
+ &type_xml if $gettext_type eq "xml";
+ &type_glade if $gettext_type eq "glade";
+ &type_scheme if $gettext_type eq "scheme";
+ &type_schemas if $gettext_type eq "schemas";
+ &type_rfc822deb if $gettext_type eq "rfc822deb";
+ &type_quoted if $gettext_type eq "quoted";
+ &type_quotedxml if $gettext_type eq "quotedxml";
+}
+
+sub entity_decode_minimal
+{
+ local ($_) = @_;
+
+ s/&apos;/'/g; # '
+ s/&quot;/"/g; # "
+ s/&amp;/&/g;
+
+ return $_;
+}
+
+sub entity_decode
+{
+ local ($_) = @_;
+
+ s/&apos;/'/g; # '
+ s/&quot;/"/g; # "
+ s/&lt;/</g;
+ s/&gt;/>/g;
+ s/&amp;/&/g;
+
+ return $_;
+}
+
+sub escape_char
+{
+ return '\"' if $_ eq '"';
+ return '\n' if $_ eq "\n";
+ return '\\\\' if $_ eq '\\';
+
+ return $_;
+}
+
+sub escape
+{
+ my ($string) = @_;
+ return join "", map &escape_char, split //, $string;
+}
+
+sub type_ini {
+ ### For generic translatable desktop files ###
+ while ($input =~ /^(#(.+)\n)?^_.*=(.*)$/mg) {
+ if (defined($2)) {
+ $comments{$3} = $2;
+ }
+ $messages{$3} = [];
+ }
+}
+
+sub type_keys {
+ ### For generic translatable mime/keys files ###
+ while ($input =~ /^\s*_\w+=(.*)$/mg) {
+ $messages{$1} = [];
+ }
+}
+
+sub type_xml {
+ ### For generic translatable XML files ###
+ my $tree = readXml($input);
+ parseTree(0, $tree);
+}
+
+sub print_var {
+ my $var = shift;
+ my $vartype = ref $var;
+
+ if ($vartype =~ /ARRAY/) {
+ my @arr = @{$var};
+ print "[ ";
+ foreach my $el (@arr) {
+ print_var($el);
+ print ", ";
+ }
+ print "] ";
+ } elsif ($vartype =~ /HASH/) {
+ my %hash = %{$var};
+ print "{ ";
+ foreach my $key (keys %hash) {
+ print "$key => ";
+ print_var($hash{$key});
+ print ", ";
+ }
+ print "} ";
+ } else {
+ print $var;
+ }
+}
+
+# Same syntax as getAttributeString in intltool-merge.in.in, similar logic (look for ## differences comment)
+sub getAttributeString
+{
+ my $sub = shift;
+ my $do_translate = shift || 1;
+ my $language = shift || "";
+ my $translate = shift;
+ my $result = "";
+ foreach my $e (reverse(sort(keys %{ $sub }))) {
+ my $key = $e;
+ my $string = $sub->{$e};
+ my $quote = '"';
+
+ $string =~ s/^[\s]+//;
+ $string =~ s/[\s]+$//;
+
+ if ($string =~ /^'.*'$/)
+ {
+ $quote = "'";
+ }
+ $string =~ s/^['"]//g;
+ $string =~ s/['"]$//g;
+
+ ## differences from intltool-merge.in.in
+ if ($key =~ /^_/) {
+ $comments{entity_decode($string)} = $XMLCOMMENT if $XMLCOMMENT;
+ $messages{entity_decode($string)} = [];
+ $$translate = 2;
+ }
+ ## differences end here from intltool-merge.in.in
+ $result .= " $key=$quote$string$quote";
+ }
+ return $result;
+}
+
+# Verbatim copy from intltool-merge.in.in
+sub getXMLstring
+{
+ my $ref = shift;
+ my $spacepreserve = shift || 0;
+ my @list = @{ $ref };
+ my $result = "";
+
+ my $count = scalar(@list);
+ my $attrs = $list[0];
+ my $index = 1;
+
+ $spacepreserve = 1 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/));
+ $spacepreserve = 0 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?default["']?$/));
+
+ while ($index < $count) {
+ my $type = $list[$index];
+ my $content = $list[$index+1];
+ if (! $type ) {
+ # We've got CDATA
+ if ($content) {
+ # lets strip the whitespace here, and *ONLY* here
+ $content =~ s/\s+/ /gs if (!$spacepreserve);
+ $result .= $content;
+ }
+ } elsif ( "$type" ne "1" ) {
+ # We've got another element
+ $result .= "<$type";
+ $result .= getAttributeString(@{$content}[0], 0); # no nested translatable elements
+ if ($content) {
+ my $subresult = getXMLstring($content, $spacepreserve);
+ if ($subresult) {
+ $result .= ">".$subresult . "</$type>";
+ } else {
+ $result .= "/>";
+ }
+ } else {
+ $result .= "/>";
+ }
+ }
+ $index += 2;
+ }
+ return $result;
+}
+
+# Verbatim copy from intltool-merge.in.in, except for MULTIPLE_OUTPUT handling removed
+# Translate list of nodes if necessary
+sub translate_subnodes
+{
+ my $fh = shift;
+ my $content = shift;
+ my $language = shift || "";
+ my $singlelang = shift || 0;
+ my $spacepreserve = shift || 0;
+
+ my @nodes = @{ $content };
+
+ my $count = scalar(@nodes);
+ my $index = 0;
+ while ($index < $count) {
+ my $type = $nodes[$index];
+ my $rest = $nodes[$index+1];
+ traverse($fh, $type, $rest, $language, $spacepreserve);
+ $index += 2;
+ }
+}
+
+# Based on traverse() in intltool-merge.in.in
+sub traverse
+{
+ my $fh = shift; # unused, to allow us to sync code between -merge and -extract
+ my $nodename = shift;
+ my $content = shift;
+ my $language = shift || "";
+ my $spacepreserve = shift || 0;
+
+ if ($nodename && "$nodename" eq "1") {
+ $XMLCOMMENT = $content;
+ } elsif ($nodename) {
+ # element
+ my @all = @{ $content };
+ my $attrs = shift @all;
+ my $translate = 0;
+ my $outattr = getAttributeString($attrs, 1, $language, \$translate);
+
+ if ($nodename =~ /^_/) {
+ $translate = 1;
+ $nodename =~ s/^_//;
+ }
+ my $lookup = '';
+
+ $spacepreserve = 0 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?default["']?$/));
+ $spacepreserve = 1 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/));
+
+ if ($translate) {
+ $lookup = getXMLstring($content, $spacepreserve);
+ if (!$spacepreserve) {
+ $lookup =~ s/^\s+//s;
+ $lookup =~ s/\s+$//s;
+ }
+
+ if ($lookup && $translate != 2) {
+ $comments{$lookup} = $XMLCOMMENT if $XMLCOMMENT;
+ $messages{$lookup} = [];
+ } elsif ($translate == 2) {
+ translate_subnodes($fh, \@all, $language, 1, $spacepreserve);
+ }
+ } else {
+ $XMLCOMMENT = "";
+ my $count = scalar(@all);
+ if ($count > 0) {
+ my $index = 0;
+ while ($index < $count) {
+ my $type = $all[$index];
+ my $rest = $all[$index+1];
+ traverse($fh, $type, $rest, $language, $spacepreserve);
+ $index += 2;
+ }
+ }
+ }
+ $XMLCOMMENT = "";
+ }
+}
+
+
+# Verbatim copy from intltool-merge.in.in, $fh for compatibility
+sub parseTree
+{
+ my $fh = shift;
+ my $ref = shift;
+ my $language = shift || "";
+
+ my $name = shift @{ $ref };
+ my $cont = shift @{ $ref };
+
+ while (!$name || "$name" eq "1") {
+ $name = shift @{ $ref };
+ $cont = shift @{ $ref };
+ }
+
+ my $spacepreserve = 0;
+ my $attrs = @{$cont}[0];
+ $spacepreserve = 1 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/));
+
+ traverse($fh, $name, $cont, $language, $spacepreserve);
+}
+
+# Verbatim copy from intltool-merge.in.in
+sub intltool_tree_comment
+{
+ my $expat = shift;
+ my $data = $expat->original_string();
+ my $clist = $expat->{Curlist};
+ my $pos = $#$clist;
+
+ $data =~ s/^<!--//s;
+ $data =~ s/-->$//s;
+ push @$clist, 1 => $data;
+}
+
+# Verbatim copy from intltool-merge.in.in
+sub intltool_tree_cdatastart
+{
+ my $expat = shift;
+ my $clist = $expat->{Curlist};
+ my $pos = $#$clist;
+
+ push @$clist, 0 => $expat->original_string();
+}
+
+# Verbatim copy from intltool-merge.in.in
+sub intltool_tree_cdataend
+{
+ my $expat = shift;
+ my $clist = $expat->{Curlist};
+ my $pos = $#$clist;
+
+ $clist->[$pos] .= $expat->original_string();
+}
+
+# Verbatim copy from intltool-merge.in.in
+sub intltool_tree_char
+{
+ my $expat = shift;
+ my $text = shift;
+ my $clist = $expat->{Curlist};
+ my $pos = $#$clist;
+
+ # Use original_string so that we retain escaped entities
+ # in CDATA sections.
+ #
+ if ($pos > 0 and $clist->[$pos - 1] eq '0') {
+ $clist->[$pos] .= $expat->original_string();
+ } else {
+ push @$clist, 0 => $expat->original_string();
+ }
+}
+
+# Verbatim copy from intltool-merge.in.in
+sub intltool_tree_start
+{
+ my $expat = shift;
+ my $tag = shift;
+ my @origlist = ();
+
+ # Use original_string so that we retain escaped entities
+ # in attribute values. We must convert the string to an
+ # @origlist array to conform to the structure of the Tree
+ # Style.
+ #
+ my @original_array = split /\x/, $expat->original_string();
+ my $source = $expat->original_string();
+
+ # Remove leading tag.
+ #
+ $source =~ s|^\s*<\s*(\S+)||s;
+
+ # Grab attribute key/value pairs and push onto @origlist array.
+ #
+ while ($source)
+ {
+ if ($source =~ /^\s*([\w:-]+)\s*[=]\s*["]/)
+ {
+ $source =~ s|^\s*([\w:-]+)\s*[=]\s*["]([^"]*)["]||s;
+ push @origlist, $1;
+ push @origlist, '"' . $2 . '"';
+ }
+ elsif ($source =~ /^\s*([\w:-]+)\s*[=]\s*[']/)
+ {
+ $source =~ s|^\s*([\w:-]+)\s*[=]\s*[']([^']*)[']||s;
+ push @origlist, $1;
+ push @origlist, "'" . $2 . "'";
+ }
+ else
+ {
+ last;
+ }
+ }
+
+ my $ol = [ { @origlist } ];
+
+ push @{ $expat->{Lists} }, $expat->{Curlist};
+ push @{ $expat->{Curlist} }, $tag => $ol;
+ $expat->{Curlist} = $ol;
+}
+
+# Copied from intltool-merge.in.in and added comment handler.
+sub readXml
+{
+ my $xmldoc = shift || return;
+ my $ret = eval 'require XML::Parser';
+ if(!$ret) {
+ die "You must have XML::Parser installed to run $0\n\n";
+ }
+ my $xp = new XML::Parser(Style => 'Tree');
+ $xp->setHandlers(Char => \&intltool_tree_char);
+ $xp->setHandlers(Start => \&intltool_tree_start);
+ $xp->setHandlers(CdataStart => \&intltool_tree_cdatastart);
+ $xp->setHandlers(CdataEnd => \&intltool_tree_cdataend);
+
+ ## differences from intltool-merge.in.in
+ $xp->setHandlers(Comment => \&intltool_tree_comment);
+ ## differences end here from intltool-merge.in.in
+
+ my $tree = $xp->parse($xmldoc);
+ #print_var($tree);
+
+# <foo><!-- comment --><head id="a">Hello <em>there</em></head><bar>Howdy<ref/></bar>do</foo>
+# would be:
+# [foo, [{}, 1, "comment", head, [{id => "a"}, 0, "Hello ", em, [{}, 0, "there"]], bar,
+# [{}, 0, "Howdy", ref, [{}]], 0, "do" ] ]
+
+ return $tree;
+}
+
+sub type_schemas {
+ ### For schemas XML files ###
+
+ # FIXME: We should handle escaped < (less than)
+ while ($input =~ /
+ <locale\ name="C">\s*
+ (<default>\s*(?:<!--([^>]*?)-->\s*)?(.*?)\s*<\/default>\s*)?
+ (<short>\s*(?:<!--([^>]*?)-->\s*)?(.*?)\s*<\/short>\s*)?
+ (<long>\s*(?:<!--([^>]*?)-->\s*)?(.*?)\s*<\/long>\s*)?
+ <\/locale>
+ /sgx) {
+ my @totranslate = ($3,$6,$9);
+ my @eachcomment = ($2,$5,$8);
+ foreach (@totranslate) {
+ my $currentcomment = shift @eachcomment;
+ next if !$_;
+ s/\s+/ /g;
+ $messages{entity_decode_minimal($_)} = [];
+ $comments{entity_decode_minimal($_)} = $currentcomment if (defined($currentcomment));
+ }
+ }
+}
+
+sub type_rfc822deb {
+ ### For rfc822-style Debian configuration files ###
+
+ my $lineno = 1;
+ my $type = '';
+ while ($input =~ /\G(.*?)(^|\n)(_+)([^:]+):[ \t]*(.*?)(?=\n\S|$)/sg)
+ {
+ my ($pre, $newline, $underscore, $tag, $text) = ($1, $2, $3, $4, $5);
+ while ($pre =~ m/\n/g)
+ {
+ $lineno ++;
+ }
+ $lineno += length($newline);
+ my @str_list = rfc822deb_split(length($underscore), $text);
+ for my $str (@str_list)
+ {
+ $strcount++;
+ $messages{$str} = [];
+ $loc{$str} = $lineno;
+ $count{$str} = $strcount;
+ my $usercomment = '';
+ while($pre =~ s/(^|\n)#([^\n]*)$//s)
+ {
+ $usercomment = "\n" . $2 . $usercomment;
+ }
+ $comments{$str} = $tag . $usercomment;
+ }
+ $lineno += ($text =~ s/\n//g);
+ }
+}
+
+sub rfc822deb_split {
+ # Debian defines a special way to deal with rfc822-style files:
+ # when a value contain newlines, it consists of
+ # 1. a short form (first line)
+ # 2. a long description, all lines begin with a space,
+ # and paragraphs are separated by a single dot on a line
+ # This routine returns an array of all paragraphs, and reformat
+ # them.
+ # When first argument is 2, the string is a comma separated list of
+ # values.
+ my $type = shift;
+ my $text = shift;
+ $text =~ s/^[ \t]//mg;
+ return (split(/, */, $text, 0)) if $type ne 1;
+ return ($text) if $text !~ /\n/;
+
+ $text =~ s/([^\n]*)\n//;
+ my @list = ($1);
+ my $str = '';
+ for my $line (split (/\n/, $text))
+ {
+ chomp $line;
+ if ($line =~ /^\.\s*$/)
+ {
+ # New paragraph
+ $str =~ s/\s*$//;
+ push(@list, $str);
+ $str = '';
+ }
+ elsif ($line =~ /^\s/)
+ {
+ # Line which must not be reformatted
+ $str .= "\n" if length ($str) && $str !~ /\n$/;
+ $line =~ s/\s+$//;
+ $str .= $line."\n";
+ }
+ else
+ {
+ # Continuation line, remove newline
+ $str .= " " if length ($str) && $str !~ /\n$/;
+ $str .= $line;
+ }
+ }
+ $str =~ s/\s*$//;
+ push(@list, $str) if length ($str);
+ return @list;
+}
+
+sub type_quoted {
+ while ($input =~ /\"(([^\"]|\\\")*[^\\\"])\"/g) {
+ my $message = $1;
+ my $before = $`;
+ $message =~ s/\\\"/\"/g;
+ $before =~ s/[^\n]//g;
+ $messages{$message} = [];
+ $loc{$message} = length ($before) + 2;
+ }
+}
+
+sub type_quotedxml {
+ while ($input =~ /\"(([^\"]|\\\")*[^\\\"])\"/g) {
+ my $message = $1;
+ my $before = $`;
+ $message =~ s/\\\"/\"/g;
+ $message = entity_decode($message);
+ $before =~ s/[^\n]//g;
+ $messages{$message} = [];
+ $loc{$message} = length ($before) + 2;
+ }
+}
+
+sub type_glade {
+ ### For translatable Glade XML files ###
+
+ my $tags = "label|title|text|format|copyright|comments|preview_text|tooltip|message";
+
+ while ($input =~ /<($tags)>([^<]+)<\/($tags)>/sg) {
+ # Glade sometimes uses tags that normally mark translatable things for
+ # little bits of non-translatable content. We work around this by not
+ # translating strings that only includes something like label4 or window1.
+ $messages{entity_decode($2)} = [] unless $2 =~ /^(window|label|dialog)[0-9]+$/;
+ }
+
+ while ($input =~ /<items>(..[^<]*)<\/items>/sg) {
+ for my $item (split (/\n/, $1)) {
+ $messages{entity_decode($item)} = [];
+ }
+ }
+
+ ## handle new glade files
+ while ($input =~ /<(property|atkproperty|col)\s+[^>]*translatable\s*=\s*"yes"(?:\s+[^>]*comments\s*=\s*"([^"]*)")?[^>]*>([^<]+)<\/\1>/sg) {
+ $messages{entity_decode($3)} = [] unless $3 =~ /^(window|label)[0-9]+$/;
+ if (defined($2) and !($3 =~ /^(window|label)[0-9]+$/)) {
+ $comments{entity_decode($3)} = entity_decode($2) ;
+ }
+ }
+ while ($input =~ /<atkaction\s+action_name="([^>]*)"\s+description="([^>]+)"\/>/sg) {
+ $messages{entity_decode_minimal($2)} = [];
+ }
+}
+
+sub type_scheme {
+ my ($line, $i, $state, $str, $trcomment, $char);
+ for $line (split(/\n/, $input)) {
+ $i = 0;
+ $state = 0; # 0 - nothing, 1 - string, 2 - translatable string
+ while ($i < length($line)) {
+ if (substr($line,$i,1) eq "\"") {
+ if ($state == 2) {
+ $comments{$str} = $trcomment if ($trcomment);
+ $messages{$str} = [];
+ $str = '';
+ $state = 0; $trcomment = "";
+ } elsif ($state == 1) {
+ $str = '';
+ $state = 0; $trcomment = "";
+ } else {
+ $state = 1;
+ $str = '';
+ if ($i>0 && substr($line,$i-1,1) eq '_') {
+ $state = 2;
+ }
+ }
+ } elsif (!$state) {
+ if (substr($line,$i,1) eq ";") {
+ $trcomment = substr($line,$i+1);
+ $trcomment =~ s/^;*\s*//;
+ $i = length($line);
+ } elsif ($trcomment && substr($line,$i,1) !~ /\s|\(|\)|_/) {
+ $trcomment = "";
+ }
+ } else {
+ if (substr($line,$i,1) eq "\\") {
+ $char = substr($line,$i+1,1);
+ if ($char ne "\"" && $char ne "\\") {
+ $str = $str . "\\";
+ }
+ $i++;
+ }
+ $str = $str . substr($line,$i,1);
+ }
+ $i++;
+ }
+ }
+}
+
+sub msg_write {
+ my @msgids;
+ if (%count)
+ {
+ @msgids = sort { $count{$a} <=> $count{$b} } keys %count;
+ }
+ else
+ {
+ @msgids = sort keys %messages;
+ }
+ for my $message (@msgids)
+ {
+ my $offsetlines = 1;
+ $offsetlines++ if $message =~ /%/;
+ if (defined ($comments{$message}))
+ {
+ while ($comments{$message} =~ m/\n/g)
+ {
+ $offsetlines++;
+ }
+ }
+ print OUT "# ".($loc{$message} - $offsetlines). " \"$FILE\"\n"
+ if defined $loc{$message};
+ print OUT "/* ".$comments{$message}." */\n"
+ if defined $comments{$message};
+ print OUT "/* xgettext:no-c-format */\n" if $message =~ /%/;
+
+ my @lines = split (/\n/, $message, -1);
+ for (my $n = 0; $n < @lines; $n++)
+ {
+ if ($n == 0)
+ {
+ print OUT "char *s = N_(\"";
+ }
+ else
+ {
+ print OUT " \"";
+ }
+
+ print OUT escape($lines[$n]);
+
+ if ($n < @lines - 1)
+ {
+ print OUT "\\n\"\n";
+ }
+ else
+ {
+ print OUT "\");\n";
+ }
+ }
+ }
+}
+
diff --git a/intltool-merge.in b/intltool-merge.in
new file mode 100644
index 0000000..60c3f3e
--- /dev/null
+++ b/intltool-merge.in
@@ -0,0 +1,1506 @@
+#!@INTLTOOL_PERL@ -w
+# -*- Mode: perl; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+
+#
+# The Intltool Message Merger
+#
+# Copyright (C) 2000, 2003 Free Software Foundation.
+# Copyright (C) 2000, 2001 Eazel, Inc
+#
+# Intltool is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# version 2 published by the Free Software Foundation.
+#
+# Intltool 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+#
+# Authors: Maciej Stachowiak <mjs@noisehavoc.org>
+# Kenneth Christiansen <kenneth@gnu.org>
+# Darin Adler <darin@bentspoon.com>
+#
+# Proper XML UTF-8'ification written by Cyrille Chepelov <chepelov@calixo.net>
+#
+
+## Release information
+my $PROGRAM = "intltool-merge";
+my $PACKAGE = "intltool";
+my $VERSION = "0.37.1";
+
+## Loaded modules
+use strict;
+use Getopt::Long;
+use Text::Wrap;
+use File::Basename;
+
+my $must_end_tag = -1;
+my $last_depth = -1;
+my $translation_depth = -1;
+my @tag_stack = ();
+my @entered_tag = ();
+my @translation_strings = ();
+my $leading_space = "";
+
+## Scalars used by the option stuff
+my $HELP_ARG = 0;
+my $VERSION_ARG = 0;
+my $BA_STYLE_ARG = 0;
+my $XML_STYLE_ARG = 0;
+my $KEYS_STYLE_ARG = 0;
+my $DESKTOP_STYLE_ARG = 0;
+my $SCHEMAS_STYLE_ARG = 0;
+my $RFC822DEB_STYLE_ARG = 0;
+my $QUOTED_STYLE_ARG = 0;
+my $QUOTEDXML_STYLE_ARG = 0;
+my $QUIET_ARG = 0;
+my $PASS_THROUGH_ARG = 0;
+my $UTF8_ARG = 0;
+my $MULTIPLE_OUTPUT = 0;
+my $cache_file;
+
+## Handle options
+GetOptions
+(
+ "help" => \$HELP_ARG,
+ "version" => \$VERSION_ARG,
+ "quiet|q" => \$QUIET_ARG,
+ "oaf-style|o" => \$BA_STYLE_ARG, ## for compatibility
+ "ba-style|b" => \$BA_STYLE_ARG,
+ "xml-style|x" => \$XML_STYLE_ARG,
+ "keys-style|k" => \$KEYS_STYLE_ARG,
+ "desktop-style|d" => \$DESKTOP_STYLE_ARG,
+ "schemas-style|s" => \$SCHEMAS_STYLE_ARG,
+ "rfc822deb-style|r" => \$RFC822DEB_STYLE_ARG,
+ "quoted-style" => \$QUOTED_STYLE_ARG,
+ "quotedxml-style" => \$QUOTEDXML_STYLE_ARG,
+ "pass-through|p" => \$PASS_THROUGH_ARG,
+ "utf8|u" => \$UTF8_ARG,
+ "multiple-output|m" => \$MULTIPLE_OUTPUT,
+ "cache|c=s" => \$cache_file
+ ) or &error;
+
+my $PO_DIR;
+my $FILE;
+my $OUTFILE;
+
+my %po_files_by_lang = ();
+my %translations = ();
+my $iconv = $ENV{"ICONV"} || "iconv";
+my $devnull = ($^O eq 'MSWin32' ? 'NUL:' : '/dev/null');
+
+sub isProgramInPath
+{
+ my ($file) = @_;
+ # If either a file exists, or when run it returns 0 exit status
+ return 1 if ((-x $file) or (system("$file -l >$devnull") == 0));
+ return 0;
+}
+
+if (! isProgramInPath ("$iconv"))
+{
+ print STDERR " *** iconv is not found on this system!\n".
+ " *** Without it, intltool-merge can not convert encodings.\n";
+ exit;
+}
+
+# Use this instead of \w for XML files to handle more possible characters.
+my $w = "[-A-Za-z0-9._:]";
+
+# XML quoted string contents
+my $q = "[^\\\"]*";
+
+## Check for options.
+
+if ($VERSION_ARG)
+{
+ &print_version;
+}
+elsif ($HELP_ARG)
+{
+ &print_help;
+}
+elsif ($BA_STYLE_ARG && @ARGV > 2)
+{
+ &utf8_sanity_check;
+ &preparation;
+ &print_message;
+ &ba_merge_translations;
+ &finalize;
+}
+elsif ($XML_STYLE_ARG && @ARGV > 2)
+{
+ &utf8_sanity_check;
+ &preparation;
+ &print_message;
+ &xml_merge_output;
+ &finalize;
+}
+elsif ($KEYS_STYLE_ARG && @ARGV > 2)
+{
+ &utf8_sanity_check;
+ &preparation;
+ &print_message;
+ &keys_merge_translations;
+ &finalize;
+}
+elsif ($DESKTOP_STYLE_ARG && @ARGV > 2)
+{
+ &utf8_sanity_check;
+ &preparation;
+ &print_message;
+ &desktop_merge_translations;
+ &finalize;
+}
+elsif ($SCHEMAS_STYLE_ARG && @ARGV > 2)
+{
+ &utf8_sanity_check;
+ &preparation;
+ &print_message;
+ &schemas_merge_translations;
+ &finalize;
+}
+elsif ($RFC822DEB_STYLE_ARG && @ARGV > 2)
+{
+ &preparation;
+ &print_message;
+ &rfc822deb_merge_translations;
+ &finalize;
+}
+elsif (($QUOTED_STYLE_ARG || $QUOTEDXML_STYLE_ARG) && @ARGV > 2)
+{
+ &utf8_sanity_check;
+ &preparation;
+ &print_message;
+ &quoted_merge_translations($QUOTEDXML_STYLE_ARG);
+ &finalize;
+}
+else
+{
+ &print_help;
+}
+
+exit;
+
+## Sub for printing release information
+sub print_version
+{
+ print <<_EOF_;
+${PROGRAM} (${PACKAGE}) ${VERSION}
+Written by Maciej Stachowiak, Darin Adler and Kenneth Christiansen.
+
+Copyright (C) 2000-2003 Free Software Foundation, Inc.
+Copyright (C) 2000-2001 Eazel, Inc.
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+_EOF_
+ exit;
+}
+
+## Sub for printing usage information
+sub print_help
+{
+ print <<_EOF_;
+Usage: ${PROGRAM} [OPTION]... PO_DIRECTORY FILENAME OUTPUT_FILE
+Generates an output file that includes some localized attributes from an
+untranslated source file.
+
+Mandatory options: (exactly one must be specified)
+ -b, --ba-style includes translations in the bonobo-activation style
+ -d, --desktop-style includes translations in the desktop style
+ -k, --keys-style includes translations in the keys style
+ -s, --schemas-style includes translations in the schemas style
+ -r, --rfc822deb-style includes translations in the RFC822 style
+ --quoted-style includes translations in the quoted string style
+ --quotedxml-style includes translations in the quoted xml string style
+ -x, --xml-style includes translations in the standard xml style
+
+Other options:
+ -u, --utf8 convert all strings to UTF-8 before merging
+ (default for everything except RFC822 style)
+ -p, --pass-through deprecated, does nothing and issues a warning
+ -m, --multiple-output output one localized file per locale, instead of
+ a single file containing all localized elements
+ -c, --cache=FILE specify cache file name
+ (usually \$top_builddir/po/.intltool-merge-cache)
+ -q, --quiet suppress most messages
+ --help display this help and exit
+ --version output version information and exit
+
+Report bugs to http://bugzilla.gnome.org/ (product name "$PACKAGE")
+or send email to <xml-i18n-tools\@gnome.org>.
+_EOF_
+ exit;
+}
+
+
+## Sub for printing error messages
+sub print_error
+{
+ print STDERR "Try `${PROGRAM} --help' for more information.\n";
+ exit;
+}
+
+
+sub print_message
+{
+ print "Merging translations into $OUTFILE.\n" unless $QUIET_ARG;
+}
+
+
+sub preparation
+{
+ $PO_DIR = $ARGV[0];
+ $FILE = $ARGV[1];
+ $OUTFILE = $ARGV[2];
+
+ &gather_po_files;
+ &get_translation_database;
+}
+
+# General-purpose code for looking up translations in .po files
+
+sub po_file2lang
+{
+ my ($tmp) = @_;
+ $tmp =~ s/^.*\/(.*)\.po$/$1/;
+ return $tmp;
+}
+
+sub gather_po_files
+{
+ if (my $linguas = $ENV{"LINGUAS"})
+ {
+ for my $lang (split / /, $linguas) {
+ my $po_file = $PO_DIR . "/" . $lang . ".po";
+ if (-e $po_file) {
+ $po_files_by_lang{$lang} = $po_file;
+ }
+ }
+ }
+ else
+ {
+ if (open LINGUAS_FILE, "$PO_DIR/LINGUAS")
+ {
+ while (<LINGUAS_FILE>)
+ {
+ next if /^#/;
+
+ for my $lang (split)
+ {
+ chomp ($lang);
+ my $po_file = $PO_DIR . "/" . $lang . ".po";
+ if (-e $po_file) {
+ $po_files_by_lang{$lang} = $po_file;
+ }
+ }
+ }
+
+ close LINGUAS_FILE;
+ }
+ else
+ {
+ for my $po_file (glob "$PO_DIR/*.po") {
+ $po_files_by_lang{po_file2lang($po_file)} = $po_file;
+ }
+ }
+ }
+}
+
+sub get_local_charset
+{
+ my ($encoding) = @_;
+ my $alias_file = $ENV{"G_CHARSET_ALIAS"} || "@INTLTOOL_LIBDIR@/charset.alias";
+
+ # seek character encoding aliases in charset.alias (glib)
+
+ if (open CHARSET_ALIAS, $alias_file)
+ {
+ while (<CHARSET_ALIAS>)
+ {
+ next if /^\#/;
+ return $1 if (/^\s*([-._a-zA-Z0-9]+)\s+$encoding\b/i)
+ }
+
+ close CHARSET_ALIAS;
+ }
+
+ # if not found, return input string
+
+ return $encoding;
+}
+
+sub get_po_encoding
+{
+ my ($in_po_file) = @_;
+ my $encoding = "";
+
+ open IN_PO_FILE, $in_po_file or die;
+ while (<IN_PO_FILE>)
+ {
+ ## example: "Content-Type: text/plain; charset=ISO-8859-1\n"
+ if (/Content-Type\:.*charset=([-a-zA-Z0-9]+)\\n/)
+ {
+ $encoding = $1;
+ last;
+ }
+ }
+ close IN_PO_FILE;
+
+ if (!$encoding)
+ {
+ print STDERR "Warning: no encoding found in $in_po_file. Assuming ISO-8859-1\n" unless $QUIET_ARG;
+ $encoding = "ISO-8859-1";
+ }
+
+ system ("$iconv -f $encoding -t UTF-8 <$devnull 2>$devnull");
+ if ($?) {
+ $encoding = get_local_charset($encoding);
+ }
+
+ return $encoding
+}
+
+sub utf8_sanity_check
+{
+ print STDERR "Warning: option --pass-through has been removed.\n" if $PASS_THROUGH_ARG;
+ $UTF8_ARG = 1;
+}
+
+sub get_translation_database
+{
+ if ($cache_file) {
+ &get_cached_translation_database;
+ } else {
+ &create_translation_database;
+ }
+}
+
+sub get_newest_po_age
+{
+ my $newest_age;
+
+ foreach my $file (values %po_files_by_lang)
+ {
+ my $file_age = -M $file;
+ $newest_age = $file_age if !$newest_age || $file_age < $newest_age;
+ }
+
+ $newest_age = 0 if !$newest_age;
+
+ return $newest_age;
+}
+
+sub create_cache
+{
+ print "Generating and caching the translation database\n" unless $QUIET_ARG;
+
+ &create_translation_database;
+
+ open CACHE, ">$cache_file" || die;
+ print CACHE join "\x01", %translations;
+ close CACHE;
+}
+
+sub load_cache
+{
+ print "Found cached translation database\n" unless $QUIET_ARG;
+
+ my $contents;
+ open CACHE, "<$cache_file" || die;
+ {
+ local $/;
+ $contents = <CACHE>;
+ }
+ close CACHE;
+ %translations = split "\x01", $contents;
+}
+
+sub get_cached_translation_database
+{
+ my $cache_file_age = -M $cache_file;
+ if (defined $cache_file_age)
+ {
+ if ($cache_file_age <= &get_newest_po_age)
+ {
+ &load_cache;
+ return;
+ }
+ print "Found too-old cached translation database\n" unless $QUIET_ARG;
+ }
+
+ &create_cache;
+}
+
+sub create_translation_database
+{
+ for my $lang (keys %po_files_by_lang)
+ {
+ my $po_file = $po_files_by_lang{$lang};
+
+ if ($UTF8_ARG)
+ {
+ my $encoding = get_po_encoding ($po_file);
+
+ if (lc $encoding eq "utf-8")
+ {
+ open PO_FILE, "<$po_file";
+ }
+ else
+ {
+ print "NOTICE: $po_file is not in UTF-8 but $encoding, converting...\n" unless $QUIET_ARG;;
+
+ open PO_FILE, "$iconv -f $encoding -t UTF-8 $po_file|";
+ }
+ }
+ else
+ {
+ open PO_FILE, "<$po_file";
+ }
+
+ my $nextfuzzy = 0;
+ my $inmsgid = 0;
+ my $inmsgstr = 0;
+ my $msgid = "";
+ my $msgstr = "";
+
+ while (<PO_FILE>)
+ {
+ $nextfuzzy = 1 if /^#, fuzzy/;
+
+ if (/^msgid "((\\.|[^\\]+)*)"/ )
+ {
+ $translations{$lang, $msgid} = $msgstr if $inmsgstr && $msgid && $msgstr;
+ $msgid = "";
+ $msgstr = "";
+
+ if ($nextfuzzy) {
+ $inmsgid = 0;
+ } else {
+ $msgid = unescape_po_string($1);
+ $inmsgid = 1;
+ }
+ $inmsgstr = 0;
+ $nextfuzzy = 0;
+ }
+
+ if (/^msgstr "((\\.|[^\\]+)*)"/)
+ {
+ $msgstr = unescape_po_string($1);
+ $inmsgstr = 1;
+ $inmsgid = 0;
+ }
+
+ if (/^"((\\.|[^\\]+)*)"/)
+ {
+ $msgid .= unescape_po_string($1) if $inmsgid;
+ $msgstr .= unescape_po_string($1) if $inmsgstr;
+ }
+ }
+ $translations{$lang, $msgid} = $msgstr if $inmsgstr && $msgid && $msgstr;
+ }
+}
+
+sub finalize
+{
+}
+
+sub unescape_one_sequence
+{
+ my ($sequence) = @_;
+
+ return "\\" if $sequence eq "\\\\";
+ return "\"" if $sequence eq "\\\"";
+ return "\n" if $sequence eq "\\n";
+ return "\r" if $sequence eq "\\r";
+ return "\t" if $sequence eq "\\t";
+ return "\b" if $sequence eq "\\b";
+ return "\f" if $sequence eq "\\f";
+ return "\a" if $sequence eq "\\a";
+ return chr(11) if $sequence eq "\\v"; # vertical tab, see ascii(7)
+
+ return chr(hex($1)) if ($sequence =~ /\\x([0-9a-fA-F]{2})/);
+ return chr(oct($1)) if ($sequence =~ /\\([0-7]{3})/);
+
+ # FIXME: Is \0 supported as well? Kenneth and Rodney don't want it, see bug #48489
+
+ return $sequence;
+}
+
+sub unescape_po_string
+{
+ my ($string) = @_;
+
+ $string =~ s/(\\x[0-9a-fA-F]{2}|\\[0-7]{3}|\\.)/unescape_one_sequence($1)/eg;
+
+ return $string;
+}
+
+sub entity_decode
+{
+ local ($_) = @_;
+
+ s/&apos;/'/g; # '
+ s/&quot;/"/g; # "
+ s/&lt;/</g;
+ s/&gt;/>/g;
+ s/&amp;/&/g;
+
+ return $_;
+}
+
+# entity_encode: (string)
+#
+# Encode the given string to XML format (encode '<' etc).
+
+sub entity_encode
+{
+ my ($pre_encoded) = @_;
+
+ my @list_of_chars = unpack ('C*', $pre_encoded);
+
+ # with UTF-8 we only encode minimalistic
+ return join ('', map (&entity_encode_int_minimalist, @list_of_chars));
+}
+
+sub entity_encode_int_minimalist
+{
+ return "&quot;" if $_ == 34;
+ return "&amp;" if $_ == 38;
+ return "&apos;" if $_ == 39;
+ return "&lt;" if $_ == 60;
+ return "&gt;" if $_ == 62;
+ return chr $_;
+}
+
+sub entity_encoded_translation
+{
+ my ($lang, $string) = @_;
+
+ my $translation = $translations{$lang, $string};
+ return $string if !$translation;
+ return entity_encode ($translation);
+}
+
+## XML (bonobo-activation specific) merge code
+
+sub ba_merge_translations
+{
+ my $source;
+
+ {
+ local $/; # slurp mode
+ open INPUT, "<$FILE" or die "can't open $FILE: $!";
+ $source = <INPUT>;
+ close INPUT;
+ }
+
+ open OUTPUT, ">$OUTFILE" or die "can't open $OUTFILE: $!";
+ # Binmode so that selftest works ok if using a native Win32 Perl...
+ binmode (OUTPUT) if $^O eq 'MSWin32';
+
+ while ($source =~ s|^(.*?)([ \t]*<\s*$w+\s+($w+\s*=\s*"$q"\s*)+/?>)([ \t]*\n)?||s)
+ {
+ print OUTPUT $1;
+
+ my $node = $2 . "\n";
+
+ my @strings = ();
+ $_ = $node;
+ while (s/(\s)_($w+\s*=\s*"($q)")/$1$2/s) {
+ push @strings, entity_decode($3);
+ }
+ print OUTPUT;
+
+ my %langs;
+ for my $string (@strings)
+ {
+ for my $lang (keys %po_files_by_lang)
+ {
+ $langs{$lang} = 1 if $translations{$lang, $string};
+ }
+ }
+
+ for my $lang (sort keys %langs)
+ {
+ $_ = $node;
+ s/(\sname\s*=\s*)"($q)"/$1"$2-$lang"/s;
+ s/(\s)_($w+\s*=\s*")($q)"/$1 . $2 . entity_encoded_translation($lang, $3) . '"'/seg;
+ print OUTPUT;
+ }
+ }
+
+ print OUTPUT $source;
+
+ close OUTPUT;
+}
+
+
+## XML (non-bonobo-activation) merge code
+
+
+# Process tag attributes
+# Only parameter is a HASH containing attributes -> values mapping
+sub getAttributeString
+{
+ my $sub = shift;
+ my $do_translate = shift || 0;
+ my $language = shift || "";
+ my $result = "";
+ my $translate = shift;
+ foreach my $e (reverse(sort(keys %{ $sub }))) {
+ my $key = $e;
+ my $string = $sub->{$e};
+ my $quote = '"';
+
+ $string =~ s/^[\s]+//;
+ $string =~ s/[\s]+$//;
+
+ if ($string =~ /^'.*'$/)
+ {
+ $quote = "'";
+ }
+ $string =~ s/^['"]//g;
+ $string =~ s/['"]$//g;
+
+ if ($do_translate && $key =~ /^_/) {
+ $key =~ s|^_||g;
+ if ($language) {
+ # Handle translation
+ my $decode_string = entity_decode($string);
+ my $translation = $translations{$language, $decode_string};
+ if ($translation) {
+ $translation = entity_encode($translation);
+ $string = $translation;
+ }
+ $$translate = 2;
+ } else {
+ $$translate = 2 if ($translate && (!$$translate)); # watch not to "overwrite" $translate
+ }
+ }
+
+ $result .= " $key=$quote$string$quote";
+ }
+ return $result;
+}
+
+# Returns a translatable string from XML node, it works on contents of every node in XML::Parser tree
+sub getXMLstring
+{
+ my $ref = shift;
+ my $spacepreserve = shift || 0;
+ my @list = @{ $ref };
+ my $result = "";
+
+ my $count = scalar(@list);
+ my $attrs = $list[0];
+ my $index = 1;
+
+ $spacepreserve = 1 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/));
+ $spacepreserve = 0 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?default["']?$/));
+
+ while ($index < $count) {
+ my $type = $list[$index];
+ my $content = $list[$index+1];
+ if (! $type ) {
+ # We've got CDATA
+ if ($content) {
+ # lets strip the whitespace here, and *ONLY* here
+ $content =~ s/\s+/ /gs if (!$spacepreserve);
+ $result .= $content;
+ }
+ } elsif ( "$type" ne "1" ) {
+ # We've got another element
+ $result .= "<$type";
+ $result .= getAttributeString(@{$content}[0], 0); # no nested translatable elements
+ if ($content) {
+ my $subresult = getXMLstring($content, $spacepreserve);
+ if ($subresult) {
+ $result .= ">".$subresult . "</$type>";
+ } else {
+ $result .= "/>";
+ }
+ } else {
+ $result .= "/>";
+ }
+ }
+ $index += 2;
+ }
+ return $result;
+}
+
+# Translate list of nodes if necessary
+sub translate_subnodes
+{
+ my $fh = shift;
+ my $content = shift;
+ my $language = shift || "";
+ my $singlelang = shift || 0;
+ my $spacepreserve = shift || 0;
+
+ my @nodes = @{ $content };
+
+ my $count = scalar(@nodes);
+ my $index = 0;
+ while ($index < $count) {
+ my $type = $nodes[$index];
+ my $rest = $nodes[$index+1];
+ if ($singlelang) {
+ my $oldMO = $MULTIPLE_OUTPUT;
+ $MULTIPLE_OUTPUT = 1;
+ traverse($fh, $type, $rest, $language, $spacepreserve);
+ $MULTIPLE_OUTPUT = $oldMO;
+ } else {
+ traverse($fh, $type, $rest, $language, $spacepreserve);
+ }
+ $index += 2;
+ }
+}
+
+sub isWellFormedXmlFragment
+{
+ my $ret = eval 'require XML::Parser';
+ if(!$ret) {
+ die "You must have XML::Parser installed to run $0\n\n";
+ }
+
+ my $fragment = shift;
+ return 0 if (!$fragment);
+
+ $fragment = "<root>$fragment</root>";
+ my $xp = new XML::Parser(Style => 'Tree');
+ my $tree = 0;
+ eval { $tree = $xp->parse($fragment); };
+ return $tree;
+}
+
+sub traverse
+{
+ my $fh = shift;
+ my $nodename = shift;
+ my $content = shift;
+ my $language = shift || "";
+ my $spacepreserve = shift || 0;
+
+ if (!$nodename) {
+ if ($content =~ /^[\s]*$/) {
+ $leading_space .= $content;
+ }
+ print $fh $content;
+ } else {
+ # element
+ my @all = @{ $content };
+ my $attrs = shift @all;
+ my $translate = 0;
+ my $outattr = getAttributeString($attrs, 1, $language, \$translate);
+
+ if ($nodename =~ /^_/) {
+ $translate = 1;
+ $nodename =~ s/^_//;
+ }
+ my $lookup = '';
+
+ $spacepreserve = 0 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?default["']?$/));
+ $spacepreserve = 1 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/));
+
+ print $fh "<$nodename", $outattr;
+ if ($translate) {
+ $lookup = getXMLstring($content, $spacepreserve);
+ if (!$spacepreserve) {
+ $lookup =~ s/^\s+//s;
+ $lookup =~ s/\s+$//s;
+ }
+
+ if ($lookup || $translate == 2) {
+ my $translation = $translations{$language, $lookup} if isWellFormedXmlFragment($translations{$language, $lookup});
+ if ($MULTIPLE_OUTPUT && ($translation || $translate == 2)) {
+ $translation = $lookup if (!$translation);
+ print $fh " xml:lang=\"", $language, "\"" if $language;
+ print $fh ">";
+ if ($translate == 2) {
+ translate_subnodes($fh, \@all, $language, 1, $spacepreserve);
+ } else {
+ print $fh $translation;
+ }
+ print $fh "</$nodename>";
+
+ return; # this means there will be no same translation with xml:lang="$language"...
+ # if we want them both, just remove this "return"
+ } else {
+ print $fh ">";
+ if ($translate == 2) {
+ translate_subnodes($fh, \@all, $language, 1, $spacepreserve);
+ } else {
+ print $fh $lookup;
+ }
+ print $fh "</$nodename>";
+ }
+ } else {
+ print $fh "/>";
+ }
+
+ for my $lang (sort keys %po_files_by_lang) {
+ if ($MULTIPLE_OUTPUT && $lang ne "$language") {
+ next;
+ }
+ if ($lang) {
+ # Handle translation
+ #
+ my $translate = 0;
+ my $localattrs = getAttributeString($attrs, 1, $lang, \$translate);
+ my $translation = $translations{$lang, $lookup} if isWellFormedXmlFragment($translations{$lang, $lookup});
+ if ($translate && !$translation) {
+ $translation = $lookup;
+ }
+
+ if ($translation || $translate) {
+ print $fh "\n";
+ $leading_space =~ s/.*\n//g;
+ print $fh $leading_space;
+ print $fh "<", $nodename, " xml:lang=\"", $lang, "\"", $localattrs, ">";
+ if ($translate == 2) {
+ translate_subnodes($fh, \@all, $lang, 1, $spacepreserve);
+ } else {
+ print $fh $translation;
+ }
+ print $fh "</$nodename>";
+ }
+ }
+ }
+
+ } else {
+ my $count = scalar(@all);
+ if ($count > 0) {
+ print $fh ">";
+ my $index = 0;
+ while ($index < $count) {
+ my $type = $all[$index];
+ my $rest = $all[$index+1];
+ traverse($fh, $type, $rest, $language, $spacepreserve);
+ $index += 2;
+ }
+ print $fh "</$nodename>";
+ } else {
+ print $fh "/>";
+ }
+ }
+ }
+}
+
+sub intltool_tree_comment
+{
+ my $expat = shift;
+ my $data = shift;
+ my $clist = $expat->{Curlist};
+ my $pos = $#$clist;
+
+ push @$clist, 1 => $data;
+}
+
+sub intltool_tree_cdatastart
+{
+ my $expat = shift;
+ my $clist = $expat->{Curlist};
+ my $pos = $#$clist;
+
+ push @$clist, 0 => $expat->original_string();
+}
+
+sub intltool_tree_cdataend
+{
+ my $expat = shift;
+ my $clist = $expat->{Curlist};
+ my $pos = $#$clist;
+
+ $clist->[$pos] .= $expat->original_string();
+}
+
+sub intltool_tree_char
+{
+ my $expat = shift;
+ my $text = shift;
+ my $clist = $expat->{Curlist};
+ my $pos = $#$clist;
+
+ # Use original_string so that we retain escaped entities
+ # in CDATA sections.
+ #
+ if ($pos > 0 and $clist->[$pos - 1] eq '0') {
+ $clist->[$pos] .= $expat->original_string();
+ } else {
+ push @$clist, 0 => $expat->original_string();
+ }
+}
+
+sub intltool_tree_start
+{
+ my $expat = shift;
+ my $tag = shift;
+ my @origlist = ();
+
+ # Use original_string so that we retain escaped entities
+ # in attribute values. We must convert the string to an
+ # @origlist array to conform to the structure of the Tree
+ # Style.
+ #
+ my @original_array = split /\x/, $expat->original_string();
+ my $source = $expat->original_string();
+
+ # Remove leading tag.
+ #
+ $source =~ s|^\s*<\s*(\S+)||s;
+
+ # Grab attribute key/value pairs and push onto @origlist array.
+ #
+ while ($source)
+ {
+ if ($source =~ /^\s*([\w:-]+)\s*[=]\s*["]/)
+ {
+ $source =~ s|^\s*([\w:-]+)\s*[=]\s*["]([^"]*)["]||s;
+ push @origlist, $1;
+ push @origlist, '"' . $2 . '"';
+ }
+ elsif ($source =~ /^\s*([\w:-]+)\s*[=]\s*[']/)
+ {
+ $source =~ s|^\s*([\w:-]+)\s*[=]\s*[']([^']*)[']||s;
+ push @origlist, $1;
+ push @origlist, "'" . $2 . "'";
+ }
+ else
+ {
+ last;
+ }
+ }
+
+ my $ol = [ { @origlist } ];
+
+ push @{ $expat->{Lists} }, $expat->{Curlist};
+ push @{ $expat->{Curlist} }, $tag => $ol;
+ $expat->{Curlist} = $ol;
+}
+
+sub readXml
+{
+ my $filename = shift || return;
+ if(!-f $filename) {
+ die "ERROR Cannot find filename: $filename\n";
+ }
+
+ my $ret = eval 'require XML::Parser';
+ if(!$ret) {
+ die "You must have XML::Parser installed to run $0\n\n";
+ }
+ my $xp = new XML::Parser(Style => 'Tree');
+ $xp->setHandlers(Char => \&intltool_tree_char);
+ $xp->setHandlers(Start => \&intltool_tree_start);
+ $xp->setHandlers(CdataStart => \&intltool_tree_cdatastart);
+ $xp->setHandlers(CdataEnd => \&intltool_tree_cdataend);
+ my $tree = $xp->parsefile($filename);
+
+# <foo><head id="a">Hello <em>there</em></head><bar>Howdy<ref/></bar>do</foo>
+# would be:
+# [foo, [{}, head, [{id => "a"}, 0, "Hello ", em, [{}, 0, "there"]], bar, [{},
+# 0, "Howdy", ref, [{}]], 0, "do" ] ]
+
+ return $tree;
+}
+
+sub print_header
+{
+ my $infile = shift;
+ my $fh = shift;
+ my $source;
+
+ if(!-f $infile) {
+ die "ERROR Cannot find filename: $infile\n";
+ }
+
+ print $fh qq{<?xml version="1.0" encoding="UTF-8"?>\n};
+ {
+ local $/;
+ open DOCINPUT, "<${FILE}" or die;
+ $source = <DOCINPUT>;
+ close DOCINPUT;
+ }
+ if ($source =~ /(<!DOCTYPE.*\[.*\]\s*>)/s)
+ {
+ print $fh "$1\n";
+ }
+ elsif ($source =~ /(<!DOCTYPE[^>]*>)/s)
+ {
+ print $fh "$1\n";
+ }
+}
+
+sub parseTree
+{
+ my $fh = shift;
+ my $ref = shift;
+ my $language = shift || "";
+
+ my $name = shift @{ $ref };
+ my $cont = shift @{ $ref };
+
+ while (!$name || "$name" eq "1") {
+ $name = shift @{ $ref };
+ $cont = shift @{ $ref };
+ }
+
+ my $spacepreserve = 0;
+ my $attrs = @{$cont}[0];
+ $spacepreserve = 1 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/));
+
+ traverse($fh, $name, $cont, $language, $spacepreserve);
+}
+
+sub xml_merge_output
+{
+ my $source;
+
+ if ($MULTIPLE_OUTPUT) {
+ for my $lang (sort keys %po_files_by_lang) {
+ if ( ! -d $lang ) {
+ mkdir $lang or -d $lang or die "Cannot create subdirectory $lang: $!\n";
+ }
+ open OUTPUT, ">$lang/$OUTFILE" or die "Cannot open $lang/$OUTFILE: $!\n";
+ binmode (OUTPUT) if $^O eq 'MSWin32';
+ my $tree = readXml($FILE);
+ print_header($FILE, \*OUTPUT);
+ parseTree(\*OUTPUT, $tree, $lang);
+ close OUTPUT;
+ print "CREATED $lang/$OUTFILE\n" unless $QUIET_ARG;
+ }
+ if ( ! -d "C" ) {
+ mkdir "C" or -d "C" or die "Cannot create subdirectory C: $!\n";
+ }
+ open OUTPUT, ">C/$OUTFILE" or die "Cannot open C/$OUTFILE: $!\n";
+ binmode (OUTPUT) if $^O eq 'MSWin32';
+ my $tree = readXml($FILE);
+ print_header($FILE, \*OUTPUT);
+ parseTree(\*OUTPUT, $tree);
+ close OUTPUT;
+ print "CREATED C/$OUTFILE\n" unless $QUIET_ARG;
+ } else {
+ open OUTPUT, ">$OUTFILE" or die "Cannot open $OUTFILE: $!\n";
+ binmode (OUTPUT) if $^O eq 'MSWin32';
+ my $tree = readXml($FILE);
+ print_header($FILE, \*OUTPUT);
+ parseTree(\*OUTPUT, $tree);
+ close OUTPUT;
+ print "CREATED $OUTFILE\n" unless $QUIET_ARG;
+ }
+}
+
+sub keys_merge_translation
+{
+ my ($lang) = @_;
+
+ if ( ! -d $lang && $MULTIPLE_OUTPUT)
+ {
+ mkdir $lang or -d $lang or die "Cannot create subdirectory $lang: $!\n";
+ }
+
+ open INPUT, "<${FILE}" or die "Cannot open ${FILE}: $!\n";
+ open OUTPUT, ">$lang/$OUTFILE" or die "Cannot open $lang/$OUTFILE: $!\n";
+ binmode (OUTPUT) if $^O eq 'MSWin32';
+
+ while (<INPUT>)
+ {
+ if (s/^(\s*)_(\w+=(.*))/$1$2/)
+ {
+ my $string = $3;
+
+ if (!$MULTIPLE_OUTPUT)
+ {
+ print OUTPUT;
+
+ my $non_translated_line = $_;
+
+ for my $lang (sort keys %po_files_by_lang)
+ {
+ my $translation = $translations{$lang, $string};
+ next if !$translation;
+
+ $_ = $non_translated_line;
+ s/(\w+)=.*/[$lang]$1=$translation/;
+ print OUTPUT;
+ }
+ }
+ else
+ {
+ my $non_translated_line = $_;
+ my $translation = $translations{$lang, $string};
+ $translation = $string if !$translation;
+
+ $_ = $non_translated_line;
+ s/(\w+)=.*/$1=$translation/;
+ print OUTPUT;
+ }
+ }
+ else
+ {
+ print OUTPUT;
+ }
+ }
+
+ close OUTPUT;
+ close INPUT;
+
+ print "CREATED $lang/$OUTFILE\n" unless $QUIET_ARG;
+}
+
+sub keys_merge_translations
+{
+ if ($MULTIPLE_OUTPUT)
+ {
+ for my $lang (sort keys %po_files_by_lang)
+ {
+ keys_merge_translation ($lang);
+ }
+ keys_merge_translation ("C");
+ }
+ else
+ {
+ keys_merge_translation (".");
+ }
+}
+
+sub desktop_merge_translations
+{
+ open INPUT, "<${FILE}" or die;
+ open OUTPUT, ">${OUTFILE}" or die;
+ binmode (OUTPUT) if $^O eq 'MSWin32';
+
+ while (<INPUT>)
+ {
+ if (s/^(\s*)_(\w+=(.*))/$1$2/)
+ {
+ my $string = $3;
+
+ print OUTPUT;
+
+ my $non_translated_line = $_;
+
+ for my $lang (sort keys %po_files_by_lang)
+ {
+ my $translation = $translations{$lang, $string};
+ next if !$translation;
+
+ $_ = $non_translated_line;
+ s/(\w+)=.*/${1}[$lang]=$translation/;
+ print OUTPUT;
+ }
+ }
+ else
+ {
+ print OUTPUT;
+ }
+ }
+
+ close OUTPUT;
+ close INPUT;
+}
+
+sub schemas_merge_translations
+{
+ my $source;
+
+ {
+ local $/; # slurp mode
+ open INPUT, "<$FILE" or die "can't open $FILE: $!";
+ $source = <INPUT>;
+ close INPUT;
+ }
+
+ open OUTPUT, ">$OUTFILE" or die;
+ binmode (OUTPUT) if $^O eq 'MSWin32';
+
+ # FIXME: support attribute translations
+
+ # Empty nodes never need translation, so unmark all of them.
+ # For example, <_foo/> is just replaced by <foo/>.
+ $source =~ s|<\s*_($w+)\s*/>|<$1/>|g;
+
+ while ($source =~ s/
+ (.*?)
+ (\s+)(<locale\ name="C">(\s*)
+ (<default>\s*(?:<!--[^>]*?-->\s*)?(.*?)\s*<\/default>)?(\s*)
+ (<short>\s*(?:<!--[^>]*?-->\s*)?(.*?)\s*<\/short>)?(\s*)
+ (<long>\s*(?:<!--[^>]*?-->\s*)?(.*?)\s*<\/long>)?(\s*)
+ <\/locale>)
+ //sx)
+ {
+ print OUTPUT $1;
+
+ my $locale_start_spaces = $2 ? $2 : '';
+ my $default_spaces = $4 ? $4 : '';
+ my $short_spaces = $7 ? $7 : '';
+ my $long_spaces = $10 ? $10 : '';
+ my $locale_end_spaces = $13 ? $13 : '';
+ my $c_default_block = $3 ? $3 : '';
+ my $default_string = $6 ? $6 : '';
+ my $short_string = $9 ? $9 : '';
+ my $long_string = $12 ? $12 : '';
+
+ print OUTPUT "$locale_start_spaces$c_default_block";
+
+ $default_string =~ s/\s+/ /g;
+ $default_string = entity_decode($default_string);
+ $short_string =~ s/\s+/ /g;
+ $short_string = entity_decode($short_string);
+ $long_string =~ s/\s+/ /g;
+ $long_string = entity_decode($long_string);
+
+ for my $lang (sort keys %po_files_by_lang)
+ {
+ my $default_translation = $translations{$lang, $default_string};
+ my $short_translation = $translations{$lang, $short_string};
+ my $long_translation = $translations{$lang, $long_string};
+
+ next if (!$default_translation && !$short_translation &&
+ !$long_translation);
+
+ print OUTPUT "\n$locale_start_spaces<locale name=\"$lang\">";
+
+ print OUTPUT "$default_spaces";
+
+ if ($default_translation)
+ {
+ $default_translation = entity_encode($default_translation);
+ print OUTPUT "<default>$default_translation</default>";
+ }
+
+ print OUTPUT "$short_spaces";
+
+ if ($short_translation)
+ {
+ $short_translation = entity_encode($short_translation);
+ print OUTPUT "<short>$short_translation</short>";
+ }
+
+ print OUTPUT "$long_spaces";
+
+ if ($long_translation)
+ {
+ $long_translation = entity_encode($long_translation);
+ print OUTPUT "<long>$long_translation</long>";
+ }
+
+ print OUTPUT "$locale_end_spaces</locale>";
+ }
+ }
+
+ print OUTPUT $source;
+
+ close OUTPUT;
+}
+
+sub rfc822deb_merge_translations
+{
+ my %encodings = ();
+ for my $lang (keys %po_files_by_lang) {
+ $encodings{$lang} = ($UTF8_ARG ? 'UTF-8' : get_po_encoding($po_files_by_lang{$lang}));
+ }
+
+ my $source;
+
+ $Text::Wrap::huge = 'overflow';
+ $Text::Wrap::break = qr/\n|\s(?=\S)/;
+
+ {
+ local $/; # slurp mode
+ open INPUT, "<$FILE" or die "can't open $FILE: $!";
+ $source = <INPUT>;
+ close INPUT;
+ }
+
+ open OUTPUT, ">${OUTFILE}" or die;
+ binmode (OUTPUT) if $^O eq 'MSWin32';
+
+ while ($source =~ /(^|\n+)(_*)([^:\s]+)(:[ \t]*)(.*?)(?=\n[\S\n]|$)/sg)
+ {
+ my $sep = $1;
+ my $non_translated_line = $3.$4;
+ my $string = $5;
+ my $underscore = length($2);
+ next if $underscore eq 0 && $non_translated_line =~ /^#/;
+ # Remove [] dummy strings
+ my $stripped = $string;
+ $stripped =~ s/\[\s[^\[\]]*\],/,/g if $underscore eq 2;
+ $stripped =~ s/\[\s[^\[\]]*\]$//;
+ $non_translated_line .= $stripped;
+
+ print OUTPUT $sep.$non_translated_line;
+
+ if ($underscore)
+ {
+ my @str_list = rfc822deb_split($underscore, $string);
+
+ for my $lang (sort keys %po_files_by_lang)
+ {
+ my $is_translated = 1;
+ my $str_translated = '';
+ my $first = 1;
+
+ for my $str (@str_list)
+ {
+ my $translation = $translations{$lang, $str};
+
+ if (!$translation)
+ {
+ $is_translated = 0;
+ last;
+ }
+
+ # $translation may also contain [] dummy
+ # strings, mostly to indicate an empty string
+ $translation =~ s/\[\s[^\[\]]*\]$//;
+
+ if ($first)
+ {
+ if ($underscore eq 2)
+ {
+ $str_translated .= $translation;
+ }
+ else
+ {
+ $str_translated .=
+ Text::Tabs::expand($translation) .
+ "\n";
+ }
+ }
+ else
+ {
+ if ($underscore eq 2)
+ {
+ $str_translated .= ', ' . $translation;
+ }
+ else
+ {
+ $str_translated .= Text::Tabs::expand(
+ Text::Wrap::wrap(' ', ' ', $translation)) .
+ "\n .\n";
+ }
+ }
+ $first = 0;
+
+ # To fix some problems with Text::Wrap::wrap
+ $str_translated =~ s/(\n )+\n/\n .\n/g;
+ }
+ next unless $is_translated;
+
+ $str_translated =~ s/\n \.\n$//;
+ $str_translated =~ s/\s+$//;
+
+ $_ = $non_translated_line;
+ s/^(\w+):\s*.*/$sep${1}-$lang.$encodings{$lang}: $str_translated/s;
+ print OUTPUT;
+ }
+ }
+ }
+ print OUTPUT "\n";
+
+ close OUTPUT;
+ close INPUT;
+}
+
+sub rfc822deb_split
+{
+ # Debian defines a special way to deal with rfc822-style files:
+ # when a value contain newlines, it consists of
+ # 1. a short form (first line)
+ # 2. a long description, all lines begin with a space,
+ # and paragraphs are separated by a single dot on a line
+ # This routine returns an array of all paragraphs, and reformat
+ # them.
+ # When first argument is 2, the string is a comma separated list of
+ # values.
+ my $type = shift;
+ my $text = shift;
+ $text =~ s/^[ \t]//mg;
+ return (split(/, */, $text, 0)) if $type ne 1;
+ return ($text) if $text !~ /\n/;
+
+ $text =~ s/([^\n]*)\n//;
+ my @list = ($1);
+ my $str = '';
+
+ for my $line (split (/\n/, $text))
+ {
+ chomp $line;
+ if ($line =~ /^\.\s*$/)
+ {
+ # New paragraph
+ $str =~ s/\s*$//;
+ push(@list, $str);
+ $str = '';
+ }
+ elsif ($line =~ /^\s/)
+ {
+ # Line which must not be reformatted
+ $str .= "\n" if length ($str) && $str !~ /\n$/;
+ $line =~ s/\s+$//;
+ $str .= $line."\n";
+ }
+ else
+ {
+ # Continuation line, remove newline
+ $str .= " " if length ($str) && $str !~ /\n$/;
+ $str .= $line;
+ }
+ }
+
+ $str =~ s/\s*$//;
+ push(@list, $str) if length ($str);
+
+ return @list;
+}
+
+sub quoted_translation
+{
+ my ($xml_mode, $lang, $string) = @_;
+
+ $string = entity_decode($string) if $xml_mode;
+ $string =~ s/\\\"/\"/g;
+
+ my $translation = $translations{$lang, $string};
+ $translation = $string if !$translation;
+ $translation = entity_encode($translation) if $xml_mode;
+ $translation =~ s/\"/\\\"/g;
+ return $translation
+}
+
+sub quoted_merge_translations
+{
+ my ($xml_mode) = @_;
+
+ if (!$MULTIPLE_OUTPUT) {
+ print "Quoted only supports Multiple Output.\n";
+ exit(1);
+ }
+
+ for my $lang (sort keys %po_files_by_lang) {
+ if ( ! -d $lang ) {
+ mkdir $lang or -d $lang or die "Cannot create subdirectory $lang: $!\n";
+ }
+ open INPUT, "<${FILE}" or die;
+ open OUTPUT, ">$lang/$OUTFILE" or die "Cannot open $lang/$OUTFILE: $!\n";
+ binmode (OUTPUT) if $^O eq 'MSWin32';
+ while (<INPUT>)
+ {
+ s/\"(([^\"]|\\\")*[^\\\"])\"/"\"" . &quoted_translation($xml_mode, $lang, $1) . "\""/ge;
+ print OUTPUT;
+ }
+ close OUTPUT;
+ close INPUT;
+ }
+}
diff --git a/intltool-update.in b/intltool-update.in
new file mode 100644
index 0000000..2684cc0
--- /dev/null
+++ b/intltool-update.in
@@ -0,0 +1,1166 @@
+#!@INTLTOOL_PERL@ -w
+# -*- Mode: perl; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+
+#
+# The Intltool Message Updater
+#
+# Copyright (C) 2000-2003 Free Software Foundation.
+#
+# Intltool is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# version 2 published by the Free Software Foundation.
+#
+# Intltool 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+#
+# Authors: Kenneth Christiansen <kenneth@gnu.org>
+# Maciej Stachowiak
+# Darin Adler <darin@bentspoon.com>
+
+## Release information
+my $PROGRAM = "intltool-update";
+my $VERSION = "0.37.1";
+my $PACKAGE = "intltool";
+
+## Loaded modules
+use strict;
+use Getopt::Long;
+use Cwd;
+use File::Copy;
+use File::Find;
+
+## Scalars used by the option stuff
+my $HELP_ARG = 0;
+my $VERSION_ARG = 0;
+my $DIST_ARG = 0;
+my $POT_ARG = 0;
+my $HEADERS_ARG = 0;
+my $MAINTAIN_ARG = 0;
+my $REPORT_ARG = 0;
+my $VERBOSE = 0;
+my $GETTEXT_PACKAGE = "";
+my $OUTPUT_FILE = "";
+
+my @languages;
+my %varhash = ();
+my %po_files_by_lang = ();
+
+# Regular expressions to categorize file types.
+# FIXME: Please check if the following is correct
+
+my $xml_support =
+"xml(?:\\.in)*|". # http://www.w3.org/XML/ (Note: .in is not required)
+"ui|". # Bonobo specific - User Interface desc. files
+"lang|". # ?
+"glade2?(?:\\.in)*|". # Glade specific - User Interface desc. files (Note: .in is not required)
+"scm(?:\\.in)*|". # ? (Note: .in is not required)
+"oaf(?:\\.in)+|". # DEPRECATED: Replaces by Bonobo .server files
+"etspec|". # ?
+"server(?:\\.in)+|". # Bonobo specific
+"sheet(?:\\.in)+|". # ?
+"schemas(?:\\.in)+|". # GConf specific
+"pong(?:\\.in)+|". # DEPRECATED: PONG is not used [by GNOME] any longer.
+"kbd(?:\\.in)+|". # GOK specific.
+"policy(?:\\.in)+"; # PolicyKit files
+
+my $ini_support =
+"icon(?:\\.in)+|". # http://www.freedesktop.org/Standards/icon-theme-spec
+"desktop(?:\\.in)+|". # http://www.freedesktop.org/Standards/menu-spec
+"caves(?:\\.in)+|". # GNOME Games specific
+"directory(?:\\.in)+|". # http://www.freedesktop.org/Standards/menu-spec
+"soundlist(?:\\.in)+|". # GNOME specific
+"keys(?:\\.in)+|". # GNOME Mime database specific
+"theme(?:\\.in)+|". # http://www.freedesktop.org/Standards/icon-theme-spec
+"service(?:\\.in)+"; # DBus specific
+
+my $buildin_gettext_support =
+"c|y|cs|cc|cpp|c\\+\\+|h|hh|gob|py";
+
+## Always flush buffer when printing
+$| = 1;
+
+## Sometimes the source tree will be rooted somewhere else.
+my $SRCDIR = $ENV{"srcdir"} || ".";
+my $POTFILES_in;
+
+$POTFILES_in = "<$SRCDIR/POTFILES.in";
+
+my $devnull = ($^O eq 'MSWin32' ? 'NUL:' : '/dev/null');
+
+## Handle options
+GetOptions
+(
+ "help" => \$HELP_ARG,
+ "version" => \$VERSION_ARG,
+ "dist|d" => \$DIST_ARG,
+ "pot|p" => \$POT_ARG,
+ "headers|s" => \$HEADERS_ARG,
+ "maintain|m" => \$MAINTAIN_ARG,
+ "report|r" => \$REPORT_ARG,
+ "verbose|x" => \$VERBOSE,
+ "gettext-package|g=s" => \$GETTEXT_PACKAGE,
+ "output-file|o=s" => \$OUTPUT_FILE,
+ ) or &Console_WriteError_InvalidOption;
+
+&Console_Write_IntltoolHelp if $HELP_ARG;
+&Console_Write_IntltoolVersion if $VERSION_ARG;
+
+my $arg_count = ($DIST_ARG > 0)
+ + ($POT_ARG > 0)
+ + ($HEADERS_ARG > 0)
+ + ($MAINTAIN_ARG > 0)
+ + ($REPORT_ARG > 0);
+
+&Console_Write_IntltoolHelp if $arg_count > 1;
+
+my $PKGNAME = FindPackageName ();
+
+# --version and --help don't require a module name
+my $MODULE = $GETTEXT_PACKAGE || $PKGNAME || "unknown";
+
+if ($POT_ARG)
+{
+ &GenerateHeaders;
+ &GeneratePOTemplate;
+}
+elsif ($HEADERS_ARG)
+{
+ &GenerateHeaders;
+}
+elsif ($MAINTAIN_ARG)
+{
+ &FindLeftoutFiles;
+}
+elsif ($REPORT_ARG)
+{
+ &GenerateHeaders;
+ &GeneratePOTemplate;
+ &Console_Write_CoverageReport;
+}
+elsif ((defined $ARGV[0]) && $ARGV[0] =~ /^[a-z]/)
+{
+ my $lang = $ARGV[0];
+
+ ## Report error if the language file supplied
+ ## to the command line is non-existent
+ &Console_WriteError_NotExisting("$SRCDIR/$lang.po")
+ if ! -s "$SRCDIR/$lang.po";
+
+ if (!$DIST_ARG)
+ {
+ print "Working, please wait..." if $VERBOSE;
+ &GenerateHeaders;
+ &GeneratePOTemplate;
+ }
+ &POFile_Update ($lang, $OUTPUT_FILE);
+ &Console_Write_TranslationStatus ($lang, $OUTPUT_FILE);
+}
+else
+{
+ &Console_Write_IntltoolHelp;
+}
+
+exit;
+
+#########
+
+sub Console_Write_IntltoolVersion
+{
+ print <<_EOF_;
+${PROGRAM} (${PACKAGE}) $VERSION
+Written by Kenneth Christiansen, Maciej Stachowiak, and Darin Adler.
+
+Copyright (C) 2000-2003 Free Software Foundation, Inc.
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+_EOF_
+ exit;
+}
+
+sub Console_Write_IntltoolHelp
+{
+ print <<_EOF_;
+Usage: ${PROGRAM} [OPTION]... LANGCODE
+Updates PO template files and merge them with the translations.
+
+Mode of operation (only one is allowed):
+ -p, --pot generate the PO template only
+ -s, --headers generate the header files in POTFILES.in
+ -m, --maintain search for left out files from POTFILES.in
+ -r, --report display a status report for the module
+ -d, --dist merge LANGCODE.po with existing PO template
+
+Extra options:
+ -g, --gettext-package=NAME override PO template name, useful with --pot
+ -o, --output-file=FILE write merged translation to FILE
+ -x, --verbose display lots of feedback
+ --help display this help and exit
+ --version output version information and exit
+
+Examples of use:
+${PROGRAM} --pot just create a new PO template
+${PROGRAM} xy create new PO template and merge xy.po with it
+
+Report bugs to http://bugzilla.gnome.org/ (product name "$PACKAGE")
+or send email to <xml-i18n-tools\@gnome.org>.
+_EOF_
+ exit;
+}
+
+sub echo_n
+{
+ my $str = shift;
+ my $ret = `echo "$str"`;
+
+ $ret =~ s/\n$//; # do we need the "s" flag?
+
+ return $ret;
+}
+
+sub POFile_DetermineType ($)
+{
+ my $type = $_;
+ my $gettext_type;
+
+ my $xml_regex = "(?:" . $xml_support . ")";
+ my $ini_regex = "(?:" . $ini_support . ")";
+ my $buildin_regex = "(?:" . $buildin_gettext_support . ")";
+
+ if ($type =~ /\[type: gettext\/([^\]].*)]/)
+ {
+ $gettext_type=$1;
+ }
+ elsif ($type =~ /schemas(\.in)+$/)
+ {
+ $gettext_type="schemas";
+ }
+ elsif ($type =~ /glade2?(\.in)*$/)
+ {
+ $gettext_type="glade";
+ }
+ elsif ($type =~ /scm(\.in)*$/)
+ {
+ $gettext_type="scheme";
+ }
+ elsif ($type =~ /keys(\.in)+$/)
+ {
+ $gettext_type="keys";
+ }
+
+ # bucket types
+
+ elsif ($type =~ /$xml_regex$/)
+ {
+ $gettext_type="xml";
+ }
+ elsif ($type =~ /$ini_regex$/)
+ {
+ $gettext_type="ini";
+ }
+ elsif ($type =~ /$buildin_regex$/)
+ {
+ $gettext_type="buildin";
+ }
+ else
+ {
+ $gettext_type="unknown";
+ }
+
+ return "gettext\/$gettext_type";
+}
+
+sub TextFile_DetermineEncoding ($)
+{
+ my $gettext_code="ASCII"; # All files are ASCII by default
+ my $filetype=`file $_ | cut -d ' ' -f 2`;
+
+ if ($? eq "0")
+ {
+ if ($filetype =~ /^(ISO|UTF)/)
+ {
+ chomp ($gettext_code = $filetype);
+ }
+ elsif ($filetype =~ /^XML/)
+ {
+ $gettext_code="UTF-8"; # We asume that .glade and other .xml files are UTF-8
+ }
+ }
+
+ return $gettext_code;
+}
+
+sub isNotValidMissing
+{
+ my ($file) = @_;
+
+ return if $file =~ /^\{arch\}\/.*$/;
+ return if $file =~ /^$varhash{"PACKAGE"}-$varhash{"VERSION"}\/.*$/;
+}
+
+sub FindLeftoutFiles
+{
+ my (@buf_i18n_plain,
+ @buf_i18n_xml,
+ @buf_i18n_xml_unmarked,
+ @buf_i18n_ini,
+ @buf_potfiles,
+ @buf_potfiles_ignore,
+ @buf_allfiles,
+ @buf_allfiles_sorted,
+ @buf_potfiles_sorted,
+ @buf_potfiles_ignore_sorted
+ );
+
+ ## Search and find all translatable files
+ find sub {
+ push @buf_i18n_plain, "$File::Find::name" if /\.($buildin_gettext_support)$/;
+ push @buf_i18n_xml, "$File::Find::name" if /\.($xml_support)$/;
+ push @buf_i18n_ini, "$File::Find::name" if /\.($ini_support)$/;
+ push @buf_i18n_xml_unmarked, "$File::Find::name" if /\.(schemas(\.in)+)$/;
+ }, "..";
+ find sub {
+ push @buf_i18n_plain, "$File::Find::name" if /\.($buildin_gettext_support)$/;
+ push @buf_i18n_xml, "$File::Find::name" if /\.($xml_support)$/;
+ push @buf_i18n_ini, "$File::Find::name" if /\.($ini_support)$/;
+ push @buf_i18n_xml_unmarked, "$File::Find::name" if /\.(schemas(\.in)+)$/;
+ }, "$SRCDIR/.." if "$SRCDIR" ne ".";
+
+ open POTFILES, $POTFILES_in or die "$PROGRAM: there's no POTFILES.in!\n";
+ @buf_potfiles = grep !/^(#|\s*$)/, <POTFILES>;
+ close POTFILES;
+
+ foreach (@buf_potfiles) {
+ s/^\[.*]\s*//;
+ }
+
+ print "Searching for missing translatable files...\n" if $VERBOSE;
+
+ ## Check if we should ignore some found files, when
+ ## comparing with POTFILES.in
+ foreach my $ignore ("POTFILES.skip", "POTFILES.ignore")
+ {
+ (-s "$SRCDIR/$ignore") or next;
+
+ if ("$ignore" eq "POTFILES.ignore")
+ {
+ print "The usage of POTFILES.ignore is deprecated. Please consider moving the\n".
+ "content of this file to POTFILES.skip.\n";
+ }
+
+ print "Found $ignore: Ignoring files...\n" if $VERBOSE;
+ open FILE, "<$SRCDIR/$ignore" or die "ERROR: Failed to open $SRCDIR/$ignore!\n";
+
+ while (<FILE>)
+ {
+ push @buf_potfiles_ignore, $_ unless /^(#|\s*$)/;
+ }
+ close FILE;
+
+ @buf_potfiles_ignore_sorted = sort (@buf_potfiles_ignore);
+ }
+
+ foreach my $file (@buf_i18n_plain)
+ {
+ my $in_comment = 0;
+ my $in_macro = 0;
+
+ open FILE, "<$file";
+ while (<FILE>)
+ {
+ # Handle continued multi-line comment.
+ if ($in_comment)
+ {
+ next unless s-.*\*/--;
+ $in_comment = 0;
+ }
+
+ # Handle continued macro.
+ if ($in_macro)
+ {
+ $in_macro = 0 unless /\\$/;
+ next;
+ }
+
+ # Handle start of macro (or any preprocessor directive).
+ if (/^\s*\#/)
+ {
+ $in_macro = 1 if /^([^\\]|\\.)*\\$/;
+ next;
+ }
+
+ # Handle comments and quoted text.
+ while (m-(/\*|//|\'|\")-) # \' and \" keep emacs perl mode happy
+ {
+ my $match = $1;
+ if ($match eq "/*")
+ {
+ if (!s-/\*.*?\*/--)
+ {
+ s-/\*.*--;
+ $in_comment = 1;
+ }
+ }
+ elsif ($match eq "//")
+ {
+ s-//.*--;
+ }
+ else # ' or "
+ {
+ if (!s-$match([^\\]|\\.)*?$match-QUOTEDTEXT-)
+ {
+ warn "mismatched quotes at line $. in $file\n";
+ s-$match.*--;
+ }
+ }
+ }
+
+ if (/\w\.GetString *\(QUOTEDTEXT/)
+ {
+ if (defined isNotValidMissing (unpack("x3 A*", $file))) {
+ ## Remove the first 3 chars and add newline
+ push @buf_allfiles, unpack("x3 A*", $file) . "\n";
+ }
+ last;
+ }
+
+ ## C_ N_ Q_ and _ are the macros defined in gi8n.h
+ if (/[CNQ]?_ *\(QUOTEDTEXT/)
+ {
+ if (defined isNotValidMissing (unpack("x3 A*", $file))) {
+ ## Remove the first 3 chars and add newline
+ push @buf_allfiles, unpack("x3 A*", $file) . "\n";
+ }
+ last;
+ }
+ }
+ close FILE;
+ }
+
+ foreach my $file (@buf_i18n_xml)
+ {
+ open FILE, "<$file";
+
+ while (<FILE>)
+ {
+ # FIXME: share the pattern matching code with intltool-extract
+ if (/\s_[-A-Za-z0-9._:]+\s*=\s*\"([^"]+)\"/ || /<_[^>]+>/ || /translatable=\"yes\"/)
+ {
+ if (defined isNotValidMissing (unpack("x3 A*", $file))) {
+ push @buf_allfiles, unpack("x3 A*", $file) . "\n";
+ }
+ last;
+ }
+ }
+ close FILE;
+ }
+
+ foreach my $file (@buf_i18n_ini)
+ {
+ open FILE, "<$file";
+ while (<FILE>)
+ {
+ if (/_(.*)=/)
+ {
+ if (defined isNotValidMissing (unpack("x3 A*", $file))) {
+ push @buf_allfiles, unpack("x3 A*", $file) . "\n";
+ }
+ last;
+ }
+ }
+ close FILE;
+ }
+
+ foreach my $file (@buf_i18n_xml_unmarked)
+ {
+ if (defined isNotValidMissing (unpack("x3 A*", $file))) {
+ push @buf_allfiles, unpack("x3 A*", $file) . "\n";
+ }
+ }
+
+
+ @buf_allfiles_sorted = sort (@buf_allfiles);
+ @buf_potfiles_sorted = sort (@buf_potfiles);
+
+ my %in2;
+ foreach (@buf_potfiles_sorted)
+ {
+ s#^$SRCDIR/../##;
+ s#^$SRCDIR/##;
+ $in2{$_} = 1;
+ }
+
+ foreach (@buf_potfiles_ignore_sorted)
+ {
+ s#^$SRCDIR/../##;
+ s#^$SRCDIR/##;
+ $in2{$_} = 1;
+ }
+
+ my @result;
+
+ foreach (@buf_allfiles_sorted)
+ {
+ my $dummy = $_;
+ my $srcdir = $SRCDIR;
+
+ $srcdir =~ s#^../##;
+ $dummy =~ s#^$srcdir/../##;
+ $dummy =~ s#^$srcdir/##;
+ $dummy =~ s#_build/##;
+ if (!exists($in2{$dummy}))
+ {
+ push @result, $dummy
+ }
+ }
+
+ my @buf_potfiles_notexist;
+
+ foreach (@buf_potfiles_sorted)
+ {
+ chomp (my $dummy = $_);
+ if ("$dummy" ne "" and !(-f "$SRCDIR/../$dummy" or -f "../$dummy"))
+ {
+ push @buf_potfiles_notexist, $_;
+ }
+ }
+
+ ## Save file with information about the files missing
+ ## if any, and give information about this procedure.
+ if (@result + @buf_potfiles_notexist > 0)
+ {
+ if (@result)
+ {
+ print "\n" if $VERBOSE;
+ unlink "missing";
+ open OUT, ">missing";
+ print OUT @result;
+ close OUT;
+ warn "\e[1mThe following files contain translations and are currently not in use. Please\e[0m\n".
+ "\e[1mconsider adding these to the POTFILES.in file, located in the po/ directory.\e[0m\n\n";
+ print STDERR @result, "\n";
+ warn "If some of these files are left out on purpose then please add them to\n".
+ "POTFILES.skip instead of POTFILES.in. A file \e[1m'missing'\e[0m containing this list\n".
+ "of left out files has been written in the current directory.\n";
+ }
+ if (@buf_potfiles_notexist)
+ {
+ unlink "notexist";
+ open OUT, ">notexist";
+ print OUT @buf_potfiles_notexist;
+ close OUT;
+ warn "\n" if ($VERBOSE or @result);
+ warn "\e[1mThe following files do not exist anymore:\e[0m\n\n";
+ warn @buf_potfiles_notexist, "\n";
+ warn "Please remove them from POTFILES.in. A file \e[1m'notexist'\e[0m\n".
+ "containing this list of absent files has been written in the current directory.\n";
+ }
+ }
+
+ ## If there is nothing to complain about, notify the user
+ else {
+ print "\nAll files containing translations are present in POTFILES.in.\n" if $VERBOSE;
+ }
+}
+
+sub Console_WriteError_InvalidOption
+{
+ ## Handle invalid arguments
+ print STDERR "Try `${PROGRAM} --help' for more information.\n";
+ exit 1;
+}
+
+sub isProgramInPath
+{
+ my ($file) = @_;
+ # If either a file exists, or when run it returns 0 exit status
+ return 1 if ((-x $file) or (system("$file --version >$devnull") == 0));
+ return 0;
+}
+
+sub isGNUGettextTool
+{
+ my ($file) = @_;
+ # Check that we are using GNU gettext tools
+ if (isProgramInPath ($file))
+ {
+ my $version = `$file --version`;
+ return 1 if ($version =~ m/.*\(GNU .*\).*/);
+ }
+ return 0;
+}
+
+sub GenerateHeaders
+{
+ my $EXTRACT = $ENV{"INTLTOOL_EXTRACT"} || "intltool-extract";
+
+ ## Generate the .h header files, so we can allow glade and
+ ## xml translation support
+ if (! isProgramInPath ("$EXTRACT"))
+ {
+ print STDERR "\n *** The intltool-extract script wasn't found!"
+ ."\n *** Without it, intltool-update can not generate files.\n";
+ exit;
+ }
+ else
+ {
+ open (FILE, $POTFILES_in) or die "$PROGRAM: POTFILES.in not found.\n";
+
+ while (<FILE>)
+ {
+ chomp;
+ next if /^\[\s*encoding/;
+
+ ## Find xml files in POTFILES.in and generate the
+ ## files with help from the extract script
+
+ my $gettext_type= &POFile_DetermineType ($1);
+
+ if (/\.($xml_support|$ini_support)$/ || /^\[/)
+ {
+ s/^\[[^\[].*]\s*//;
+
+ my $filename = "../$_";
+
+ if ($VERBOSE)
+ {
+ system ($EXTRACT, "--update", "--srcdir=$SRCDIR",
+ "--type=$gettext_type", $filename);
+ }
+ else
+ {
+ system ($EXTRACT, "--update", "--type=$gettext_type",
+ "--srcdir=$SRCDIR", "--quiet", $filename);
+ }
+ }
+ }
+ close FILE;
+ }
+}
+
+#
+# Generate .pot file from POTFILES.in
+#
+sub GeneratePOTemplate
+{
+ my $XGETTEXT = $ENV{"XGETTEXT"} || "xgettext";
+ my $XGETTEXT_ARGS = $ENV{"XGETTEXT_ARGS"} || '';
+ chomp $XGETTEXT;
+
+ if (! isGNUGettextTool ("$XGETTEXT"))
+ {
+ print STDERR " *** GNU xgettext is not found on this system!\n".
+ " *** Without it, intltool-update can not extract strings.\n";
+ exit;
+ }
+
+ print "Building $MODULE.pot...\n" if $VERBOSE;
+
+ open INFILE, $POTFILES_in;
+ unlink "POTFILES.in.temp";
+ open OUTFILE, ">POTFILES.in.temp" or die("Cannot open POTFILES.in.temp for writing");
+
+ my $gettext_support_nonascii = 0;
+
+ # checks for GNU gettext >= 0.12
+ my $dummy = `$XGETTEXT --version --from-code=UTF-8 >$devnull 2>$devnull`;
+ if ($? == 0)
+ {
+ $gettext_support_nonascii = 1;
+ }
+ else
+ {
+ # urge everybody to upgrade gettext
+ print STDERR "WARNING: This version of gettext does not support extracting non-ASCII\n".
+ " strings. That means you should install a version of gettext\n".
+ " that supports non-ASCII strings (such as GNU gettext >= 0.12),\n".
+ " or have to let non-ASCII strings untranslated. (If there is any)\n";
+ }
+
+ my $encoding = "ASCII";
+ my $forced_gettext_code;
+ my @temp_headers;
+ my $encoding_problem_is_reported = 0;
+
+ while (<INFILE>)
+ {
+ next if (/^#/ or /^\s*$/);
+
+ chomp;
+
+ my $gettext_code;
+
+ if (/^\[\s*encoding:\s*(.*)\s*\]/)
+ {
+ $forced_gettext_code=$1;
+ }
+ elsif (/\.($xml_support|$ini_support)$/ || /^\[/)
+ {
+ s/^\[.*]\s*//;
+ print OUTFILE "../$_.h\n";
+ push @temp_headers, "../$_.h";
+ $gettext_code = &TextFile_DetermineEncoding ("../$_.h") if ($gettext_support_nonascii and not defined $forced_gettext_code);
+ }
+ else
+ {
+ print OUTFILE "$SRCDIR/../$_\n";
+ $gettext_code = &TextFile_DetermineEncoding ("$SRCDIR/../$_") if ($gettext_support_nonascii and not defined $forced_gettext_code);
+ }
+
+ next if (! $gettext_support_nonascii);
+
+ if (defined $forced_gettext_code)
+ {
+ $encoding=$forced_gettext_code;
+ }
+ elsif (defined $gettext_code and "$encoding" ne "$gettext_code")
+ {
+ if ($encoding eq "ASCII")
+ {
+ $encoding=$gettext_code;
+ }
+ elsif ($gettext_code ne "ASCII")
+ {
+ # Only report once because the message is quite long
+ if (! $encoding_problem_is_reported)
+ {
+ print STDERR "WARNING: You should use the same file encoding for all your project files,\n".
+ " but $PROGRAM thinks that most of the source files are in\n".
+ " $encoding encoding, while \"$_\" is (likely) in\n".
+ " $gettext_code encoding. If you are sure that all translatable strings\n".
+ " are in same encoding (say UTF-8), please \e[1m*prepend*\e[0m the following\n".
+ " line to POTFILES.in:\n\n".
+ " [encoding: UTF-8]\n\n".
+ " and make sure that configure.in/ac checks for $PACKAGE >= 0.27 .\n".
+ "(such warning message will only be reported once.)\n";
+ $encoding_problem_is_reported = 1;
+ }
+ }
+ }
+ }
+
+ close OUTFILE;
+ close INFILE;
+
+ unlink "$MODULE.pot";
+ my @xgettext_argument=("$XGETTEXT",
+ "--add-comments",
+ "--directory\=.",
+ "--default-domain\=$MODULE",
+ "--flag\=g_strdup_printf:1:c-format",
+ "--flag\=g_string_printf:2:c-format",
+ "--flag\=g_string_append_printf:2:c-format",
+ "--flag\=g_error_new:3:c-format",
+ "--flag\=g_set_error:4:c-format",
+ "--flag\=g_markup_printf_escaped:1:c-format",
+ "--flag\=g_log:3:c-format",
+ "--flag\=g_print:1:c-format",
+ "--flag\=g_printerr:1:c-format",
+ "--flag\=g_printf:1:c-format",
+ "--flag\=g_fprintf:2:c-format",
+ "--flag\=g_sprintf:2:c-format",
+ "--flag\=g_snprintf:3:c-format",
+ "--flag\=g_scanner_error:2:c-format",
+ "--flag\=g_scanner_warn:2:c-format",
+ "--output\=$MODULE\.pot",
+ "--files-from\=\.\/POTFILES\.in\.temp");
+ my $XGETTEXT_KEYWORDS = &FindPOTKeywords;
+ push @xgettext_argument, $XGETTEXT_KEYWORDS;
+ my $MSGID_BUGS_ADDRESS = &FindMakevarsBugAddress;
+ push @xgettext_argument, "--msgid-bugs-address\=\"$MSGID_BUGS_ADDRESS\"" if $MSGID_BUGS_ADDRESS;
+ push @xgettext_argument, "--from-code\=$encoding" if ($gettext_support_nonascii);
+ push @xgettext_argument, $XGETTEXT_ARGS if $XGETTEXT_ARGS;
+ my $xgettext_command = join ' ', @xgettext_argument;
+
+ # intercept xgettext error message
+ print "Running $xgettext_command\n" if $VERBOSE;
+ my $xgettext_error_msg = `$xgettext_command 2>\&1`;
+ my $command_failed = $?;
+
+ unlink "POTFILES.in.temp";
+
+ print "Removing generated header (.h) files..." if $VERBOSE;
+ unlink foreach (@temp_headers);
+ print "done.\n" if $VERBOSE;
+
+ if (! $command_failed)
+ {
+ if (! -e "$MODULE.pot")
+ {
+ print "None of the files in POTFILES.in contain strings marked for translation.\n" if $VERBOSE;
+ }
+ else
+ {
+ print "Wrote $MODULE.pot\n" if $VERBOSE;
+ }
+ }
+ else
+ {
+ if ($xgettext_error_msg =~ /--from-code/)
+ {
+ # replace non-ASCII error message with a more useful one.
+ print STDERR "ERROR: xgettext failed to generate PO template file because there is non-ASCII\n".
+ " string marked for translation. Please make sure that all strings marked\n".
+ " for translation are in uniform encoding (say UTF-8), then \e[1m*prepend*\e[0m the\n".
+ " following line to POTFILES.in and rerun $PROGRAM:\n\n".
+ " [encoding: UTF-8]\n\n";
+ }
+ else
+ {
+ print STDERR "$xgettext_error_msg";
+ if (-e "$MODULE.pot")
+ {
+ # is this possible?
+ print STDERR "ERROR: xgettext failed but still managed to generate PO template file.\n".
+ " Please consult error message above if there is any.\n";
+ }
+ else
+ {
+ print STDERR "ERROR: xgettext failed to generate PO template file. Please consult\n".
+ " error message above if there is any.\n";
+ }
+ }
+ exit (1);
+ }
+}
+
+sub POFile_Update
+{
+ -f "$MODULE.pot" or die "$PROGRAM: $MODULE.pot does not exist.\n";
+
+ my $MSGMERGE = $ENV{"MSGMERGE"} || "msgmerge";
+ my ($lang, $outfile) = @_;
+
+ if (! isGNUGettextTool ("$MSGMERGE"))
+ {
+ print STDERR " *** GNU msgmerge is not found on this system!\n".
+ " *** Without it, intltool-update can not extract strings.\n";
+ exit;
+ }
+
+ print "Merging $SRCDIR/$lang.po with $MODULE.pot..." if $VERBOSE;
+
+ my $infile = "$SRCDIR/$lang.po";
+ $outfile = "$SRCDIR/$lang.po" if ($outfile eq "");
+
+ # I think msgmerge won't overwrite old file if merge is not successful
+ system ("$MSGMERGE", "-o", $outfile, $infile, "$MODULE.pot");
+}
+
+sub Console_WriteError_NotExisting
+{
+ my ($file) = @_;
+
+ ## Report error if supplied language file is non-existing
+ print STDERR "$PROGRAM: $file does not exist!\n";
+ print STDERR "Try '$PROGRAM --help' for more information.\n";
+ exit;
+}
+
+sub GatherPOFiles
+{
+ my @po_files = glob ("./*.po");
+
+ @languages = map (&POFile_GetLanguage, @po_files);
+
+ foreach my $lang (@languages)
+ {
+ $po_files_by_lang{$lang} = shift (@po_files);
+ }
+}
+
+sub POFile_GetLanguage ($)
+{
+ s/^(.*\/)?(.+)\.po$/$2/;
+ return $_;
+}
+
+sub Console_Write_TranslationStatus
+{
+ my ($lang, $output_file) = @_;
+ my $MSGFMT = $ENV{"MSGFMT"} || "msgfmt";
+
+ if (! isGNUGettextTool ("$MSGFMT"))
+ {
+ print STDERR " *** GNU msgfmt is not found on this system!\n".
+ " *** Without it, intltool-update can not extract strings.\n";
+ exit;
+ }
+
+ $output_file = "$SRCDIR/$lang.po" if ($output_file eq "");
+
+ system ("$MSGFMT", "-o", "$devnull", "--verbose", $output_file);
+}
+
+sub Console_Write_CoverageReport
+{
+ my $MSGFMT = $ENV{"MSGFMT"} || "msgfmt";
+
+ if (! isGNUGettextTool ("$MSGFMT"))
+ {
+ print STDERR " *** GNU msgfmt is not found on this system!\n".
+ " *** Without it, intltool-update can not extract strings.\n";
+ exit;
+ }
+
+ &GatherPOFiles;
+
+ foreach my $lang (@languages)
+ {
+ print STDERR "$lang: ";
+ &POFile_Update ($lang, "");
+ }
+
+ print STDERR "\n\n * Current translation support in $MODULE \n\n";
+
+ foreach my $lang (@languages)
+ {
+ print STDERR "$lang: ";
+ system ("$MSGFMT", "-o", "$devnull", "--verbose", "$SRCDIR/$lang.po");
+ }
+}
+
+sub SubstituteVariable
+{
+ my ($str) = @_;
+
+ # always need to rewind file whenever it has been accessed
+ seek (CONF, 0, 0);
+
+ # cache each variable. varhash is global to we can add
+ # variables elsewhere.
+ while (<CONF>)
+ {
+ if (/^(\w+)=(.*)$/)
+ {
+ ($varhash{$1} = $2) =~ s/^["'](.*)["']$/$1/;
+ }
+ }
+
+ if ($str =~ /^(.*)\${?([A-Z_]+)}?(.*)$/)
+ {
+ my $rest = $3;
+ my $untouched = $1;
+ my $sub = "";
+ # Ignore recursive definitions of variables
+ $sub = $varhash{$2} if defined $varhash{$2} and $varhash{$2} !~ /\${?$2}?/;
+
+ return SubstituteVariable ("$untouched$sub$rest");
+ }
+
+ # We're using Perl backticks ` and "echo -n" here in order to
+ # expand any shell escapes (such as backticks themselves) in every variable
+ return echo_n ($str);
+}
+
+sub CONF_Handle_Open
+{
+ my $base_dirname = getcwd();
+ $base_dirname =~ s@.*/@@;
+
+ my ($conf_in, $src_dir);
+
+ if ($base_dirname =~ /^po(-.+)?$/)
+ {
+ if (-f "Makevars")
+ {
+ my $makefile_source;
+
+ local (*IN);
+ open (IN, "<Makevars") || die "can't open Makevars: $!";
+
+ while (<IN>)
+ {
+ if (/^top_builddir[ \t]*=/)
+ {
+ $src_dir = $_;
+ $src_dir =~ s/^top_builddir[ \t]*=[ \t]*([^ \t\n\r]*)/$1/;
+
+ chomp $src_dir;
+ if (-f "$src_dir" . "/configure.ac") {
+ $conf_in = "$src_dir" . "/configure.ac" . "\n";
+ } else {
+ $conf_in = "$src_dir" . "/configure.in" . "\n";
+ }
+ last;
+ }
+ }
+ close IN;
+
+ $conf_in || die "Cannot find top_builddir in Makevars.";
+ }
+ elsif (-f "$SRCDIR/../configure.ac")
+ {
+ $conf_in = "$SRCDIR/../configure.ac";
+ }
+ elsif (-f "$SRCDIR/../configure.in")
+ {
+ $conf_in = "$SRCDIR/../configure.in";
+ }
+ else
+ {
+ my $makefile_source;
+
+ local (*IN);
+ open (IN, "<Makefile") || return;
+
+ while (<IN>)
+ {
+ if (/^top_srcdir[ \t]*=/)
+ {
+ $src_dir = $_;
+ $src_dir =~ s/^top_srcdir[ \t]*=[ \t]*([^ \t\n\r]*)/$1/;
+
+ chomp $src_dir;
+ $conf_in = "$src_dir" . "/configure.in" . "\n";
+
+ last;
+ }
+ }
+ close IN;
+
+ $conf_in || die "Cannot find top_srcdir in Makefile.";
+ }
+
+ open (CONF, "<$conf_in");
+ }
+ else
+ {
+ print STDERR "$PROGRAM: Unable to proceed.\n" .
+ "Make sure to run this script inside the po directory.\n";
+ exit;
+ }
+}
+
+sub FindPackageName
+{
+ my $version;
+ my $domain = &FindMakevarsDomain;
+ my $name = $domain || "untitled";
+
+ &CONF_Handle_Open;
+
+ my $conf_source; {
+ local (*IN);
+ open (IN, "<&CONF") || return $name;
+ seek (IN, 0, 0);
+ local $/; # slurp mode
+ $conf_source = <IN>;
+ close IN;
+ }
+
+ # priority for getting package name:
+ # 1. GETTEXT_PACKAGE
+ # 2. first argument of AC_INIT (with >= 2 arguments)
+ # 3. first argument of AM_INIT_AUTOMAKE (with >= 2 argument)
+
+ # /^AM_INIT_AUTOMAKE\([\s\[]*([^,\)\s\]]+)/m
+ # the \s makes this not work, why?
+ if ($conf_source =~ /^AM_INIT_AUTOMAKE\(([^,\)]+),([^,\)]+)/m)
+ {
+ ($name, $version) = ($1, $2);
+ $name =~ s/[\[\]\s]//g;
+ $version =~ s/[\[\]\s]//g;
+ $varhash{"PACKAGE_NAME"} = $name if (not $name =~ /\${?AC_PACKAGE_NAME}?/);
+ $varhash{"PACKAGE"} = $name if (not $name =~ /\${?PACKAGE}?/);
+ $varhash{"PACKAGE_VERSION"} = $version if (not $name =~ /\${?AC_PACKAGE_VERSION}?/);
+ $varhash{"VERSION"} = $version if (not $name =~ /\${?VERSION}?/);
+ }
+
+ if ($conf_source =~ /^AC_INIT\(([^,\)]+),([^,\)]+)/m)
+ {
+ ($name, $version) = ($1, $2);
+ $name =~ s/[\[\]\s]//g;
+ $version =~ s/[\[\]\s]//g;
+ $varhash{"PACKAGE_NAME"} = $name if (not $name =~ /\${?AC_PACKAGE_NAME}?/);
+ $varhash{"PACKAGE"} = $name if (not $name =~ /\${?PACKAGE}?/);
+ $varhash{"PACKAGE_VERSION"} = $version if (not $name =~ /\${?AC_PACKAGE_VERSION}?/);
+ $varhash{"VERSION"} = $version if (not $name =~ /\${?VERSION}?/);
+ }
+
+ # \s makes this not work, why?
+ $name = $1 if $conf_source =~ /^GETTEXT_PACKAGE=\[?([^\n\]]+)/m;
+
+ # m4 macros AC_PACKAGE_NAME, AC_PACKAGE_VERSION etc. have same value
+ # as corresponding $PACKAGE_NAME, $PACKAGE_VERSION etc. shell variables.
+ $name =~ s/\bAC_PACKAGE_/\$PACKAGE_/g;
+
+ $name = $domain if $domain;
+
+ $name = SubstituteVariable ($name);
+ $name =~ s/^["'](.*)["']$/$1/;
+
+ return $name if $name;
+}
+
+
+sub FindPOTKeywords
+{
+
+ my $keywords = "--keyword\=\_ --keyword\=N\_ --keyword\=U\_ --keyword\=Q\_";
+ my $varname = "XGETTEXT_OPTIONS";
+ my $make_source; {
+ local (*IN);
+ open (IN, "<Makevars") || (open(IN, "<Makefile.in.in") && ($varname = "XGETTEXT_KEYWORDS")) || return $keywords;
+ seek (IN, 0, 0);
+ local $/; # slurp mode
+ $make_source = <IN>;
+ close IN;
+ }
+
+ # unwrap lines split with a trailing \
+ $make_source =~ s/\\ $ \n/ /mxg;
+ $keywords = $1 if $make_source =~ /^$varname[ ]*=\[?([^\n\]]+)/m;
+
+ return $keywords;
+}
+
+sub FindMakevarsDomain
+{
+
+ my $domain = "";
+ my $makevars_source; {
+ local (*IN);
+ open (IN, "<Makevars") || return $domain;
+ seek (IN, 0, 0);
+ local $/; # slurp mode
+ $makevars_source = <IN>;
+ close IN;
+ }
+
+ $domain = $1 if $makevars_source =~ /^DOMAIN[ ]*=\[?([^\n\]\$]+)/m;
+ $domain =~ s/^\s+//;
+ $domain =~ s/\s+$//;
+
+ return $domain;
+}
+
+sub FindMakevarsBugAddress
+{
+
+ my $address = "";
+ my $makevars_source; {
+ local (*IN);
+ open (IN, "<Makevars") || return undef;
+ seek (IN, 0, 0);
+ local $/; # slurp mode
+ $makevars_source = <IN>;
+ close IN;
+ }
+
+ $address = $1 if $makevars_source =~ /^MSGID_BUGS_ADDRESS[ ]*=\[?([^\n\]\$]+)/m;
+ $address =~ s/^\s+//;
+ $address =~ s/\s+$//;
+
+ return $address;
+}
diff --git a/po/POTFILES.in b/po/POTFILES.in
new file mode 100644
index 0000000..6a70353
--- /dev/null
+++ b/po/POTFILES.in
@@ -0,0 +1,20 @@
+# List of source files containing translatable strings.
+# Please keep this file sorted alphabetically.
+data/gfax.desktop.in
+data/gfax.schemas.in
+glade/gfax.glade
+glade/send-druid.glade
+src/efax.cs
+src/evolution.cs
+src/fax.cs
+src/gfaxphonebook.cs
+src/gfaxprefs.cs
+src/gfaxsend.cs
+src/gui.cs
+src/guitools.cs
+src/hylafax.cs
+src/main.cs
+src/newphonebook.cs
+src/phonebook.cs
+src/sendphonebook.cs
+src/Settings.cs
diff --git a/po/de.po b/po/de.po
new file mode 100644
index 0000000..bcc9b68
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,1244 @@
+# English translations for gfax package.
+# Copyright (C) 2004 THE gfax'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the gfax package.
+# George Farris <george@gmsys.com>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gfax 0.7.6\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-11-29 19:29-0800\n"
+"PO-Revision-Date: 2006-11-30 21:05+0100\n"
+"Last-Translator: Johannes Rohr <jorohr@gmail.com>\n"
+"Language-Team: German <jorohr@gmail.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../gfax.desktop.in.h:1
+msgid "Gfax Facsimile Program"
+msgstr "Gfax-Faxprogramm"
+
+#: ../gfax.desktop.in.h:2
+msgid "Send and Receive Facsimiles"
+msgstr "Faxe versenden und empfangen"
+
+#: ../gfax.schemas.in.h:1
+msgid "0:never, 1:until carrier, 2:always, 3:on receive only"
+msgstr "0:nie, 1:bis zum Freizeichen, 2:immer, 3:nur beim Empfang"
+
+#: ../gfax.schemas.in.h:2
+msgid "0:very low, 1:low, 2:medium, 3:high"
+msgstr "0:Sehr niedrig, 1:niedrig, 2:mittel, 3:hoch"
+
+#: ../gfax.schemas.in.h:3
+msgid "Modem Device"
+msgstr "Modemgerät"
+
+#: ../gfax.schemas.in.h:4
+msgid "Modem initialization string"
+msgstr "Initialisierungssequenz des Modems"
+
+#: ../gfax.schemas.in.h:5
+msgid "Modem reset string"
+msgstr "Zeichenfolge zum Zurücksetzen des Modems"
+
+#: ../gfax.schemas.in.h:6
+msgid "Not currently used."
+msgstr "Momentan nicht verwendet."
+
+#: ../gfax.schemas.in.h:7
+msgid "The initialization code that is sent to the modem."
+msgstr "Der Initializierungscode, der an das Modem gesendet wird."
+
+#: ../gfax.schemas.in.h:8
+msgid ""
+"The name of the lock file according to your system's conventions. If you're "
+"running Linux you shouldn't have to touch this."
+msgstr ""
+"Der Name der Sperrdatei entsprechend den Konventionen Ihres Betriebssytems. \n"
+"Wenn Sie Linux verwenden, brauchen Sie hier nichts zu ändern."
+
+#: ../gfax.schemas.in.h:9
+msgid ""
+"The reset code that resets the modem to a power up state. The -Kz code works "
+"with most modems."
+msgstr ""
+"Der Reset-Code setzt das Modem auf den Zustand unmittelbar nach dem Einschalten zurück.\n"
+"Bei den meisten Modems funktioniert die Zeichenfolge -Kz"
+
+#: ../gfax.schemas.in.h:10
+msgid ""
+"The serial port the modem is connected too. Typical values are ttyS0, cua0 "
+"or modem."
+msgstr ""
+"Der serielle Anschluss, an dem das Modem angeschlossen ist. \n"
+"Übliche Werte sind ttyS0, cua0 oder modem."
+
+#: ../glade/gfax.glade.h:1
+msgid ""
+"\n"
+"Please enter your Hylafax server information here. If you are running "
+"Hylafax on the same computer That you are using Gfax on then \"Host Name\" "
+"should be set to \"localhost\".\n"
+msgstr ""
+"\n"
+"Bitte geben Sie hier die Daten für Ihren Hylafax-Server ein. Falls\n"
+"Hylafax auf demselben Computer läuft, auf dem Sie Gfax nutzen, dann\n"
+"sollte der \"Rechnername\" \"localhost\" lauten. \n"
+
+#: ../glade/gfax.glade.h:4
+msgid " Program: "
+msgstr " Programm: "
+
+#: ../glade/gfax.glade.h:5
+msgid "4559"
+msgstr "4559"
+
+#: ../glade/gfax.glade.h:6
+msgid "<b><big>E-Mail Notification</big></b>"
+msgstr "<b><big>E-Mail-Benachrichtung</big></b>"
+
+#: ../glade/gfax.glade.h:7
+msgid "<b><big>Efax Setup</big></b>"
+msgstr "<b><big>Einrichtung von Efax</big></b>"
+
+#: ../glade/gfax.glade.h:8
+msgid "<b><big>Facsimile Viewer Program</big></b>"
+msgstr "<b><big>Faxbetrachter</big></b>"
+
+#: ../glade/gfax.glade.h:9
+msgid "<b><big>Fax Properties</big></b>"
+msgstr "<b><big>Fax-Eigenschaften</big></b>"
+
+#: ../glade/gfax.glade.h:10
+msgid "<b><big>Fax Transport Agent</big></b>"
+msgstr "<b><big>Fax Transport Agent</big></b>"
+
+#: ../glade/gfax.glade.h:11
+msgid "<b><big>Hylafax Setup</big></b>"
+msgstr "<b><big>Einrichtung von Hylafax</big></b>"
+
+#: ../glade/gfax.glade.h:12
+msgid "<b><big>Phone Information</big></b>"
+msgstr "<b><big>Phone Information</big></b>"
+
+#: ../glade/gfax.glade.h:13
+msgid "<b><big>Transmit Properties</big></b>"
+msgstr "<b><big>Transmit Properties</big></b>"
+
+#: ../glade/gfax.glade.h:14
+msgid "<b>Alter facsimile job parameters</b>"
+msgstr "<b>Paramenter des Faxauftrags ändern</b>"
+
+#: ../glade/gfax.glade.h:15
+msgid "<b>Server</b>"
+msgstr "<b>Server</b>"
+
+#: ../glade/gfax.glade.h:16
+msgid ""
+"ATT (Dataport, Paradyne)\n"
+"Motorola (Power Modem, 3400 Pro,...\n"
+"QuickComm (Spirit II)\n"
+"USR (Courier, Sportster)\n"
+"Multi-Tech (for bit reversal)\n"
+"User Defined\n"
+msgstr ""
+
+#: ../glade/gfax.glade.h:23
+msgid "Auto Refresh Queue"
+msgstr "Auto Refresh Queue"
+
+#: ../glade/gfax.glade.h:24
+msgid ""
+"Complete...\n"
+"\n"
+"Your new phone book is ready.\n"
+"If this is a Gfax type phone book you may\n"
+"now add items. \n"
+"\n"
+"Evolution phone books are read only\n"
+"but may be change through Evolution."
+msgstr ""
+"Ihr neues Telefonbuch ist eingerichtet.\n"
+"Falls es vom Typ Gfax ist, können Sie jetzt\n"
+"neue Einträge hinzufügen.\n"
+"\n"
+"Evolution-Adressbücher können von Gfax nur gelesen\n"
+"werden und können in Evolution geändert werden."
+
+#
+#: ../glade/gfax.glade.h:32
+msgid "Completed Jobs"
+msgstr "Abgeschlossene Aufträge"
+
+#: ../glade/gfax.glade.h:33
+msgid "Database"
+msgstr "Database"
+
+#: ../glade/gfax.glade.h:34 ../glade/send-druid.glade.h:11
+msgid "Delete"
+msgstr "Löschen"
+
+#: ../glade/gfax.glade.h:35
+msgid "Dial Prefix:"
+msgstr "Wählpräfix:"
+
+#: ../glade/gfax.glade.h:36
+msgid "E-Mail Address:"
+msgstr "E-Mail-Adresse:"
+
+#: ../glade/gfax.glade.h:37
+msgid "E-Mail Notification"
+msgstr "E-Mail-Benachrichtigung"
+
+#: ../glade/gfax.glade.h:38
+msgid "Efax"
+msgstr "Efax"
+
+#: ../glade/gfax.glade.h:39
+msgid "Evolution"
+msgstr "Evolution"
+
+#: ../glade/gfax.glade.h:40
+msgid "Evolution Address books"
+msgstr "Evolution-Adressbücher"
+
+#: ../glade/gfax.glade.h:41
+msgid "Exit"
+msgstr "Exit"
+
+#: ../glade/gfax.glade.h:42
+msgid "Facsimile Number:"
+msgstr "Faxnummer:"
+
+#: ../glade/gfax.glade.h:43
+msgid "Facsimiles to Send"
+msgstr "Faxausgang"
+
+#: ../glade/gfax.glade.h:44
+msgid "Fax Number:"
+msgstr "Faxnummer:"
+
+#: ../glade/gfax.glade.h:45
+msgid "Fax Status:"
+msgstr "Faxstatus:"
+
+#: ../glade/gfax.glade.h:46
+msgid "Fax log enabled"
+msgstr "Fax-Protokollierung aktiv"
+
+#: ../glade/gfax.glade.h:47
+msgid ""
+"First we must choose a transport agent. \n"
+"\n"
+"A transport agent is a software package that is responsible for\n"
+"actually sending the facsimile with your modem. If you don't have \n"
+"one of these installed you should hit cancel here and install\n"
+"a transport agent first.\n"
+"\n"
+"Transport agents can be found at the following URL's but you should \n"
+"check your distribution CD first..\n"
+"\n"
+"Hylafax - http://www.hylafax.org\n"
+"Efax - http://www.cce.com/efax"
+msgstr ""
+"Zunächst müssen Sie ein Programm zur Faxübertragung auswählen.\n"
+"\n"
+"Dies ist ein Programm, das den eigentlichen Versand des Faxes über das\n"
+"Modem vornimmt. Wenn Sie keine solches Programm installiert haben,\n"
+"sollten Sie jetzt abbrechen und zunächst ein Programm zur\n"
+"Faxübertragung installieren.\n"
+"\n"
+"Übertragungsprogramme können unter den folgenden URLs gefunden werden,\n"
+"aber sie sollten es zuerst mit der CD Ihrer Distribution versuchen.\n"
+"\n"
+"Hylafax - http://www.hylafax.org\n"
+"Efax - http://www.cce.com/efax"
+
+#: ../glade/gfax.glade.h:59
+msgid "Gfax"
+msgstr "Gfax"
+
+#: ../glade/gfax.glade.h:60
+msgid "Gfax - E-Mail Address"
+msgstr "Gfax - E-Mail Addresse"
+
+#: ../glade/gfax.glade.h:61
+msgid "Gfax - Facsimile Transport Agent"
+msgstr "Gfax - Programm zur Faxübertragung"
+
+#: ../glade/gfax.glade.h:62
+msgid "Gfax - Gnome facsimile program"
+msgstr "Gfax - Gnome-Faxprogramm"
+
+#: ../glade/gfax.glade.h:63
+msgid "Gfax - Modem Selection"
+msgstr "Gfax - Modemauswahl"
+
+#: ../glade/gfax.glade.h:64
+msgid "Gfax - Phone Number Information"
+msgstr "Gfax - Telefonnummern"
+
+#: ../glade/gfax.glade.h:65
+msgid "Gfax - Setup Complete"
+msgstr "Gfax - Einrichtung abgeschlossen"
+
+#: ../glade/gfax.glade.h:66
+msgid "Gfax - Add new phone book."
+msgstr "Gfax - Neues Telefonbuch hinzufügen"
+
+#: ../glade/gfax.glade.h:67
+msgid "Gfax - Modify Job"
+msgstr "Gfax - Auftrag ändern"
+
+#: ../glade/gfax.glade.h:68
+msgid "Gfax - New user setup"
+msgstr "Gfax - Einrichtigung für neuen Benutzer"
+
+#: ../glade/gfax.glade.h:69
+msgid "Gfax - Preferences"
+msgstr "Gfax - Einstellungen"
+
+#: ../glade/gfax.glade.h:70
+msgid "Gfax - Transmission Progress"
+msgstr "Gfax - Fortschritt der Übertragung"
+
+#: ../glade/gfax.glade.h:71
+msgid ""
+"Gfax can inform the Efax transport agent which\n"
+"serial port your modem is connected to."
+msgstr ""
+"Gfax kann die Hilfsprogramm Efax darüber informieren, an\n"
+"welchen seriellen Anschluss Ihr Modem angeschlossen ist."
+
+#: ../glade/gfax.glade.h:73
+msgid ""
+"Gfax setup is now complete!\n"
+"\n"
+"Gfax is configurable; there are other configuration \n"
+"options available under the preferences menu.\n"
+"\n"
+"You can run this first time setup at any time from\n"
+"the preferences section.\n"
+"\n"
+"Default preferences have been choosen for the\n"
+"transport agent you chose, you may want to\n"
+"customise them."
+msgstr ""
+"Gfax ist jetzt vollständig eingerichtet.\n"
+"\n"
+"Gfax ist anpassbar, es gibt weitere KOnfigurationsoptionen im\n"
+"Einrichtungsmenu.\n"
+"\n"
+"Sie können diesen Einrichtungsassistenten jederzeit aus dem\n"
+"Einrichtungsmenü heraus aufrufen.\n"
+"\n"
+"Für das gewählte Faxtransportprogramm wurden Vorgabeeinstellungen\n"
+"gewählt, die Sie wahrscheinlich an Ihre Bedürfnisse anpassen sollten."
+
+#: ../glade/gfax.glade.h:84
+msgid "Hi Resolution Mode"
+msgstr "Hohe Auflösung"
+
+#: ../glade/gfax.glade.h:85
+msgid "Host Name:"
+msgstr "Rechnername:"
+
+#: ../glade/gfax.glade.h:86
+msgid "Hostname:"
+msgstr "Rechnername:"
+
+#: ../glade/gfax.glade.h:87
+msgid "Hylafax"
+msgstr "Hylafax"
+
+#: ../glade/gfax.glade.h:88
+msgid "Hylafax - Choose this for network faxing."
+msgstr "Hylafax - Wählen Sie dies für netzwerkbasierten Faxversand."
+
+#: ../glade/gfax.glade.h:89
+msgid ""
+"Hylafax and Mgetty+Sendfax can both be requested to send \n"
+"results of facsimile transmission to an email address.\n"
+"\n"
+"If you require this feature please enter your email address\n"
+"here. It's a good idea to include this even if you don't \n"
+"use it immediately, you can enable and disable it in the\n"
+"preferences section of Gfax.\n"
+" "
+msgstr ""
+"Hylafax und Mgetty+Sendfax können beide so eingestellt werden, dass\n"
+"sie das Ergebnismeldung der Faxübertragung an eine Email-Adresse\n"
+"senden.\n"
+"\n"
+"Wenn Sie diese Funktion benötigen, geben Sie bitte Ihrer Email-Adresse\n"
+"hier ein. Selbst wenn Sie dies nicht unmittelbar benötigen, ist es ist\n"
+"eine gute Idee, diese anzugeben, sie können es in den\n"
+"Gfax-Einstellungen ein- und ausschalten.\n"
+" "
+
+#: ../glade/gfax.glade.h:97
+msgid "IP Port:"
+msgstr "IP Port:"
+
+#: ../glade/gfax.glade.h:98
+msgid "LDAP"
+msgstr "LDAP"
+
+#: ../glade/gfax.glade.h:99
+msgid "Log Enabled"
+msgstr "Protokoll aktiviert"
+
+#: ../glade/gfax.glade.h:100
+msgid ""
+"Make no more than <maxdials> calls in attempting to send the facsimile. "
+"Once <maxdials> has been reached, the job will be killed."
+msgstr ""
+"Nicht mehr als <max> Versuche zum Versand des Faxes unternehmen. \n"
+"Wenn <max> erreicht ist, wird der Auftrag verworfen."
+
+#: ../glade/gfax.glade.h:101
+msgid "Maximum Dials:"
+msgstr "Maximale Anwahlversuche:"
+
+#: ../glade/gfax.glade.h:102
+msgid "Mgetty"
+msgstr "Mgetty"
+
+#: ../glade/gfax.glade.h:103
+msgid "Modem Connection"
+msgstr "Modem-Verbindung"
+
+#: ../glade/gfax.glade.h:104
+msgid "Modem Port:"
+msgstr "Modem-Anschluss"
+
+#: ../glade/gfax.glade.h:105
+msgid "Modem Type:"
+msgstr "Modemtyp"
+
+#: ../glade/gfax.glade.h:106
+msgid "New Fax"
+msgstr "Neues Fax"
+
+#: ../glade/gfax.glade.h:107 ../glade/send-druid.glade.h:23
+msgid "New phone book"
+msgstr "Neues Telefonbuch"
+
+#: ../glade/gfax.glade.h:108
+msgid "Open phone book"
+msgstr "Telefonbuch öffenen"
+
+#: ../glade/gfax.glade.h:109
+msgid "Page Size:"
+msgstr "Seitenformat"
+
+#: ../glade/gfax.glade.h:110
+msgid "Password Dialog"
+msgstr "Passwortdialog"
+
+#: ../glade/gfax.glade.h:111 ../glade/send-druid.glade.h:26
+#: ../src/newphonebook.cs:81
+msgid "Phone Book"
+msgstr "Telefonbuch"
+
+#: ../glade/gfax.glade.h:112
+msgid "Please enter a name for your new phone book."
+msgstr "Bitte geben Sie einen Namen für Ihr neues Telefonbuch ein."
+
+#: ../glade/gfax.glade.h:113
+msgid ""
+"Please enter the password \n"
+"for your fax server."
+msgstr ""
+"Bitte geben Sie das Passwort\n"
+"für Ihren Faxserver ein."
+
+#: ../glade/gfax.glade.h:115
+msgid ""
+"Please enter the type of phone book you are creating."
+msgstr ""
+"Bitte legen Sie fest, welchen Typ von Telefonbuch Sie anlegen."
+
+#: ../glade/gfax.glade.h:121
+msgid ""
+"Please enter your facsimile number.\n"
+"\n"
+"This number is placed in the top one line header that is placed \n"
+"on all outgoing facsimiles.\n"
+"\n"
+"You may also choose a default dial prefix. Many companies in\n"
+"North America use the number \"9\" to reach an outside line.\n"
+msgstr ""
+"Bitte geben Sie Ihre Faxnummer ein.\n"
+"\n"
+"Diese Nummer wird in der Kopfzeile aller ausgehenden Faxe verwendet.\n"
+"\n"
+"Sie können auch eine Nummer zur Amtsholung eingeben. Viele Unternehmen\n"
+"in Nordamerika verwenden die Nummer \"9\", um eine Amtsleitung zu\n"
+"erreichen. (In Europa ist dagegen die \"0\" üblich, Anmerkung des\n"
+"Übersäzzas)\n"
+
+#: ../glade/gfax.glade.h:129
+msgid ""
+"Please select the Evolution address books that you would \n"
+"like to use.\n"
+"\n"
+"These are only local address books and will only include\n"
+"contacts with facsimile numbers."
+msgstr ""
+"Bitte wählen Sie die Evolution-Adressbücher aus, die sie verwenden möchten.\n"
+"\n"
+"Es werden nur lokale Adressbücher angezeigt und ausschließlich \n"
+"Kontakte mit Faxnummern werden verfügbar gemacht."
+
+#: ../glade/gfax.glade.h:134
+msgid "Port Number:"
+msgstr "Portnummer"
+
+#: ../glade/gfax.glade.h:135
+msgid "Received Facsimiles"
+msgstr "Empfangene Faxe"
+
+#: ../glade/gfax.glade.h:136
+msgid "Remember this password"
+msgstr "An dieses Passwort erinnern"
+
+#: ../glade/gfax.glade.h:137
+msgid "Send Email Notification"
+msgstr "Per Email benachrichtigen"
+
+#: ../glade/gfax.glade.h:138
+msgid "Send Immediately"
+msgstr "Sofort senden"
+
+#: ../glade/gfax.glade.h:139
+msgid "Speaker Volume:"
+msgstr "Lautstärke:"
+
+#: ../glade/gfax.glade.h:140
+msgid "System"
+msgstr "System"
+
+#: ../glade/gfax.glade.h:141
+msgid ""
+"The TCP/IP port number of the fax server. Default hylafax port is 4559."
+msgstr ""
+"Der TCP/IP-Port für den Fax-Server. Der Standardport für Hylafax ist 4559."
+
+#: ../glade/gfax.glade.h:142
+msgid ""
+"The host name of the network fax server. Enter \"localhost\" if you are not "
+"using a network fax server."
+msgstr ""
+"Der Rechnername des Faxservers im Netzwerk. Geben Sie \"localhost\" ein,\n"
+"wenn sie keinen Fax-Server im Netzwerk verwenden."
+
+#: ../glade/gfax.glade.h:143
+msgid "The serial port the modem is on - ttyS0 is COM1, ttyS1 is COM2 etc."
+msgstr ""
+"Der serielle Anschluss, an dem das Modem angeschlossen ist - ttyS0 ist\n"
+"COM1, ttyS1 ist COM2 usw."
+
+#: ../glade/gfax.glade.h:144
+msgid ""
+"There was an error transmitting\n"
+"your facsimile to the server!"
+msgstr ""
+"Fehler bei der Übermittlung \n"
+"des Faxes an den Server!"
+
+#: ../glade/gfax.glade.h:146
+msgid ""
+"This will lead you through the process \n"
+"of creating a new phone book."
+msgstr ""
+"Dieser Assistent ist Ihnen beim Erstellen \n"
+"eines neuen Telefonbuchs behilflich."
+
+#: ../glade/gfax.glade.h:148
+msgid "Time to send:"
+msgstr "Sendezeit"
+
+#: ../glade/gfax.glade.h:149
+msgid ""
+"Transmitting facsimile to \n"
+"Hylafax server."
+msgstr ""
+"Übermittle Fax an\n"
+"Hylafax-Server."
+
+#: ../glade/gfax.glade.h:151
+msgid "Transport Agent"
+msgstr "Transportprogramm"
+
+#: ../glade/gfax.glade.h:152
+msgid "Use Cover Page"
+msgstr "Deckblatt benutzen"
+
+#: ../glade/gfax.glade.h:153
+msgid "Use Fine Resolution"
+msgstr "Hohe Auflösung benutzen"
+
+#: ../glade/gfax.glade.h:154
+msgid "User"
+msgstr "Benutzer"
+
+#: ../glade/gfax.glade.h:155
+msgid "Username:"
+msgstr "Benutzername:"
+
+#: ../glade/gfax.glade.h:156
+msgid ""
+"Very Low\n"
+"Low\n"
+"Medium\n"
+"High"
+msgstr ""
+"Sehr niedrig\n"
+"Niedrig\n"
+"Mittel\n"
+"Hoch"
+
+#: ../glade/gfax.glade.h:160
+msgid "View / Print"
+msgstr "Betrachten / Drucken"
+
+#: ../glade/gfax.glade.h:161
+msgid ""
+"Welcome to Gfax!\n"
+"\n"
+"\n"
+"Gfax is a GNOME facsimile program that provides \n"
+"the familiar \"popup\" window when printing to a fax \n"
+"printer.\n"
+"\n"
+"The following pages will help you to setup Gfax."
+msgstr ""
+"msgid \"c2.0\"\n"
+"msgstr \"\""
+
+#: ../glade/gfax.glade.h:169
+msgid "Which serial port is your modem connected to?"
+msgstr "An welchen seriellen Anschluss ist Ihr Modem angeschlossen?"
+
+#: ../glade/gfax.glade.h:170
+msgid ""
+"Your facsimile was sucessfully\n"
+" transmitted!"
+msgstr ""
+"Ihr Fax wurde erfolgreich \n"
+"übermittelt."
+
+#: ../glade/gfax.glade.h:172
+msgid "_Cancel Job"
+msgstr "_Auftrag abbrechen"
+
+#: ../glade/gfax.glade.h:173
+msgid "_Fax"
+msgstr "_Fax"
+
+#: ../glade/gfax.glade.h:174
+msgid "_Help"
+msgstr "_Hilfe"
+
+#: ../glade/gfax.glade.h:175
+msgid "_Modify Job"
+msgstr "_Auftrag ändern"
+
+#: ../glade/gfax.glade.h:176
+msgid "_Settings"
+msgstr "_Einstellungen"
+
+#: ../glade/gfax.glade.h:177
+msgid "cua1"
+msgstr "cua1"
+
+#: ../glade/gfax.glade.h:178
+msgid "cua2"
+msgstr "cua2"
+
+#: ../glade/gfax.glade.h:179
+msgid ""
+"letter\n"
+"legal\n"
+"a4"
+msgstr ""
+"letter\n"
+"legal\n"
+"a4"
+
+#: ../glade/gfax.glade.h:182
+msgid "localhost"
+msgstr "localhost"
+
+#: ../glade/gfax.glade.h:183
+msgid "modem"
+msgstr "modem"
+
+#: ../glade/gfax.glade.h:184
+msgid "oklabel"
+msgstr "oklabel"
+
+#: ../glade/gfax.glade.h:185
+msgid "ttyS0"
+msgstr "ttyS0"
+
+#: ../glade/gfax.glade.h:186
+msgid "ttyS1"
+msgstr "ttyS1"
+
+#: ../glade/gfax.glade.h:187
+msgid "ttyS2"
+msgstr "ttyS2"
+
+#: ../glade/gfax.glade.h:188
+msgid "ttyS3"
+msgstr "ttyS3"
+
+#: ../glade/send-druid.glade.h:1
+msgid "<b><big>Current Phone Books</big></b>"
+msgstr "<b><big>Aktuelle Telefonbücher</big></b>"
+
+#: ../glade/send-druid.glade.h:2
+msgid "<b><big>Edit Phone book</big></b>"
+msgstr "<b><big>Telefonbücher bearbeiten</big></b>"
+
+#: ../glade/send-druid.glade.h:3
+msgid "<b>Facsimile Job Details</b>"
+msgstr "Faxauftrags-Details"
+
+#: ../glade/send-druid.glade.h:4
+msgid "<b>New fax information</b>"
+msgstr "<b>New fax information</b>"
+
+#: ../glade/send-druid.glade.h:5
+msgid "Add"
+msgstr "Add"
+
+#: ../glade/send-druid.glade.h:6
+msgid "Browse"
+msgstr "Durchsuchen"
+
+#: ../glade/send-druid.glade.h:7
+msgid "Clear"
+msgstr "Löschen"
+
+#: ../glade/send-druid.glade.h:8
+msgid "Close"
+msgstr "Schließen"
+
+#: ../glade/send-druid.glade.h:9 ../src/gfaxphonebook.cs:89
+#: ../src/gfaxsend.cs:142 ../src/sendphonebook.cs:105
+msgid "Contact"
+msgstr "Kontakt"
+
+#: ../glade/send-druid.glade.h:10
+msgid "Current Phone Book"
+msgstr "Gewähltes Telefonbuch"
+
+#: ../glade/send-druid.glade.h:12
+msgid "Delete phone book"
+msgstr "Telefonbuch löschen"
+
+#: ../glade/send-druid.glade.h:13
+msgid "Details"
+msgstr "Details"
+
+#: ../glade/send-druid.glade.h:14
+msgid "E-Mail job results to:"
+msgstr "Ergebnis der Faxübertragung per Email senden an:"
+
+#: ../glade/send-druid.glade.h:15
+msgid "Enter a phone number and hit <enter>."
+msgstr "Geben Sie eine Telefonnummer ein und drücken Sie die Eingabetaste."
+
+#: ../glade/send-druid.glade.h:16
+msgid "Fax number:"
+msgstr "Faxnummer:"
+
+#: ../glade/send-druid.glade.h:17
+msgid "Fine resolution"
+msgstr "Hohe Auflösung"
+
+#: ../glade/send-druid.glade.h:18
+msgid "Gfax - Phone Book Selection"
+msgstr "Gfax - Auswahl des Telefonbuchs"
+
+#: ../glade/send-druid.glade.h:19
+msgid "Gfax - Phone books"
+msgstr "Gfax - Telefonbücher"
+
+#: ../glade/send-druid.glade.h:20
+msgid "Job"
+msgstr "Auftrag"
+
+#: ../glade/send-druid.glade.h:21
+msgid "New Entry"
+msgstr "Neuer Eintrag"
+
+#: ../glade/send-druid.glade.h:22
+msgid "New Item"
+msgstr "Neuer Eintrag"
+
+#: ../glade/send-druid.glade.h:24 ../src/gui.cs:238 ../src/gui.cs:249
+msgid "Number"
+msgstr "Nummer"
+
+#: ../glade/send-druid.glade.h:25 ../src/gfaxphonebook.cs:87
+#: ../src/gfaxsend.cs:141 ../src/sendphonebook.cs:103
+msgid "Organization"
+msgstr "Organisation"
+
+#: ../glade/send-druid.glade.h:27
+msgid "Phone Book Item List"
+msgstr "Liste der Telefonbucheinträge"
+
+#: ../glade/send-druid.glade.h:28
+msgid "Phone Books"
+msgstr "Telefonbücher"
+
+#: ../glade/send-druid.glade.h:29
+msgid "Postscript file:"
+msgstr "Postscript-Datei:"
+
+#: ../glade/send-druid.glade.h:30
+msgid "Save and Close"
+msgstr "Speichern und schließen"
+
+#: ../glade/send-druid.glade.h:31
+msgid "Save and close"
+msgstr "Speichern und schließen"
+
+#: ../glade/send-druid.glade.h:32 ../src/gfaxsend.cs:139
+msgid "Send"
+msgstr "Senden"
+
+#: ../glade/send-druid.glade.h:33
+msgid "Send Fax"
+msgstr "Fax senden"
+
+#: ../glade/send-druid.glade.h:34
+msgid "Send immediately"
+msgstr "Sofort senden"
+
+#: ../glade/send-druid.glade.h:35
+msgid "Transmit the fax"
+msgstr "Fax übermitteln"
+
+#: ../glade/send-druid.glade.h:36
+msgid "Update"
+msgstr "Aktualisieren"
+
+#: ../glade/send-druid.glade.h:37
+msgid "_File"
+msgstr "_Datei"
+
+#: ../src/efax.cs:384
+msgid "Scanning control files."
+msgstr "Steuerdateien werden überprüft."
+
+#: ../src/efax.cs:397
+msgid "Running job "
+msgstr "Auftrag wird ausgeführt."
+
+#: ../src/efax.cs:421 ../src/efax.cs:508
+msgid "Busy retries exceeded"
+msgstr "Höchstanzahl der Wählversuche bei Besetzt überschritten"
+
+#: ../src/efax.cs:468
+msgid "Sending facsimile..."
+msgstr "Fax wird versandt..."
+
+#. If successful then mv the control file to the done queue and flag
+#. a date for it's removal.
+#: ../src/efax.cs:492
+msgid "Success"
+msgstr "Erfolg"
+
+#. fatal errors - no retry
+#. fatalError = true;
+#. change code in file
+#: ../src/efax.cs:516
+msgid "Fatal error"
+msgstr "Fehler"
+
+#. Modem error - no retry
+#. fatalError = true;
+#: ../src/efax.cs:522
+msgid "Fatal modem error"
+msgstr "Schwerwiegender Modemfehler"
+
+#. Modem not responding
+#. fatalError = true;
+#: ../src/efax.cs:528
+msgid "Modem not responding"
+msgstr "Modem antwortet nicht."
+
+#. Program terminated
+#. fatalError = true;
+#: ../src/efax.cs:534
+msgid "Program terminated"
+msgstr "Programm beendet"
+
+#: ../src/fax.cs:60
+msgid "No Connection"
+msgstr "Keine Verbindung"
+
+#: ../src/fax.cs:71
+msgid ""
+"Efax transmit process running...\n"
+"Scanning job files every 30 seconds."
+msgstr ""
+"Efax-Faxübertragung läuft...\n"
+"Auftragsdateien werden alle 30 Sekunden überprüft."
+
+#: ../src/fax.cs:77
+msgid "Error transport agent not specified!"
+msgstr "Fehler: Faxtransportprogramm nicht angegeben!"
+
+#: ../src/fax.cs:132
+msgid "Run"
+msgstr "Ausführen"
+
+#: ../src/fax.cs:135
+msgid "Sleep"
+msgstr "Pausieren"
+
+#: ../src/fax.cs:138
+msgid "Block"
+msgstr "Blockieren"
+
+#: ../src/fax.cs:141
+msgid "Busy"
+msgstr "Besetzt"
+
+#: ../src/fax.cs:144 ../src/fax.cs:244
+msgid "Done"
+msgstr "Erledigt"
+
+#: ../src/fax.cs:147
+msgid "Fail"
+msgstr "Fehlschlag"
+
+#: ../src/fax.cs:150
+msgid "New"
+msgstr "Neu"
+
+#: ../src/fax.cs:241
+msgid "Receiving"
+msgstr "Empfange"
+
+#: ../src/gfaxphonebook.cs:88 ../src/gfaxsend.cs:140
+#: ../src/sendphonebook.cs:104
+msgid "Phone Number"
+msgstr "Telefonnummer"
+
+#: ../src/gfaxphonebook.cs:213
+msgid "Are you sure you want to delete the phone book?"
+msgstr "Sind Sie sicher, dass Sie dieses Telefonbuch löschen wollen?"
+
+#: ../src/gfaxphonebook.cs:297
+msgid ""
+"You have unsaved phone book entries.\n"
+" Are you sure you want to Quit?"
+msgstr ""
+"Es gibt ungespeicherte Telefonbucheinträge. \n"
+"Sind Sie sicher, dass Sie beenden wollen? "
+
+#: ../src/gfaxphonebook.cs:460
+msgid "Press the <DELETE> key to delete an entry."
+msgstr "Drücken Sie die Entfernen-Taste um einen Eintrag zu löschen."
+
+#: ../src/gfaxprefs.cs:190 ../src/gfaxprefs.cs:208
+msgid "You need to exit Gfax and restart it when you change transport agents"
+msgstr "Sie müssen Gfax beenden und neu starten, wenn Sie ein anderes Faxübertragungsprogramm ausgewählt haben."
+
+#: ../src/gfaxsend.cs:88
+msgid ""
+"\n"
+"This is the first time you have run Gfax.\n"
+"Please run Gfax from the menu or command line and set your \n"
+"MODEM TYPE, PORT and Fax number under preferences.\n"
+"\n"
+"Gfax is initially setup to use Efax, you may change it use \n"
+"Hylafax if you prefer or require connection to a network \n"
+"facsimile server."
+msgstr ""
+"\n"
+"Sie haben Gfax zum ersten Mal gestartet. Bitte führen Sie Gfax vom\n"
+"Menü oder der Kommandozeile aus und stellen Sie in den Einstellungen\n"
+"den Typ, Anschluss ihres Modems sowie Ihre Faxnummer ein.\n"
+"\n"
+"Gfax ist per Vorgabe darauf eingerichtet, Efax zu verwenden. Sie\n"
+"können dies auf Hylafax ändern, wenn Sie eine Verbindung mit einem\n"
+"Faxserver im Netzwerk benötigen oder bevorzugen."
+
+#: ../src/gfaxsend.cs:164
+msgid "Spooled from print job"
+msgstr "Aus Druckauftrag"
+
+#: ../src/gfaxsend.cs:276
+msgid ""
+"\n"
+"The file you have entered does not exist.\n"
+"Please check the name and try again."
+msgstr ""
+"\n"
+"Die Datei, die Sie angegeben haben, existiert nicht.\n"
+"Bitte überprüfen Sie den Namen und versuchen Sie es erneut."
+
+#: ../src/gfaxsend.cs:310
+msgid ""
+"\n"
+"You have not entered a facsimile number!\n"
+"Please enter a number and press the <i><b>Enter</b></i> key or\n"
+"click the <i><b>Phone Book</b></i> button to select numbers or\n"
+"entire phone books."
+msgstr ""
+"\n"
+"Sie haben keine Faxnummer angegeben!\n"
+"Bitte geben Sie eine Faxnummer ein und drücken Sie die <i><b>Eingabetaste</b></i> oder\n"
+"klicken Sie auf das <i><b>Telefonbücher</b></i>-Symbol um Nummern oder\n"
+"ganze Telefonbücher auszuwählen."
+
+#: ../src/gui.cs:143
+msgid ""
+"\n"
+"This is the first time you have run Gfax.\n"
+"You should set your MODEM TYPE and PORT under preferences.\n"
+"\n"
+"Gfax is initially setup to use Efax, you may change it use \n"
+"Hylafax if you prefer or require connection to a network \n"
+"facsimile server."
+msgstr ""
+"\n"
+"Sie haben Gfax zum ersten Mal gestartet.\n"
+"Sie sollten den Typ und den Anschluss Ihres Modems in den Einstellungen auswählen.\n"
+"\n"
+"Gfax ist per Vorgabe darauf eingerichtet, Efax zu verwenden. Sie können dies auf\n"
+"Hylafax ändern, wenn Sie eine Verbindung mit einem Faxserver im Netzwerk benötigen oder\n"
+"bevorzugen."
+
+#: ../src/gui.cs:157
+msgid ""
+"Your spool directory is missing!\n"
+"\t\t\t\t\t\n"
+"Please login as the root user and create the "
+msgstr ""
+"Das Spool-Verzeichnis fehlt!\n"
+"\n"
+"Bitte melden Sie sich als Benutzer root an und erzeugen Sie das "
+
+#: ../src/gui.cs:161
+msgid ""
+" directory.\n"
+"\n"
+"All users should be able to write to it.\n"
+msgstr ""
+" Verzeichnis.\n"
+"\n"
+"Es sollte für alle Benutzer beschreibbar sein.\n"
+
+#: ../src/gui.cs:166
+msgid ""
+"The doneq directory is missing in your spool directory!\n"
+"\t\t\t\t\t\n"
+"Please login as the root user and create the "
+msgstr ""
+"In Ihrem Spool-Verzeichnis fehlt das Unterverzeichnis doneq!\n"
+"\n"
+"Bitte melden Sie sich als Benutzer root and und erzeugen Sie das "
+
+#: ../src/gui.cs:169
+msgid ""
+"/doneq directory.\n"
+"\n"
+"All users should be able to write to it.\n"
+msgstr ""
+"Verzeichnis /doneq.\n"
+"\n"
+"Es sollte für alle Benutzer beschreibbar sein.\n"
+
+#: ../src/gui.cs:175
+msgid ""
+"The recq directory is missing in your spool directory!\n"
+"\t\t\t\t\t\n"
+"Please login as the root user and create the "
+msgstr ""
+"In Ihrem Spool-Verzeichnis fehlt das Unterverzeichnis recq!\n"
+"\n"
+"Bitte melden Sie sich als Benutzer root and und erzeugen Sie das "
+
+#: ../src/gui.cs:178
+msgid ""
+"/recq directory.\n"
+"\n"
+"All users should be able to write to it.\n"
+msgstr ""
+"Verzeichnis /recq.\n"
+"\n"
+"Es sollte für alle Benutzer beschreibbar sein.\n"
+
+#: ../src/gui.cs:237 ../src/gui.cs:248
+msgid "Jobid"
+msgstr "Auftragsnummer"
+
+#: ../src/gui.cs:239 ../src/gui.cs:250 ../src/gui.cs:259
+msgid "Status"
+msgstr "Status"
+
+#: ../src/gui.cs:240 ../src/gui.cs:251
+msgid "Owner"
+msgstr "Besitzer"
+
+#: ../src/gui.cs:241 ../src/gui.cs:252
+msgid "Pages"
+msgstr "Seiten"
+
+#: ../src/gui.cs:242 ../src/gui.cs:253
+msgid "Dials"
+msgstr "Anwahlversuche"
+
+#: ../src/gui.cs:243 ../src/gui.cs:254
+msgid "Send At"
+msgstr "Senden um"
+
+#: ../src/gui.cs:244 ../src/gui.cs:255
+msgid "Error"
+msgstr "Fehler"
+
+#: ../src/gui.cs:258
+msgid "Sender"
+msgstr "Absender"
+
+#: ../src/gui.cs:260
+msgid "Pages "
+msgstr "Seiten "
+
+#: ../src/gui.cs:261
+msgid "Arrived"
+msgstr "Eingegangen"
+
+#: ../src/gui.cs:262
+msgid "Filename"
+msgstr "Dateiname"
+
+#: ../src/gui.cs:666
+msgid ""
+"Cannot read the facsimile file from the server. You most likely do not \n"
+"have permission to read the file. Check the settings on your fax server."
+msgstr ""
+"Die Faxdatei auf dem Server kann nicht gelesen werden. Sie haben wahrscheinlich\n"
+"nicht die nötigen Zugriffsrechte. Bitte überprüfen Sie die Einstellungen Ihres Faxservers."
+
+#: ../src/gui.cs:673
+msgid ""
+"Cannot start your faxviewer program. \n"
+"Please check your settings. It is currently set to "
+msgstr ""
+"Der Faxbetrachter kann nicht gestartet werden.\n"
+"Bitte überprüfen Sie Ihre Einstellungen. Im Moment ist folgendes eingestellt: "
+
+#: ../src/gui.cs:674
+msgid "."
+msgstr "."
+
+#: ../src/gui.cs:709
+msgid ""
+"Cannot delete the facsimile file from the server. You most likely do not \n"
+"have permission to delete the file. Check the settings on your fax server."
+msgstr ""
+"Die Faxdatei auf dem Server kann nicht gelöscht werden. Sie haben wahrscheinlich\n"
+"nicht die nötigen Zugriffsrechte. Bitte überprüfen Sie die Einstellungen Ihres Faxservers."
+
+#: ../src/gui.cs:715
+msgid ""
+"Cannot delete the file on the Hylafax server. \n"
+"Please check your settings or contact your system Administrator"
+msgstr ""
+"Die Datei auf dem Hylafax-Server kann nicht gelesen werden. \n"
+"Bitte überprüfen Sie die Einstellungen oder benachrichtigen Sie Ihren Systemverwalter."
+
+#: ../src/gui.cs:785
+msgid "Copyright (C) 2003 George Farris <farrisg@shaw.ca>"
+msgstr "Copyright (C) 2003 George Farris <farrisg@shaw.ca>"
+
+#: ../src/gui.cs:786
+msgid "A Facsimile application for GNOME"
+msgstr "Ein Faxprogramm für GNOME"
+
+#: ../src/gui.cs:831
+msgid "Refreshing server status..."
+msgstr "Serverstatus wird aktualisiert..."
+
+#: ../src/gui.cs:868
+msgid "Refreshing queue..."
+msgstr "Warteschlange wird aktualisiert..."
+
+#: ../src/gui.cs:934 ../src/gui.cs:953
+msgid "There are "
+msgstr "Es gibt "
+
+#: ../src/gui.cs:934 ../src/gui.cs:953
+msgid " jobs in the queue"
+msgstr " Aufträge in der Warteschlange"
+
+#: ../src/gui.cs:941 ../src/gui.cs:960
+msgid "There are 0 jobs in the queue"
+msgstr "Es ist kein Auftrag in der Warteschlange."
+
+#: ../src/hylafax.cs:146
+msgid "You can not write data to this stream"
+msgstr "Sie können in diesen Strom keine Daten schreiben."
+
+#: ../src/hylafax.cs:150
+msgid "You can not read data from this stream"
+msgstr "Sie können aus diesem Strom keine Daten lesen."
+
+#: ../src/hylafax.cs:158
+msgid ""
+"Could not connect to your Hylafax server.\n"
+"Check console messages for further information\n"
+"\n"
+"You might need to set a value for username."
+msgstr ""
+"Konnte nicht mit dem Hylafax-Server verbinden.\n"
+"Überprüfen Sie die Konsolenausgabe für weitere Einzelheiten\n"
+"\n"
+"Möglicherweise müssen Sie einen Benutzernamen angeben."
+
+#: ../src/main.cs:109
+msgid "Gfax help..."
+msgstr "Hilfe zu Gfax"
+
+#: ../src/main.cs:135
+msgid ""
+"Gconfd cannot find your settings. \n"
+"If you are running Gfax immediately \n"
+"after an installation, you may have \n"
+"to log out and log back in again."
+msgstr ""
+"Gconfd kann Ihre Einstellungen nicht finden. \n"
+"Falls Die Gfax direkt nach der Installation \n"
+"ausführen, müssen Sie sich möglicherweise\n"
+"ab- und wieder anmelden."
+
+#: ../src/newphonebook.cs:80
+msgid "Use"
+msgstr "Benutzen"
+
+#: ../src/phonebook.cs:295
+#, csharp-format
+msgid "Can't open file : {0}"
+msgstr "Kann Datei {0} nicht öffnen\""
+
+#: ../src/sendphonebook.cs:66
+msgid "You don't have any phone books yet."
+msgstr "Sie haben noch keine Telefonbücher angelegt."
+
+#. Got have a column title or things won't show up
+#: ../src/sendphonebook.cs:94
+msgid "Phone books"
+msgstr "Telefonbücher"
diff --git a/po/en_CA.po b/po/en_CA.po
new file mode 100644
index 0000000..a1e9507
--- /dev/null
+++ b/po/en_CA.po
@@ -0,0 +1,1606 @@
+# English translations for gfax package.
+# Copyright (C) 2005 THE gfax'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the gfax package.
+# George Farris <george@gmsys.com>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gfax 0.7.6\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-11-29 19:29-0800\n"
+"PO-Revision-Date: 2005-02-22 12:04-0800\n"
+"Last-Translator: George Farris <george@gmsys.com>\n"
+"Language-Team: English <en@translate.freefriends.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../gfax.desktop.in.h:1
+#, fuzzy
+msgid "Gfax Facsimile Program"
+msgstr "Gfax Facsimile Sender"
+
+#: ../gfax.desktop.in.h:2
+#, fuzzy
+msgid "Send and Receive Facsimiles"
+msgstr "Received Facsimiles"
+
+#: ../gfax.schemas.in.h:1
+msgid "0:never, 1:until carrier, 2:always, 3:on receive only"
+msgstr "0:never, 1:until carrier, 2:always, 3:on receive only"
+
+#: ../gfax.schemas.in.h:2
+msgid "0:very low, 1:low, 2:medium, 3:high"
+msgstr "0:very low, 1:low, 2:medium, 3:high"
+
+#: ../gfax.schemas.in.h:3
+msgid "Modem Device"
+msgstr "Modem Device"
+
+#: ../gfax.schemas.in.h:4
+msgid "Modem initialization string"
+msgstr "Modem initialization string"
+
+#: ../gfax.schemas.in.h:5
+msgid "Modem reset string"
+msgstr "Modem reset string"
+
+#: ../gfax.schemas.in.h:6
+msgid "Not currently used."
+msgstr "Not currently used."
+
+#: ../gfax.schemas.in.h:7
+msgid "The initialization code that is sent to the modem."
+msgstr "The initialization code that is sent to the modem."
+
+#: ../gfax.schemas.in.h:8
+msgid ""
+"The name of the lock file according to your system's conventions. If you're "
+"running Linux you shouldn't have to touch this."
+msgstr ""
+"The name of the lock file according to your system's conventions. If you're "
+"running Linux you shouldn't have to touch this."
+
+#: ../gfax.schemas.in.h:9
+msgid ""
+"The reset code that resets the modem to a power up state. The -Kz code works "
+"with most modems."
+msgstr ""
+"The reset code that resets the modem to a power up state. The -Kz code works "
+"with most modems."
+
+#: ../gfax.schemas.in.h:10
+msgid ""
+"The serial port the modem is connected too. Typical values are ttyS0, cua0 "
+"or modem."
+msgstr ""
+"The serial port the modem is connected too. Typical values are ttyS0, cua0 "
+"or modem."
+
+#: ../glade/gfax.glade.h:1
+msgid ""
+"\n"
+"Please enter your Hylafax server information here. If you are running "
+"Hylafax on the same computer That you are using Gfax on then \"Host Name\" "
+"should be set to \"localhost\".\n"
+msgstr ""
+"\n"
+"Please enter your Hylafax server information here. If you are running "
+"Hylafax on the same computer That you are using Gfax on then \"Host Name\" "
+"should be set to \"localhost\".\n"
+
+#: ../glade/gfax.glade.h:4
+msgid " Program: "
+msgstr ""
+
+#: ../glade/gfax.glade.h:5
+msgid "4559"
+msgstr "4559"
+
+#: ../glade/gfax.glade.h:6
+msgid "<b><big>E-Mail Notification</big></b>"
+msgstr "<b><big>E-Mail Notification</big></b>"
+
+#: ../glade/gfax.glade.h:7
+msgid "<b><big>Efax Setup</big></b>"
+msgstr "<b><big>Efax Setup</big></b>"
+
+#: ../glade/gfax.glade.h:8
+#, fuzzy
+msgid "<b><big>Facsimile Viewer Program</big></b>"
+msgstr "<b><big>Transmit Properties</big></b>"
+
+#: ../glade/gfax.glade.h:9
+msgid "<b><big>Fax Properties</big></b>"
+msgstr "<b><big>Fax Properties</big></b>"
+
+#: ../glade/gfax.glade.h:10
+msgid "<b><big>Fax Transport Agent</big></b>"
+msgstr "<b><big>Fax Transport Agent</big></b>"
+
+#: ../glade/gfax.glade.h:11
+msgid "<b><big>Hylafax Setup</big></b>"
+msgstr "<b><big>Hylafax Setup</big></b>"
+
+#: ../glade/gfax.glade.h:12
+msgid "<b><big>Phone Information</big></b>"
+msgstr "<b><big>Phone Information</big></b>"
+
+#: ../glade/gfax.glade.h:13
+msgid "<b><big>Transmit Properties</big></b>"
+msgstr "<b><big>Transmit Properties</big></b>"
+
+#: ../glade/gfax.glade.h:14
+#, fuzzy
+msgid "<b>Alter facsimile job parameters</b>"
+msgstr "<b>Facsimile Job Details</b>"
+
+#: ../glade/gfax.glade.h:15
+msgid "<b>Server</b>"
+msgstr "<b>Server</b>"
+
+#: ../glade/gfax.glade.h:16
+msgid ""
+"ATT (Dataport, Paradyne)\n"
+"Motorola (Power Modem, 3400 Pro,...\n"
+"QuickComm (Spirit II)\n"
+"USR (Courier, Sportster)\n"
+"Multi-Tech (for bit reversal)\n"
+"User Defined\n"
+msgstr ""
+
+#: ../glade/gfax.glade.h:23
+msgid "Auto Refresh Queue"
+msgstr "Auto Refresh Queue"
+
+#: ../glade/gfax.glade.h:24
+msgid ""
+"Complete...\n"
+"\n"
+"Your new phone book is ready.\n"
+"If this is a Gfax type phone book you may\n"
+"now add items. \n"
+"\n"
+"Evolution phone books are read only\n"
+"but may be change through Evolution."
+msgstr ""
+
+#: ../glade/gfax.glade.h:32
+msgid "Completed Jobs"
+msgstr "Completed Jobs"
+
+#: ../glade/gfax.glade.h:33
+msgid "Database"
+msgstr "Database"
+
+#: ../glade/gfax.glade.h:34 ../glade/send-druid.glade.h:11
+msgid "Delete"
+msgstr "Delete"
+
+#: ../glade/gfax.glade.h:35
+msgid "Dial Prefix:"
+msgstr "Dial Prefix:"
+
+#: ../glade/gfax.glade.h:36
+msgid "E-Mail Address:"
+msgstr "E-Mail Address:"
+
+#: ../glade/gfax.glade.h:37
+msgid "E-Mail Notification"
+msgstr "E-Mail Notification"
+
+#: ../glade/gfax.glade.h:38
+msgid "Efax"
+msgstr "Efax"
+
+#: ../glade/gfax.glade.h:39
+msgid "Evolution"
+msgstr "Evolution"
+
+#: ../glade/gfax.glade.h:40
+msgid "Evolution Address books"
+msgstr ""
+
+#: ../glade/gfax.glade.h:41
+msgid "Exit"
+msgstr "Exit"
+
+#: ../glade/gfax.glade.h:42
+msgid "Facsimile Number:"
+msgstr "Facsimile Number:"
+
+#: ../glade/gfax.glade.h:43
+msgid "Facsimiles to Send"
+msgstr "Facsimiles to Send"
+
+#: ../glade/gfax.glade.h:44
+#, fuzzy
+msgid "Fax Number:"
+msgstr "Fax number:"
+
+#: ../glade/gfax.glade.h:45
+msgid "Fax Status:"
+msgstr "Fax Status:"
+
+#: ../glade/gfax.glade.h:46
+msgid "Fax log enabled"
+msgstr "Fax log enabled"
+
+#: ../glade/gfax.glade.h:47
+#, fuzzy
+msgid ""
+"First we must choose a transport agent. \n"
+"\n"
+"A transport agent is a software package that is responsible for\n"
+"actually sending the facsimile with your modem. If you don't have \n"
+"one of these installed you should hit cancel here and install\n"
+"a transport agent first.\n"
+"\n"
+"Transport agents can be found at the following URL's but you should \n"
+"check your distribution CD first..\n"
+"\n"
+"Hylafax - http://www.hylafax.org\n"
+"Efax - http://www.cce.com/efax"
+msgstr ""
+"First we must choose a transport agent. \n"
+"\n"
+"A transport agent is a software package that is responsible for\n"
+"actually sending the facsimile with your modem. If you don't have \n"
+"one of these installed you should hit cancel here and install\n"
+"a transport agent first.\n"
+"\n"
+"Transport agents can be found at the following URL's but you should \n"
+"check your distribution CD first..\n"
+"\n"
+"Hylafax - http://www.hylafax.org\n"
+"Mgetty - http://alpha.greenie.net/mgetty\n"
+"Efax - http://www.cce.com/efax"
+
+#: ../glade/gfax.glade.h:59
+msgid "Gfax"
+msgstr "Gfax"
+
+#: ../glade/gfax.glade.h:60
+msgid "Gfax - E-Mail Address"
+msgstr "Gfax - E-Mail Address"
+
+#: ../glade/gfax.glade.h:61
+msgid "Gfax - Facsimile Transport Agent"
+msgstr "Gfax - Facsimile Transport Agent"
+
+#: ../glade/gfax.glade.h:62
+msgid "Gfax - Gnome facsimile program"
+msgstr "Gfax - Gnome facsimile program"
+
+#: ../glade/gfax.glade.h:63
+msgid "Gfax - Modem Selection"
+msgstr "Gfax - Modem Selection"
+
+#: ../glade/gfax.glade.h:64
+msgid "Gfax - Phone Number Information"
+msgstr "Gfax - Phone Number Information"
+
+#: ../glade/gfax.glade.h:65
+msgid "Gfax - Setup Complete"
+msgstr "Gfax - Setup Complete"
+
+#: ../glade/gfax.glade.h:66
+msgid "Gfax - Add new phone book."
+msgstr "Gfax - Add new phone book."
+
+#: ../glade/gfax.glade.h:67
+msgid "Gfax - Modify Job"
+msgstr ""
+
+#: ../glade/gfax.glade.h:68
+msgid "Gfax - New user setup"
+msgstr "Gfax - New user setup"
+
+#: ../glade/gfax.glade.h:69
+msgid "Gfax - Preferences"
+msgstr "Gfax - Preferences"
+
+#: ../glade/gfax.glade.h:70
+msgid "Gfax - Transmission Progress"
+msgstr "Gfax - Transmission Progress"
+
+#: ../glade/gfax.glade.h:71
+#, fuzzy
+msgid ""
+"Gfax can inform the Efax transport agent which\n"
+"serial port your modem is connected to."
+msgstr ""
+"Gfax can inform the Mgetty and Efax transport agents which\n"
+"serial port your modem is connected to."
+
+#: ../glade/gfax.glade.h:73
+msgid ""
+"Gfax setup is now complete!\n"
+"\n"
+"Gfax is configurable; there are other configuration \n"
+"options available under the preferences menu.\n"
+"\n"
+"You can run this first time setup at any time from\n"
+"the preferences section.\n"
+"\n"
+"Default preferences have been choosen for the\n"
+"transport agent you chose, you may want to\n"
+"customise them."
+msgstr ""
+"Gfax setup is now complete!\n"
+"\n"
+"Gfax is configurable; there are other configuration \n"
+"options available under the preferences menu.\n"
+"\n"
+"You can run this first time setup at any time from\n"
+"the preferences section.\n"
+"\n"
+"Default preferences have been choosen for the\n"
+"transport agent you chose, you may want to\n"
+"customise them."
+
+#: ../glade/gfax.glade.h:84
+msgid "Hi Resolution Mode"
+msgstr "Hi Resolution Mode"
+
+#: ../glade/gfax.glade.h:85
+msgid "Host Name:"
+msgstr "Host Name:"
+
+#: ../glade/gfax.glade.h:86
+msgid "Hostname:"
+msgstr "Hostname:"
+
+#: ../glade/gfax.glade.h:87
+msgid "Hylafax"
+msgstr "Hylafax"
+
+#: ../glade/gfax.glade.h:88
+msgid "Hylafax - Choose this for network faxing."
+msgstr "Hylafax - Choose this for network faxing."
+
+#: ../glade/gfax.glade.h:89
+msgid ""
+"Hylafax and Mgetty+Sendfax can both be requested to send \n"
+"results of facsimile transmission to an email address.\n"
+"\n"
+"If you require this feature please enter your email address\n"
+"here. It's a good idea to include this even if you don't \n"
+"use it immediately, you can enable and disable it in the\n"
+"preferences section of Gfax.\n"
+" "
+msgstr ""
+"Hylafax and Mgetty+Sendfax can both be requested to send \n"
+"results of facsimile transmission to an email address.\n"
+"\n"
+"If you require this feature please enter your email address\n"
+"here. It's a good idea to include this even if you don't \n"
+"use it immediately, you can enable and disable it in the\n"
+"preferences section of Gfax.\n"
+" "
+
+#: ../glade/gfax.glade.h:97
+msgid "IP Port:"
+msgstr "IP Port:"
+
+#: ../glade/gfax.glade.h:98
+msgid "LDAP"
+msgstr "LDAP"
+
+#: ../glade/gfax.glade.h:99
+msgid "Log Enabled"
+msgstr "Log Enabled"
+
+#: ../glade/gfax.glade.h:100
+msgid ""
+"Make no more than <maxdials> calls in attempting to send the facsimile. "
+"Once <maxdials> has been reached, the job will be killed."
+msgstr ""
+
+#: ../glade/gfax.glade.h:101
+msgid "Maximum Dials:"
+msgstr ""
+
+#: ../glade/gfax.glade.h:102
+msgid "Mgetty"
+msgstr "Mgetty"
+
+#: ../glade/gfax.glade.h:103
+msgid "Modem Connection"
+msgstr "Modem Connection"
+
+#: ../glade/gfax.glade.h:104
+msgid "Modem Port:"
+msgstr "Modem Port:"
+
+#: ../glade/gfax.glade.h:105
+msgid "Modem Type:"
+msgstr "Modem Type:"
+
+#: ../glade/gfax.glade.h:106
+msgid "New Fax"
+msgstr "New Fax"
+
+#: ../glade/gfax.glade.h:107 ../glade/send-druid.glade.h:23
+msgid "New phone book"
+msgstr "New phone book"
+
+#: ../glade/gfax.glade.h:108
+msgid "Open phone book"
+msgstr "Open phone book"
+
+#: ../glade/gfax.glade.h:109
+msgid "Page Size:"
+msgstr "Page Size:"
+
+#: ../glade/gfax.glade.h:110
+msgid "Password Dialog"
+msgstr "Password Dialog"
+
+#: ../glade/gfax.glade.h:111 ../glade/send-druid.glade.h:26
+#: ../src/newphonebook.cs:81
+msgid "Phone Book"
+msgstr "Phone Book"
+
+#: ../glade/gfax.glade.h:112
+msgid "Please enter a name for your new phone book."
+msgstr "Please enter a name for your new phone book."
+
+#: ../glade/gfax.glade.h:113
+msgid ""
+"Please enter the password \n"
+"for your fax server."
+msgstr ""
+"Please enter the password \n"
+"for your fax server."
+
+#: ../glade/gfax.glade.h:115
+msgid ""
+"Please enter the type of phone book you are creating."
+msgstr ""
+"Please enter the type of phone book you are creating."
+
+#: ../glade/gfax.glade.h:121
+msgid ""
+"Please enter your facsimile number.\n"
+"\n"
+"This number is placed in the top one line header that is placed \n"
+"on all outgoing facsimiles.\n"
+"\n"
+"You may also choose a default dial prefix. Many companies in\n"
+"North America use the number \"9\" to reach an outside line.\n"
+msgstr ""
+"Please enter your facsimile number.\n"
+"\n"
+"This number is placed in the top one line header that is placed \n"
+"on all outgoing facsimiles.\n"
+"\n"
+"You may also choose a default dial prefix. Many companies in\n"
+"North America use the number \"9\" to reach an outside line.\n"
+
+#: ../glade/gfax.glade.h:129
+msgid ""
+"Please select the Evolution address books that you would \n"
+"like to use.\n"
+"\n"
+"These are only local address books and will only include\n"
+"contacts with facsimile numbers."
+msgstr ""
+
+#: ../glade/gfax.glade.h:134
+msgid "Port Number:"
+msgstr "Port Number:"
+
+#: ../glade/gfax.glade.h:135
+msgid "Received Facsimiles"
+msgstr "Received Facsimiles"
+
+#: ../glade/gfax.glade.h:136
+msgid "Remember this password"
+msgstr "Remember this password"
+
+#: ../glade/gfax.glade.h:137
+msgid "Send Email Notification"
+msgstr "Send Email Notification"
+
+#: ../glade/gfax.glade.h:138
+msgid "Send Immediately"
+msgstr "Send Immediately"
+
+#: ../glade/gfax.glade.h:139
+msgid "Speaker Volume:"
+msgstr "Speaker Volume:"
+
+#: ../glade/gfax.glade.h:140
+msgid "System"
+msgstr "System"
+
+#: ../glade/gfax.glade.h:141
+msgid ""
+"The TCP/IP port number of the fax server. Default hylafax port is 4559."
+msgstr ""
+"The TCP/IP port number of the fax server. Default hylafax port is 4559."
+
+#: ../glade/gfax.glade.h:142
+msgid ""
+"The host name of the network fax server. Enter \"localhost\" if you are not "
+"using a network fax server."
+msgstr ""
+"The host name of the network fax server. Enter \"localhost\" if you are not "
+"using a network fax server."
+
+#: ../glade/gfax.glade.h:143
+msgid "The serial port the modem is on - ttyS0 is COM1, ttyS1 is COM2 etc."
+msgstr "The serial port the modem is on - ttyS0 is COM1, ttyS1 is COM2 etc."
+
+#: ../glade/gfax.glade.h:144
+msgid ""
+"There was an error transmitting\n"
+"your facsimile to the server!"
+msgstr ""
+"There was an error transmitting\n"
+"your facsimile to the server!"
+
+#: ../glade/gfax.glade.h:146
+msgid ""
+"This will lead you through the process \n"
+"of creating a new phone book."
+msgstr ""
+"This will lead you through the process \n"
+"of creating a new phone book."
+
+#: ../glade/gfax.glade.h:148
+#, fuzzy
+msgid "Time to send:"
+msgstr "Facsimiles to Send"
+
+#: ../glade/gfax.glade.h:149
+msgid ""
+"Transmitting facsimile to \n"
+"Hylafax server."
+msgstr ""
+"Transmitting facsimile to \n"
+"Hylafax server."
+
+#: ../glade/gfax.glade.h:151
+msgid "Transport Agent"
+msgstr "Transport Agent"
+
+#: ../glade/gfax.glade.h:152
+msgid "Use Cover Page"
+msgstr "Use Cover Page"
+
+#: ../glade/gfax.glade.h:153
+msgid "Use Fine Resolution"
+msgstr "Use Fine Resolution"
+
+#: ../glade/gfax.glade.h:154
+msgid "User"
+msgstr "User"
+
+#: ../glade/gfax.glade.h:155
+msgid "Username:"
+msgstr "Username:"
+
+#: ../glade/gfax.glade.h:156
+msgid ""
+"Very Low\n"
+"Low\n"
+"Medium\n"
+"High"
+msgstr ""
+
+#: ../glade/gfax.glade.h:160
+msgid "View / Print"
+msgstr ""
+
+#: ../glade/gfax.glade.h:161
+msgid ""
+"Welcome to Gfax!\n"
+"\n"
+"\n"
+"Gfax is a GNOME facsimile program that provides \n"
+"the familiar \"popup\" window when printing to a fax \n"
+"printer.\n"
+"\n"
+"The following pages will help you to setup Gfax."
+msgstr ""
+"Welcome to Gfax!\n"
+"\n"
+"\n"
+"Gfax is a GNOME facsimile program that provides \n"
+"the familiar \"popup\" window when printing to a fax \n"
+"printer.\n"
+"\n"
+"The following pages will help you to setup Gfax."
+
+#: ../glade/gfax.glade.h:169
+msgid "Which serial port is your modem connected to?"
+msgstr "Which serial port is your modem connected to?"
+
+#: ../glade/gfax.glade.h:170
+msgid ""
+"Your facsimile was sucessfully\n"
+" transmitted!"
+msgstr ""
+"Your facsimile was sucessfully\n"
+" transmitted!"
+
+#: ../glade/gfax.glade.h:172
+msgid "_Cancel Job"
+msgstr "_Cancel Job"
+
+#: ../glade/gfax.glade.h:173
+msgid "_Fax"
+msgstr "_Fax"
+
+#: ../glade/gfax.glade.h:174
+msgid "_Help"
+msgstr "_Help"
+
+#: ../glade/gfax.glade.h:175
+msgid "_Modify Job"
+msgstr ""
+
+#: ../glade/gfax.glade.h:176
+msgid "_Settings"
+msgstr "_Settings"
+
+#: ../glade/gfax.glade.h:177
+msgid "cua1"
+msgstr "cua1"
+
+#: ../glade/gfax.glade.h:178
+msgid "cua2"
+msgstr "cua2"
+
+#: ../glade/gfax.glade.h:179
+msgid ""
+"letter\n"
+"legal\n"
+"a4"
+msgstr ""
+
+#: ../glade/gfax.glade.h:182
+msgid "localhost"
+msgstr "localhost"
+
+#: ../glade/gfax.glade.h:183
+msgid "modem"
+msgstr "modem"
+
+#: ../glade/gfax.glade.h:184
+msgid "oklabel"
+msgstr "oklabel"
+
+#: ../glade/gfax.glade.h:185
+msgid "ttyS0"
+msgstr "ttyS0"
+
+#: ../glade/gfax.glade.h:186
+msgid "ttyS1"
+msgstr "ttyS1"
+
+#: ../glade/gfax.glade.h:187
+msgid "ttyS2"
+msgstr "ttyS2"
+
+#: ../glade/gfax.glade.h:188
+msgid "ttyS3"
+msgstr "ttyS3"
+
+#: ../glade/send-druid.glade.h:1
+msgid "<b><big>Current Phone Books</big></b>"
+msgstr "<b><big>Current Phone Books</big></b>"
+
+#: ../glade/send-druid.glade.h:2
+msgid "<b><big>Edit Phone book</big></b>"
+msgstr "<b><big>Edit Phone book</big></b>"
+
+#: ../glade/send-druid.glade.h:3
+msgid "<b>Facsimile Job Details</b>"
+msgstr "<b>Facsimile Job Details</b>"
+
+#: ../glade/send-druid.glade.h:4
+msgid "<b>New fax information</b>"
+msgstr "<b>New fax information</b>"
+
+#: ../glade/send-druid.glade.h:5
+msgid "Add"
+msgstr "Add"
+
+#: ../glade/send-druid.glade.h:6
+msgid "Browse"
+msgstr ""
+
+#: ../glade/send-druid.glade.h:7
+msgid "Clear"
+msgstr "Clear"
+
+#: ../glade/send-druid.glade.h:8
+msgid "Close"
+msgstr "Close"
+
+#: ../glade/send-druid.glade.h:9 ../src/gfaxphonebook.cs:89
+#: ../src/gfaxsend.cs:142 ../src/sendphonebook.cs:105
+msgid "Contact"
+msgstr "Contact"
+
+#: ../glade/send-druid.glade.h:10
+msgid "Current Phone Book"
+msgstr "Current Phone Book"
+
+#: ../glade/send-druid.glade.h:12
+#, fuzzy
+msgid "Delete phone book"
+msgstr "New phone book"
+
+#: ../glade/send-druid.glade.h:13
+msgid "Details"
+msgstr "Details"
+
+#: ../glade/send-druid.glade.h:14
+msgid "E-Mail job results to:"
+msgstr "E-Mail job results to:"
+
+#: ../glade/send-druid.glade.h:15
+msgid "Enter a phone number and hit <enter>."
+msgstr "Enter a phone number and hit <enter>."
+
+#: ../glade/send-druid.glade.h:16
+msgid "Fax number:"
+msgstr "Fax number:"
+
+#: ../glade/send-druid.glade.h:17
+msgid "Fine resolution"
+msgstr "Fine resolution"
+
+#: ../glade/send-druid.glade.h:18
+msgid "Gfax - Phone Book Selection"
+msgstr "Gfax - Phone Book Selection"
+
+#: ../glade/send-druid.glade.h:19
+msgid "Gfax - Phone books"
+msgstr "Gfax - Phone books"
+
+#: ../glade/send-druid.glade.h:20
+msgid "Job"
+msgstr "Job"
+
+#: ../glade/send-druid.glade.h:21
+msgid "New Entry"
+msgstr "New Entry"
+
+#: ../glade/send-druid.glade.h:22
+msgid "New Item"
+msgstr "New Item"
+
+#: ../glade/send-druid.glade.h:24 ../src/gui.cs:238 ../src/gui.cs:249
+msgid "Number"
+msgstr "Number"
+
+#: ../glade/send-druid.glade.h:25 ../src/gfaxphonebook.cs:87
+#: ../src/gfaxsend.cs:141 ../src/sendphonebook.cs:103
+msgid "Organization"
+msgstr "Organization"
+
+#: ../glade/send-druid.glade.h:27
+msgid "Phone Book Item List"
+msgstr "Phone Book Item List"
+
+#: ../glade/send-druid.glade.h:28
+msgid "Phone Books"
+msgstr "Phone Books"
+
+#: ../glade/send-druid.glade.h:29
+msgid "Postscript file:"
+msgstr "Postscript file:"
+
+#: ../glade/send-druid.glade.h:30
+msgid "Save and Close"
+msgstr "Save and Close"
+
+#: ../glade/send-druid.glade.h:31
+#, fuzzy
+msgid "Save and close"
+msgstr "Save and Close"
+
+#: ../glade/send-druid.glade.h:32 ../src/gfaxsend.cs:139
+msgid "Send"
+msgstr "Send"
+
+#: ../glade/send-druid.glade.h:33
+msgid "Send Fax"
+msgstr "Send Fax"
+
+#: ../glade/send-druid.glade.h:34
+msgid "Send immediately"
+msgstr "Send immediately"
+
+#: ../glade/send-druid.glade.h:35
+msgid "Transmit the fax"
+msgstr "Transmit the fax"
+
+#: ../glade/send-druid.glade.h:36
+msgid "Update"
+msgstr "Update"
+
+#: ../glade/send-druid.glade.h:37
+msgid "_File"
+msgstr "_File"
+
+#: ../src/efax.cs:384
+msgid "Scanning control files."
+msgstr "Scanning control files."
+
+#: ../src/efax.cs:397
+msgid "Running job "
+msgstr ""
+
+#: ../src/efax.cs:421 ../src/efax.cs:508
+msgid "Busy retries exceeded"
+msgstr "Busy retries exceeded"
+
+#: ../src/efax.cs:468
+#, fuzzy
+msgid "Sending facsimile..."
+msgstr "Send Facsimiles"
+
+#. If successful then mv the control file to the done queue and flag
+#. a date for it's removal.
+#: ../src/efax.cs:492
+msgid "Success"
+msgstr "Success"
+
+#. fatal errors - no retry
+#. fatalError = true;
+#. change code in file
+#: ../src/efax.cs:516
+msgid "Fatal error"
+msgstr "Fatal error"
+
+#. Modem error - no retry
+#. fatalError = true;
+#: ../src/efax.cs:522
+msgid "Fatal modem error"
+msgstr "Fatal modem error"
+
+#. Modem not responding
+#. fatalError = true;
+#: ../src/efax.cs:528
+msgid "Modem not responding"
+msgstr "Modem not responding"
+
+#. Program terminated
+#. fatalError = true;
+#: ../src/efax.cs:534
+msgid "Program terminated"
+msgstr "Program terminated"
+
+#: ../src/fax.cs:60
+msgid "No Connection"
+msgstr "No Connection"
+
+#: ../src/fax.cs:71
+#, fuzzy
+msgid ""
+"Efax transmit process running...\n"
+"Scanning job files every 30 seconds."
+msgstr ""
+"Efax transmit process running...\n"
+"Scanning job files every 60 seconds."
+
+#: ../src/fax.cs:77
+msgid "Error transport agent not specified!"
+msgstr "Error transport agent not specified!"
+
+#: ../src/fax.cs:132
+msgid "Run"
+msgstr "Run"
+
+#: ../src/fax.cs:135
+msgid "Sleep"
+msgstr "Sleep"
+
+#: ../src/fax.cs:138
+msgid "Block"
+msgstr "Block"
+
+#: ../src/fax.cs:141
+msgid "Busy"
+msgstr "Busy"
+
+#: ../src/fax.cs:144 ../src/fax.cs:244
+msgid "Done"
+msgstr "Done"
+
+#: ../src/fax.cs:147
+msgid "Fail"
+msgstr "Fail"
+
+#: ../src/fax.cs:150
+msgid "New"
+msgstr "New"
+
+#: ../src/fax.cs:241
+msgid "Receiving"
+msgstr "Receiving"
+
+#: ../src/gfaxphonebook.cs:88 ../src/gfaxsend.cs:140
+#: ../src/sendphonebook.cs:104
+msgid "Phone Number"
+msgstr "Phone Number"
+
+#: ../src/gfaxphonebook.cs:213
+msgid "Are you sure you want to delete the phone book?"
+msgstr "Are you sure you want to delete the phone book?"
+
+#: ../src/gfaxphonebook.cs:297
+msgid ""
+"You have unsaved phone book entries.\n"
+" Are you sure you want to Quit?"
+msgstr ""
+"You have unsaved phone book entries.\n"
+" Are you sure you want to Quit?"
+
+#: ../src/gfaxphonebook.cs:460
+msgid "Press the <DELETE> key to delete an entry."
+msgstr "Press the <DELETE> key to delete an entry."
+
+#: ../src/gfaxprefs.cs:190 ../src/gfaxprefs.cs:208
+msgid "You need to exit Gfax and restart it when you change transport agents"
+msgstr "You need to exit Gfax and restart it when you change transport agents"
+
+#: ../src/gfaxsend.cs:88
+#, fuzzy
+msgid ""
+"\n"
+"This is the first time you have run Gfax.\n"
+"Please run Gfax from the menu or command line and set your \n"
+"MODEM TYPE, PORT and Fax number under preferences.\n"
+"\n"
+"Gfax is initially setup to use Efax, you may change it use \n"
+"Hylafax if you prefer or require connection to a network \n"
+"facsimile server."
+msgstr ""
+"\n"
+"This is the first time you have run Gfax.\n"
+"Please run Gfax from the menu or command line and set your \n"
+"MODEM TYPE and PORT under preferences.\n"
+"\n"
+"Gfax is initially setup to use Efax, you may change it use \n"
+"Hylafax if you prefer or require connection to a network \n"
+"facsimile server."
+
+#: ../src/gfaxsend.cs:164
+msgid "Spooled from print job"
+msgstr "Spooled from print job"
+
+#: ../src/gfaxsend.cs:276
+msgid ""
+"\n"
+"The file you have entered does not exist.\n"
+"Please check the name and try again."
+msgstr ""
+
+#: ../src/gfaxsend.cs:310
+msgid ""
+"\n"
+"You have not entered a facsimile number!\n"
+"Please enter a number and press the <i><b>Enter</b></i> key or\n"
+"click the <i><b>Phone Book</b></i> button to select numbers or\n"
+"entire phone books."
+msgstr ""
+
+#: ../src/gui.cs:143
+msgid ""
+"\n"
+"This is the first time you have run Gfax.\n"
+"You should set your MODEM TYPE and PORT under preferences.\n"
+"\n"
+"Gfax is initially setup to use Efax, you may change it use \n"
+"Hylafax if you prefer or require connection to a network \n"
+"facsimile server."
+msgstr ""
+"\n"
+"This is the first time you have run Gfax.\n"
+"You should set your MODEM TYPE and PORT under preferences.\n"
+"\n"
+"Gfax is initially setup to use Efax, you may change it use \n"
+"Hylafax if you prefer or require connection to a network \n"
+"facsimile server."
+
+#: ../src/gui.cs:157
+msgid ""
+"Your spool directory is missing!\n"
+"\t\t\t\t\t\n"
+"Please login as the root user and create the "
+msgstr ""
+"Your spool directory is missing!\n"
+"\t\t\t\t\t\n"
+"Please login as the root user and create the "
+
+#: ../src/gui.cs:161
+msgid ""
+" directory.\n"
+"\n"
+"All users should be able to write to it.\n"
+msgstr ""
+" directory.\n"
+"\n"
+"All users should be able to write to it.\n"
+
+#: ../src/gui.cs:166
+msgid ""
+"The doneq directory is missing in your spool directory!\n"
+"\t\t\t\t\t\n"
+"Please login as the root user and create the "
+msgstr ""
+"The doneq directory is missing in your spool directory!\n"
+"\t\t\t\t\t\n"
+"Please login as the root user and create the "
+
+#: ../src/gui.cs:169
+msgid ""
+"/doneq directory.\n"
+"\n"
+"All users should be able to write to it.\n"
+msgstr ""
+"/doneq directory.\n"
+"\n"
+"All users should be able to write to it.\n"
+
+#: ../src/gui.cs:175
+msgid ""
+"The recq directory is missing in your spool directory!\n"
+"\t\t\t\t\t\n"
+"Please login as the root user and create the "
+msgstr ""
+"The recq directory is missing in your spool directory!\n"
+"\t\t\t\t\t\n"
+"Please login as the root user and create the "
+
+#: ../src/gui.cs:178
+msgid ""
+"/recq directory.\n"
+"\n"
+"All users should be able to write to it.\n"
+msgstr ""
+"/recq directory.\n"
+"\n"
+"All users should be able to write to it.\n"
+
+#: ../src/gui.cs:237 ../src/gui.cs:248
+msgid "Jobid"
+msgstr "Jobid"
+
+#: ../src/gui.cs:239 ../src/gui.cs:250 ../src/gui.cs:259
+msgid "Status"
+msgstr "Status"
+
+#: ../src/gui.cs:240 ../src/gui.cs:251
+msgid "Owner"
+msgstr "Owner"
+
+#: ../src/gui.cs:241 ../src/gui.cs:252
+msgid "Pages"
+msgstr "Pages"
+
+#: ../src/gui.cs:242 ../src/gui.cs:253
+msgid "Dials"
+msgstr "Dials"
+
+#: ../src/gui.cs:243 ../src/gui.cs:254
+msgid "Send At"
+msgstr "Send At"
+
+#: ../src/gui.cs:244 ../src/gui.cs:255
+msgid "Error"
+msgstr "Error"
+
+#: ../src/gui.cs:258
+msgid "Sender"
+msgstr "Sender"
+
+#: ../src/gui.cs:260
+msgid "Pages "
+msgstr "Pages "
+
+#: ../src/gui.cs:261
+msgid "Arrived"
+msgstr "Arrived"
+
+#: ../src/gui.cs:262
+msgid "Filename"
+msgstr "Filename"
+
+#: ../src/gui.cs:666
+msgid ""
+"Cannot read the facsimile file from the server. You most likely do not \n"
+"have permission to read the file. Check the settings on your fax server."
+msgstr ""
+
+#: ../src/gui.cs:673
+msgid ""
+"Cannot start your faxviewer program. \n"
+"Please check your settings. It is currently set to "
+msgstr ""
+
+#: ../src/gui.cs:674
+msgid "."
+msgstr ""
+
+#: ../src/gui.cs:709
+msgid ""
+"Cannot delete the facsimile file from the server. You most likely do not \n"
+"have permission to delete the file. Check the settings on your fax server."
+msgstr ""
+
+#: ../src/gui.cs:715
+msgid ""
+"Cannot delete the file on the Hylafax server. \n"
+"Please check your settings or contact your system Administrator"
+msgstr ""
+
+#: ../src/gui.cs:785
+#, fuzzy
+msgid "Copyright (C) 2003 George Farris <farrisg@shaw.ca>"
+msgstr "Copyright (C) 2003 George Farris <george@gmsys.com>"
+
+#: ../src/gui.cs:786
+msgid "A Facsimile application for GNOME"
+msgstr "A Facsimile application for GNOME"
+
+#: ../src/gui.cs:831
+#, fuzzy
+msgid "Refreshing server status..."
+msgstr "Refreshing queue..."
+
+#: ../src/gui.cs:868
+msgid "Refreshing queue..."
+msgstr "Refreshing queue..."
+
+#: ../src/gui.cs:934 ../src/gui.cs:953
+msgid "There are "
+msgstr "There are "
+
+#: ../src/gui.cs:934 ../src/gui.cs:953
+msgid " jobs in the queue"
+msgstr " jobs in the queue"
+
+#: ../src/gui.cs:941 ../src/gui.cs:960
+msgid "There are 0 jobs in the queue"
+msgstr "There are 0 jobs in the queue"
+
+#: ../src/hylafax.cs:146
+msgid "You can not write data to this stream"
+msgstr "You can not write data to this stream"
+
+#: ../src/hylafax.cs:150
+msgid "You can not read data from this stream"
+msgstr "You can not read data from this stream"
+
+#: ../src/hylafax.cs:158
+msgid ""
+"Could not connect to your Hylafax server.\n"
+"Check console messages for further information\n"
+"\n"
+"You might need to set a value for username."
+msgstr ""
+"Could not connect to your Hylafax server.\n"
+"Check console messages for further information\n"
+"\n"
+"You might need to set a value for username."
+
+#: ../src/main.cs:109
+msgid "Gfax help..."
+msgstr "Gfax help..."
+
+#: ../src/main.cs:135
+msgid ""
+"Gconfd cannot find your settings. \n"
+"If you are running Gfax immediately \n"
+"after an installation, you may have \n"
+"to log out and log back in again."
+msgstr ""
+"Gconfd cannot find your settings. \n"
+"If you are running Gfax immediately \n"
+"after an installation, you may have \n"
+"to log out and log back in again."
+
+#: ../src/newphonebook.cs:80
+#, fuzzy
+msgid "Use"
+msgstr "User"
+
+#: ../src/phonebook.cs:295
+#, csharp-format
+msgid "Can't open file : {0}"
+msgstr "Can't open file : {0}"
+
+#: ../src/sendphonebook.cs:66
+msgid "You don't have any phone books yet."
+msgstr "You don't have any phone books yet."
+
+#. Got have a column title or things won't show up
+#: ../src/sendphonebook.cs:94
+#, fuzzy
+msgid "Phone books"
+msgstr "Phone Books"
+
+#~ msgid "0"
+#~ msgstr "0"
+
+#~ msgid "1"
+#~ msgstr "1"
+
+#~ msgid "10 Minutes"
+#~ msgstr "10 Minutes"
+
+#~ msgid "1000"
+#~ msgstr "1000"
+
+#~ msgid "115200"
+#~ msgstr "115200"
+
+#~ msgid "15 Minutes"
+#~ msgstr "15 Minutes"
+
+#~ msgid "1500"
+#~ msgstr "1500"
+
+#~ msgid "19200"
+#~ msgstr "19200"
+
+#~ msgid "2"
+#~ msgstr "2"
+
+#~ msgid "2000"
+#~ msgstr "2000"
+
+#~ msgid "2400"
+#~ msgstr "2400"
+
+#~ msgid "3"
+#~ msgstr "3"
+
+#~ msgid "30 Minutes"
+#~ msgstr "30 Minutes"
+
+#~ msgid "38400"
+#~ msgstr "38400"
+
+#~ msgid "4"
+#~ msgstr "4"
+
+#~ msgid "4800"
+#~ msgstr "4800"
+
+#~ msgid "5"
+#~ msgstr "5"
+
+#~ msgid "5 Minutes"
+#~ msgstr "5 Minutes"
+
+#~ msgid "500"
+#~ msgstr "500"
+
+#~ msgid "57600"
+#~ msgstr "57600"
+
+#~ msgid "6"
+#~ msgstr "6"
+
+#~ msgid "7"
+#~ msgstr "7"
+
+#~ msgid "8"
+#~ msgstr "8"
+
+#~ msgid "9"
+#~ msgstr "9"
+
+#~ msgid "9600"
+#~ msgstr "9600"
+
+#~ msgid ""
+#~ "A few modems respond to raising the DTR line (when opening the device) "
+#~ "with `OK'. This can confuse `sendfax', because it will see this OK as "
+#~ "response to the next command. Default is 0."
+#~ msgstr ""
+#~ "A few modems respond to raising the DTR line (when opening the device) "
+#~ "with `OK'. This can confuse `sendfax', because it will see this OK as "
+#~ "response to the next command. Default is 0."
+
+#~ msgid "ATT (Dataport, Paradyne)"
+#~ msgstr "ATT (Dataport, Paradyne)"
+
+#~ msgid ""
+#~ "After the maximum number of tries for one page are reached, `sendfax' can "
+#~ "report an error and abort or continue. Default is Yes."
+#~ msgstr ""
+#~ "After the maximum number of tries for one page are reached, `sendfax' can "
+#~ "report an error and abort or continue. Default is Yes."
+
+#~ msgid ""
+#~ "An 'AT...' command that will be sent to the modem at the end of the modem "
+#~ "initialization, right before dialing."
+#~ msgstr ""
+#~ "An 'AT...' command that will be sent to the modem at the end of the modem "
+#~ "initialization, right before dialing."
+
+#~ msgid "Baud Rate Switch"
+#~ msgstr "Baud Rate Switch"
+
+#~ msgid ""
+#~ "Controls the amount of information written into the fax log file. "
+#~ "Default is 3."
+#~ msgstr ""
+#~ "Controls the amount of information written into the fax log file. "
+#~ "Default is 3."
+
+#~ msgid "Debug Level"
+#~ msgstr "Debug Level"
+
+#~ msgid "Dial Command"
+#~ msgstr "Dial Command"
+
+#~ msgid "Disabled"
+#~ msgstr "Disabled"
+
+#~ msgid "Fax Users Allowed"
+#~ msgstr "Fax Users Allowed"
+
+#~ msgid "Fax Users Denied"
+#~ msgstr "Fax Users Denied"
+
+#~ msgid "High"
+#~ msgstr "High"
+
+#~ msgid "Hour"
+#~ msgstr "Hour"
+
+#~ msgid ""
+#~ "How often you want the fax queue scanned. Faxes won't be transmitted "
+#~ "until \"faxrunq\" is run to scan the queue. This value is set in /etc/"
+#~ "crontab."
+#~ msgstr ""
+#~ "How often you want the fax queue scanned. Faxes won't be transmitted "
+#~ "until \"faxrunq\" is run to scan the queue. This value is set in /etc/"
+#~ "crontab."
+
+#~ msgid "Ignore Carrier"
+#~ msgstr "Ignore Carrier"
+
+#~ msgid "Low"
+#~ msgstr "Low"
+
+#~ msgid "Maximum Tries Continue"
+#~ msgstr "Maximum Tries Continue"
+
+#~ msgid "Maximum Tries per Page"
+#~ msgstr "Maximum Tries per Page"
+
+#~ msgid "Medium"
+#~ msgstr "Medium"
+
+#~ msgid "Mgetty+Sendfax"
+#~ msgstr "Mgetty+Sendfax"
+
+#~ msgid "Mgetty+Sendfax Setup"
+#~ msgstr "Mgetty+Sendfax Setup"
+
+#~ msgid "Minute"
+#~ msgstr "Minute"
+
+#~ msgid "Modem Handshake"
+#~ msgstr "Modem Handshake"
+
+#~ msgid "Modem Initialization String"
+#~ msgstr "Modem Initialization String"
+
+#~ msgid "Modem Port"
+#~ msgstr "Modem Port"
+
+#~ msgid "Modem Quirks"
+#~ msgstr "Modem Quirks"
+
+#~ msgid "Modem Speed (bps)"
+#~ msgstr "Modem Speed (bps)"
+
+#~ msgid "Modem Type"
+#~ msgstr "Modem Type"
+
+#~ msgid "Motorola (Power Modem, 3400 Pro,..."
+#~ msgstr "Motorola (Power Modem, 3400 Pro,..."
+
+#~ msgid "Multi-Tech (for bit reversal)"
+#~ msgstr "Multi-Tech (for bit reversal)"
+
+#~ msgid "No"
+#~ msgstr "No"
+
+#~ msgid "None"
+#~ msgstr "None"
+
+#~ msgid ""
+#~ "On some (very few) modems it is necessary to start with baudrate \"A\" "
+#~ "and switch to baudrate \"B\" after sending the `AT+FCLASS=2' command. "
+#~ "Default is None."
+#~ msgstr ""
+#~ "On some (very few) modems it is necessary to start with baudrate \"A\" "
+#~ "and switch to baudrate \"B\" after sending the `AT+FCLASS=2' command. "
+#~ "Default is None."
+
+#~ msgid "Open Delay (msec)"
+#~ msgstr "Open Delay (msec)"
+
+#~ msgid "QuickComm (Spirit II)"
+#~ msgstr "QuickComm (Spirit II)"
+
+#~ msgid "Run Fax Queue Every"
+#~ msgstr "Run Fax Queue Every"
+
+#~ msgid "SendFax Config File"
+#~ msgstr "SendFax Config File"
+
+#~ msgid "Sendfax Config File"
+#~ msgstr "Sendfax Config File"
+
+#~ msgid "Setup Druid"
+#~ msgstr "Setup Druid"
+
+#~ msgid ""
+#~ "Some misbehaving modems lower the DCD (carrier detect) line briefly, "
+#~ "between sending multiple pages. This may cause all subsequent port serial "
+#~ "accesses to fail. Default is No."
+#~ msgstr ""
+#~ "Some misbehaving modems lower the DCD (carrier detect) line briefly, "
+#~ "between sending multiple pages. This may cause all subsequent port serial "
+#~ "accesses to fail. Default is No."
+
+#~ msgid ""
+#~ "The location of the mgetty \"sendfax.config\" file. Default is \"/etc/"
+#~ "mgetty+sendfax/sendfax.config\". You shouldn't have to change this."
+#~ msgstr ""
+#~ "The location of the mgetty \"sendfax.config\" file. Default is \"/etc/"
+#~ "mgetty+sendfax/sendfax.config\". You shouldn't have to change this."
+
+#~ msgid ""
+#~ "The maximum number of tries per page if the receiving end reports "
+#~ "reception errors. Default is 3."
+#~ msgstr ""
+#~ "The maximum number of tries per page if the receiving end reports "
+#~ "reception errors. Default is 3."
+
+#~ msgid ""
+#~ "The speed to set your serial port at. Try the highest and go down from "
+#~ "there."
+#~ msgstr ""
+#~ "The speed to set your serial port at. Try the highest and go down from "
+#~ "there."
+
+#~ msgid "The standard papersize you send facsimilies in."
+#~ msgstr "The standard papersize you send facsimilies in."
+
+#~ msgid "The type of modem you have."
+#~ msgstr "The type of modem you have."
+
+#~ msgid "The volume your modem is set too."
+#~ msgstr "The volume your modem is set too."
+
+#~ msgid ""
+#~ "This can be used to adapt `sendfax' to some peculiarities in certain "
+#~ "modems. Not normally required."
+#~ msgstr ""
+#~ "This can be used to adapt `sendfax' to some peculiarities in certain "
+#~ "modems. Not normally required."
+
+#~ msgid ""
+#~ "This is the command used for dialing out. Usually this will be something "
+#~ "simple, as `ATDT' for tone or `ATDP' for pulse dialing."
+#~ msgstr ""
+#~ "This is the command used for dialing out. Usually this will be something "
+#~ "simple, as `ATDT' for tone or `ATDP' for pulse dialing."
+
+#~ msgid ""
+#~ "This will initialize the modem when the port is opened. See your modem "
+#~ "manual. Default is ATZ."
+#~ msgstr ""
+#~ "This will initialize the modem when the port is opened. See your modem "
+#~ "manual. Default is ATZ."
+
+#~ msgid "Type of fax modem. See your modem manual. Default is auto."
+#~ msgstr "Type of fax modem. See your modem manual. Default is auto."
+
+#~ msgid "USR (Courier, Sportster)"
+#~ msgstr "USR (Courier, Sportster)"
+
+#~ msgid "User Defined"
+#~ msgstr "User Defined"
+
+#~ msgid ""
+#~ "Users allowed to use the fax system. Can be empty only if the deny list "
+#~ "is populated. These must be user names."
+#~ msgstr ""
+#~ "Users allowed to use the fax system. Can be empty only if the deny list "
+#~ "is populated. These must be user names."
+
+#~ msgid ""
+#~ "Users denied from using the fax system. Can be empty only if the allow "
+#~ "list is populated."
+#~ msgstr ""
+#~ "Users denied from using the fax system. Can be empty only if the allow "
+#~ "list is populated."
+
+#~ msgid "Very Low"
+#~ msgstr "Very Low"
+
+#~ msgid "Yes"
+#~ msgstr "Yes"
+
+#~ msgid "a4"
+#~ msgstr "a4"
+
+#~ msgid "auto"
+#~ msgstr "auto"
+
+#~ msgid "c2.0"
+#~ msgstr "c2.0"
+
+#~ msgid "cls2"
+#~ msgstr "cls2"
+
+#~ msgid "legal"
+#~ msgstr "legal"
+
+#~ msgid "letter"
+#~ msgstr "letter"
+
+#~ msgid "Starting scan process"
+#~ msgstr "Starting scan process"
+
+#~ msgid "Control file "
+#~ msgstr "Control file "
+
+#, fuzzy
+#~ msgid "Can't create .gfax.proc"
+#~ msgstr "Can't create /tmp/gfax.proc"
+
+#~ msgid "*"
+#~ msgstr "*"
+
+#~ msgid ""
+#~ "Complete...\n"
+#~ "\n"
+#~ "Your new phone book is ready for you to add items."
+#~ msgstr ""
+#~ "Complete...\n"
+#~ "\n"
+#~ "Your new phone book is ready for you to add items."
+
+#~ msgid "Enter a phone number and hit <enter> or press the \"Add\" button"
+#~ msgstr "Enter a phone number and hit <enter> or press the \"Add\" button"
+
+#~ msgid "Gfax - Select postcript file"
+#~ msgstr "Gfax - Select postcript file"
+
+#~ msgid "Preferences"
+#~ msgstr "Preferences"
+
+#~ msgid "Send later"
+#~ msgstr "Send later"
+
+#~ msgid ""
+#~ "Status Column Definition: D = Complete, R = Running, F = Failed, S = "
+#~ "Sleeping, W = Waiting for modem, B = Blocked by job, P = Pending"
+#~ msgstr ""
+#~ "Status Column Definition: D = Complete, R = Running, F = Failed, S = "
+#~ "Sleeping, W = Waiting for modem, B = Blocked by job, P = Pending"
+
+#~ msgid "Use cover page"
+#~ msgstr "Use cover page"
+
+#~ msgid "New Phonebook"
+#~ msgstr "New Phonebook"
diff --git a/po/it.po b/po/it.po
new file mode 100644
index 0000000..273be7f
--- /dev/null
+++ b/po/it.po
@@ -0,0 +1,1598 @@
+# English translations for gfax package.
+# Copyright (C) 2004 THE gfax'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the gfax package.
+# George Farris <george@gmsys.com>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gfax 0.7.6\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-11-29 19:29-0800\n"
+"PO-Revision-Date: 2005-02-24 19:21+0100\n"
+"Last-Translator: Sasa Ostrouska <saxa@droplinegnome.org>\n"
+"Language-Team: Italian <saxa@droplinegnome.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../gfax.desktop.in.h:1
+#, fuzzy
+msgid "Gfax Facsimile Program"
+msgstr "Gfax Programma Facsimile"
+
+#: ../gfax.desktop.in.h:2
+#, fuzzy
+msgid "Send and Receive Facsimiles"
+msgstr "Invia e Riceve Facsimili"
+
+#: ../gfax.schemas.in.h:1
+msgid "0:never, 1:until carrier, 2:always, 3:on receive only"
+msgstr "0:mai, 1:fino al carrier, 2:sempre, 3:solo ricezzione"
+
+#: ../gfax.schemas.in.h:2
+msgid "0:very low, 1:low, 2:medium, 3:high"
+msgstr "0:molto basso, 1:basso, 2:medio, 3:alto"
+
+#: ../gfax.schemas.in.h:3
+#, fuzzy
+msgid "Modem Device"
+msgstr "Modem tipo"
+
+#: ../gfax.schemas.in.h:4
+#, fuzzy
+msgid "Modem initialization string"
+msgstr "Stringa di inizializazzione del modem"
+
+#: ../gfax.schemas.in.h:5
+msgid "Modem reset string"
+msgstr "Stringa di reset del modem"
+
+#: ../gfax.schemas.in.h:6
+msgid "Not currently used."
+msgstr "Non in uso al momento."
+
+#: ../gfax.schemas.in.h:7
+msgid "The initialization code that is sent to the modem."
+msgstr "Codice di inizializzazione che viene inviato al modem."
+
+#: ../gfax.schemas.in.h:8
+msgid ""
+"The name of the lock file according to your system's conventions. If you're "
+"running Linux you shouldn't have to touch this."
+msgstr ""
+"Il nome del file lock come da suo systema. Se usate Linux non "
+"dovrebbe essere necessario fare modifiche."
+
+#: ../gfax.schemas.in.h:9
+msgid ""
+"The reset code that resets the modem to a power up state. The -Kz code works "
+"with most modems."
+msgstr ""
+"Il codice di reset che resetta il modem a un stato di power up. Il codice -Kz "
+"funziona con la maioria dei modem"
+
+#: ../gfax.schemas.in.h:10
+#, fuzzy
+msgid ""
+"The serial port the modem is connected too. Typical values are ttyS0, cua0 "
+"or modem."
+msgstr ""
+"La porta seriale al quale il modem e collegato. Valori tipici sono ttyS0,\n"
+"cua0 o modem."
+
+#: ../glade/gfax.glade.h:1
+msgid ""
+"\n"
+"Please enter your Hylafax server information here. If you are running "
+"Hylafax on the same computer That you are using Gfax on then \"Host Name\" "
+"should be set to \"localhost\".\n"
+msgstr ""
+"\n"
+"Per favore inserire le informazioni del Hylafax server qua. Se il server\n"
+"Hylafax e sullo stesso computer dove state usando Gfax dovete immettere\n"
+"\"localhost\" nello spazio \"Nome Host\". \n"
+
+#: ../glade/gfax.glade.h:4
+msgid " Program: "
+msgstr " Programma: "
+
+#: ../glade/gfax.glade.h:5
+msgid "4559"
+msgstr "4559"
+
+#: ../glade/gfax.glade.h:6
+msgid "<b><big>E-Mail Notification</big></b>"
+msgstr "<b><big>Notifica E-Mail</big></b>"
+
+#: ../glade/gfax.glade.h:7
+msgid "<b><big>Efax Setup</big></b>"
+msgstr "<b><big>Settaggi Efax</big></b>"
+
+#: ../glade/gfax.glade.h:8
+#, fuzzy
+msgid "<b><big>Facsimile Viewer Program</big></b>"
+msgstr "<b><big>Programma per la visualizzazione dei Facsimili</big></b>"
+
+#: ../glade/gfax.glade.h:9
+msgid "<b><big>Fax Properties</big></b>"
+msgstr "<b><big>Proprieta Fax</big></b>"
+
+#: ../glade/gfax.glade.h:10
+msgid "<b><big>Fax Transport Agent</big></b>"
+msgstr "<b><big>Agente Trasporto Facsimili</big></b>"
+
+#: ../glade/gfax.glade.h:11
+msgid "<b><big>Hylafax Setup</big></b>"
+msgstr "<b><big>Settaggi Hylafax</big></b>"
+
+#: ../glade/gfax.glade.h:12
+msgid "<b><big>Phone Information</big></b>"
+msgstr "<b><big>Informazioni Telefono</big></b>"
+
+#: ../glade/gfax.glade.h:13
+msgid "<b><big>Transmit Properties</big></b>"
+msgstr "<b><big>Proprieta di Transmissione</big></b>"
+
+#: ../glade/gfax.glade.h:14
+#, fuzzy
+msgid "<b>Alter facsimile job parameters</b>"
+msgstr "<b>Parametri alternativi di facsimile</b>"
+
+#: ../glade/gfax.glade.h:15
+msgid "<b>Server</b>"
+msgstr "<b>Server</b>"
+
+#: ../glade/gfax.glade.h:16
+msgid ""
+"ATT (Dataport, Paradyne)\n"
+"Motorola (Power Modem, 3400 Pro,...\n"
+"QuickComm (Spirit II)\n"
+"USR (Courier, Sportster)\n"
+"Multi-Tech (for bit reversal)\n"
+"User Defined\n"
+msgstr ""
+
+#: ../glade/gfax.glade.h:23
+msgid "Auto Refresh Queue"
+msgstr "Coda di Auto Refresh"
+
+#: ../glade/gfax.glade.h:24
+msgid ""
+"Complete...\n"
+"\n"
+"Your new phone book is ready.\n"
+"If this is a Gfax type phone book you may\n"
+"now add items. \n"
+"\n"
+"Evolution phone books are read only\n"
+"but may be change through Evolution."
+msgstr ""
+"Completato...\n"
+"\n"
+"La sua nuova agenda contatti telefonici e pronta.\n"
+"Se la sua agenda e del tipo Gfax le puo adesso\n"
+"immettere nuovi contatti. \n"
+"\n"
+"Contatti telefonici del tipo Evolution non sono modifficabili,\n"
+"pero e possibile modificarli tramite Evolution."
+
+#
+#: ../glade/gfax.glade.h:32
+msgid "Completed Jobs"
+msgstr "Facsimili completati"
+
+#: ../glade/gfax.glade.h:33
+msgid "Database"
+msgstr "Database"
+
+#: ../glade/gfax.glade.h:34 ../glade/send-druid.glade.h:11
+msgid "Delete"
+msgstr "Cancellare"
+
+#: ../glade/gfax.glade.h:35
+msgid "Dial Prefix:"
+msgstr "Prefisso:"
+
+#: ../glade/gfax.glade.h:36
+msgid "E-Mail Address:"
+msgstr "Indirizzo E-Mail:"
+
+#: ../glade/gfax.glade.h:37
+msgid "E-Mail Notification"
+msgstr "Avviso E-Mail"
+
+#: ../glade/gfax.glade.h:38
+msgid "Efax"
+msgstr "Efax"
+
+#: ../glade/gfax.glade.h:39
+msgid "Evolution"
+msgstr "Evolution"
+
+#: ../glade/gfax.glade.h:40
+msgid "Evolution Address books"
+msgstr "Aggenda Evolution"
+
+#: ../glade/gfax.glade.h:41
+msgid "Exit"
+msgstr "Uscita"
+
+#: ../glade/gfax.glade.h:42
+msgid "Facsimile Number:"
+msgstr "Numero Telefax:"
+
+#: ../glade/gfax.glade.h:43
+msgid "Facsimiles to Send"
+msgstr "Telefax da spedire"
+
+#: ../glade/gfax.glade.h:44
+#, fuzzy
+msgid "Fax Number:"
+msgstr "Nummero Fax:"
+
+#: ../glade/gfax.glade.h:45
+msgid "Fax Status:"
+msgstr "Stato Fax:"
+
+#: ../glade/gfax.glade.h:46
+msgid "Fax log enabled"
+msgstr "Log dei fax attivo"
+
+#: ../glade/gfax.glade.h:47
+#, fuzzy
+msgid ""
+"First we must choose a transport agent. \n"
+"\n"
+"A transport agent is a software package that is responsible for\n"
+"actually sending the facsimile with your modem. If you don't have \n"
+"one of these installed you should hit cancel here and install\n"
+"a transport agent first.\n"
+"\n"
+"Transport agents can be found at the following URL's but you should \n"
+"check your distribution CD first..\n"
+"\n"
+"Hylafax - http://www.hylafax.org\n"
+"Efax - http://www.cce.com/efax"
+msgstr ""
+"Per prima cosa dovete scegliere il tipo di fax server.\n"
+"\n"
+"Il fax server e un server responsabile per l'invio dei facsimili\n"
+"Se non avete installatto un fax server ancora dovete premmere Cancella\n"
+"e installare prima un fax server.\n"
+"\n"
+"Gli fax server possono essere trovati algi seguenti indirizzi URL,\n"
+"pero e meglio sevoi controllate prima gli CD della vostra distribuzione.\n"
+"\n"
+"Hylafax - http://www.hylafax.org\n"
+"Mgetty - http://alpha.greenie.net/mgetty\n"
+"Efax - http://www.cce.com/efax"
+
+#: ../glade/gfax.glade.h:59
+msgid "Gfax"
+msgstr "Gfax"
+
+#: ../glade/gfax.glade.h:60
+msgid "Gfax - E-Mail Address"
+msgstr "Gfax - Indirizzo E-Mail"
+
+#: ../glade/gfax.glade.h:61
+msgid "Gfax - Facsimile Transport Agent"
+msgstr "Gfax - Agente di trasporto facsimili"
+
+#: ../glade/gfax.glade.h:62
+msgid "Gfax - Gnome facsimile program"
+msgstr "Gfax - Programma Gnome per facsimili"
+
+#: ../glade/gfax.glade.h:63
+msgid "Gfax - Modem Selection"
+msgstr "Gfax - Selezione Modem"
+
+#: ../glade/gfax.glade.h:64
+msgid "Gfax - Phone Number Information"
+msgstr "Gfax - Informazioni Numero di Telefono"
+
+#: ../glade/gfax.glade.h:65
+msgid "Gfax - Setup Complete"
+msgstr "Gfax - Setup Completato"
+
+#: ../glade/gfax.glade.h:66
+msgid "Gfax - Add new phone book."
+msgstr "Gfax - Aggiungi Agenda nr. Telefonici"
+
+#: ../glade/gfax.glade.h:67
+msgid "Gfax - Modify Job"
+msgstr "Gfax - Modifica lavoro"
+
+#: ../glade/gfax.glade.h:68
+msgid "Gfax - New user setup"
+msgstr "Gfax - Setup Nuovo Utente"
+
+#: ../glade/gfax.glade.h:69
+msgid "Gfax - Preferences"
+msgstr "Gfax - Proprieta"
+
+#: ../glade/gfax.glade.h:70
+msgid "Gfax - Transmission Progress"
+msgstr "Gfax - Progresso Trasmissione"
+
+#: ../glade/gfax.glade.h:71
+#, fuzzy
+msgid ""
+"Gfax can inform the Efax transport agent which\n"
+"serial port your modem is connected to."
+msgstr ""
+"Gfax e capace di informare l'Efax server quale e la\n"
+"porta seriale che il vostro modem usa."
+
+#: ../glade/gfax.glade.h:73
+msgid ""
+"Gfax setup is now complete!\n"
+"\n"
+"Gfax is configurable; there are other configuration \n"
+"options available under the preferences menu.\n"
+"\n"
+"You can run this first time setup at any time from\n"
+"the preferences section.\n"
+"\n"
+"Default preferences have been choosen for the\n"
+"transport agent you chose, you may want to\n"
+"customise them."
+msgstr ""
+"Il setup di Gfax e completato!\n"
+"\n"
+"Gfax e configurabile; ci sono altri settaggi sotto il \n"
+"menu Proprieta.\n"
+"\n"
+"Potete riavviare questo programma di setup in qualunque\n"
+"momento dal menu Proprieta.\n"
+"\n"
+"Le proprieta default sono state scielte per il tipo di\n"
+"server da voi scielto, potete anche personalizarle."
+
+#: ../glade/gfax.glade.h:84
+msgid "Hi Resolution Mode"
+msgstr "Modalita Alta Risoluzione"
+
+#: ../glade/gfax.glade.h:85
+msgid "Host Name:"
+msgstr "Nome Host:"
+
+#: ../glade/gfax.glade.h:86
+msgid "Hostname:"
+msgstr "Nome Host:"
+
+#: ../glade/gfax.glade.h:87
+msgid "Hylafax"
+msgstr "Hylafax"
+
+#: ../glade/gfax.glade.h:88
+msgid "Hylafax - Choose this for network faxing."
+msgstr "Hylafax - Selezionate questo tipo per il network faxing."
+
+#: ../glade/gfax.glade.h:89
+msgid ""
+"Hylafax and Mgetty+Sendfax can both be requested to send \n"
+"results of facsimile transmission to an email address.\n"
+"\n"
+"If you require this feature please enter your email address\n"
+"here. It's a good idea to include this even if you don't \n"
+"use it immediately, you can enable and disable it in the\n"
+"preferences section of Gfax.\n"
+" "
+msgstr ""
+"Hylafax e Mgetty+Sendfax possono entrambi essere usati per l'invio\n"
+"via e-mail del risultato di sucesso di invio del facsimile.\n"
+"\n"
+"Se volete usufruire di questa funzione immetete il vostro indirizzo\n"
+"e-mail. E una buona idea fare questo anche se non si desidera questa\n"
+"funzione immediatamente. Potete abilitare/disabilitare questa funzione\n"
+"nelle proprieta di Gfax.\n"
+" "
+
+#: ../glade/gfax.glade.h:97
+msgid "IP Port:"
+msgstr "IP Port:"
+
+#: ../glade/gfax.glade.h:98
+msgid "LDAP"
+msgstr "LDAP"
+
+#: ../glade/gfax.glade.h:99
+msgid "Log Enabled"
+msgstr "Log Attivato"
+
+#: ../glade/gfax.glade.h:100
+msgid ""
+"Make no more than <maxdials> calls in attempting to send the facsimile. "
+"Once <maxdials> has been reached, the job will be killed."
+msgstr ""
+"Non fare piu di <maxdials> chiamate tentando di inviare il facsimile. "
+"Quando il nr. di <maxdials> chiamate e stato raggiunto, il lavoro verra \n"
+"cancellato."
+
+#: ../glade/gfax.glade.h:101
+msgid "Maximum Dials:"
+msgstr "Nr. Massimo di chiamate"
+
+#: ../glade/gfax.glade.h:102
+msgid "Mgetty"
+msgstr "Mgetty"
+
+#: ../glade/gfax.glade.h:103
+msgid "Modem Connection"
+msgstr "Connessione Modem"
+
+#: ../glade/gfax.glade.h:104
+#, fuzzy
+msgid "Modem Port:"
+msgstr "Porta Modem:"
+
+#: ../glade/gfax.glade.h:105
+#, fuzzy
+msgid "Modem Type:"
+msgstr "Modem Tipo:"
+
+#: ../glade/gfax.glade.h:106
+msgid "New Fax"
+msgstr "Nuovo Fax"
+
+#: ../glade/gfax.glade.h:107 ../glade/send-druid.glade.h:23
+msgid "New phone book"
+msgstr "Nuova Aggenda Telefonica"
+
+#: ../glade/gfax.glade.h:108
+msgid "Open phone book"
+msgstr "Aprire Agenda Telefonica"
+
+#: ../glade/gfax.glade.h:109
+#, fuzzy
+msgid "Page Size:"
+msgstr "Pagina Formato:"
+
+#: ../glade/gfax.glade.h:110
+msgid "Password Dialog"
+msgstr "Dialogo Password"
+
+#: ../glade/gfax.glade.h:111 ../glade/send-druid.glade.h:26
+#: ../src/newphonebook.cs:81
+msgid "Phone Book"
+msgstr "Agenda Telefonica"
+
+#: ../glade/gfax.glade.h:112
+msgid "Please enter a name for your new phone book."
+msgstr "Immettere nome per la vostra nuova agenda telefonica."
+
+#: ../glade/gfax.glade.h:113
+msgid ""
+"Please enter the password \n"
+"for your fax server."
+msgstr ""
+"Immettete la pasword per\n"
+"il vostro fax server."
+
+#: ../glade/gfax.glade.h:115
+msgid ""
+"Please enter the type of phone book you are creating."
+msgstr ""
+"Per favore immettere il tipo della agenda telefonica che state creando."
+
+#: ../glade/gfax.glade.h:121
+msgid ""
+"Please enter your facsimile number.\n"
+"\n"
+"This number is placed in the top one line header that is placed \n"
+"on all outgoing facsimiles.\n"
+"\n"
+"You may also choose a default dial prefix. Many companies in\n"
+"North America use the number \"9\" to reach an outside line.\n"
+msgstr ""
+"Immettere il numero del vostro facsimile.\n"
+"\n"
+"Questo numero verra immesso sopra ogni telefax inviato nella .\n"
+"prima riga del telefax.\n"
+"\n"
+"Potete anche scegliere il prefisso predefinito.\n"
+"Molte volte si deve digitare \"0\" per avere il segnale.\n"
+"Qua potete immettere il vostro prefisso\n"
+
+#: ../glade/gfax.glade.h:129
+msgid ""
+"Please select the Evolution address books that you would \n"
+"like to use.\n"
+"\n"
+"These are only local address books and will only include\n"
+"contacts with facsimile numbers."
+msgstr ""
+
+#: ../glade/gfax.glade.h:134
+msgid "Port Number:"
+msgstr "Numero Porta:"
+
+#: ../glade/gfax.glade.h:135
+msgid "Received Facsimiles"
+msgstr "Facsimili Ricevuti"
+
+#: ../glade/gfax.glade.h:136
+msgid "Remember this password"
+msgstr "Ricorda questa password"
+
+#: ../glade/gfax.glade.h:137
+msgid "Send Email Notification"
+msgstr "Invia Notifica Email"
+
+#: ../glade/gfax.glade.h:138
+msgid "Send Immediately"
+msgstr "Invia immediatamente"
+
+#: ../glade/gfax.glade.h:139
+msgid "Speaker Volume:"
+msgstr "Volume autoparlante:"
+
+#: ../glade/gfax.glade.h:140
+msgid "System"
+msgstr "Sistema"
+
+#: ../glade/gfax.glade.h:141
+msgid ""
+"The TCP/IP port number of the fax server. Default hylafax port is 4559."
+msgstr ""
+"La porta TCP/IP del fax server. La porta predefinita di Hylafax e 4559."
+
+#: ../glade/gfax.glade.h:142
+msgid ""
+"The host name of the network fax server. Enter \"localhost\" if you are not "
+"using a network fax server."
+msgstr ""
+"Il nome del host del server fax. Immettere \"localhost\" se non si e in ,\n"
+"rete o non si usa un fax server di rete."
+
+#: ../glade/gfax.glade.h:143
+msgid "The serial port the modem is on - ttyS0 is COM1, ttyS1 is COM2 etc."
+msgstr ""
+"La porta seriale sulla quale e collegato il modem - ttyS0 = COM1, \n"
+"ttyS1 = COM2 e cosi via."
+
+#: ../glade/gfax.glade.h:144
+msgid ""
+"There was an error transmitting\n"
+"your facsimile to the server!"
+msgstr ""
+"Si e verificato un errore durante\n"
+"la trasmissione del fax al Fax Server!"
+
+#: ../glade/gfax.glade.h:146
+msgid ""
+"This will lead you through the process \n"
+"of creating a new phone book."
+msgstr ""
+"Questo Wizard vi guidera atraverso il \n"
+"processo di creazione di una nuova agenda telefonica."
+
+#: ../glade/gfax.glade.h:148
+#, fuzzy
+msgid "Time to send:"
+msgstr "Ora Invio:"
+
+#: ../glade/gfax.glade.h:149
+msgid ""
+"Transmitting facsimile to \n"
+"Hylafax server."
+msgstr ""
+"Trasmissione Facsimile al \n"
+"Hylafax-Server."
+
+#: ../glade/gfax.glade.h:151
+msgid "Transport Agent"
+msgstr "Fax Server"
+
+#: ../glade/gfax.glade.h:152
+msgid "Use Cover Page"
+msgstr "Uso Copertina"
+
+#: ../glade/gfax.glade.h:153
+msgid "Use Fine Resolution"
+msgstr "Uso Alta Risoluzione"
+
+#: ../glade/gfax.glade.h:154
+msgid "User"
+msgstr "Utente"
+
+#: ../glade/gfax.glade.h:155
+msgid "Username:"
+msgstr "Nome Utente:"
+
+#: ../glade/gfax.glade.h:156
+msgid ""
+"Very Low\n"
+"Low\n"
+"Medium\n"
+"High"
+msgstr ""
+"Molto Basso\n"
+"Basso\n"
+"Medio\n"
+"Alto"
+
+#: ../glade/gfax.glade.h:160
+msgid "View / Print"
+msgstr "Vedi / Stampa"
+
+#: ../glade/gfax.glade.h:161
+msgid ""
+"Welcome to Gfax!\n"
+"\n"
+"\n"
+"Gfax is a GNOME facsimile program that provides \n"
+"the familiar \"popup\" window when printing to a fax \n"
+"printer.\n"
+"\n"
+"The following pages will help you to setup Gfax."
+msgstr ""
+"Benvenuti in Gfax!\n"
+"\n"
+"\n"
+"Gfax e un programma per invio facsimili per GNOME il\n"
+"quale usa le finestre \"popup\" quando si stampa ad una \n"
+"stampante fax."
+"\n"
+"Le pagine seguenti vi aiuterano a configurare Gfax."
+
+#: ../glade/gfax.glade.h:169
+msgid "Which serial port is your modem connected to?"
+msgstr "Quale e la porta seriale del vostro modem ?"
+
+#: ../glade/gfax.glade.h:170
+msgid ""
+"Your facsimile was sucessfully\n"
+" transmitted!"
+msgstr ""
+"Il vostro facsimile e stato \n"
+"inviato con sucesso !"
+
+#: ../glade/gfax.glade.h:172
+msgid "_Cancel Job"
+msgstr "_Cancellare Lavoro"
+
+#: ../glade/gfax.glade.h:173
+msgid "_Fax"
+msgstr "_Fax"
+
+#: ../glade/gfax.glade.h:174
+msgid "_Help"
+msgstr "_Aiuto"
+
+#: ../glade/gfax.glade.h:175
+msgid "_Modify Job"
+msgstr "_Modifica Lavoro"
+
+#: ../glade/gfax.glade.h:176
+msgid "_Settings"
+msgstr "_Proprieta"
+
+#: ../glade/gfax.glade.h:177
+msgid "cua1"
+msgstr "cua1"
+
+#: ../glade/gfax.glade.h:178
+msgid "cua2"
+msgstr "cua2"
+
+#: ../glade/gfax.glade.h:179
+msgid ""
+"letter\n"
+"legal\n"
+"a4"
+msgstr ""
+
+#: ../glade/gfax.glade.h:182
+msgid "localhost"
+msgstr "localhost"
+
+#: ../glade/gfax.glade.h:183
+msgid "modem"
+msgstr "modem"
+
+#: ../glade/gfax.glade.h:184
+msgid "oklabel"
+msgstr "oklabel"
+
+#: ../glade/gfax.glade.h:185
+msgid "ttyS0"
+msgstr "ttyS0"
+
+#: ../glade/gfax.glade.h:186
+msgid "ttyS1"
+msgstr "ttyS1"
+
+#: ../glade/gfax.glade.h:187
+msgid "ttyS2"
+msgstr "ttyS2"
+
+#: ../glade/gfax.glade.h:188
+msgid "ttyS3"
+msgstr "ttyS3"
+
+#: ../glade/send-druid.glade.h:1
+msgid "<b><big>Current Phone Books</big></b>"
+msgstr "<b><big>Agenda Telefonica Corrente</big></b>"
+
+#: ../glade/send-druid.glade.h:2
+msgid "<b><big>Edit Phone book</big></b>"
+msgstr "<b><big>Edittare Agenda Telefonica</big></b>"
+
+#: ../glade/send-druid.glade.h:3
+msgid "<b>Facsimile Job Details</b>"
+msgstr "<b>Detagli Lavoro Facsimile</b>"
+
+#: ../glade/send-druid.glade.h:4
+msgid "<b>New fax information</b>"
+msgstr "<b>New fax information</b>"
+
+#: ../glade/send-druid.glade.h:5
+msgid "Add"
+msgstr "Addizionare"
+
+#: ../glade/send-druid.glade.h:6
+msgid "Browse"
+msgstr "Cercare"
+
+#: ../glade/send-druid.glade.h:7
+msgid "Clear"
+msgstr "Cancellare"
+
+#: ../glade/send-druid.glade.h:8
+msgid "Close"
+msgstr "Chiudere"
+
+#: ../glade/send-druid.glade.h:9 ../src/gfaxphonebook.cs:89
+#: ../src/gfaxsend.cs:142 ../src/sendphonebook.cs:105
+msgid "Contact"
+msgstr "Contatto"
+
+#: ../glade/send-druid.glade.h:10
+msgid "Current Phone Book"
+msgstr "Agenda Telefonica Corrente"
+
+#: ../glade/send-druid.glade.h:12
+#, fuzzy
+msgid "Delete phone book"
+msgstr "Cancellare Agenda Telefonica"
+
+#: ../glade/send-druid.glade.h:13
+msgid "Details"
+msgstr "Detagli"
+
+#: ../glade/send-druid.glade.h:14
+msgid "E-Mail job results to:"
+msgstr "Inviare e-mail del lavoroa:"
+
+#: ../glade/send-druid.glade.h:15
+msgid "Enter a phone number and hit <enter>."
+msgstr "Immettere nr. fax e premere <invio>."
+
+#: ../glade/send-druid.glade.h:16
+msgid "Fax number:"
+msgstr "Numero Fax:"
+
+#: ../glade/send-druid.glade.h:17
+msgid "Fine resolution"
+msgstr "Risoluzione Fina"
+
+#: ../glade/send-druid.glade.h:18
+msgid "Gfax - Phone Book Selection"
+msgstr "Gfax - Selezione Agenda Telefonica"
+
+#: ../glade/send-druid.glade.h:19
+msgid "Gfax - Phone books"
+msgstr "Gfax - Agende Telefoniche"
+
+#: ../glade/send-druid.glade.h:20
+msgid "Job"
+msgstr "Lavoro"
+
+#: ../glade/send-druid.glade.h:21
+msgid "New Entry"
+msgstr "Nuova Entrata"
+
+#: ../glade/send-druid.glade.h:22
+msgid "New Item"
+msgstr "Nuovo Item"
+
+#: ../glade/send-druid.glade.h:24 ../src/gui.cs:238 ../src/gui.cs:249
+msgid "Number"
+msgstr "Numero"
+
+#: ../glade/send-druid.glade.h:25 ../src/gfaxphonebook.cs:87
+#: ../src/gfaxsend.cs:141 ../src/sendphonebook.cs:103
+msgid "Organization"
+msgstr "Organizazzione"
+
+#: ../glade/send-druid.glade.h:27
+msgid "Phone Book Item List"
+msgstr "Lista Item Agenda Telefonica"
+
+#: ../glade/send-druid.glade.h:28
+msgid "Phone Books"
+msgstr "Agende Telefoniche"
+
+#: ../glade/send-druid.glade.h:29
+msgid "Postscript file:"
+msgstr "Archivio Postscript:"
+
+#: ../glade/send-druid.glade.h:30
+msgid "Save and Close"
+msgstr "Salva e Chiudi"
+
+#: ../glade/send-druid.glade.h:31
+#, fuzzy
+msgid "Save and close"
+msgstr "Salva e Chiudi"
+
+#: ../glade/send-druid.glade.h:32 ../src/gfaxsend.cs:139
+msgid "Send"
+msgstr "Invia"
+
+#: ../glade/send-druid.glade.h:33
+msgid "Send Fax"
+msgstr "Fax Invio"
+
+#: ../glade/send-druid.glade.h:34
+msgid "Send immediately"
+msgstr "Invia Immediatamente"
+
+#: ../glade/send-druid.glade.h:35
+msgid "Transmit the fax"
+msgstr "Trasmetti il Fax"
+
+#: ../glade/send-druid.glade.h:36
+msgid "Update"
+msgstr "Aggiorna"
+
+#: ../glade/send-druid.glade.h:37
+msgid "_File"
+msgstr "_Archivio"
+
+#: ../src/efax.cs:384
+msgid "Scanning control files."
+msgstr ""
+
+#: ../src/efax.cs:397
+msgid "Running job "
+msgstr "Lavoro Corrente"
+
+#: ../src/efax.cs:421 ../src/efax.cs:508
+msgid "Busy retries exceeded"
+msgstr ""
+
+#: ../src/efax.cs:468
+#, fuzzy
+msgid "Sending facsimile..."
+msgstr "Invio Facsimile..."
+
+#. If successful then mv the control file to the done queue and flag
+#. a date for it's removal.
+#: ../src/efax.cs:492
+msgid "Success"
+msgstr "Sucesso"
+
+#. fatal errors - no retry
+#. fatalError = true;
+#. change code in file
+#: ../src/efax.cs:516
+msgid "Fatal error"
+msgstr "Errore Fatale"
+
+#. Modem error - no retry
+#. fatalError = true;
+#: ../src/efax.cs:522
+msgid "Fatal modem error"
+msgstr "Errore Fatale del Modem"
+
+#. Modem not responding
+#. fatalError = true;
+#: ../src/efax.cs:528
+msgid "Modem not responding"
+msgstr "Il Modem non risponde"
+
+#. Program terminated
+#. fatalError = true;
+#: ../src/efax.cs:534
+msgid "Program terminated"
+msgstr "Programma treminato"
+
+#: ../src/fax.cs:60
+msgid "No Connection"
+msgstr "Connessione Assente"
+
+#: ../src/fax.cs:71
+msgid ""
+"Efax transmit process running...\n"
+"Scanning job files every 30 seconds."
+msgstr ""
+
+#: ../src/fax.cs:77
+msgid "Error transport agent not specified!"
+msgstr "Errore: Fax Server non specificato!"
+
+#: ../src/fax.cs:132
+msgid "Run"
+msgstr "Corri"
+
+#: ../src/fax.cs:135
+msgid "Sleep"
+msgstr "Dormi"
+
+#: ../src/fax.cs:138
+msgid "Block"
+msgstr "Blocca"
+
+#: ../src/fax.cs:141
+msgid "Busy"
+msgstr "Ocupato"
+
+#: ../src/fax.cs:144 ../src/fax.cs:244
+#, fuzzy
+msgid "Done"
+msgstr "Fatto"
+
+#: ../src/fax.cs:147
+#, fuzzy
+msgid "Fail"
+msgstr "_Falito"
+
+#: ../src/fax.cs:150
+#, fuzzy
+msgid "New"
+msgstr "Nuovo Fax"
+
+#: ../src/fax.cs:241
+msgid "Receiving"
+msgstr "Ricezione"
+
+#: ../src/gfaxphonebook.cs:88 ../src/gfaxsend.cs:140
+#: ../src/sendphonebook.cs:104
+#, fuzzy
+msgid "Phone Number"
+msgstr "Numero Telefono"
+
+#: ../src/gfaxphonebook.cs:213
+msgid "Are you sure you want to delete the phone book?"
+msgstr "siete sicuri di cancellare la agenda telefonica ?"
+
+#: ../src/gfaxphonebook.cs:297
+msgid ""
+"You have unsaved phone book entries.\n"
+" Are you sure you want to Quit?"
+msgstr ""
+"Es gibt ungespeicherte Telefonbucheinträge. \n"
+"Sind Sie sicher, dass Sie beenden wollen? "
+
+#: ../src/gfaxphonebook.cs:460
+msgid "Press the <DELETE> key to delete an entry."
+msgstr "Drücken Sie die Entfernen-Taste um einen Eintrag zu löschen."
+
+#: ../src/gfaxprefs.cs:190 ../src/gfaxprefs.cs:208
+msgid "You need to exit Gfax and restart it when you change transport agents"
+msgstr ""
+
+#: ../src/gfaxsend.cs:88
+msgid ""
+"\n"
+"This is the first time you have run Gfax.\n"
+"Please run Gfax from the menu or command line and set your \n"
+"MODEM TYPE, PORT and Fax number under preferences.\n"
+"\n"
+"Gfax is initially setup to use Efax, you may change it use \n"
+"Hylafax if you prefer or require connection to a network \n"
+"facsimile server."
+msgstr ""
+
+#: ../src/gfaxsend.cs:164
+msgid "Spooled from print job"
+msgstr ""
+
+#: ../src/gfaxsend.cs:276
+msgid ""
+"\n"
+"The file you have entered does not exist.\n"
+"Please check the name and try again."
+msgstr ""
+
+#: ../src/gfaxsend.cs:310
+msgid ""
+"\n"
+"You have not entered a facsimile number!\n"
+"Please enter a number and press the <i><b>Enter</b></i> key or\n"
+"click the <i><b>Phone Book</b></i> button to select numbers or\n"
+"entire phone books."
+msgstr ""
+
+#: ../src/gui.cs:143
+msgid ""
+"\n"
+"This is the first time you have run Gfax.\n"
+"You should set your MODEM TYPE and PORT under preferences.\n"
+"\n"
+"Gfax is initially setup to use Efax, you may change it use \n"
+"Hylafax if you prefer or require connection to a network \n"
+"facsimile server."
+msgstr ""
+
+#: ../src/gui.cs:157
+msgid ""
+"Your spool directory is missing!\n"
+"\t\t\t\t\t\n"
+"Please login as the root user and create the "
+msgstr ""
+
+#: ../src/gui.cs:161
+msgid ""
+" directory.\n"
+"\n"
+"All users should be able to write to it.\n"
+msgstr ""
+
+#: ../src/gui.cs:166
+msgid ""
+"The doneq directory is missing in your spool directory!\n"
+"\t\t\t\t\t\n"
+"Please login as the root user and create the "
+msgstr ""
+
+#: ../src/gui.cs:169
+msgid ""
+"/doneq directory.\n"
+"\n"
+"All users should be able to write to it.\n"
+msgstr ""
+
+#: ../src/gui.cs:175
+msgid ""
+"The recq directory is missing in your spool directory!\n"
+"\t\t\t\t\t\n"
+"Please login as the root user and create the "
+msgstr ""
+
+#: ../src/gui.cs:178
+msgid ""
+"/recq directory.\n"
+"\n"
+"All users should be able to write to it.\n"
+msgstr ""
+
+#: ../src/gui.cs:237 ../src/gui.cs:248
+#, fuzzy
+msgid "Jobid"
+msgstr "Auftrag"
+
+#: ../src/gui.cs:239 ../src/gui.cs:250 ../src/gui.cs:259
+#, fuzzy
+msgid "Status"
+msgstr "Faxstatus:"
+
+#: ../src/gui.cs:240 ../src/gui.cs:251
+msgid "Owner"
+msgstr ""
+
+#: ../src/gui.cs:241 ../src/gui.cs:252
+msgid "Pages"
+msgstr ""
+
+#: ../src/gui.cs:242 ../src/gui.cs:253
+#, fuzzy
+msgid "Dials"
+msgstr "Details"
+
+#: ../src/gui.cs:243 ../src/gui.cs:254
+#, fuzzy
+msgid "Send At"
+msgstr "Senden"
+
+#: ../src/gui.cs:244 ../src/gui.cs:255
+msgid "Error"
+msgstr ""
+
+#: ../src/gui.cs:258
+#, fuzzy
+msgid "Sender"
+msgstr "Senden"
+
+#: ../src/gui.cs:260
+#, fuzzy
+msgid "Pages "
+msgstr "Seitenformat"
+
+#: ../src/gui.cs:261
+msgid "Arrived"
+msgstr ""
+
+#: ../src/gui.cs:262
+#, fuzzy
+msgid "Filename"
+msgstr "_Datei"
+
+#: ../src/gui.cs:666
+msgid ""
+"Cannot read the facsimile file from the server. You most likely do not \n"
+"have permission to read the file. Check the settings on your fax server."
+msgstr ""
+
+#: ../src/gui.cs:673
+msgid ""
+"Cannot start your faxviewer program. \n"
+"Please check your settings. It is currently set to "
+msgstr ""
+
+#: ../src/gui.cs:674
+msgid "."
+msgstr ""
+
+#: ../src/gui.cs:709
+msgid ""
+"Cannot delete the facsimile file from the server. You most likely do not \n"
+"have permission to delete the file. Check the settings on your fax server."
+msgstr ""
+
+#: ../src/gui.cs:715
+msgid ""
+"Cannot delete the file on the Hylafax server. \n"
+"Please check your settings or contact your system Administrator"
+msgstr ""
+
+#: ../src/gui.cs:785
+msgid "Copyright (C) 2003 George Farris <farrisg@shaw.ca>"
+msgstr ""
+
+#: ../src/gui.cs:786
+msgid "A Facsimile application for GNOME"
+msgstr ""
+
+#: ../src/gui.cs:831
+#, fuzzy
+msgid "Refreshing server status..."
+msgstr "Auto Refresh Queue"
+
+#: ../src/gui.cs:868
+#, fuzzy
+msgid "Refreshing queue..."
+msgstr "Auto Refresh Queue"
+
+#: ../src/gui.cs:934 ../src/gui.cs:953
+msgid "There are "
+msgstr ""
+
+#: ../src/gui.cs:934 ../src/gui.cs:953
+msgid " jobs in the queue"
+msgstr ""
+
+#: ../src/gui.cs:941 ../src/gui.cs:960
+msgid "There are 0 jobs in the queue"
+msgstr ""
+
+#: ../src/hylafax.cs:146
+msgid "You can not write data to this stream"
+msgstr "Sie können in diesen Strom keine Daten schreiben."
+
+#: ../src/hylafax.cs:150
+msgid "You can not read data from this stream"
+msgstr "Sie können aus diesem Strom keine Daten lesen."
+
+#: ../src/hylafax.cs:158
+msgid ""
+"Could not connect to your Hylafax server.\n"
+"Check console messages for further information\n"
+"\n"
+"You might need to set a value for username."
+msgstr ""
+"Konnte nicht mit dem Hylafax-Server verbinden.\n"
+"Überprüfen Sie die Konsolenausgabe für weitere Einzelheiten\n"
+"\n"
+"Möglicherweise müssen Sie einen Benutzernamen angeben."
+
+#: ../src/main.cs:109
+msgid "Gfax help..."
+msgstr "Hilfe zu Gfax"
+
+#: ../src/main.cs:135
+msgid ""
+"Gconfd cannot find your settings. \n"
+"If you are running Gfax immediately \n"
+"after an installation, you may have \n"
+"to log out and log back in again."
+msgstr ""
+
+#: ../src/newphonebook.cs:80
+#, fuzzy
+msgid "Use"
+msgstr "Benutzer"
+
+#: ../src/phonebook.cs:295
+#, csharp-format
+msgid "Can't open file : {0}"
+msgstr "Kann Datei {0} nicht öffnen\""
+
+#: ../src/sendphonebook.cs:66
+msgid "You don't have any phone books yet."
+msgstr "Sie haben noch keine Telefonbücher angelegt."
+
+#. Got have a column title or things won't show up
+#: ../src/sendphonebook.cs:94
+#, fuzzy
+msgid "Phone books"
+msgstr "Telefonbücher"
+
+#~ msgid "0"
+#~ msgstr "0"
+
+#~ msgid "1"
+#~ msgstr "1"
+
+#~ msgid "10 Minutes"
+#~ msgstr "10 Minuten"
+
+#~ msgid "1000"
+#~ msgstr "1000"
+
+#~ msgid "115200"
+#~ msgstr "115200"
+
+#~ msgid "15 Minutes"
+#~ msgstr "15 Minuten"
+
+#~ msgid "1500"
+#~ msgstr "1500"
+
+#~ msgid "19200"
+#~ msgstr "19200"
+
+#~ msgid "2"
+#~ msgstr "2"
+
+#~ msgid "2000"
+#~ msgstr "2000"
+
+#~ msgid "2400"
+#~ msgstr "2400"
+
+#~ msgid "3"
+#~ msgstr "3"
+
+#~ msgid "30 Minutes"
+#~ msgstr "30 Minutes"
+
+#~ msgid "38400"
+#~ msgstr "38400"
+
+#~ msgid "4"
+#~ msgstr "4"
+
+#~ msgid "4800"
+#~ msgstr "4800"
+
+#~ msgid "5"
+#~ msgstr "5"
+
+#~ msgid "5 Minutes"
+#~ msgstr "5 Minuten"
+
+#~ msgid "500"
+#~ msgstr "500"
+
+#~ msgid "57600"
+#~ msgstr "57600"
+
+#~ msgid "6"
+#~ msgstr "6"
+
+#~ msgid "7"
+#~ msgstr "7"
+
+#~ msgid "8"
+#~ msgstr "8"
+
+#~ msgid "9"
+#~ msgstr "9"
+
+#~ msgid "9600"
+#~ msgstr "9600"
+
+#~ msgid ""
+#~ "A few modems respond to raising the DTR line (when opening the device) "
+#~ "with `OK'. This can confuse `sendfax', because it will see this OK as "
+#~ "response to the next command. Default is 0."
+#~ msgstr ""
+#~ "A few modems respond to raising the DTR line (when opening the device) "
+#~ "with `OK'. This can confuse `sendfax', because it will see this OK as "
+#~ "response to the next command. Default is 0."
+
+#, fuzzy
+#~ msgid "ATT (Dataport, Paradyne)"
+#~ msgstr "FCINIT='-j\\Q4'\t\t#AT&T (Dataport, Paradyne)"
+
+#~ msgid ""
+#~ "After the maximum number of tries for one page are reached, `sendfax' can "
+#~ "report an error and abort or continue. Default is Yes."
+#~ msgstr ""
+#~ "After the maximum number of tries for one page are reached, `sendfax' can "
+#~ "report an error and abort or continue. Default is Yes."
+
+#~ msgid ""
+#~ "An 'AT...' command that will be sent to the modem at the end of the modem "
+#~ "initialization, right before dialing."
+#~ msgstr ""
+#~ "An 'AT...' command that will be sent to the modem at the end of the modem "
+#~ "initialization, right before dialing."
+
+#~ msgid "Baud Rate Switch"
+#~ msgstr "Baud Rate Switch"
+
+#~ msgid ""
+#~ "Controls the amount of information written into the fax log file. "
+#~ "Default is 3."
+#~ msgstr ""
+#~ "Controls the amount of information written into the fax log file. "
+#~ "Default is 3."
+
+#~ msgid "Debug Level"
+#~ msgstr "Debug Level"
+
+#~ msgid "Dial Command"
+#~ msgstr "Wählbefehl"
+
+#~ msgid "Disabled"
+#~ msgstr "Deaktiviert"
+
+#~ msgid "Fax Users Allowed"
+#~ msgstr "Zugelassene Faxbenutzer"
+
+#~ msgid "Fax Users Denied"
+#~ msgstr "Nicht zugelassene Faxbenutzer"
+
+#~ msgid "Hour"
+#~ msgstr "Stunde"
+
+#~ msgid ""
+#~ "How often you want the fax queue scanned. Faxes won't be transmitted "
+#~ "until \"faxrunq\" is run to scan the queue. This value is set in /etc/"
+#~ "crontab."
+#~ msgstr ""
+#~ "Wie oft soll die Fax-Warteschlange überprüft werden? Faxe werden erst\n"
+#~ "übertragen, wenn \"faxrunq\" die Warteschlange überprüft. Der Wert wird\n"
+#~ "in /etc/crontab festgelegt."
+
+#~ msgid "Ignore Carrier"
+#~ msgstr "Freizeichen ignorieren"
+
+#~ msgid "Maximum Tries per Page"
+#~ msgstr "Maximale Anzahl Versuche pro Seite"
+
+#~ msgid "Mgetty+Sendfax"
+#~ msgstr "Mgetty+Sendfax"
+
+#~ msgid "Mgetty+Sendfax Setup"
+#~ msgstr "Einrichtung von Mgetty+Sendfax"
+
+#~ msgid "Minute"
+#~ msgstr "Minute"
+
+#~ msgid "Modem Handshake"
+#~ msgstr "Modem Handshake"
+
+#~ msgid "Modem Initialization String"
+#~ msgstr "Initialisierungssequenz des Modems"
+
+#~ msgid "Modem Port"
+#~ msgstr "Modem-Anschluss"
+
+#~ msgid "Modem Quirks"
+#~ msgstr "Besonderheiten des Modems"
+
+#~ msgid "Modem Speed (bps)"
+#~ msgstr "Geschwindigkeit des Modems (bps)"
+
+#~ msgid "Modem Type"
+#~ msgstr "Modemtyp"
+
+#, fuzzy
+#~ msgid "Motorola (Power Modem, 3400 Pro,..."
+#~ msgstr "FCINIT='-j\\Q1'\t\t#Motorola (Power Modem, 3400 Pro,.)"
+
+#, fuzzy
+#~ msgid "Multi-Tech (for bit reversal)"
+#~ msgstr "FCINIT='-or'\t\t # Multi-Tech (for bit reversal)"
+
+#~ msgid "No"
+#~ msgstr "Nein"
+
+#~ msgid "None"
+#~ msgstr "Keiner"
+
+#~ msgid ""
+#~ "On some (very few) modems it is necessary to start with baudrate \"A\" "
+#~ "and switch to baudrate \"B\" after sending the `AT+FCLASS=2' command. "
+#~ "Default is None."
+#~ msgstr ""
+#~ "Bei manchen (sehr wenigen) Modems ist es notwendig, mit der Baudrate\n"
+#~ "\"A\" zu beginnen und später, nachdem der Befehl 'AT+FCLASS=2' gesendet\n"
+#~ "wurde, zu Baudrate \"B\" umzuschalten. Vorgabe ist Keine."
+
+#~ msgid "Open Delay (msec)"
+#~ msgstr "Verzögerung beim Öffnen (Millisekunden)"
+
+#, fuzzy
+#~ msgid "QuickComm (Spirit II)"
+#~ msgstr "FCINIT='-j*F1'\t\t # QuickComm (Spirit II)"
+
+#~ msgid "Run Fax Queue Every"
+#~ msgstr "Warteschlange abarbeiten jede"
+
+#~ msgid "SendFax Config File"
+#~ msgstr "Sendfax-Konfigurationsdatei"
+
+#~ msgid "Sendfax Config File"
+#~ msgstr "Sendfax-Konfigurationsdatei"
+
+#~ msgid "Setup Druid"
+#~ msgstr "Einrichtungsassistent"
+
+#~ msgid ""
+#~ "The location of the mgetty \"sendfax.config\" file. Default is \"/etc/"
+#~ "mgetty+sendfax/sendfax.config\". You shouldn't have to change this."
+#~ msgstr ""
+#~ "Speicherort der Datei \"sendfax.config\" von mgetty. Die Vorgabe ist\n"
+#~ "\"/etc/mgetty+sendfax/sendfax.config\" Normalerweise müssen Sie dies\n"
+#~ "nicht ändern.\""
+
+#~ msgid ""
+#~ "The maximum number of tries per page if the receiving end reports "
+#~ "reception errors. Default is 3."
+#~ msgstr ""
+#~ "Maximale Anzahl von Versuchen pro Seite, wenn die empfangende Seite\n"
+#~ "Empfangsfehler meldet. Vorgabe ist 3."
+
+#~ msgid ""
+#~ "The speed to set your serial port at. Try the highest and go down from "
+#~ "there."
+#~ msgstr ""
+#~ "Die Geschwindigkeit Ihres seriellen Anschlusses. Versuchen Sie\n"
+#~ "zunächst den höchstmöglichen Wert und verringern Sie, falls nötig."
+
+#~ msgid ""
+#~ "This can be used to adapt `sendfax' to some peculiarities in certain "
+#~ "modems. Not normally required."
+#~ msgstr ""
+#~ "Dies kann eingesetzt werden, umd `sendfax' an die Eigenarten gewisser "
+#~ "Modems anzupassen. Normalerweise nicht benötigt."
+
+#~ msgid ""
+#~ "This is the command used for dialing out. Usually this will be something "
+#~ "simple, as `ATDT' for tone or `ATDP' for pulse dialing."
+#~ msgstr ""
+#~ "Dies ist der Befehl zum Herauswählen. Normalerweise ist dies etwas\n"
+#~ "einfaches, wie `ATDT' für Ton- oder `ATDP' für Impulswahl."
+
+#~ msgid ""
+#~ "This will initialize the modem when the port is opened. See your modem "
+#~ "manual. Default is ATZ."
+#~ msgstr ""
+#~ "Hiermit wird Ihr Modem initialisiert, wenn der Anschluss geöffnet\n"
+#~ "wird. Schauen Sie in das Handbuch zu Ihrem Modem. Die Vorgabe ist ATZ."
+
+#~ msgid "Type of fax modem. See your modem manual. Default is auto."
+#~ msgstr ""
+#~ "Typ des Faxmodems. Konsultieren Sie Ihr Modemhandbuch. Vorgabe ist auto."
+
+#, fuzzy
+#~ msgid "USR (Courier, Sportster)"
+#~ msgstr "FCINIT='-j&H2'\t\t# USR (Courier, Sportster)"
+
+#, fuzzy
+#~ msgid "User Defined"
+#~ msgstr "Nicht zugelassene Faxbenutzer"
+
+#~ msgid ""
+#~ "Users allowed to use the fax system. Can be empty only if the deny list "
+#~ "is populated. These must be user names."
+#~ msgstr ""
+#~ "Benutzer, die berechtigt sind, das Faxsystem zu benutzen. Kann nur\n"
+#~ "dann leer sein, wenn die Liste der nicht zugelassen Benutzer Einträge\n"
+#~ "enthält. Diese müssen Benutzernamen verwenden."
+
+#~ msgid ""
+#~ "Users denied from using the fax system. Can be empty only if the allow "
+#~ "list is populated."
+#~ msgstr ""
+#~ "Benutzer, die nicht berechtigt sind, das Faxsystem zu benutzen. Kann\n"
+#~ "nur dann leer gelassen werfden, wenn die Liste der zugelassenen\n"
+#~ "Benutzer Einträge enthält."
+
+#~ msgid "Yes"
+#~ msgstr "Ja"
+
+#~ msgid "a4"
+#~ msgstr "a4"
+
+#~ msgid "auto"
+#~ msgstr "auto"
+
+#~ msgid "c2.0"
+#~ msgstr "c2.0"
+
+#~ msgid "cls2"
+#~ msgstr "cls2"
+
+#~ msgid "legal"
+#~ msgstr "legal"
+
+#~ msgid "letter"
+#~ msgstr "letter"
+
+#~ msgid "'-x /usr/spool/uucp/LCK..$DEV'"
+#~ msgstr "'-x /usr/spool/uucp/LCK..$DEV'"
+
+#~ msgid "'-x /var/lock/LCK..$DEV'"
+#~ msgstr "'-x /var/lock/LCK..$DEV'"
+
+#~ msgid "*"
+#~ msgstr "*"
+
+#~ msgid "-x /var/spool/uucp/LCK..$DEV'"
+#~ msgstr "-x /var/spool/uucp/LCK..$DEV'"
+
+#~ msgid "/etc/efax.rc"
+#~ msgstr "/etc/efax.rc"
+
+#~ msgid ""
+#~ "Complete...\n"
+#~ "\n"
+#~ "Your new phone book is ready for you to add items."
+#~ msgstr ""
+#~ "Complete...\n"
+#~ "\n"
+#~ "Your new phone book is ready for you to add items."
+
+#~ msgid "Efax config file"
+#~ msgstr "Efax config file"
+
+#~ msgid "Enter a phone number and hit <enter> or press the \"Add\" button"
+#~ msgstr ""
+#~ "Geben Sie eine Telefonnummer ein und drücken Sie <Eingabe> oder klicken "
+#~ "Sie auf den Knopf \"Hinzufügen\"."
+
+#~ msgid "FCINIT=''"
+#~ msgstr "FCINIT=''"
+
+#~ msgid "Force xon/xoff"
+#~ msgstr "Force xon/xoff"
+
+#~ msgid "Gfax - Select postcript file"
+#~ msgstr "Gfax - Postcript-Datei auswählen"
+
+#~ msgid "Lock File"
+#~ msgstr "Sperrdatei"
+
+#~ msgid "Preferences"
+#~ msgstr "Vorlieben"
+
+#~ msgid "Send later"
+#~ msgstr "Später senden"
+
+#~ msgid ""
+#~ "Status Column Definition: D = Complete, R = Running, F = Failed, S = "
+#~ "Sleeping, W = Waiting for modem, B = Blocked by job, P = Pending"
+#~ msgstr ""
+#~ "Erklärung der Statusspalten: D = Abgeschlosse, R = Laufend, F =\n"
+#~ "Fehlgeschlagen, S = Schlafend, W = Warte auf Modem, B= Blockiert durch\n"
+#~ "Auftrag, P = Wartend"
+
+#~ msgid "Use cover page"
+#~ msgstr "Deckblatt benutzen"
+
+#~ msgid "New Phonebook"
+#~ msgstr "Neues Telefonbuch"
+
+#~ msgid "label379"
+#~ msgstr "label379"
+
+#~ msgid "label383"
+#~ msgstr "label383"
diff --git a/po/lv.po b/po/lv.po
new file mode 100644
index 0000000..fc2437c
--- /dev/null
+++ b/po/lv.po
@@ -0,0 +1,1569 @@
+# Latvian translations for gfax package.
+# Copyright (C) 2004 THE gfax'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the gfax package.
+# George Farris <george@gmsys.com>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gfax 0.7.6\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-12-04 19:29-0800\n"
+"PO-Revision-Date: 2005-02-24 19:21+0100\n"
+"Last-Translator: Maris Dembovskis <marisdembovskis@gmail.com>\n"
+"Language-Team: Latvian <marisdembovskis@gmail.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../gfax.desktop.in.h:1
+#, fuzzy
+msgid "Gfax Facsimile Program"
+msgstr "Gfax Faksēšanas programma"
+
+#: ../gfax.desktop.in.h:2
+#, fuzzy
+msgid "Send and Receive Facsimiles"
+msgstr "Sūtīt saņemt faksus"
+
+#: ../gfax.schemas.in.h:1
+msgid "0:never, 1:until carrier, 2:always, 3:on receive only"
+msgstr ""
+
+#: ../gfax.schemas.in.h:2
+msgid "0:very low, 1:low, 2:medium, 3:high"
+msgstr ""
+
+#: ../gfax.schemas.in.h:3
+#, fuzzy
+msgid "Modem Device"
+msgstr "Modema tips"
+
+#: ../gfax.schemas.in.h:4
+#, fuzzy
+msgid "Modem initialization string"
+msgstr "Modēmu inicializēšana"
+
+#: ../gfax.schemas.in.h:5
+msgid "Modem reset string"
+msgstr ""
+
+#: ../gfax.schemas.in.h:6
+msgid "Not currently used."
+msgstr ""
+
+#: ../gfax.schemas.in.h:7
+msgid "The initialization code that is sent to the modem."
+msgstr ""
+
+#: ../gfax.schemas.in.h:8
+msgid ""
+"The name of the lock file according to your system's conventions. If you're "
+"running Linux you shouldn't have to touch this."
+msgstr ""
+
+#: ../gfax.schemas.in.h:9
+msgid ""
+"The reset code that resets the modem to a power up state. The -Kz code works "
+"with most modems."
+msgstr ""
+
+#: ../gfax.schemas.in.h:10
+#, fuzzy
+msgid ""
+"The serial port the modem is connected too. Typical values are ttyS0, cua0 "
+"or modem."
+msgstr ""
+"SeriÄlie porti, pie kuriem modems ir pieslÄ“gts, parasti tie ir ttyS0, cua0"
+
+#: ../glade/gfax.glade.h:1
+msgid ""
+"\n"
+"Please enter your Hylafax server information here. If you are running "
+"Hylafax on the same computer That you are using Gfax on then \"Host Name\" "
+"should be set to \"localhost\".\n"
+msgstr ""
+"\n"
+"Ievadiet lÅ«dzu Hylafax servera informÄciju.\n"
+"Ja jÅ«s lietojat Hylafax uz tÄ paÅ¡a datora, kur tiks palaists GFAX, tad\n"
+"jums ir \"nosaukums\" \"localhost\" jÄdod. \n"
+
+#: ../glade/gfax.glade.h:4
+msgid " Program: "
+msgstr ""
+
+#: ../glade/gfax.glade.h:5
+msgid "4559"
+msgstr "4559"
+
+#: ../glade/gfax.glade.h:6
+msgid "<b><big>E-Mail Notification</big></b>"
+msgstr "<b><big>E-pasta brÄ«dinÄjums</big></b>"
+
+#: ../glade/gfax.glade.h:7
+msgid "<b><big>Efax Setup</big></b>"
+msgstr "<b><big>Efax uzstÄdÄ«Å¡ana</big></b>"
+
+#: ../glade/gfax.glade.h:8
+#, fuzzy
+msgid "<b><big>Facsimile Viewer Program</big></b>"
+msgstr "<b><big>Faxu apskates programmas</big></b>"
+
+#: ../glade/gfax.glade.h:9
+msgid "<b><big>Fax Properties</big></b>"
+msgstr "<b><big>Fax properties</big></b>"
+
+#: ../glade/gfax.glade.h:10
+msgid "<b><big>Fax Transport Agent</big></b>"
+msgstr "<b><big>Fax Transport Agent</big></b>"
+
+#: ../glade/gfax.glade.h:11
+msgid "<b><big>Hylafax Setup</big></b>"
+msgstr "<b><big>Hylafax uzstÄdÄ«Å¡ana</big></b>"
+
+#: ../glade/gfax.glade.h:12
+msgid "<b><big>Phone Information</big></b>"
+msgstr "<b><big>Phone Information</big></b>"
+
+#: ../glade/gfax.glade.h:13
+msgid "<b><big>Transmit Properties</big></b>"
+msgstr "<b><big>Transmit Properties</big></b>"
+
+#: ../glade/gfax.glade.h:14
+#, fuzzy
+msgid "<b>Alter facsimile job parameters</b>"
+msgstr "PÄ“c faksa darba uzstÄdijumi"
+
+#: ../glade/gfax.glade.h:15
+msgid "<b>Server</b>"
+msgstr "<b>Serveris</b>"
+
+#: ../glade/gfax.glade.h:16
+msgid ""
+"ATT (Dataport, Paradyne)\n"
+"Motorola (Power Modem, 3400 Pro,...\n"
+"QuickComm (Spirit II)\n"
+"USR (Courier, Sportster)\n"
+"Multi-Tech (for bit reversal)\n"
+"User Defined\n"
+msgstr ""
+
+#: ../glade/gfax.glade.h:23
+msgid "Auto Refresh Queue"
+msgstr "Auto Refresh Queue"
+
+#: ../glade/gfax.glade.h:24
+msgid ""
+"Complete...\n"
+"\n"
+"Your new phone book is ready.\n"
+"If this is a Gfax type phone book you may\n"
+"now add items. \n"
+"\n"
+"Evolution phone books are read only\n"
+"but may be change through Evolution."
+msgstr ""
+
+#
+#: ../glade/gfax.glade.h:32
+msgid "Completed Jobs"
+msgstr "Pabeigtie darbi"
+
+#: ../glade/gfax.glade.h:33
+msgid "Database"
+msgstr "DatubÄze"
+
+#: ../glade/gfax.glade.h:34 ../glade/send-druid.glade.h:11
+msgid "Delete"
+msgstr "Dzēst"
+
+#: ../glade/gfax.glade.h:35
+msgid "Dial Prefix:"
+msgstr "Ciparu prefix kad tiek sastÄdÄ«ts numurs:"
+
+#: ../glade/gfax.glade.h:36
+msgid "E-Mail Address:"
+msgstr "E-pasta adrese:"
+
+#: ../glade/gfax.glade.h:37
+msgid "E-Mail Notification"
+msgstr "E-pasta brÄ«dinÄjums"
+
+#: ../glade/gfax.glade.h:38
+msgid "Efax"
+msgstr "Efax"
+
+#: ../glade/gfax.glade.h:39
+msgid "Evolution"
+msgstr "Evolution"
+
+#: ../glade/gfax.glade.h:40
+msgid "Evolution Address books"
+msgstr ""
+
+#: ../glade/gfax.glade.h:41
+msgid "Exit"
+msgstr "Exit"
+
+#: ../glade/gfax.glade.h:42
+msgid "Facsimile Number:"
+msgstr "Faxa numurs:"
+
+#: ../glade/gfax.glade.h:43
+msgid "Facsimiles to Send"
+msgstr "Faksi, kas jÄnosÅ«ta"
+
+#: ../glade/gfax.glade.h:44
+#, fuzzy
+msgid "Fax Number:"
+msgstr "Faxa numurs:"
+
+#: ../glade/gfax.glade.h:45
+msgid "Fax Status:"
+msgstr "Faxa status:"
+
+#: ../glade/gfax.glade.h:46
+msgid "Fax log enabled"
+msgstr "Faxa izpildes rezultÄts apskatÄms"
+
+#: ../glade/gfax.glade.h:47
+#, fuzzy
+msgid ""
+"First we must choose a transport agent. \n"
+"\n"
+"A transport agent is a software package that is responsible for\n"
+"actually sending the facsimile with your modem. If you don't have \n"
+"one of these installed you should hit cancel here and install\n"
+"a transport agent first.\n"
+"\n"
+"Transport agents can be found at the following URL's but you should \n"
+"check your distribution CD first..\n"
+"\n"
+"Hylafax - http://www.hylafax.org\n"
+"Efax - http://www.cce.com/efax"
+msgstr ""
+"Vispirms ir jÄizvÄ“las transporta aÄ£ents.\n"
+"\n"
+"Transporta aģents ir programmatūra, kas ir atbildīga "
+"par to, kad kad notiek faxu sūtīšana caur jūsu modemu "
+"Ja jums pagaidÄm nav nevienas programmas, kas atbild par faksu sÅ«tÄ«Å¡anu, lÅ«dzu instalÄ“jiet to tagad.\n"
+"\n"
+"Transporta (faxu sÅ«tÄ«Å¡anas) aÄ£enti var atrasties zem Å¡ÄdÄm saitÄ“m\n"
+"bet vispirms lÅ«dzu pÄrbaudiet savas distribÅ«cijas CD.\n"
+"\n"
+"Hylafax - http://www.hylafax.org\n"
+"Mgetty - http://alpha.greenie.net/mgetty\n"
+"Efax - http://www.cce.com/efax"
+
+#: ../glade/gfax.glade.h:59
+msgid "Gfax"
+msgstr "Gfax"
+
+#: ../glade/gfax.glade.h:60
+msgid "Gfax - E-Mail Address"
+msgstr "Gfax - E-pasta adrese"
+
+#: ../glade/gfax.glade.h:61
+msgid "Gfax - Facsimile Transport Agent"
+msgstr "Gfax - Programma faxu sūtīšanai"
+
+#: ../glade/gfax.glade.h:62
+msgid "Gfax - Gnome facsimile program"
+msgstr "Gfax - Gnome-Faxu programma"
+
+#: ../glade/gfax.glade.h:63
+msgid "Gfax - Modem Selection"
+msgstr "Gfax - Modema izvēle"
+
+#: ../glade/gfax.glade.h:64
+msgid "Gfax - Phone Number Information"
+msgstr "Gfax - Telefona numura informÄcija"
+
+#: ../glade/gfax.glade.h:65
+msgid "Gfax - Setup Complete"
+msgstr "Gfax - UzstÄdÄ«Å¡ana pabeigta"
+
+#: ../glade/gfax.glade.h:66
+msgid "Gfax - Add new phone book."
+msgstr "Gfax - Jauna telefona grÄmata"
+
+#: ../glade/gfax.glade.h:67
+msgid "Gfax - Modify Job"
+msgstr ""
+
+#: ../glade/gfax.glade.h:68
+msgid "Gfax - New user setup"
+msgstr "Gfax - Jauna lietotÄja uzstÄdÄ«Å¡ana"
+
+#: ../glade/gfax.glade.h:69
+msgid "Gfax - Preferences"
+msgstr "Gfax - UzstÄdÄ«jumi"
+
+#: ../glade/gfax.glade.h:70
+msgid "Gfax - Transmission Progress"
+msgstr "Gfax - ApstrÄdes progress"
+
+#: ../glade/gfax.glade.h:71
+#, fuzzy
+msgid ""
+"Gfax can inform the Efax transport agent which\n"
+"serial port your modem is connected to."
+msgstr ""
+"Gfax var informēt Efax sistēmu par\n"
+"pie kura seriÄlÄ porta modems ir pieslÄ“gts."
+
+#: ../glade/gfax.glade.h:73
+msgid ""
+"Gfax setup is now complete!\n"
+"\n"
+"Gfax is configurable; there are other configuration \n"
+"options available under the preferences menu.\n"
+"\n"
+"You can run this first time setup at any time from\n"
+"the preferences section.\n"
+"\n"
+"Default preferences have been choosen for the\n"
+"transport agent you chose, you may want to\n"
+"customise them."
+msgstr ""
+"Gfax uzstÄdÄ«Å¡ana pabeigta.\n"
+"\n"
+"Gfax ir konfigurÄ“jams ar daudz dažadÄm kofigurÄcijas iespÄ“jÄm \n"
+"zem UZSTĀDĪJUMI.\n"
+"\n"
+"JÅ«s varat palaist pirmo reizi programmu ar jebkÄdiem laika uzstÄdÄ«jumiem.\n"
+"\n"
+"\n"
+"NoklusÄ“tie uzstÄdÄ«jumi ir izvÄ“lÄ“ti\n"
+"jÅ«s varat arÄ« rediģēt Å¡os uzstÄdÄ«jumus."
+
+#: ../glade/gfax.glade.h:84
+msgid "Hi Resolution Mode"
+msgstr "Izšķirtspēja"
+
+#: ../glade/gfax.glade.h:85
+msgid "Host Name:"
+msgstr "Hosta vÄrds:"
+
+#: ../glade/gfax.glade.h:86
+msgid "Hostname:"
+msgstr "Hosts:"
+
+#: ../glade/gfax.glade.h:87
+msgid "Hylafax"
+msgstr "Hylafax"
+
+#: ../glade/gfax.glade.h:88
+msgid "Hylafax - Choose this for network faxing."
+msgstr "Hylafax - Izvēlieties šo tīkla faksēšanai"
+
+#: ../glade/gfax.glade.h:89
+msgid ""
+"Hylafax and Mgetty+Sendfax can both be requested to send \n"
+"results of facsimile transmission to an email address.\n"
+"\n"
+"If you require this feature please enter your email address\n"
+"here. It's a good idea to include this even if you don't \n"
+"use it immediately, you can enable and disable it in the\n"
+"preferences section of Gfax.\n"
+" "
+msgstr ""
+"Hylafax un Mgetty+Sendfax var abi sūtīt\n"
+"rezultÄti faksÄ“Å¡anai uz e-pasta adresi\n"
+"\n"
+"\n"
+"Ja jÅ«s vÄ“laties Å¡Ädu iespÄ“ju, lÅ«dzu ierakstiet savu e-pasta adresi\n"
+"šeit. Ir laba ideja to ierakstīt arī tad, ja šī opcija netiks izmantota\n"
+"vÄ“lÄk Å¡o iespÄ“ju varÄ“s aizliegt vai atļaut\n"
+"zem UzstÄdÄ«jumi izvÄ“lnes.\n"
+" "
+
+#: ../glade/gfax.glade.h:97
+msgid "IP Port:"
+msgstr "IP Ports:"
+
+#: ../glade/gfax.glade.h:98
+msgid "LDAP"
+msgstr "LDAP"
+
+#: ../glade/gfax.glade.h:99
+msgid "Log Enabled"
+msgstr "Log aktivizēts"
+
+#: ../glade/gfax.glade.h:100
+msgid ""
+"Make no more than <maxdials> calls in attempting to send the facsimile. "
+"Once <maxdials> has been reached, the job will be killed."
+msgstr ""
+
+#: ../glade/gfax.glade.h:101
+msgid "Maximum Dials:"
+msgstr ""
+
+#: ../glade/gfax.glade.h:102
+msgid "Mgetty"
+msgstr "Mgetty"
+
+#: ../glade/gfax.glade.h:103
+msgid "Modem Connection"
+msgstr "Modema konekcija"
+
+#: ../glade/gfax.glade.h:104
+#, fuzzy
+msgid "Modem Port:"
+msgstr "Modema ports"
+
+#: ../glade/gfax.glade.h:105
+#, fuzzy
+msgid "Modem Type:"
+msgstr "Modema tips"
+
+#: ../glade/gfax.glade.h:106
+msgid "New Fax"
+msgstr "Jauns Fax"
+
+#: ../glade/gfax.glade.h:107 ../glade/send-druid.glade.h:23
+msgid "New phone book"
+msgstr "Jauna telefona grÄmata"
+
+#: ../glade/gfax.glade.h:108
+msgid "Open phone book"
+msgstr "AtvÄ“rt telefona grÄmatu"
+
+#: ../glade/gfax.glade.h:109
+#, fuzzy
+msgid "Page Size:"
+msgstr "Papīra lielums"
+
+#: ../glade/gfax.glade.h:110
+msgid "Password Dialog"
+msgstr "Paroles dialogs"
+
+#: ../glade/gfax.glade.h:111 ../glade/send-druid.glade.h:26
+#: ../src/newphonebook.cs:81
+msgid "Phone Book"
+msgstr "Telefona grÄmata"
+
+#: ../glade/gfax.glade.h:112
+msgid "Please enter a name for your new phone book."
+msgstr "LÅ«dzu ieraksti vÄrdu jaunajai telefonu grÄmatai."
+
+#: ../glade/gfax.glade.h:113
+msgid ""
+"Please enter the password \n"
+"for your fax server."
+msgstr ""
+"LÅ«dzu ieraksti savu paroli\n"
+"savam faxa serverim."
+
+#: ../glade/gfax.glade.h:115
+msgid "Please enter the type of phone book you are creating."
+
+msgstr "LÅ«dzu ievadi telefonu grÄmatas tipu, ko tu veido."
+
+#: ../glade/gfax.glade.h:121
+msgid ""
+"Please enter your facsimile number.\n"
+"\n"
+"This number is placed in the top one line header that is placed \n"
+"on all outgoing facsimiles.\n"
+"\n"
+"You may also choose a default dial prefix. Many companies in\n"
+"North America use the number \"9\" to reach an outside line.\n"
+msgstr ""
+"LÅ«dzu ievadiet faxa numuru.\n"
+"\n"
+"Å is numurs bÅ«s redzams visÄm izejoÅ¡ajÄm lapÄm paÅ¡Ä lapas augÅ¡Ä.\n"
+"\n"
+"Jūs varat izvēlēties arī noklusēto zvanīšanas prefixu \n"
+"Daudzas kompÄnijas USA lieto ciparu \"9\", lai pieslÄ“gtos ÄrÄ“jai lÄ«nijai \n"
+"EiropÄ toties lieto \"0\" lai pieslÄ“gtus citÄm valstÄ«m \n"
+"\n"
+
+#: ../glade/gfax.glade.h:129
+msgid ""
+"Please select the Evolution address books that you would \n"
+"like to use.\n"
+"\n"
+"These are only local address books and will only include\n"
+"contacts with facsimile numbers."
+msgstr ""
+
+#: ../glade/gfax.glade.h:134
+msgid "Port Number:"
+msgstr "Porta numurs"
+
+#: ../glade/gfax.glade.h:135
+msgid "Received Facsimiles"
+msgstr "Empfangene Faxe"
+
+#: ../glade/gfax.glade.h:136
+msgid "Remember this password"
+msgstr "Atcerēties paroli"
+
+#: ../glade/gfax.glade.h:137
+msgid "Send Email Notification"
+msgstr "Sūtīt e-pasta paziņojumu"
+
+#: ../glade/gfax.glade.h:138
+msgid "Send Immediately"
+msgstr "Sūtīt steidzami"
+
+#: ../glade/gfax.glade.h:139
+msgid "Speaker Volume:"
+msgstr ""
+
+#: ../glade/gfax.glade.h:140
+msgid "System"
+msgstr "Sistēma"
+
+#: ../glade/gfax.glade.h:141
+msgid ""
+"The TCP/IP port number of the fax server. Default hylafax port is 4559."
+msgstr ""
+"TCP/IP porta numurs faxa serverim. Noklusētais Hylafax ports ir 4559."
+
+#: ../glade/gfax.glade.h:142
+msgid ""
+"The host name of the network fax server. Enter \"localhost\" if you are not "
+"using a network fax server."
+msgstr ""
+"Hosta vÄrds tÄ«kla faxa serverim. AtstÄjiet \"localhost\" ja jÅ«s nelietojat,\n"
+"tīkla faxa serveri."
+
+#: ../glade/gfax.glade.h:143
+msgid "The serial port the modem is on - ttyS0 is COM1, ttyS1 is COM2 etc."
+msgstr ""
+"SeriÄlÄ ports, pie kura modems ir ieslÄ“gts - ttyS0,COM1, ttyS1 ir COM2 u.t.t."
+
+#: ../glade/gfax.glade.h:144
+msgid ""
+"There was an error transmitting\n"
+"your facsimile to the server!"
+msgstr ""
+"NeizdevÄs nosÅ«tÄ«t \n"
+"faxu uz faxa serveri!"
+
+#: ../glade/gfax.glade.h:146
+msgid ""
+"This will lead you through the process \n"
+"of creating a new phone book."
+msgstr ""
+"Tagad jūs tiksiet vadīti cauri procesam, \n"
+"veidojot jaunu telefonu grÄmatu."
+
+#: ../glade/gfax.glade.h:148
+#, fuzzy
+msgid "Time to send:"
+msgstr "Laiks, ka jÄnosÅ«ta"
+
+#: ../glade/gfax.glade.h:149
+msgid ""
+"Transmitting facsimile to \n"
+"Hylafax server."
+msgstr ""
+"Sūtīt faxu uz\n"
+"Hylafax-Server."
+
+#: ../glade/gfax.glade.h:151
+msgid "Transport Agent"
+msgstr "Transporta aģents"
+
+#: ../glade/gfax.glade.h:152
+msgid "Use Cover Page"
+msgstr "Lietot priekšlapu"
+
+#: ../glade/gfax.glade.h:153
+msgid "Use Fine Resolution"
+msgstr "Lietot normÄlu izÅ¡Ä·irtspÄ“ju"
+
+#: ../glade/gfax.glade.h:154
+msgid "User"
+msgstr "LietotÄjs"
+
+#: ../glade/gfax.glade.h:155
+msgid "Username:"
+msgstr "LietotÄjvÄrds:"
+
+#: ../glade/gfax.glade.h:156
+msgid ""
+"Very Low\n"
+"Low\n"
+"Medium\n"
+"High"
+msgstr ""
+
+#: ../glade/gfax.glade.h:160
+msgid "View / Print"
+msgstr ""
+
+#: ../glade/gfax.glade.h:161
+msgid ""
+"Welcome to Gfax!\n"
+"\n"
+"\n"
+"Gfax is a GNOME facsimile program that provides \n"
+"the familiar \"popup\" window when printing to a fax \n"
+"printer.\n"
+"\n"
+"The following pages will help you to setup Gfax."
+msgstr ""
+"msgid \"c2.0\"\n"
+"msgstr \"\""
+
+#: ../glade/gfax.glade.h:169
+msgid "Which serial port is your modem connected to?"
+msgstr "Pie kura seriÄlÄ porta jÅ«su modems ir pieslÄ“gts?"
+
+#: ../glade/gfax.glade.h:170
+msgid ""
+"Your facsimile was sucessfully\n"
+" transmitted!"
+msgstr ""
+"Fakss nosūtīts \n"
+"veiksmīgi."
+
+#: ../glade/gfax.glade.h:172
+msgid "_Cancel Job"
+msgstr "_pÄrtraukt darbu"
+
+#: ../glade/gfax.glade.h:173
+msgid "_Fax"
+msgstr "_Fax"
+
+#: ../glade/gfax.glade.h:174
+msgid "_Help"
+msgstr "_Palīdzība"
+
+#: ../glade/gfax.glade.h:175
+msgid "_Modify Job"
+msgstr ""
+
+#: ../glade/gfax.glade.h:176
+msgid "_Settings"
+msgstr "_UzstÄdÄ«jumi"
+
+#: ../glade/gfax.glade.h:177
+msgid "cua1"
+msgstr "cua1"
+
+#: ../glade/gfax.glade.h:178
+msgid "cua2"
+msgstr "cua2"
+
+#: ../glade/gfax.glade.h:179
+msgid ""
+"letter\n"
+"legal\n"
+"a4"
+msgstr ""
+
+#: ../glade/gfax.glade.h:182
+msgid "localhost"
+msgstr "localhost"
+
+#: ../glade/gfax.glade.h:183
+msgid "modem"
+msgstr "modem"
+
+#: ../glade/gfax.glade.h:184
+msgid "oklabel"
+msgstr "oklabel"
+
+#: ../glade/gfax.glade.h:185
+msgid "ttyS0"
+msgstr "ttyS0"
+
+#: ../glade/gfax.glade.h:186
+msgid "ttyS1"
+msgstr "ttyS1"
+
+#: ../glade/gfax.glade.h:187
+msgid "ttyS2"
+msgstr "ttyS2"
+
+#: ../glade/gfax.glade.h:188
+msgid "ttyS3"
+msgstr "ttyS3"
+
+#: ../glade/send-druid.glade.h:1
+msgid "<b><big>Current Phone Books</big></b>"
+msgstr "<b><big>EsoÅ¡Ä telefonu grÄmata</big></b>"
+
+#: ../glade/send-druid.glade.h:2
+msgid "<b><big>Edit Phone book</big></b>"
+msgstr "<b><big>Rediģēt telefonu grÄmatu</big></b>"
+
+#: ../glade/send-druid.glade.h:3
+msgid "<b>Facsimile Job Details</b>"
+msgstr "Faxa darba detaļas"
+
+#: ../glade/send-druid.glade.h:4
+msgid "<b>New fax information</b>"
+msgstr "<b>New fax information</b>"
+
+#: ../glade/send-druid.glade.h:5
+msgid "Add"
+msgstr "Add"
+
+#: ../glade/send-druid.glade.h:6
+msgid "Browse"
+msgstr ""
+
+#: ../glade/send-druid.glade.h:7
+msgid "Clear"
+msgstr "Dzēst"
+
+#: ../glade/send-druid.glade.h:8
+msgid "Close"
+msgstr "Taisīt ciet"
+
+#: ../glade/send-druid.glade.h:9 ../src/gfaxphonebook.cs:89
+#: ../src/gfaxsend.cs:142 ../src/sendphonebook.cs:105
+msgid "Contact"
+msgstr "Kontakti"
+
+#: ../glade/send-druid.glade.h:10
+msgid "Current Phone Book"
+msgstr "EsoÅ¡Ä telefonu grÄmata"
+
+#: ../glade/send-druid.glade.h:12
+#, fuzzy
+msgid "Delete phone book"
+msgstr "DzÄ“st telefonu grÄmatu"
+
+#: ../glade/send-druid.glade.h:13
+msgid "Details"
+msgstr "Detaļas"
+
+#: ../glade/send-druid.glade.h:14
+msgid "E-Mail job results to:"
+msgstr "E-pasta darba rezultÄts uz:"
+
+#: ../glade/send-druid.glade.h:15
+msgid "Enter a phone number and hit <enter>."
+msgstr "Ieraksti telefona numuru un nospied Enter."
+
+#: ../glade/send-druid.glade.h:16
+msgid "Fax number:"
+msgstr "Faxa numurs:"
+
+#: ../glade/send-druid.glade.h:17
+msgid "Fine resolution"
+msgstr "Laba rezolūcija"
+
+#: ../glade/send-druid.glade.h:18
+msgid "Gfax - Phone Book Selection"
+msgstr "Gfax - Telefona grÄmatas izvÄ“le"
+
+#: ../glade/send-druid.glade.h:19
+msgid "Gfax - Phone books"
+msgstr "Gfax - Telefona grÄmata"
+
+#: ../glade/send-druid.glade.h:20
+msgid "Job"
+msgstr "Darbs"
+
+#: ../glade/send-druid.glade.h:21
+msgid "New Entry"
+msgstr "Jauns ieraksts"
+
+#: ../glade/send-druid.glade.h:22
+msgid "New Item"
+msgstr "Jauna sadaļa"
+
+#: ../glade/send-druid.glade.h:24 ../src/gui.cs:238 ../src/gui.cs:249
+msgid "Number"
+msgstr "Numurs"
+
+#: ../glade/send-druid.glade.h:25 ../src/gfaxphonebook.cs:87
+#: ../src/gfaxsend.cs:141 ../src/sendphonebook.cs:103
+msgid "Organization"
+msgstr "OrganizÄcija"
+
+#: ../glade/send-druid.glade.h:27
+msgid "Phone Book Item List"
+msgstr "TelefongrÄmatas liste"
+
+#: ../glade/send-druid.glade.h:28
+msgid "Phone Books"
+msgstr "Telefonu grÄmata"
+
+#: ../glade/send-druid.glade.h:29
+msgid "Postscript file:"
+msgstr "Postscript-fails:"
+
+#: ../glade/send-druid.glade.h:30
+msgid "Save and Close"
+msgstr "SaglabÄt un aizvÄ“rt"
+
+#: ../glade/send-druid.glade.h:31
+#, fuzzy
+msgid "Save and close"
+msgstr "SaglabÄt un aizvÄ“rt"
+
+#: ../glade/send-druid.glade.h:32 ../src/gfaxsend.cs:139
+msgid "Send"
+msgstr "Sūtīt"
+
+#: ../glade/send-druid.glade.h:33
+msgid "Send Fax"
+msgstr "Nosūtīt faksu"
+
+#: ../glade/send-druid.glade.h:34
+msgid "Send immediately"
+msgstr "Sūtīt faksu nekavējoties"
+
+#: ../glade/send-druid.glade.h:35
+msgid "Transmit the fax"
+msgstr "PÄrsÅ«tÄ«t faksu"
+
+#: ../glade/send-druid.glade.h:36
+msgid "Update"
+msgstr "Uzlabot"
+
+#: ../glade/send-druid.glade.h:37
+msgid "_File"
+msgstr "_Fails"
+
+#: ../src/efax.cs:384
+msgid "Scanning control files."
+msgstr ""
+
+#: ../src/efax.cs:397
+msgid "Running job "
+msgstr ""
+
+#: ../src/efax.cs:421 ../src/efax.cs:508
+msgid "Busy retries exceeded"
+msgstr ""
+
+#: ../src/efax.cs:468
+#, fuzzy
+msgid "Sending facsimile..."
+msgstr "SÅ«ta faxu..."
+
+#. If successful then mv the control file to the done queue and flag
+#. a date for it's removal.
+#: ../src/efax.cs:492
+msgid "Success"
+msgstr "Veiksmīgi"
+
+#. fatal errors - no retry
+#. fatalError = true;
+#. change code in file
+#: ../src/efax.cs:516
+msgid "Fatal error"
+msgstr "Kļūmes"
+
+#. Modem error - no retry
+#. fatalError = true;
+#: ../src/efax.cs:522
+msgid "Fatal modem error"
+msgstr "Modema kļūdas"
+
+#. Modem not responding
+#. fatalError = true;
+#: ../src/efax.cs:528
+msgid "Modem not responding"
+msgstr "Nevar sakonektēties ar modemu"
+
+#. Program terminated
+#. fatalError = true;
+#: ../src/efax.cs:534
+msgid "Program terminated"
+msgstr ""
+
+#: ../src/fax.cs:60
+msgid "No Connection"
+msgstr "Nav konekcijas"
+
+#: ../src/fax.cs:71
+msgid ""
+"Efax transmit process running...\n"
+"Scanning job files every 30 seconds."
+msgstr ""
+
+#: ../src/fax.cs:77
+msgid "Error transport agent not specified!"
+msgstr "Kļūda faxu sÅ«tÄ«Å¡anas programma nav norÄdÄ«ta!"
+
+#: ../src/fax.cs:132
+msgid "Run"
+msgstr "Startēt"
+
+#: ../src/fax.cs:135
+msgid "Sleep"
+msgstr "Gulēt"
+
+#: ../src/fax.cs:138
+msgid "Block"
+msgstr ""
+
+#: ../src/fax.cs:141
+msgid "Busy"
+msgstr "Aizņemts"
+
+#: ../src/fax.cs:144 ../src/fax.cs:244
+#, fuzzy
+msgid "Done"
+msgstr "Darīts"
+
+#: ../src/fax.cs:147
+#, fuzzy
+msgid "Fail"
+msgstr "_"
+
+#: ../src/fax.cs:150
+#, fuzzy
+msgid "New"
+msgstr "Jauns fax"
+
+#: ../src/fax.cs:241
+msgid "Receiving"
+msgstr "Saņemu"
+
+#: ../src/gfaxphonebook.cs:88 ../src/gfaxsend.cs:140
+#: ../src/sendphonebook.cs:104
+#, fuzzy
+msgid "Phone Number"
+msgstr "Porta numurs"
+
+#: ../src/gfaxphonebook.cs:213
+msgid "Are you sure you want to delete the phone book?"
+msgstr "Vai esi droÅ¡s, ka vÄ“lies izdzÄ“st esoÅ¡o telefonu grÄmatu?"
+
+#: ../src/gfaxphonebook.cs:297
+msgid ""
+"You have unsaved phone book entries.\n"
+" Are you sure you want to Quit?"
+msgstr ""
+"Tu neesi saglabÄjis telefonu grÄmatas ierakstus. \n"
+"Vai tu esi drošs, ka vēlies beigt darbu? "
+
+#: ../src/gfaxphonebook.cs:460
+msgid "Press the <DELETE> key to delete an entry."
+msgstr "Nospied Delete, lai dzēstu ierakstu."
+
+#: ../src/gfaxprefs.cs:190 ../src/gfaxprefs.cs:208
+msgid "You need to exit Gfax and restart it when you change transport agents"
+msgstr ""
+
+#: ../src/gfaxsend.cs:88
+msgid ""
+"\n"
+"This is the first time you have run Gfax.\n"
+"Please run Gfax from the menu or command line and set your \n"
+"MODEM TYPE, PORT and Fax number under preferences.\n"
+"\n"
+"Gfax is initially setup to use Efax, you may change it use \n"
+"Hylafax if you prefer or require connection to a network \n"
+"facsimile server."
+msgstr ""
+
+#: ../src/gfaxsend.cs:164
+msgid "Spooled from print job"
+msgstr ""
+
+#: ../src/gfaxsend.cs:276
+msgid ""
+"\n"
+"The file you have entered does not exist.\n"
+"Please check the name and try again."
+msgstr ""
+
+#: ../src/gfaxsend.cs:310
+msgid ""
+"\n"
+"You have not entered a facsimile number!\n"
+"Please enter a number and press the <i><b>Enter</b></i> key or\n"
+"click the <i><b>Phone Book</b></i> button to select numbers or\n"
+"entire phone books."
+msgstr ""
+
+#: ../src/gui.cs:143
+msgid ""
+"\n"
+"This is the first time you have run Gfax.\n"
+"You should set your MODEM TYPE and PORT under preferences.\n"
+"\n"
+"Gfax is initially setup to use Efax, you may change it use \n"
+"Hylafax if you prefer or require connection to a network \n"
+"facsimile server."
+msgstr ""
+
+#: ../src/gui.cs:157
+msgid ""
+"Your spool directory is missing!\n"
+"\t\t\t\t\t\n"
+"Please login as the root user and create the "
+msgstr ""
+
+#: ../src/gui.cs:161
+msgid ""
+" directory.\n"
+"\n"
+"All users should be able to write to it.\n"
+msgstr ""
+
+#: ../src/gui.cs:166
+msgid ""
+"The doneq directory is missing in your spool directory!\n"
+"\t\t\t\t\t\n"
+"Please login as the root user and create the "
+msgstr "LÅ«dzu ielogojies kÄ sakne"
+
+#: ../src/gui.cs:169
+msgid ""
+"/doneq directory.\n"
+"\n"
+"All users should be able to write to it.\n"
+msgstr ""
+
+#: ../src/gui.cs:175
+msgid ""
+"The recq directory is missing in your spool directory!\n"
+"\t\t\t\t\t\n"
+"Please login as the root user and create the "
+msgstr ""
+
+#: ../src/gui.cs:178
+msgid ""
+"/recq directory.\n"
+"\n"
+"All users should be able to write to it.\n"
+msgstr ""
+
+#: ../src/gui.cs:237 ../src/gui.cs:248
+#, fuzzy
+msgid "Jobid"
+msgstr "Darba ID"
+
+#: ../src/gui.cs:239 ../src/gui.cs:250 ../src/gui.cs:259
+#, fuzzy
+msgid "Status"
+msgstr "Faxa status:"
+
+#: ../src/gui.cs:240 ../src/gui.cs:251
+msgid "Owner"
+msgstr "Īpašnieks"
+
+#: ../src/gui.cs:241 ../src/gui.cs:252
+msgid "Pages"
+msgstr "Lappuses"
+
+#: ../src/gui.cs:242 ../src/gui.cs:253
+#, fuzzy
+msgid "Dials"
+msgstr "Zvana"
+
+#: ../src/gui.cs:243 ../src/gui.cs:254
+#, fuzzy
+msgid "Send At"
+msgstr "Sūtīt"
+
+#: ../src/gui.cs:244 ../src/gui.cs:255
+msgid "Error"
+msgstr "Kļūda"
+
+#: ../src/gui.cs:258
+#, fuzzy
+msgid "Sender"
+msgstr "SÅ«tÄ«tÄjs"
+
+#: ../src/gui.cs:260
+#, fuzzy
+msgid "Pages "
+msgstr "Lappuses"
+
+#: ../src/gui.cs:261
+msgid "Arrived"
+msgstr "IenÄcis"
+
+#: ../src/gui.cs:262
+#, fuzzy
+msgid "Filename"
+msgstr "_Faila vÄrds"
+
+#: ../src/gui.cs:666
+msgid ""
+"Cannot read the facsimile file from the server. You most likely do not \n"
+"have permission to read the file. Check the settings on your fax server."
+msgstr ""
+
+#: ../src/gui.cs:673
+msgid ""
+"Cannot start your faxviewer program. \n"
+"Please check your settings. It is currently set to "
+msgstr ""
+
+#: ../src/gui.cs:674
+msgid "."
+msgstr ""
+
+#: ../src/gui.cs:709
+msgid ""
+"Cannot delete the facsimile file from the server. You most likely do not \n"
+"have permission to delete the file. Check the settings on your fax server."
+msgstr ""
+
+#: ../src/gui.cs:715
+msgid ""
+"Cannot delete the file on the Hylafax server. \n"
+"Please check your settings or contact your system Administrator"
+msgstr ""
+
+#: ../src/gui.cs:785
+msgid "Copyright (C) 2003 George Farris <farrisg@shaw.ca>"
+msgstr ""
+
+#: ../src/gui.cs:786
+msgid "A Facsimile application for GNOME"
+msgstr ""
+
+#: ../src/gui.cs:831
+#, fuzzy
+msgid "Refreshing server status..."
+msgstr "Auto Refresh Queue"
+
+#: ../src/gui.cs:868
+#, fuzzy
+msgid "Refreshing queue..."
+msgstr "Auto Refresh Queue"
+
+#: ../src/gui.cs:934 ../src/gui.cs:953
+msgid "There are "
+msgstr ""
+
+#: ../src/gui.cs:934 ../src/gui.cs:953
+msgid " jobs in the queue"
+msgstr ""
+
+#: ../src/gui.cs:941 ../src/gui.cs:960
+msgid "There are 0 jobs in the queue"
+msgstr ""
+
+#: ../src/hylafax.cs:146
+msgid "You can not write data to this stream"
+msgstr "Tagad tu vari rakstīt datus."
+
+#: ../src/hylafax.cs:150
+msgid "You can not read data from this stream"
+msgstr "Tagad tu vari datus lasīt."
+
+#: ../src/hylafax.cs:158
+msgid ""
+"Could not connect to your Hylafax server.\n"
+"Check console messages for further information\n"
+"\n"
+"You might need to set a value for username."
+msgstr ""
+"Tu nevari piekonektēties pie Hylafax servera..\n"
+"\n"
+"IespÄ“jams tev jÄnorÄda pareizs lietotÄjvÄrds."
+
+#: ../src/main.cs:109
+msgid "Gfax help..."
+msgstr "Palīdzība Gfax"
+
+#: ../src/main.cs:135
+msgid ""
+"Gconfd cannot find your settings. \n"
+"If you are running Gfax immediately \n"
+"after an installation, you may have \n"
+"to log out and log back in again."
+msgstr ""
+
+#: ../src/newphonebook.cs:80
+#, fuzzy
+msgid "Use"
+msgstr "Lietot"
+
+#: ../src/phonebook.cs:295
+#, csharp-format
+msgid "Can't open file : {0}"
+msgstr "Nevar atvērt {0} failu"
+
+#: ../src/sendphonebook.cs:66
+msgid "You don't have any phone books yet."
+msgstr "Jums patlaban nav izveidota neviena telefona grÄmata."
+
+#. Got have a column title or things won't show up
+#: ../src/sendphonebook.cs:94
+#, fuzzy
+msgid "Phone books"
+msgstr "Telefona grÄmata"
+
+#~ msgid "0"
+#~ msgstr "0"
+
+#~ msgid "1"
+#~ msgstr "1"
+
+#~ msgid "10 Minutes"
+#~ msgstr "10 Minūtes"
+
+#~ msgid "1000"
+#~ msgstr "1000"
+
+#~ msgid "115200"
+#~ msgstr "115200"
+
+#~ msgid "15 Minutes"
+#~ msgstr "15 Minūtes"
+
+#~ msgid "1500"
+#~ msgstr "1500"
+
+#~ msgid "19200"
+#~ msgstr "19200"
+
+#~ msgid "2"
+#~ msgstr "2"
+
+#~ msgid "2000"
+#~ msgstr "2000"
+
+#~ msgid "2400"
+#~ msgstr "2400"
+
+#~ msgid "3"
+#~ msgstr "3"
+
+#~ msgid "30 Minutes"
+#~ msgstr "30 Minūtes"
+
+#~ msgid "38400"
+#~ msgstr "38400"
+
+#~ msgid "4"
+#~ msgstr "4"
+
+#~ msgid "4800"
+#~ msgstr "4800"
+
+#~ msgid "5"
+#~ msgstr "5"
+
+#~ msgid "5 Minutes"
+#~ msgstr "5 Minūtes"
+
+#~ msgid "500"
+#~ msgstr "500"
+
+#~ msgid "57600"
+#~ msgstr "57600"
+
+#~ msgid "6"
+#~ msgstr "6"
+
+#~ msgid "7"
+#~ msgstr "7"
+
+#~ msgid "8"
+#~ msgstr "8"
+
+#~ msgid "9"
+#~ msgstr "9"
+
+#~ msgid "9600"
+#~ msgstr "9600"
+
+#~ msgid ""
+#~ "A few modems respond to raising the DTR line (when opening the device) "
+#~ "with `OK'. This can confuse `sendfax', because it will see this OK as "
+#~ "response to the next command. Default is 0."
+#~ msgstr ""
+#~ "A few modems respond to raising the DTR line (when opening the device) "
+#~ "with `OK'. This can confuse `sendfax', because it will see this OK as "
+#~ "response to the next command. Default is 0."
+
+#, fuzzy
+#~ msgid "ATT (Dataport, Paradyne)"
+#~ msgstr "FCINIT='-j\\Q4'\t\t#AT&T (Dataport, Paradyne)"
+
+#~ msgid ""
+#~ "After the maximum number of tries for one page are reached, `sendfax' can "
+#~ "report an error and abort or continue. Default is Yes."
+#~ msgstr ""
+#~ "After the maximum number of tries for one page are reached, `sendfax' can "
+#~ "report an error and abort or continue. Default is Yes."
+
+#~ msgid ""
+#~ "An 'AT...' command that will be sent to the modem at the end of the modem "
+#~ "initialization, right before dialing."
+#~ msgstr ""
+#~ "An 'AT...' command that will be sent to the modem at the end of the modem "
+#~ "initialization, right before dialing."
+
+#~ msgid "Baud Rate Switch"
+#~ msgstr "Baud Rate Switch"
+
+#~ msgid ""
+#~ "Controls the amount of information written into the fax log file. "
+#~ "Default is 3."
+#~ msgstr ""
+#~ "Controls the amount of information written into the fax log file. "
+#~ "Default is 3."
+
+#~ msgid "Debug Level"
+#~ msgstr "Debug Level"
+
+#~ msgid "Dial Command"
+#~ msgstr "Zvanīšanas komanda"
+
+#~ msgid "Disabled"
+#~ msgstr "Deaktivizēt"
+
+#~ msgid "Fax Users Allowed"
+#~ msgstr "Faxa lietotÄjiem atļauts"
+
+#~ msgid "Fax Users Denied"
+#~ msgstr "Faxa lietotÄjiem nepieejams"
+
+#~ msgid "Hour"
+#~ msgstr "Stunda"
+
+#~ msgid ""
+#~ "How often you want the fax queue scanned. Faxes won't be transmitted "
+#~ "until \"faxrunq\" is run to scan the queue. This value is set in /etc/"
+#~ "crontab."
+#~ msgstr ""
+#~ "Cik bieži tu vēlies lai faxu rinda tiktu skenēta? \n"
+#~ "tiklīdz \"faxrunq\" darbojas skenējas rinda. Vērtība ir ielikta \n"
+#~ "iekš /etc/crontab ."
+
+#~ msgid "Ignore Carrier"
+#~ msgstr "IgnorÄ“t pÄrplÅ«di"
+
+#~ msgid "Maximum Tries per Page"
+#~ msgstr "Maksimums mÄ“Ä£inÄjumu lapai "
+
+#~ msgid "Mgetty+Sendfax"
+#~ msgstr "Mgetty+Sendfax"
+
+#~ msgid "Mgetty+Sendfax Setup"
+#~ msgstr "UzstÄdÄ«t Mgetty+Sendfax"
+
+#~ msgid "Minute"
+#~ msgstr "Minūte"
+
+#~ msgid "Modem Handshake"
+#~ msgstr "Modem Handshake"
+
+#~ msgid "Modem Initialization String"
+#~ msgstr "Modēma inicializēšana"
+
+#~ msgid "Modem Port"
+#~ msgstr "Modema ports"
+
+#~ msgid "Modem Quirks"
+#~ msgstr "Modema īpatnības"
+
+#~ msgid "Modem Speed (bps)"
+#~ msgstr "Modema Ätrums (bps)"
+
+#~ msgid "Modem Type"
+#~ msgstr "Modema tips"
+
+#, fuzzy
+#~ msgid "Motorola (Power Modem, 3400 Pro,..."
+#~ msgstr "FCINIT='-j\\Q1'\t\t#Motorola (Power Modem, 3400 Pro,.)"
+
+#, fuzzy
+#~ msgid "Multi-Tech (for bit reversal)"
+#~ msgstr "FCINIT='-or'\t\t # Multi-Tech (for bit reversal)"
+
+#~ msgid "No"
+#~ msgstr "NÄ“"
+
+#~ msgid "None"
+#~ msgstr "Neviens"
+
+#~ msgid ""
+#~ "On some (very few) modems it is necessary to start with baudrate \"A\" "
+#~ "and switch to baudrate \"B\" after sending the `AT+FCLASS=2' command. "
+#~ "Default is None."
+#~ msgstr ""
+#~ "Dažiem modemiem ir svarÄ«gi sÄkt darbu no Baudrate\n"
+#~ "\"A\" un pÄrslÄ“gties uz baudrate pÄ“c 'AT+FCLASS=2' komandas\n"
+#~ "Noklusēta nav."
+
+#~ msgid "Open Delay (msec)"
+#~ msgstr "Atvērt ar nokavēšanos (milisekundes)"
+
+#, fuzzy
+#~ msgid "QuickComm (Spirit II)"
+#~ msgstr "FCINIT='-j*F1'\t\t # QuickComm (Spirit II)"
+
+#~ msgid "Run Fax Queue Every"
+#~ msgstr "Palaist Faxu rindu katru"
+
+#~ msgid "SendFax Config File"
+#~ msgstr "SÅ«tÄ«t faxu konfigurÄcijas failu"
+
+#~ msgid "Sendfax Config File"
+#~ msgstr "SÅ«tÄ«t faxu konfigurÄcijas failu"
+
+#~ msgid "Setup Druid"
+#~ msgstr "UzstÄdÄ«Å¡anas pÄrvaldÄ«tÄjs"
+
+#~ msgid ""
+#~ "The location of the mgetty \"sendfax.config\" file. Default is \"/etc/"
+#~ "mgetty+sendfax/sendfax.config\". You shouldn't have to change this."
+#~ msgstr ""
+#~ "LokÄcijas vieta mgetty \"sendfax.config\" failam. NoklusÄ“tais ir zem \n"
+#~ "\"/etc/mgetty+sendfax/sendfax.config\" Parasti Å¡is fails nav jÄmaina, bet tas ir iespÄ“jams, \n"
+#~ "ja rodas grÅ«tÄ«bas ar noklusÄ“tajiem uzstÄdÄ«jumiem.\""
+
+#~ msgid ""
+#~ "The maximum number of tries per page if the receiving end reports "
+#~ "reception errors. Default is 3."
+#~ msgstr ""
+#~ "MaksimÄlais mÄ“Ä£inÄjumu daudzums, ja sanemÅ¡ana lapai \n"
+#~ "ir neveiksmīga. Noklusētais ir 3."
+
+#~ msgid ""
+#~ "The speed to set your serial port at. Try the highest and go down from "
+#~ "there."
+#~ msgstr ""
+#~ "Ä€trums seriÄlajam portam. PamÄ“Ä£iniet\n"
+#~ "vislielÄko un pÄ“c tam pakÄpeniski mazÄku Ätrumu."
+
+#~ msgid ""
+#~ "This can be used to adapt `sendfax' to some peculiarities in certain "
+#~ "modems. Not normally required."
+#~ msgstr ""
+#~ "Šis varētu tikt izmantots lai `sendfax' varētu tikt "
+#~ "pieskaņots pie modemiem, kas parasti netiek izmantoti."
+
+#~ msgid ""
+#~ "This is the command used for dialing out. Usually this will be something "
+#~ "simple, as `ATDT' for tone or `ATDP' for pulse dialing."
+#~ msgstr ""
+#~ "Å Ä« ir komanda, kas nodroÅ¡ina izsÅ«tÄ«Å¡anu uz Ärpusi\n"
+#~ "vienkÄrsi `ATDT' tonim vai `ATDP' prieks impulsa toņa."
+
+#~ msgid ""
+#~ "This will initialize the modem when the port is opened. See your modem "
+#~ "manual. Default is ATZ."
+#~ msgstr ""
+#~ "šis inicializēs modemu, kas ports ir atvērts. Skatīt sava modema \n"
+#~ "aprakstÄ, ja tÄds ir. NoklusÄ“tais ir ATZ."
+
+#~ msgid "Type of fax modem. See your modem manual. Default is auto."
+#~ msgstr ""
+#~ "Faxa modema tips. Noklusētais ir auto."
+
+#, fuzzy
+#~ msgid "USR (Courier, Sportster)"
+#~ msgstr "FCINIT='-j&H2'\t\t# USR (Courier, Sportster)"
+
+#, fuzzy
+#~ msgid "User Defined"
+#~ msgstr "LietotÄja definÄ“ts"
+
+#~ msgid ""
+#~ "Users allowed to use the fax system. Can be empty only if the deny list "
+#~ "is populated. These must be user names."
+#~ msgstr ""
+#~ "LietotÄji drÄ«kst lietot faxu sistÄ“mu. Var bÅ«t tukÅ¡s ja ieliek listÄ“ pie tiem\n"
+#~ "kam Å¡Äda iespÄ“ja ir liegta. Å iem jÄbÅ«t lietotÄjvÄrdiem.\n"
+#~ ""
+
+#~ msgid ""
+#~ "Users denied from using the fax system. Can be empty only if the allow "
+#~ "list is populated."
+#~ msgstr ""
+#~ "LietotÄji bloÄ·Ä“ti lai Å¡o sistÄ“mu lietotu. Var bÅ«t tukÅ¡s,\n"
+#~ "tikai tad, ja ir ielikts listē\n"
+#~ "pie attiecÄ«gajiem lietotÄjiem."
+
+#~ msgid "Yes"
+#~ msgstr "JÄ"
+
+#~ msgid "a4"
+#~ msgstr "a4"
+
+#~ msgid "auto"
+#~ msgstr "auto"
+
+#~ msgid "c2.0"
+#~ msgstr "c2.0"
+
+#~ msgid "cls2"
+#~ msgstr "cls2"
+
+#~ msgid "legal"
+#~ msgstr "legal"
+
+#~ msgid "letter"
+#~ msgstr "letter"
+
+#~ msgid "'-x /usr/spool/uucp/LCK..$DEV'"
+#~ msgstr "'-x /usr/spool/uucp/LCK..$DEV'"
+
+#~ msgid "'-x /var/lock/LCK..$DEV'"
+#~ msgstr "'-x /var/lock/LCK..$DEV'"
+
+#~ msgid "*"
+#~ msgstr "*"
+
+#~ msgid "-x /var/spool/uucp/LCK..$DEV'"
+#~ msgstr "-x /var/spool/uucp/LCK..$DEV'"
+
+#~ msgid "/etc/efax.rc"
+#~ msgstr "/etc/efax.rc"
+
+#~ msgid ""
+#~ "Complete...\n"
+#~ "\n"
+#~ "Your new phone book is ready for you to add items."
+#~ msgstr ""
+#~ "Complete...\n"
+#~ "\n"
+#~ "Your new phone book is ready for you to add items."
+
+#~ msgid "Efax config file"
+#~ msgstr "Efax konfigurēšanas fails"
+
+#~ msgid "Enter a phone number and hit <enter> or press the \"Add\" button"
+#~ msgstr ""
+#~ "Ierakstiet telefona numuru un nospiedeit enter vai "
+#~ "spiediet pogu \"Pievienot\"."
+
+#~ msgid "FCINIT=''"
+#~ msgstr "FCINIT=''"
+
+#~ msgid "Force xon/xoff"
+#~ msgstr "Force xon/xoff"
+
+#~ msgid "Gfax - Select postcript file"
+#~ msgstr "Gfax - izvēlēties postscript failu"
+
+#~ msgid "Lock File"
+#~ msgstr "saslēgt failu"
+
+#~ msgid "Preferences"
+#~ msgstr "UzstÄdÄ«jumi"
+
+#~ msgid "Send later"
+#~ msgstr "SÅ«tÄ«t vÄ“lÄk"
+
+#~ msgid ""
+#~ "Status Column Definition: D = Complete, R = Running, F = Failed, S = "
+#~ "Sleeping, W = Waiting for modem, B = Blocked by job, P = Pending"
+#~ msgstr ""
+#~ "StÄvoklis definÄ“jumiem: D = Pabeigts, R = ProcesÄ, F =\n"
+#~ "Neizdevies, S = GuļoÅ¡s, W = Gaida brÄ«vu modemu, B= BloÄ·Ä“ts, P=ApstÄjies \n"
+
+#~ msgid "Use cover page"
+#~ msgstr "Lietot priekšlapu"
+
+#~ msgid "New Phonebook"
+#~ msgstr "Jauna telefongrÄmata"
+
+#~ msgid "label379"
+#~ msgstr "label379"
+
+#~ msgid "label383"
+#~ msgstr "label383"
diff --git a/po/nl.po b/po/nl.po
new file mode 100644
index 0000000..f83749d
--- /dev/null
+++ b/po/nl.po
@@ -0,0 +1,1686 @@
+# English translations for gfax package.
+# Copyright (C) 2004 THE gfax'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the gfax package.
+# George Farris <george@gmsys.com>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gfax 0.7.6\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-11-29 19:29-0800\n"
+"PO-Revision-Date: 2005-02-24 19:21+0100\n"
+"Last-Translator: Bart Verstraete <bartverstraete@telenet.be>\n"
+"Language-Team: Dutch <bartverstraete@telenet.be>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../gfax.desktop.in.h:1
+#, fuzzy
+msgid "Gfax Facsimile Program"
+msgstr "Gfax Facsimile Verzender"
+
+#: ../gfax.desktop.in.h:2
+#, fuzzy
+msgid "Send and Receive Facsimiles"
+msgstr "Ontvangen Facsimiles"
+
+#: ../gfax.schemas.in.h:1
+msgid "0:never, 1:until carrier, 2:always, 3:on receive only"
+msgstr "0:nooit, 1: tot carrier, 2:altijd, 3:bij ontvangen alleen"
+
+#: ../gfax.schemas.in.h:2
+msgid "0:very low, 1:low, 2:medium, 3:high"
+msgstr "0:zeer laag, 1:laag, 2:gemiddeld, 3:hoog"
+
+#: ../gfax.schemas.in.h:3
+#, fuzzy
+msgid "Modem Device"
+msgstr "Modem apparaat"
+
+#: ../gfax.schemas.in.h:4
+#, fuzzy
+msgid "Modem initialization string"
+msgstr "Modem initialisatie string"
+
+#: ../gfax.schemas.in.h:5
+msgid "Modem reset string"
+msgstr "Modem reset string"
+
+#: ../gfax.schemas.in.h:6
+msgid "Not currently used."
+msgstr "Word op dit moment niet gebruikt"
+
+#: ../gfax.schemas.in.h:7
+msgid "The initialization code that is sent to the modem."
+msgstr "De initialisatie code dat is verzonen naar de modem"
+
+#: ../gfax.schemas.in.h:8
+msgid ""
+"The name of the lock file according to your system's conventions. If you're "
+"running Linux you shouldn't have to touch this."
+msgstr ""
+"De naam van het 'lock' bestandje volgen uw systeem overeenkomssssten. Als "
+"je linux draait zal je hier niet moeten aankomen."
+
+#: ../gfax.schemas.in.h:9
+msgid ""
+"The reset code that resets the modem to a power up state. The -Kz code works "
+"with most modems."
+msgstr ""
+"De reset code dat de modem naar de opstart staat resets. De -Kz code werkt "
+"bij de meeste modems."
+
+#: ../gfax.schemas.in.h:10
+#, fuzzy
+msgid ""
+"The serial port the modem is connected too. Typical values are ttyS0, cua0 "
+"or modem."
+msgstr ""
+"De seriële poort dat de modem verbonden mee is. Veel voorkomende waarden "
+"zijn: ttyS0, cua0 of modem."
+
+#: ../glade/gfax.glade.h:1
+msgid ""
+"\n"
+"Please enter your Hylafax server information here. If you are running "
+"Hylafax on the same computer That you are using Gfax on then \"Host Name\" "
+"should be set to \"localhost\".\n"
+msgstr ""
+"\n"
+"Geef uw Hylafax server informatie hier in. Als je Hylafax op dezelfde "
+"computer draait waar je Gfax op gebruikt dan dient \"Host Name\" verandert "
+"te veranderen in \"localhost\".\n"
+
+#: ../glade/gfax.glade.h:4
+msgid " Program: "
+msgstr " Programma: "
+
+#: ../glade/gfax.glade.h:5
+msgid "4559"
+msgstr "4559"
+
+#: ../glade/gfax.glade.h:6
+msgid "<b><big>E-Mail Notification</big></b>"
+msgstr "<b><big>E-Mail Berichtgeving</big></b>"
+
+#: ../glade/gfax.glade.h:7
+msgid "<b><big>Efax Setup</big></b>"
+msgstr ""
+
+#: ../glade/gfax.glade.h:8
+#, fuzzy
+msgid "<b><big>Facsimile Viewer Program</big></b>"
+msgstr "<b><big>Facsimile Viewer Programma</big></b>"
+
+#: ../glade/gfax.glade.h:9
+msgid "<b><big>Fax Properties</big></b>"
+msgstr "<b><big>Fax Eigenschappen</big></b>"
+
+#: ../glade/gfax.glade.h:10
+msgid "<b><big>Fax Transport Agent</big></b>"
+msgstr "<b><big>Fax Transport Agent</big></b>"
+
+#: ../glade/gfax.glade.h:11
+msgid "<b><big>Hylafax Setup</big></b>"
+msgstr ""
+
+#: ../glade/gfax.glade.h:12
+msgid "<b><big>Phone Information</big></b>"
+msgstr "<b><big>Telefoon informatie</big></b>"
+
+#: ../glade/gfax.glade.h:13
+msgid "<b><big>Transmit Properties</big></b>"
+msgstr "<b><big>Verzend Eigenschappen</big></b>"
+
+#: ../glade/gfax.glade.h:14
+#, fuzzy
+msgid "<b>Alter facsimile job parameters</b>"
+msgstr "<b>Verander facsimile job parameters</b>"
+
+#: ../glade/gfax.glade.h:15
+msgid "<b>Server</b>"
+msgstr "<b>Server</b>"
+
+#: ../glade/gfax.glade.h:16
+msgid ""
+"ATT (Dataport, Paradyne)\n"
+"Motorola (Power Modem, 3400 Pro,...\n"
+"QuickComm (Spirit II)\n"
+"USR (Courier, Sportster)\n"
+"Multi-Tech (for bit reversal)\n"
+"User Defined\n"
+msgstr ""
+
+#: ../glade/gfax.glade.h:23
+msgid "Auto Refresh Queue"
+msgstr "Auto Ververs Queue"
+
+#: ../glade/gfax.glade.h:24
+msgid ""
+"Complete...\n"
+"\n"
+"Your new phone book is ready.\n"
+"If this is a Gfax type phone book you may\n"
+"now add items. \n"
+"\n"
+"Evolution phone books are read only\n"
+"but may be change through Evolution."
+msgstr ""
+"Compleet...\n"
+"\n"
+"Uw telefoonboek is klaar.\n"
+"Als dit een Gfax telefoonboek mag je nu\n"
+"items toevoegen. \n"
+"\n"
+"Evolution telefoonboeken zijn alleen\n"
+"lezend maar kunnen wel aangepast worden\n"
+"in Evolution"
+
+#
+#: ../glade/gfax.glade.h:32
+msgid "Completed Jobs"
+msgstr "Voltooide Jobs"
+
+#: ../glade/gfax.glade.h:33
+msgid "Database"
+msgstr "Database"
+
+#: ../glade/gfax.glade.h:34 ../glade/send-druid.glade.h:11
+msgid "Delete"
+msgstr "Verwijderen"
+
+#: ../glade/gfax.glade.h:35
+msgid "Dial Prefix:"
+msgstr "Bel Prefix:"
+
+#: ../glade/gfax.glade.h:36
+msgid "E-Mail Address:"
+msgstr "E-Mail Adres:"
+
+#: ../glade/gfax.glade.h:37
+msgid "E-Mail Notification"
+msgstr "E-Mail Berichtgeving"
+
+#: ../glade/gfax.glade.h:38
+msgid "Efax"
+msgstr "Efax"
+
+#: ../glade/gfax.glade.h:39
+msgid "Evolution"
+msgstr "Evolution"
+
+#: ../glade/gfax.glade.h:40
+msgid "Evolution Address books"
+msgstr "Evolution Telefoonboek"
+
+#: ../glade/gfax.glade.h:41
+msgid "Exit"
+msgstr "Exit"
+
+#: ../glade/gfax.glade.h:42
+msgid "Facsimile Number:"
+msgstr "Facsimile Nummer:"
+
+#: ../glade/gfax.glade.h:43
+msgid "Facsimiles to Send"
+msgstr "Facsimiles te verzenden"
+
+#: ../glade/gfax.glade.h:44
+#, fuzzy
+msgid "Fax Number:"
+msgstr "Fax Nummer:"
+
+#: ../glade/gfax.glade.h:45
+msgid "Fax Status:"
+msgstr "Fax Status:"
+
+#: ../glade/gfax.glade.h:46
+msgid "Fax log enabled"
+msgstr "Fax log geaktiveerd"
+
+#: ../glade/gfax.glade.h:47
+#, fuzzy
+msgid ""
+"First we must choose a transport agent. \n"
+"\n"
+"A transport agent is a software package that is responsible for\n"
+"actually sending the facsimile with your modem. If you don't have \n"
+"one of these installed you should hit cancel here and install\n"
+"a transport agent first.\n"
+"\n"
+"Transport agents can be found at the following URL's but you should \n"
+"check your distribution CD first..\n"
+"\n"
+"Hylafax - http://www.hylafax.org\n"
+"Efax - http://www.cce.com/efax"
+msgstr ""
+"Eerst moeten we een transport agent kiezen. \n"
+"\n"
+"Een transport agent is een software pakket dat verantwoordeljk is\n"
+"voor het verzenden van de facsimile met uw modem. Als u geen van deze\n"
+"twee hebt geïnstalleerd dient u nu op annuleer te drukken en eerst\n"
+"een transport agent te installeren.\n"
+"\n"
+"Transport agenten kunnen geevonden worden op de volgende URL's, maar\n"
+"controleer eerst uw distributie CD's.\n"
+"\n"
+"Hylafax - http://www.hylafax.org\n"
+"Mgetty - http://alpha.greenie.net/mgetty\n"
+"Efax - http://www.cce.com/efax"
+
+#: ../glade/gfax.glade.h:59
+msgid "Gfax"
+msgstr "Gfax"
+
+#: ../glade/gfax.glade.h:60
+msgid "Gfax - E-Mail Address"
+msgstr "Gfax - E-Mail Adres"
+
+#: ../glade/gfax.glade.h:61
+msgid "Gfax - Facsimile Transport Agent"
+msgstr "Gfax - Facsimile Transport Agent"
+
+#: ../glade/gfax.glade.h:62
+msgid "Gfax - Gnome facsimile program"
+msgstr "Gfax - Gnome facsimile programma"
+
+#: ../glade/gfax.glade.h:63
+msgid "Gfax - Modem Selection"
+msgstr "Gfax - Modem Selectie"
+
+#: ../glade/gfax.glade.h:64
+msgid "Gfax - Phone Number Information"
+msgstr "Gfax - Telefoonnummer informatie"
+
+#: ../glade/gfax.glade.h:65
+msgid "Gfax - Setup Complete"
+msgstr "Gfax - Setup is voltooid"
+
+#: ../glade/gfax.glade.h:66
+msgid "Gfax - Add new phone book."
+msgstr "Gfax - Nieuwe telefoonboek toevoegen"
+
+#: ../glade/gfax.glade.h:67
+msgid "Gfax - Modify Job"
+msgstr "Gfax - Weizig Job"
+
+#: ../glade/gfax.glade.h:68
+msgid "Gfax - New user setup"
+msgstr "Gfax - Setup nieuwe gebruiker"
+
+#: ../glade/gfax.glade.h:69
+msgid "Gfax - Preferences"
+msgstr "Gfax - Voorkeuren"
+
+#: ../glade/gfax.glade.h:70
+msgid "Gfax - Transmission Progress"
+msgstr "Gfax - Voortgang verzending"
+
+#: ../glade/gfax.glade.h:71
+#, fuzzy
+msgid ""
+"Gfax can inform the Efax transport agent which\n"
+"serial port your modem is connected to."
+msgstr ""
+"Gfax kan de Mgetty en Efax transport agenten informeren welke\n"
+"Seriële poort uw modem is verbonden."
+
+#: ../glade/gfax.glade.h:73
+#, fuzzy
+msgid ""
+"Gfax setup is now complete!\n"
+"\n"
+"Gfax is configurable; there are other configuration \n"
+"options available under the preferences menu.\n"
+"\n"
+"You can run this first time setup at any time from\n"
+"the preferences section.\n"
+"\n"
+"Default preferences have been choosen for the\n"
+"transport agent you chose, you may want to\n"
+"customise them."
+msgstr ""
+"Gfax setup is voltooid!\n"
+"\n"
+"Gfax is volledig configureerbaar; er zijn andere configureer \n"
+"opties beschikbaar in de voorkeuren sectie.\n"
+
+#: ../glade/gfax.glade.h:84
+msgid "Hi Resolution Mode"
+msgstr "Hoge Resolutie mode"
+
+#: ../glade/gfax.glade.h:85
+msgid "Host Name:"
+msgstr "Hostname:"
+
+#: ../glade/gfax.glade.h:86
+msgid "Hostname:"
+msgstr "Hostname:"
+
+#: ../glade/gfax.glade.h:87
+msgid "Hylafax"
+msgstr "Hylafax"
+
+#: ../glade/gfax.glade.h:88
+msgid "Hylafax - Choose this for network faxing."
+msgstr "Hylafax - Kies deze om via het netwerk te kunnen faxen."
+
+#: ../glade/gfax.glade.h:89
+msgid ""
+"Hylafax and Mgetty+Sendfax can both be requested to send \n"
+"results of facsimile transmission to an email address.\n"
+"\n"
+"If you require this feature please enter your email address\n"
+"here. It's a good idea to include this even if you don't \n"
+"use it immediately, you can enable and disable it in the\n"
+"preferences section of Gfax.\n"
+" "
+msgstr ""
+"Hylafax en Mgetty+Sendfax kunnen beide gevaagd worden het\n"
+"resultaat van de facsimile verzending te mailen.\n"
+"\n"
+"Als je deze optie nodig hebt vul hier dan je e-mail adres\n"
+"in. Het is een goed idee dit toch in te vullen, zelfs\n"
+"al gebruik je dit niet onmiddelijk, je kan dit (de)aktiveren\n"
+"in de voorkeuren sectie van Gfax.\n"
+" "
+
+#: ../glade/gfax.glade.h:97
+msgid "IP Port:"
+msgstr "IP Port:"
+
+#: ../glade/gfax.glade.h:98
+msgid "LDAP"
+msgstr "LDAP"
+
+#: ../glade/gfax.glade.h:99
+msgid "Log Enabled"
+msgstr "Log geaktiveerd"
+
+#: ../glade/gfax.glade.h:100
+msgid ""
+"Make no more than <maxdials> calls in attempting to send the facsimile. "
+"Once <maxdials> has been reached, the job will be killed."
+msgstr ""
+"Maak niet meer dan <maxdials> belpogingen om de faxsimile te verzenden. Als "
+"<maxdials> is bereikt wordt de job afgebroken."
+
+#: ../glade/gfax.glade.h:101
+msgid "Maximum Dials:"
+msgstr "Maximum aantal x bellen:"
+
+#: ../glade/gfax.glade.h:102
+msgid "Mgetty"
+msgstr "Mgetty"
+
+#: ../glade/gfax.glade.h:103
+msgid "Modem Connection"
+msgstr "Modem Verbinding"
+
+#: ../glade/gfax.glade.h:104
+#, fuzzy
+msgid "Modem Port:"
+msgstr "Modem poort:"
+
+#: ../glade/gfax.glade.h:105
+#, fuzzy
+msgid "Modem Type:"
+msgstr "Modem Type:"
+
+#: ../glade/gfax.glade.h:106
+msgid "New Fax"
+msgstr "Nieuwe Fax"
+
+#: ../glade/gfax.glade.h:107 ../glade/send-druid.glade.h:23
+msgid "New phone book"
+msgstr "Nieuwe Telefoonboek"
+
+#: ../glade/gfax.glade.h:108
+msgid "Open phone book"
+msgstr "Open telefoonboek"
+
+#: ../glade/gfax.glade.h:109
+#, fuzzy
+msgid "Page Size:"
+msgstr "Paginaformaat:"
+
+#: ../glade/gfax.glade.h:110
+msgid "Password Dialog"
+msgstr "Paswoord dialoog"
+
+#: ../glade/gfax.glade.h:111 ../glade/send-druid.glade.h:26
+#: ../src/newphonebook.cs:81
+msgid "Phone Book"
+msgstr "Telefoonboek"
+
+#: ../glade/gfax.glade.h:112
+msgid "Please enter a name for your new phone book."
+msgstr "Geef een naam voor u nieuw telefoonboek."
+
+#: ../glade/gfax.glade.h:113
+msgid ""
+"Please enter the password \n"
+"for your fax server."
+msgstr ""
+"Geef het paswoord\n"
+"voor uw fax server"
+
+#: ../glade/gfax.glade.h:115
+msgid ""
+"Please enter the type of phone book you are creating. "
+
+msgstr ""
+"Geef het type van telefoonboek dat u aanmaakt."
+
+#: ../glade/gfax.glade.h:121
+msgid ""
+"Please enter your facsimile number.\n"
+"\n"
+"This number is placed in the top one line header that is placed \n"
+"on all outgoing facsimiles.\n"
+"\n"
+"You may also choose a default dial prefix. Many companies in\n"
+"North America use the number \"9\" to reach an outside line.\n"
+msgstr ""
+"Geef het facsimile nummer.\n"
+"\n"
+"Dit nummer word geplaatst op de bovenst lijn van al je\n"
+"facsimiles\n"
+"\n"
+"U mag ook een standaart Bel Prefix kiezen. Veel bedrijven\n"
+"gebruiken het nummer \"0\" om een externe lijn te krijgen.\n"
+
+#: ../glade/gfax.glade.h:129
+msgid ""
+"Please select the Evolution address books that you would \n"
+"like to use.\n"
+"\n"
+"These are only local address books and will only include\n"
+"contacts with facsimile numbers."
+msgstr ""
+"Selecteer het Evolution Adres boek dat u wilt gebruiken.\n"
+"\n"
+"Dit zijn alleen locale adres boekenen zullen alleen\n"
+"contacten bbevatten met een facsimile nummer."
+
+#: ../glade/gfax.glade.h:134
+msgid "Port Number:"
+msgstr "Poort nummer:"
+
+#: ../glade/gfax.glade.h:135
+msgid "Received Facsimiles"
+msgstr "Ontvangen Facsimiles"
+
+#: ../glade/gfax.glade.h:136
+msgid "Remember this password"
+msgstr "Dit paswoord onthouden"
+
+#: ../glade/gfax.glade.h:137
+msgid "Send Email Notification"
+msgstr "Verzend een e-mail berichtgeving"
+
+#: ../glade/gfax.glade.h:138
+msgid "Send Immediately"
+msgstr "Verzend onmiddelijk"
+
+#: ../glade/gfax.glade.h:139
+msgid "Speaker Volume:"
+msgstr "Speaker Volume:"
+
+#: ../glade/gfax.glade.h:140
+msgid "System"
+msgstr "Systeem"
+
+#: ../glade/gfax.glade.h:141
+msgid ""
+"The TCP/IP port number of the fax server. Default hylafax port is 4559."
+msgstr ""
+"De TCP/IP poort nummer van de fax server. Standaard Hylafax poort is 4559."
+
+#: ../glade/gfax.glade.h:142
+msgid ""
+"The host name of the network fax server. Enter \"localhost\" if you are not "
+"using a network fax server."
+msgstr ""
+"De hostname van de netwerk fax server. Vul \"localhost\" in, als u geen\n"
+"fax server gebruikt."
+
+#: ../glade/gfax.glade.h:143
+msgid "The serial port the modem is on - ttyS0 is COM1, ttyS1 is COM2 etc."
+msgstr ""
+"De Seriële poort dat de modem gebruikt - ttyS0 is COM1, ttyS1 is COM2 etc."
+
+#: ../glade/gfax.glade.h:144
+msgid ""
+"There was an error transmitting\n"
+"your facsimile to the server!"
+msgstr ""
+"Er was een error bij het verzenden\n"
+"van uw facsimiles naar de server!"
+
+#: ../glade/gfax.glade.h:146
+msgid ""
+"This will lead you through the process \n"
+"of creating a new phone book."
+msgstr ""
+"Dit asisteerd u bij het maken van\n"
+"een nieuw telefoonboek."
+
+#: ../glade/gfax.glade.h:148
+#, fuzzy
+msgid "Time to send:"
+msgstr "Te verzenden tijd:"
+
+#: ../glade/gfax.glade.h:149
+msgid ""
+"Transmitting facsimile to \n"
+"Hylafax server."
+msgstr ""
+"Verznenden facsimile naar\n"
+"Hylafax server."
+
+#: ../glade/gfax.glade.h:151
+msgid "Transport Agent"
+msgstr "Transport Agent"
+
+#: ../glade/gfax.glade.h:152
+msgid "Use Cover Page"
+msgstr "Voorblad gebruiken"
+
+#: ../glade/gfax.glade.h:153
+msgid "Use Fine Resolution"
+msgstr "Gebruik fijne resolutie"
+
+#: ../glade/gfax.glade.h:154
+msgid "User"
+msgstr "Gebruiker"
+
+#: ../glade/gfax.glade.h:155
+msgid "Username:"
+msgstr "Gebruikersnaam:"
+
+#: ../glade/gfax.glade.h:156
+msgid ""
+"Very Low\n"
+"Low\n"
+"Medium\n"
+"High"
+msgstr ""
+
+#: ../glade/gfax.glade.h:160
+msgid "View / Print"
+msgstr "Bekijken / Print"
+
+#: ../glade/gfax.glade.h:161
+msgid ""
+"Welcome to Gfax!\n"
+"\n"
+"\n"
+"Gfax is a GNOME facsimile program that provides \n"
+"the familiar \"popup\" window when printing to a fax \n"
+"printer.\n"
+"\n"
+"The following pages will help you to setup Gfax."
+msgstr ""
+"Welkom bij Gfax!\n"
+"\n"
+"\n"
+"Gfax is een GNOME facsimile programma dat de familiare\n"
+"\"popup\" venster verschaft wanneer men print naar een\n"
+"fax printer.\n"
+"\n"
+"De volgende paginas zullen u helpen bij de setup van Gfax."
+
+#: ../glade/gfax.glade.h:169
+msgid "Which serial port is your modem connected to?"
+msgstr "Aan welke seriële poort is uw modem verbonden?"
+
+#: ../glade/gfax.glade.h:170
+msgid ""
+"Your facsimile was sucessfully\n"
+" transmitted!"
+msgstr ""
+"Uw facsimile is succesvol\n"
+"verzonden!"
+
+#: ../glade/gfax.glade.h:172
+msgid "_Cancel Job"
+msgstr "_Annuleer job"
+
+#: ../glade/gfax.glade.h:173
+msgid "_Fax"
+msgstr "_Fax"
+
+#: ../glade/gfax.glade.h:174
+msgid "_Help"
+msgstr "_Help"
+
+#: ../glade/gfax.glade.h:175
+msgid "_Modify Job"
+msgstr "_Wijzig job"
+
+#: ../glade/gfax.glade.h:176
+msgid "_Settings"
+msgstr "_Instellingen"
+
+#: ../glade/gfax.glade.h:177
+msgid "cua1"
+msgstr "cua1"
+
+#: ../glade/gfax.glade.h:178
+msgid "cua2"
+msgstr "cua2"
+
+#: ../glade/gfax.glade.h:179
+msgid ""
+"letter\n"
+"legal\n"
+"a4"
+msgstr ""
+
+#: ../glade/gfax.glade.h:182
+msgid "localhost"
+msgstr "localhost"
+
+#: ../glade/gfax.glade.h:183
+msgid "modem"
+msgstr "modem"
+
+#: ../glade/gfax.glade.h:184
+msgid "oklabel"
+msgstr "oklabel"
+
+#: ../glade/gfax.glade.h:185
+msgid "ttyS0"
+msgstr "ttyS0"
+
+#: ../glade/gfax.glade.h:186
+msgid "ttyS1"
+msgstr "ttyS1"
+
+#: ../glade/gfax.glade.h:187
+msgid "ttyS2"
+msgstr "ttyS2"
+
+#: ../glade/gfax.glade.h:188
+msgid "ttyS3"
+msgstr "ttyS3"
+
+#: ../glade/send-druid.glade.h:1
+msgid "<b><big>Current Phone Books</big></b>"
+msgstr "<b><big>Huidige telefoonboeken</big></b>"
+
+#: ../glade/send-druid.glade.h:2
+msgid "<b><big>Edit Phone book</big></b>"
+msgstr "<b><big>Bewerk telefoonboek</big></b>"
+
+#: ../glade/send-druid.glade.h:3
+msgid "<b>Facsimile Job Details</b>"
+msgstr "<b>Facsimile job details</b>"
+
+#: ../glade/send-druid.glade.h:4
+msgid "<b>New fax information</b>"
+msgstr "<b>Nieuwe fax informatie</b>"
+
+#: ../glade/send-druid.glade.h:5
+msgid "Add"
+msgstr "Toevoegen"
+
+#: ../glade/send-druid.glade.h:6
+msgid "Browse"
+msgstr "Blader"
+
+#: ../glade/send-druid.glade.h:7
+msgid "Clear"
+msgstr "Wis"
+
+#: ../glade/send-druid.glade.h:8
+msgid "Close"
+msgstr "Sluit"
+
+#: ../glade/send-druid.glade.h:9 ../src/gfaxphonebook.cs:89
+#: ../src/gfaxsend.cs:142 ../src/sendphonebook.cs:105
+msgid "Contact"
+msgstr "Contacteer"
+
+#: ../glade/send-druid.glade.h:10
+msgid "Current Phone Book"
+msgstr "Huidige telefoonboek"
+
+#: ../glade/send-druid.glade.h:12
+#, fuzzy
+msgid "Delete phone book"
+msgstr "Verwijder telefoonboek"
+
+#: ../glade/send-druid.glade.h:13
+msgid "Details"
+msgstr "Details"
+
+#: ../glade/send-druid.glade.h:14
+msgid "E-Mail job results to:"
+msgstr "E-Mail job resutaat naar:"
+
+#: ../glade/send-druid.glade.h:15
+msgid "Enter a phone number and hit <enter>."
+msgstr "Geef een telefoonnummer en druk op <enter>"
+
+#: ../glade/send-druid.glade.h:16
+msgid "Fax number:"
+msgstr "Fax nummer:"
+
+#: ../glade/send-druid.glade.h:17
+msgid "Fine resolution"
+msgstr "Fijne resolutie"
+
+#: ../glade/send-druid.glade.h:18
+msgid "Gfax - Phone Book Selection"
+msgstr "Gfax - Telefoonboek selectie"
+
+#: ../glade/send-druid.glade.h:19
+msgid "Gfax - Phone books"
+msgstr "Gfax - Telefoonboeken"
+
+#: ../glade/send-druid.glade.h:20
+msgid "Job"
+msgstr "Job"
+
+#: ../glade/send-druid.glade.h:21
+msgid "New Entry"
+msgstr "Nieuwe ingang"
+
+#: ../glade/send-druid.glade.h:22
+msgid "New Item"
+msgstr "Nieuw item"
+
+#: ../glade/send-druid.glade.h:24 ../src/gui.cs:238 ../src/gui.cs:249
+msgid "Number"
+msgstr "Nummer"
+
+#: ../glade/send-druid.glade.h:25 ../src/gfaxphonebook.cs:87
+#: ../src/gfaxsend.cs:141 ../src/sendphonebook.cs:103
+msgid "Organization"
+msgstr "Organisatie"
+
+#: ../glade/send-druid.glade.h:27
+msgid "Phone Book Item List"
+msgstr "Telefoonboek item lijst"
+
+#: ../glade/send-druid.glade.h:28
+msgid "Phone Books"
+msgstr "Telefoonboeken"
+
+#: ../glade/send-druid.glade.h:29
+msgid "Postscript file:"
+msgstr "Postscript beestand:"
+
+#: ../glade/send-druid.glade.h:30
+msgid "Save and Close"
+msgstr "Opslaan en sluiten"
+
+#: ../glade/send-druid.glade.h:31
+#, fuzzy
+msgid "Save and close"
+msgstr "Opslaan en sluiten"
+
+#: ../glade/send-druid.glade.h:32 ../src/gfaxsend.cs:139
+msgid "Send"
+msgstr "Verzend"
+
+#: ../glade/send-druid.glade.h:33
+msgid "Send Fax"
+msgstr "Fax verzenden"
+
+#: ../glade/send-druid.glade.h:34
+msgid "Send immediately"
+msgstr "Onmiddelijk verzenden"
+
+#: ../glade/send-druid.glade.h:35
+msgid "Transmit the fax"
+msgstr "Verzend de fax"
+
+#: ../glade/send-druid.glade.h:36
+msgid "Update"
+msgstr "Update"
+
+#: ../glade/send-druid.glade.h:37
+msgid "_File"
+msgstr "_Bestand"
+
+#: ../src/efax.cs:384
+msgid "Scanning control files."
+msgstr "Controle bestanden scannen"
+
+#: ../src/efax.cs:397
+msgid "Running job "
+msgstr ""
+
+#: ../src/efax.cs:421 ../src/efax.cs:508
+msgid "Busy retries exceeded"
+msgstr "Bezet proberen overschreden"
+
+#: ../src/efax.cs:468
+#, fuzzy
+msgid "Sending facsimile..."
+msgstr "Fax verzenden"
+
+#. If successful then mv the control file to the done queue and flag
+#. a date for it's removal.
+#: ../src/efax.cs:492
+msgid "Success"
+msgstr "Succes"
+
+#. fatal errors - no retry
+#. fatalError = true;
+#. change code in file
+#: ../src/efax.cs:516
+msgid "Fatal error"
+msgstr "Fatale error"
+
+#. Modem error - no retry
+#. fatalError = true;
+#: ../src/efax.cs:522
+msgid "Fatal modem error"
+msgstr "Fatale modem error"
+
+#. Modem not responding
+#. fatalError = true;
+#: ../src/efax.cs:528
+msgid "Modem not responding"
+msgstr "Modem reaggeert niet"
+
+#. Program terminated
+#. fatalError = true;
+#: ../src/efax.cs:534
+msgid "Program terminated"
+msgstr "Programmais gestopt"
+
+#: ../src/fax.cs:60
+msgid "No Connection"
+msgstr "Geen verbinding"
+
+#: ../src/fax.cs:71
+#, fuzzy
+msgid ""
+"Efax transmit process running...\n"
+"Scanning job files every 30 seconds."
+msgstr ""
+"Efax verzen proces wordt uitevoerd...\n"
+"Job bestanden worden om de 60 seconden gescant."
+
+#: ../src/fax.cs:77
+msgid "Error transport agent not specified!"
+msgstr "Error, transport agent is niet gespecificeerd!"
+
+#: ../src/fax.cs:132
+msgid "Run"
+msgstr "Loopt"
+
+#: ../src/fax.cs:135
+msgid "Sleep"
+msgstr "Slaap"
+
+#: ../src/fax.cs:138
+msgid "Block"
+msgstr "Geblokkeerd"
+
+#: ../src/fax.cs:141
+msgid "Busy"
+msgstr "Bezig"
+
+#: ../src/fax.cs:144 ../src/fax.cs:244
+#, fuzzy
+msgid "Done"
+msgstr "Klaar"
+
+#: ../src/fax.cs:147
+#, fuzzy
+msgid "Fail"
+msgstr "Falen"
+
+#: ../src/fax.cs:150
+#, fuzzy
+msgid "New"
+msgstr "Nieuw"
+
+#: ../src/fax.cs:241
+msgid "Receiving"
+msgstr "Ontvangen"
+
+#: ../src/gfaxphonebook.cs:88 ../src/gfaxsend.cs:140
+#: ../src/sendphonebook.cs:104
+#, fuzzy
+msgid "Phone Number"
+msgstr "Telefoonnummer"
+
+#: ../src/gfaxphonebook.cs:213
+msgid "Are you sure you want to delete the phone book?"
+msgstr "Bent u zeker dat u de telefoonboek wilt verwijderen?"
+
+#: ../src/gfaxphonebook.cs:297
+msgid ""
+"You have unsaved phone book entries.\n"
+" Are you sure you want to Quit?"
+msgstr ""
+"U hebt onopgeslagen telefoonboek items.\n"
+" Bent u zeker dat uw wilt sluiten?"
+
+#: ../src/gfaxphonebook.cs:460
+msgid "Press the <DELETE> key to delete an entry."
+msgstr "Druk op de <delete> toets om een item te verwijderen."
+
+#: ../src/gfaxprefs.cs:190 ../src/gfaxprefs.cs:208
+msgid "You need to exit Gfax and restart it when you change transport agents"
+msgstr ""
+"U dient Gfax te verlaten en te herstarten wanneer u de transport agents "
+"verandert"
+
+#: ../src/gfaxsend.cs:88
+#, fuzzy
+msgid ""
+"\n"
+"This is the first time you have run Gfax.\n"
+"Please run Gfax from the menu or command line and set your \n"
+"MODEM TYPE, PORT and Fax number under preferences.\n"
+"\n"
+"Gfax is initially setup to use Efax, you may change it use \n"
+"Hylafax if you prefer or require connection to a network \n"
+"facsimile server."
+msgstr ""
+"\n"
+"Dit is de eerste keer dat u Gfax uitvoerd.\n"
+"Voer Gfax uit vanuit het menu of de commandolijn en zet uw\n"
+"MODEM TYPE en POORT onder voorkeuren.\n"
+"\n"
+"Gfax is oorspronkelijk voor Efax ingesteld, u mag het veranderen\n"
+"naar Hylafax als u verkiesd of verplicht bent via een netwerk\n"
+"een facsimile server te connecteren."
+
+#: ../src/gfaxsend.cs:164
+msgid "Spooled from print job"
+msgstr "Spooled van een print job"
+
+#: ../src/gfaxsend.cs:276
+msgid ""
+"\n"
+"The file you have entered does not exist.\n"
+"Please check the name and try again."
+msgstr ""
+
+#: ../src/gfaxsend.cs:310
+msgid ""
+"\n"
+"You have not entered a facsimile number!\n"
+"Please enter a number and press the <i><b>Enter</b></i> key or\n"
+"click the <i><b>Phone Book</b></i> button to select numbers or\n"
+"entire phone books."
+msgstr ""
+"\n"
+"U hebt geen facsimile nummer ingegeven!\n"
+"Geef een nummer in en druk op de <i><b>Enter</b></i> toets of\n"
+"klik op de <i><b>Telefoonboek</b></i> knop om nummers te\n"
+"selecteren of volledige telefoonboeken."
+
+#: ../src/gui.cs:143
+msgid ""
+"\n"
+"This is the first time you have run Gfax.\n"
+"You should set your MODEM TYPE and PORT under preferences.\n"
+"\n"
+"Gfax is initially setup to use Efax, you may change it use \n"
+"Hylafax if you prefer or require connection to a network \n"
+"facsimile server."
+msgstr ""
+"\n"
+"Dit is de eerste keer dat u Gfax uitvoerd.\n"
+"U dient uw MODEM TYPE en POORT onder oorkeuren op te geven.\n"
+"\n"
+"Gfax is oorspronkelijk voor Efax ingesteld, u mag het veranderen\n"
+"naar Hylafax als u verkiesd of verplicht bent via een netwerk\n"
+"een facsimile server te connecteren."
+
+#: ../src/gui.cs:157
+msgid ""
+"Your spool directory is missing!\n"
+"\t\t\t\t\t\n"
+"Please login as the root user and create the "
+msgstr ""
+"U spool directory bestaat niet!\n"
+"\t\t\t\t\t\n"
+"Login als root en creëer de "
+
+#: ../src/gui.cs:161
+msgid ""
+" directory.\n"
+"\n"
+"All users should be able to write to it.\n"
+msgstr ""
+" directorie\n"
+"\n"
+"Alle gebruikers dienen er naar te kunnen schrijven.\n"
+
+#: ../src/gui.cs:166
+msgid ""
+"The doneq directory is missing in your spool directory!\n"
+"\t\t\t\t\t\n"
+"Please login as the root user and create the "
+msgstr ""
+"De doneq directorie bestaat niet in uw spool directorie!\n"
+"\t\t\t\t\t\n"
+"Login als root en creëer de "
+
+#: ../src/gui.cs:169
+msgid ""
+"/doneq directory.\n"
+"\n"
+"All users should be able to write to it.\n"
+msgstr ""
+"/doneq directorie.\n"
+"\n"
+"Alle gebruikers dienen er naar te kunnen schrijven.\n"
+
+#: ../src/gui.cs:175
+msgid ""
+"The recq directory is missing in your spool directory!\n"
+"\t\t\t\t\t\n"
+"Please login as the root user and create the "
+msgstr ""
+"De recq directorie bestaat niet in uw spool directorie!\n"
+"\t\t\t\t\t\n"
+"Login als root en creëer de "
+
+#: ../src/gui.cs:178
+msgid ""
+"/recq directory.\n"
+"\n"
+"All users should be able to write to it.\n"
+msgstr ""
+"/recq directorie.\n"
+"\n"
+"Alle gebruikers dienen er naar te kunnen schrijven.\n"
+
+#: ../src/gui.cs:237 ../src/gui.cs:248
+#, fuzzy
+msgid "Jobid"
+msgstr "Job-ID"
+
+#: ../src/gui.cs:239 ../src/gui.cs:250 ../src/gui.cs:259
+#, fuzzy
+msgid "Status"
+msgstr "Status:"
+
+#: ../src/gui.cs:240 ../src/gui.cs:251
+msgid "Owner"
+msgstr "Eigenaar"
+
+#: ../src/gui.cs:241 ../src/gui.cs:252
+msgid "Pages"
+msgstr "Paginas"
+
+#: ../src/gui.cs:242 ../src/gui.cs:253
+msgid "Dials"
+msgstr ""
+
+#: ../src/gui.cs:243 ../src/gui.cs:254
+#, fuzzy
+msgid "Send At"
+msgstr "Verzend op"
+
+#: ../src/gui.cs:244 ../src/gui.cs:255
+msgid "Error"
+msgstr "Error"
+
+#: ../src/gui.cs:258
+#, fuzzy
+msgid "Sender"
+msgstr "Verzender"
+
+#: ../src/gui.cs:260
+#, fuzzy
+msgid "Pages "
+msgstr "Paginas"
+
+#: ../src/gui.cs:261
+msgid "Arrived"
+msgstr "Gearriveerd"
+
+#: ../src/gui.cs:262
+#, fuzzy
+msgid "Filename"
+msgstr "Bestandsnaam"
+
+#: ../src/gui.cs:666
+msgid ""
+"Cannot read the facsimile file from the server. You most likely do not \n"
+"have permission to read the file. Check the settings on your fax server."
+msgstr ""
+
+#: ../src/gui.cs:673
+msgid ""
+"Cannot start your faxviewer program. \n"
+"Please check your settings. It is currently set to "
+msgstr ""
+"Kan u programma om faxen te bekijken niet starten.\n"
+"Controlleer uw instellingen. Het is op dit moment\n"
+"ingesteld op "
+
+#: ../src/gui.cs:674
+msgid "."
+msgstr "."
+
+#: ../src/gui.cs:709
+msgid ""
+"Cannot delete the facsimile file from the server. You most likely do not \n"
+"have permission to delete the file. Check the settings on your fax server."
+msgstr ""
+
+#: ../src/gui.cs:715
+#, fuzzy
+msgid ""
+"Cannot delete the file on the Hylafax server. \n"
+"Please check your settings or contact your system Administrator"
+msgstr ""
+"Kan het bestand op de Hylafax server niet verwijderen.\n"
+"Conrolleer uw instellingen of contacteer uw systeem admin."
+
+#: ../src/gui.cs:785
+msgid "Copyright (C) 2003 George Farris <farrisg@shaw.ca>"
+msgstr ""
+
+#: ../src/gui.cs:786
+msgid "A Facsimile application for GNOME"
+msgstr "Een Facsimile applicatie voor GNOME"
+
+#: ../src/gui.cs:831
+#, fuzzy
+msgid "Refreshing server status..."
+msgstr "Auto ververs wachtrij"
+
+#: ../src/gui.cs:868
+#, fuzzy
+msgid "Refreshing queue..."
+msgstr "Auto ververs wachtrij"
+
+#: ../src/gui.cs:934 ../src/gui.cs:953
+msgid "There are "
+msgstr "Er zijn "
+
+#: ../src/gui.cs:934 ../src/gui.cs:953
+msgid " jobs in the queue"
+msgstr "jobs in de wachtrij"
+
+#: ../src/gui.cs:941 ../src/gui.cs:960
+msgid "There are 0 jobs in the queue"
+msgstr "Er zijn geen jobs in de wachtrij"
+
+#: ../src/hylafax.cs:146
+msgid "You can not write data to this stream"
+msgstr "U kan geen data shrijven naar deze stream"
+
+#: ../src/hylafax.cs:150
+msgid "You can not read data from this stream"
+msgstr "U kan geen data lezen van deze stream"
+
+#: ../src/hylafax.cs:158
+msgid ""
+"Could not connect to your Hylafax server.\n"
+"Check console messages for further information\n"
+"\n"
+"You might need to set a value for username."
+msgstr ""
+"Kan geen verbinding maken met uw Hylafax server.\n"
+"Controleer de terminal berichten voor meer informatie\n"
+"\n"
+"Het kan zijn dat ueen waarde voor de gebruikersnaam moet geven"
+
+#: ../src/main.cs:109
+msgid "Gfax help..."
+msgstr "Gfax help..."
+
+#: ../src/main.cs:135
+#, fuzzy
+msgid ""
+"Gconfd cannot find your settings. \n"
+"If you are running Gfax immediately \n"
+"after an installation, you may have \n"
+"to log out and log back in again."
+msgstr ""
+"gconfd kan uw instellingen niet vinden\n"
+"Als u Gfax onmiddelijk na een installatie\n"
+"uitvoerd, kan het zijn dat u eerst moet\n"
+"uitloggen en dan weer inloggen.\n"
+
+#: ../src/newphonebook.cs:80
+#, fuzzy
+msgid "Use"
+msgstr "Gebruik"
+
+#: ../src/phonebook.cs:295
+#, csharp-format
+msgid "Can't open file : {0}"
+msgstr "Kan bestand {0} niet openen"
+
+#: ../src/sendphonebook.cs:66
+msgid "You don't have any phone books yet."
+msgstr "U hebt nog geen telefoonboeken."
+
+#. Got have a column title or things won't show up
+#: ../src/sendphonebook.cs:94
+#, fuzzy
+msgid "Phone books"
+msgstr "Telefoonboeken"
+
+#~ msgid "0"
+#~ msgstr "0"
+
+#~ msgid "1"
+#~ msgstr "1"
+
+#~ msgid "10 Minutes"
+#~ msgstr "10 Minuten"
+
+#~ msgid "1000"
+#~ msgstr "1000"
+
+#~ msgid "115200"
+#~ msgstr "115200"
+
+#~ msgid "15 Minutes"
+#~ msgstr "15 Minuten"
+
+#~ msgid "1500"
+#~ msgstr "1500"
+
+#~ msgid "19200"
+#~ msgstr "19200"
+
+#~ msgid "2"
+#~ msgstr "2"
+
+#~ msgid "2000"
+#~ msgstr "2000"
+
+#~ msgid "2400"
+#~ msgstr "2400"
+
+#~ msgid "3"
+#~ msgstr "3"
+
+#~ msgid "30 Minutes"
+#~ msgstr "30 Minuten"
+
+#~ msgid "38400"
+#~ msgstr "38400"
+
+#~ msgid "4"
+#~ msgstr "4"
+
+#~ msgid "4800"
+#~ msgstr "4800"
+
+#~ msgid "5"
+#~ msgstr "5"
+
+#~ msgid "5 Minutes"
+#~ msgstr "5 Minuten"
+
+#~ msgid "500"
+#~ msgstr "500"
+
+#~ msgid "57600"
+#~ msgstr "57600"
+
+#~ msgid "6"
+#~ msgstr "6"
+
+#~ msgid "7"
+#~ msgstr "7"
+
+#~ msgid "8"
+#~ msgstr "8"
+
+#~ msgid "9"
+#~ msgstr "9"
+
+#~ msgid "9600"
+#~ msgstr "9600"
+
+#~ msgid ""
+#~ "A few modems respond to raising the DTR line (when opening the device) "
+#~ "with `OK'. This can confuse `sendfax', because it will see this OK as "
+#~ "response to the next command. Default is 0."
+#~ msgstr ""
+#~ "Enkele modems reageren op de DTR lijn (wanneer het apparaat wordt "
+#~ "geopent) Met `OK'. Dit kan `sendfax' verwarren, omdat het deze OK ziet "
+#~ "als een antwoord op het volgende commando. Default is 0."
+
+#, fuzzy
+#~ msgid "ATT (Dataport, Paradyne)"
+#~ msgstr "FCINIT='-j\\Q4'\t\t#AT&T (Dataport, Paradyne)"
+
+#~ msgid ""
+#~ "After the maximum number of tries for one page are reached, `sendfax' can "
+#~ "report an error and abort or continue. Default is Yes."
+#~ msgstr ""
+#~ "Nadat het maximaal aantal keer proberen van een pagina is berijkt, "
+#~ "`sendfax' kan een error rapporteren en afbreken of voortgaan. Default is "
+#~ "Yes."
+
+#~ msgid ""
+#~ "An 'AT...' command that will be sent to the modem at the end of the modem "
+#~ "initialization, right before dialing."
+#~ msgstr ""
+#~ "Een 'AT...' commando dat naar de modem word verzonden aan het einde van "
+#~ "de modem initialisatie, juist voor het bellen."
+
+#~ msgid "Baud Rate Switch"
+#~ msgstr "Baud Rate Switch"
+
+#~ msgid ""
+#~ "Controls the amount of information written into the fax log file. "
+#~ "Default is 3."
+#~ msgstr ""
+#~ "Controleerd de hoeveelheid informatie er wordt geschreven in de faxlog. "
+#~ "Default is 3."
+
+#~ msgid "Debug Level"
+#~ msgstr "Debug Level"
+
+#~ msgid "Dial Command"
+#~ msgstr "Bel Commando"
+
+#~ msgid "Disabled"
+#~ msgstr "Gedeaktiveerd"
+
+#~ msgid "Fax Users Allowed"
+#~ msgstr "Fax Gebruiker Toegelaten"
+
+#~ msgid "Fax Users Denied"
+#~ msgstr "Fax Gebruiker Niet Toegelaten"
+
+#~ msgid "High"
+#~ msgstr "Hoog"
+
+#~ msgid "Hour"
+#~ msgstr "Uur"
+
+#~ msgid ""
+#~ "How often you want the fax queue scanned. Faxes won't be transmitted "
+#~ "until \"faxrunq\" is run to scan the queue. This value is set in /etc/"
+#~ "crontab."
+#~ msgstr ""
+#~ "Hoe vaak wilt u dat de wachtrij gescant wordt? Faxen worden niet "
+#~ "verzonden tot dat \"faxrunq\" is uitgevoer om de wachtrij te scannen. "
+#~ "Deze waarde is opgeslagen in /etc/crontab."
+
+#~ msgid "Ignore Carrier"
+#~ msgstr "Negeer Carrier"
+
+#~ msgid "Low"
+#~ msgstr "Laag"
+
+#~ msgid "Maximum Tries Continue"
+#~ msgstr "Maximum pogingen om voort te gaan"
+
+#~ msgid "Maximum Tries per Page"
+#~ msgstr "Maximum pogingen per pagina"
+
+#~ msgid "Medium"
+#~ msgstr "gemiddeld"
+
+#~ msgid "Mgetty+Sendfax"
+#~ msgstr "Mgetty+Sendfax"
+
+#~ msgid "Mgetty+Sendfax Setup"
+#~ msgstr "Mgetty+Sendfax Setup"
+
+#~ msgid "Minute"
+#~ msgstr "Minuut"
+
+#~ msgid "Modem Handshake"
+#~ msgstr "Modem Handshake"
+
+#~ msgid "Modem Initialization String"
+#~ msgstr "Modem Initializatie String"
+
+#~ msgid "Modem Port"
+#~ msgstr "Modem poort"
+
+#~ msgid "Modem Quirks"
+#~ msgstr "Modem bijzonderheden"
+
+#~ msgid "Modem Speed (bps)"
+#~ msgstr "Snelheid Modem (bps)"
+
+#~ msgid "Modem Type"
+#~ msgstr "Modem Type"
+
+#, fuzzy
+#~ msgid "Motorola (Power Modem, 3400 Pro,..."
+#~ msgstr "FCINIT='-j\\Q1'\t\t#Motorola (Power Modem, 3400 Pro,.)"
+
+#, fuzzy
+#~ msgid "Multi-Tech (for bit reversal)"
+#~ msgstr "FCINIT='-or'\t\t # Multi-Tech (for bit reversal)"
+
+#~ msgid "No"
+#~ msgstr "Neen"
+
+#~ msgid "None"
+#~ msgstr "Geen"
+
+#~ msgid ""
+#~ "On some (very few) modems it is necessary to start with baudrate \"A\" "
+#~ "and switch to baudrate \"B\" after sending the `AT+FCLASS=2' command. "
+#~ "Default is None."
+#~ msgstr ""
+#~ "Op somige (zeer weing) modems is het nodig om te starten met baudrate \"A"
+#~ "\" en over te schakelen naar baudrate \"B\" na het zenden van het `AT"
+#~ "+FCLASS=2' commando. Default is Geen"
+
+#~ msgid "Open Delay (msec)"
+#~ msgstr "Open Vertraging (msec)"
+
+#, fuzzy
+#~ msgid "QuickComm (Spirit II)"
+#~ msgstr "FCINIT='-j*F1'\t\t # QuickComm (Spirit II)"
+
+#~ msgid "Run Fax Queue Every"
+#~ msgstr "Fax wachrij uitvoeren iedere"
+
+#~ msgid "SendFax Config File"
+#~ msgstr "Sendfax configuratie bestand"
+
+#~ msgid "Sendfax Config File"
+#~ msgstr "Sendfax configuratie bestand"
+
+#~ msgid "Setup Druid"
+#~ msgstr "Setup Druid"
+
+#~ msgid ""
+#~ "Some misbehaving modems lower the DCD (carrier detect) line briefly, "
+#~ "between sending multiple pages. This may cause all subsequent port serial "
+#~ "accesses to fail. Default is No."
+#~ msgstr ""
+#~ "Sommige modems die zich misgedragen verlagen de DCD (carrier detect) "
+#~ "lijn, tussen het verzenden van meerdere pagina's. Dit kan tot gevolg "
+#~ "hebben dat alle seriële poort toegang faalt. Default is No."
+
+#~ msgid ""
+#~ "The location of the mgetty \"sendfax.config\" file. Default is \"/etc/"
+#~ "mgetty+sendfax/sendfax.config\". You shouldn't have to change this."
+#~ msgstr ""
+#~ "De locatie van de mgetty \"sendfax.config\" bestand. Standaard is \"/etc/"
+#~ "mgetty+sendfax/sendfax.config\". Normaal moet u dit niet veranderen."
+
+#~ msgid ""
+#~ "The maximum number of tries per page if the receiving end reports "
+#~ "reception errors. Default is 3."
+#~ msgstr ""
+#~ "Het maximaal aantal probeer pogingen per pagina als de ontvangende partij "
+#~ "\"reception errors\" rapporteert. Standaard is 3."
+
+#~ msgid ""
+#~ "The speed to set your serial port at. Try the highest and go down from "
+#~ "there."
+#~ msgstr ""
+#~ "De snelheid voor uw seriële poort. Probeer eerst de hoogte en dan lager."
+
+#~ msgid "The standard papersize you send facsimilies in."
+#~ msgstr "Het standaard papierformaat fat u facsimiles in."
+
+#~ msgid "The type of modem you have."
+#~ msgstr "Het type modem u hebt"
+
+#~ msgid "The volume your modem is set too."
+#~ msgstr "De volume van uw modem"
+
+#~ msgid ""
+#~ "This can be used to adapt `sendfax' to some peculiarities in certain "
+#~ "modems. Not normally required."
+#~ msgstr ""
+#~ "Dit kan gebruikt worden om `sendfax' aan te passen aan eigenaardigheden "
+#~ "in sommige modems. Normaal is dit geen vereiste."
+
+#~ msgid ""
+#~ "This is the command used for dialing out. Usually this will be something "
+#~ "simple, as `ATDT' for tone or `ATDP' for pulse dialing."
+#~ msgstr ""
+#~ "Dit commando wordt gebruikt omnaar buiten te bellen. ewoonlijk is dit "
+#~ "iets simpels zoals `ATDT' voor tonen of `ATDP'voor pulsen."
+
+#~ msgid ""
+#~ "This will initialize the modem when the port is opened. See your modem "
+#~ "manual. Default is ATZ."
+#~ msgstr ""
+#~ "Dit initialiseert de modem wanneer de poort wordt geopend. Controleer de "
+#~ "handleiding van de modem. Standaard is ATZ."
+
+#~ msgid "Type of fax modem. See your modem manual. Default is auto."
+#~ msgstr ""
+#~ "Type fax modem. Controleer de handleiding van de modem. Standaard is auto."
+
+#, fuzzy
+#~ msgid "USR (Courier, Sportster)"
+#~ msgstr "FCINIT='-j&H2'\t\t# USR (Courier, Sportster)"
+
+#, fuzzy
+#~ msgid "User Defined"
+#~ msgstr "Gebruiker gedifnieerd"
+
+#~ msgid ""
+#~ "Users allowed to use the fax system. Can be empty only if the deny list "
+#~ "is populated. These must be user names."
+#~ msgstr ""
+#~ "Gebruikers toegelaten tot het fax systeem. Kan alleen leeg zijn als de "
+#~ "geblokeerde lijst gebruikers gevuld is. Deze moeten gebruikersnamen zijn."
+
+#~ msgid ""
+#~ "Users denied from using the fax system. Can be empty only if the allow "
+#~ "list is populated."
+#~ msgstr ""
+#~ "Gebruikers die geen toegang hebben tot het fax systeem. Kan alleen leeg "
+#~ "zijn als de toegelaten lijst gebruikers gevuld is"
+
+#~ msgid "Very Low"
+#~ msgstr "Zeer laag"
+
+#~ msgid "Yes"
+#~ msgstr "Ja"
+
+#~ msgid "a4"
+#~ msgstr "a4"
+
+#~ msgid "auto"
+#~ msgstr "auto"
+
+#~ msgid "c2.0"
+#~ msgstr "c2.0"
+
+#~ msgid "cls2"
+#~ msgstr "cls2"
+
+#~ msgid "legal"
+#~ msgstr "legal"
+
+#~ msgid "letter"
+#~ msgstr "letter"
+
+#~ msgid "Starting scan process"
+#~ msgstr "Start scan proces"
+
+#~ msgid "Control file "
+#~ msgstr "Controle bestand"
+
+#~ msgid "Can't create .gfax.proc"
+#~ msgstr "Kan .gfax.proc niet maken"
+
+#~ msgid "'-x /usr/spool/uucp/LCK..$DEV'"
+#~ msgstr "'-x /usr/spool/uucp/LCK..$DEV'"
+
+#~ msgid "'-x /var/lock/LCK..$DEV'"
+#~ msgstr "'-x /var/lock/LCK..$DEV'"
+
+#~ msgid "*"
+#~ msgstr "*"
+
+#~ msgid "-x /var/spool/uucp/LCK..$DEV'"
+#~ msgstr "-x /var/spool/uucp/LCK..$DEV'"
+
+#~ msgid "/etc/efax.rc"
+#~ msgstr "/etc/efax.rc"
+
+#~ msgid ""
+#~ "Complete...\n"
+#~ "\n"
+#~ "Your new phone book is ready for you to add items."
+#~ msgstr ""
+#~ "Complete...\n"
+#~ "\n"
+#~ "Your new phone book is ready for you to add items."
+
+#~ msgid "Efax config file"
+#~ msgstr "Efax config file"
+
+#~ msgid "Enter a phone number and hit <enter> or press the \"Add\" button"
+#~ msgstr ""
+#~ "Geben Sie eine Telefonnummer ein und drücken Sie <Eingabe> oder klicken "
+#~ "Sie auf den Knopf \"Hinzufügen\"."
+
+#~ msgid "FCINIT=''"
+#~ msgstr "FCINIT=''"
+
+#~ msgid "Force xon/xoff"
+#~ msgstr "Force xon/xoff"
+
+#~ msgid "Gfax - Select postcript file"
+#~ msgstr "Gfax - Postcript-Datei auswählen"
+
+#~ msgid "Lock File"
+#~ msgstr "Sperrdatei"
+
+#~ msgid "Preferences"
+#~ msgstr "Vorlieben"
+
+#~ msgid "Send later"
+#~ msgstr "Später senden"
+
+#~ msgid ""
+#~ "Status Column Definition: D = Complete, R = Running, F = Failed, S = "
+#~ "Sleeping, W = Waiting for modem, B = Blocked by job, P = Pending"
+#~ msgstr ""
+#~ "Erklärung der Statusspalten: D = Abgeschlosse, R = Laufend, F =\n"
+#~ "Fehlgeschlagen, S = Schlafend, W = Warte auf Modem, B= Blockiert durch\n"
+#~ "Auftrag, P = Wartend"
+
+#~ msgid "Use cover page"
+#~ msgstr "Deckblatt benutzen"
+
+#~ msgid "New Phonebook"
+#~ msgstr "Neues Telefonbuch"
+
+#~ msgid "label379"
+#~ msgstr "label379"
+
+#~ msgid "label383"
+#~ msgstr "label383"
diff --git a/src/Defines.cs.in b/src/Defines.cs.in
new file mode 100755
index 0000000..fab15cc
--- /dev/null
+++ b/src/Defines.cs.in
@@ -0,0 +1,12 @@
+
+using System;
+
+namespace gfax
+{
+ public class Defines
+ {
+ public static string VERSION = "@version@";
+ public static string DATADIR = "@datadir@";
+ public static string GNOME_LOCALE_DIR = DATADIR + "/locale";
+ }
+}
diff --git a/src/Makefile.am b/src/Makefile.am
new file mode 100755
index 0000000..e71dd90
--- /dev/null
+++ b/src/Makefile.am
@@ -0,0 +1,69 @@
+# 0169 - Don't warn about unused functions, they are called from libglade
+# 0219 - Constructs like Gtk.TreeIter iter = new Gtk.TreeIter();
+CSC = mcs -nowarn:0169,0219 -debug
+
+TARGET = gfax.exe
+WRAPPER = gfax
+SCHEMA = $(top_srcdir)/gfax.schemas.in
+
+#CSFLAGS = -define:DEBUGEFAX
+#CSFLAGS = -define:DEBUGHYLAFAX
+#CSFLAGS =
+
+ASSEMBLIES = -r:Mono.Posix
+
+RESOURCES = \
+ -resource:$(top_srcdir)/glade/gfax.glade,gfax.glade \
+ -resource:$(top_srcdir)/glade/send-druid.glade,send-druid.glade \
+ -resource:$(top_srcdir)/pixmaps/gfax.png,gfax.png \
+ -resource:$(top_srcdir)/pixmaps/send.png,send.png
+
+
+CSFILES = efax.cs \
+ fax.cs \
+ gui.cs \
+ gfaxprefs.cs \
+ gfaxsend.cs \
+ gfaxphonebook.cs \
+ newphonebook.cs \
+ guitools.cs \
+ hylafax.cs \
+ main.cs \
+ phonebook.cs \
+ evolution.cs \
+ sendphonebook.cs
+
+
+GENERATED_CSFILES = Defines.cs Settings.cs
+
+Defines.cs: Defines.cs.in ../config.log
+ sed -e "s|\@version\@|$(VERSION)|" \
+ -e "s|\@datadir\@|$(datadir)|" \
+ -e "s|\@eprefix\@|$(eprefix)|" \
+ < Defines.cs.in > Defines.cs
+
+Settings.cs: Settings.cs
+ env GCONF_CONFIG_SOURCE="" gconftool-2 --makefile-install-rule $(SCHEMA); \
+ gconfsharp2-schemagen gfax $(SCHEMA) > $(srcdir)/Settings.cs
+
+gfax.exe: $(CSFILES) $(GENERATED_CSFILES)
+ $(CSC) $(CSFLAGS) $(GFAX_LIBS) $(ASSEMBLIES) $(RESOURCES) $(CSFILES) $(GENERATED_CSFILES) -o $@
+
+all: gfax.exe
+
+install-data-local: $(TARGET)
+ $(mkinstalldirs) $(DESTDIR)$(pkglibdir)
+ $(INSTALL_PROGRAM) $(TARGET) $(DESTDIR)$(pkglibdir)/$(TARGET)
+
+uninstall-local:
+ rm -f $(DESTDIR)$(pkglibdir)/$(TARGET)
+
+EXTRA_DIST = \
+ $(srcdir)/Defines.cs.in \
+ $(CSFILES)
+
+
+CLEANFILES = \
+ gfax.exe \
+ Defines.cs \
+ Settings.cs
diff --git a/src/efax.cs b/src/efax.cs
new file mode 100755
index 0000000..d9df4dc
--- /dev/null
+++ b/src/efax.cs
@@ -0,0 +1,605 @@
+// GFAX - Gnome fax application
+// Copyright (C) 2003 - 2008 George A. Farris
+//
+// 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 3 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 Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ // Sequence to send a file is:
+ // 1) Make sure we're connected
+ // 2) Store the filename on the server [storefile_open]
+ // 3) Send the file line by line
+ // 4) Close the stream for sending the file
+ // 5) For all the phone numbers do:
+ // a) job_new [job_new]
+ // b) set all job parms [job_parm_set]
+ // c) submit the job [submit_job]
+ // 6) Close the connection.
+
+// Properties
+// string Hostname, Username, Password
+// int IPPort
+
+//#define DEBUGEFAX
+
+namespace gfax {
+ using Gtk;
+ using Mono.Unix;
+ using System;
+ using System.IO;
+ using System.Text; //Encoding.ASCII.GetBytes
+ using System.Collections;
+ using System.Net;
+ using System.Threading;
+ using System.Net.Sockets;
+ using System.Diagnostics;
+
+
+ public class Efax
+ {
+ private static System.Threading.Thread thread;
+ string user;
+
+
+ //Speaker Volume
+ string[] speakerVolume = {"L0","L1","L2","L3"};
+ const int VERY_LOW = 0;
+ const int LOW = 1;
+ const int MEDIUM = 2;
+ const int HIGH = 3;
+
+ // Speaker modes
+ string[] speakerMode = {"M0","M1","M2","M3"};
+ const int NEVER = 0;
+ const int UNTIL_CARRIER = 1;
+ const int ALWAYS_ON = 2;
+ const int ON_RECEIVE_ONLY = 3;
+
+ string[] modemType = {@"-j\Q4",@"-j\Q1",@"-j*F1",@"-j&H2&I0&R1&D3I4",@"-or"};
+
+
+ /*
+ # FCINIT='-j\Q4' # AT&T (Dataport, Paradyne)
+ # FCINIT='-j\Q1' # Motorola (Power Modem, 3400 Pro,...)
+ # FCINIT='-j*F1' # QuickComm (Spirit II)
+ # FCINIT='-j&H2&I0&R1&D3I4' # USR (Courier, Sportster)
+ # FCINIT='-or' # Multi-Tech (for bit reversal)
+ */
+
+ // Don't need this anymore
+ //TextWriter statusfile = null;
+
+ public Efax ()
+ {
+
+ // Set initial modem settings, gconfsharp-schemagen doesn't like "&"
+ // so can't set a default in gfax.schemas
+ if ( Settings.EfaxModemInit == "" )
+ Settings.EfaxModemInit = "-iZ -i&FE0&D2S7=120 -i&C0";
+ if ( Settings.EfaxModemFcinit == "" )
+ Settings.EfaxModemFcinit = "-j&H2&I0&R1&D3I4";
+ if ( Settings.EfaxModemReset == "" )
+ Settings.EfaxModemReset = "-kZ";
+
+ //Don't need this anymore
+ //statusfile = TextWriter.Synchronized(File.CreateText(gfax.Procfile));
+ }
+
+ public void close ()
+ {
+ }
+
+ // Method status(queue)
+ //
+ // queue is the queue fax system it can be one of:
+ // 'sendq', 'doneq' or 'recvq'
+ //
+ // Return a string containing lines formatted like so
+ // "jobid=number=status=owner=pages=dials=error=sendat\n"
+ // such as:
+ // "2=5551212=S=george=2=1=error message=2004/03/09 18.01.51\n"
+ public string status (string queue)
+ {
+ StreamReader infile = null;
+ string[] sts = new string[11];
+ string path;
+ string buf;
+
+
+ if (queue == "sendq")
+ path = gfax.SpoolDirectory;
+ else if (queue == "doneq")
+ path = gfax.SpoolDirectory + "/doneq";
+ else
+ path = gfax.SpoolDirectory + "/recq";
+
+ string[] control_files = Directory.GetFiles(path, "C_*");
+ string[] lines = new string[control_files.Length];
+ int num_lines = 0;
+
+ foreach (string s in control_files) {
+ try {
+ infile = File.OpenText(s);
+
+ for (int i=0; (buf = infile.ReadLine()) != null; i++) {
+ string[] sa = buf.Split('=');
+ if ( sa[1].Length != 0 )
+ sts[i] = sa[1];
+ else
+ sts[i] = "-";
+ }
+ infile.Close();
+ // Purge doneq files if older than 5 days.
+ if ( queue == "doneq" )
+ if ( (DateTime.Now).Subtract(File.GetCreationTime(s)).Days > 5 )
+ File.Delete(s);
+
+ lines[num_lines++] = String.Format("{0}={1}={2}={3}={4}={5}={6}={7}\n",
+ sts[0],sts[2],sts[3],sts[4],sts[5],sts[6],sts[10],sts[7]);
+ }
+ catch (Exception e) {
+ //return;
+ }
+ }
+
+ return String.Concat(lines);
+ }
+
+ // send_init (string filename)
+ //
+ // Here we should convert the file with ghostscript and return a directory
+ // that points to the converted files to send, one per page. There should
+ // be some status messages passed to the user to let them know whats going on.
+ // Maybe a dialog box.
+ //
+ // We also setup the status message system.
+ public string send_init (string fname)
+ {
+ StreamReader fp = null;
+ double lines = 0;
+ string resolution = "204x98"; // normal res
+
+ // Get new directory name and make it
+ Random rand = new Random();
+ string rand_file = rand.Next().ToString();
+ string dir_name = String.Format("{0}/D_{1}",gfax.SpoolDirectory, rand_file);
+ // TODO proper checks here, this is nasty
+ Directory.CreateDirectory(dir_name);
+
+
+ // get the fax options
+ if (gfax.sendWizardResolution) {
+ resolution = "204x196";
+ }else {
+ if (Settings.HiResolution)
+ resolution = "204x196";
+ }
+
+ string papersize = Settings.EfaxPapersize;
+
+
+ //figure out how many lines in the file for progress bar
+ // TODO progress bar and error
+ try { fp = File.OpenText(fname); }
+ catch (Exception e) { }
+
+ while ( (fp.ReadLine()) != null ) {
+ lines = lines + 1;
+ }
+ fp.Close();
+
+
+ try { fp = File.OpenText(fname); }
+ catch (Exception e) { }
+
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine("[Efax.send_init] File :{0} is open and has {1} lines", fname,lines);
+ }
+
+ fp.Close();
+
+
+ // TODO need random temp file name
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine("[Efax.send_init] Converting file with gs");
+ Console.WriteLine(" Filename -> {0}",fname);
+ Console.WriteLine(" Resolution -> {0}",resolution);
+ Console.WriteLine(" Directory -> {0}",dir_name);
+ Console.WriteLine(" Papersize -> {0}\n",papersize);
+ }
+
+ ProcessStartInfo pidInfo = new ProcessStartInfo();
+ pidInfo.FileName = "gs";
+
+ pidInfo.Arguments = String.Concat(
+ "-q -sDEVICE=tiffg3 -r",
+ resolution,
+ " -dNOPAUSE -dSAFER -dBATCH",
+ " -sOutputFile=",
+ dir_name,
+ "/tmp.%03d -sPAPERSIZE=",
+ papersize, " ",fname);
+
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine("[Efax.send_init]\n {0}", pidInfo.Arguments);
+ }
+
+ Process pid = Process.Start(pidInfo);
+ pid.WaitForExit();
+
+ return dir_name;
+ }
+
+ // Method send(string directory, contact)
+ //
+ // Sequence to send a file is:
+ public void send (string directory, GfaxContact contact)
+ {
+ StreamWriter outfile;
+ int pages;
+
+
+ string emailAddress = Settings.EmailAddress;
+ string emailNotify = "none";
+
+ // Get advanced options
+ if (gfax.fromSendWizard) {
+ if (gfax.sendWizardEmailNotify) {
+ emailNotify = "done";
+ emailAddress = gfax.sendWizardEmailAddress;
+ }
+ } else {
+ if (Settings.EmailNotify)
+ emailNotify = "done";
+ }
+
+ //2004/03/09 18.01.51
+ // Format time to send
+ DateTime st = DateTime.Now;
+ string tts = String.Format("{0}/{1:00}/{2:00} {3:00}.{4:00}.00",
+ st.Year, st.Month, st.Day, st.Hour, st.Minute);
+
+ // get next jobid
+ if ( Settings.EfaxNextJobid > 998 )
+ Settings.EfaxNextJobid = 1;
+ else
+ Settings.EfaxNextJobid++;
+
+ // open directory and count files, that will be the number of pages.
+ pages = Directory.GetFiles(directory).Length;
+
+ // build filename
+ Random rand = new Random();
+ string rand_file = rand.Next().ToString();
+ string tfname = String.Format("{0}/C_{1}.{2}",gfax.SpoolDirectory, contact.PhoneNumber, rand_file);
+
+ // TODO error stuff
+ //Open new status file
+ try { outfile = File.CreateText(tfname); }
+ catch (Exception e) { return; }
+ outfile.Write("Jobid=");
+ outfile.WriteLine(Settings.EfaxNextJobid);
+ outfile.Write("JobDirectory=");
+ outfile.WriteLine(directory);
+ outfile.Write("PhoneNumber=");
+ outfile.WriteLine(contact.PhoneNumber);
+ outfile.Write("Status=");
+ outfile.WriteLine("P");
+ outfile.Write("Owner=");
+ outfile.WriteLine(Environment.GetEnvironmentVariable("USERNAME"));
+ outfile.Write("Pages=");
+ outfile.WriteLine(pages.ToString());
+ outfile.Write("Dials=");
+ outfile.WriteLine(0);
+ outfile.Write("Sendat=");
+ outfile.WriteLine(tts);
+ outfile.Write("Notification=");
+ outfile.WriteLine(emailNotify);
+ outfile.Write("Email=");
+ outfile.WriteLine(emailAddress);
+ outfile.Write("ErrorMessage=");
+ outfile.WriteLine("");
+ outfile.Close();
+
+ // jobid might need to be Convert.ToInt32
+
+ }
+
+ public void job_delete (string jobid)
+ {
+ StreamReader infile = null;
+ string[] sts = new string[11];
+ string buf;
+
+ string[] controlFiles = Directory.GetFiles(gfax.SpoolDirectory, "C_*");
+
+ foreach (string controlFile in controlFiles) {
+ try {
+ infile = File.OpenText(controlFile);
+
+ for (int i=0; (buf = infile.ReadLine()) != null; i++) {
+ string[] sa = buf.Split('=');
+ if ( sa[1].Length != 0 )
+ sts[i] = sa[1];
+ else
+ sts[i] = "-";
+ }
+ infile.Close();
+
+ if ( sts[0] == jobid ) {
+ File.Delete(controlFile);
+ Directory.Delete(sts[1], true);
+ break;
+ }
+ }
+ catch (Exception e) {continue; }
+ }
+
+ // end up here with control file name
+ return;
+ }
+
+ public string job_kill (string jobid)
+ {
+ return null;
+ }
+
+ public void run_efaxd ()
+ {
+ // Create the thread object, passing in the efaxd method
+ WaitCallback callback = new WaitCallback(efaxd);
+ ThreadPool.QueueUserWorkItem(callback);
+ }
+
+ /* efaxd
+ * For now just cycle through the control files and send the fax
+ *
+ */
+ private void efaxd (object state)
+ {
+ thread = System.Threading.Thread.CurrentThread;
+
+ StreamReader infile = null;
+ string[] sts = new string[11];
+ string buf;
+ //bool fatalError = false;
+ int retries;
+ string speakerModeVolume;
+
+ //string jobid, number, status, owner, pages, dials, error, sendat;
+ System.Threading.Thread.Sleep(15000); // Don't start immediately
+
+ while (true) {
+ Application.Invoke (delegate {gfax.GAppbar.ClearStack();});
+ Application.Invoke (delegate {gfax.GAppbar.Push(Catalog.GetString("Scanning control files."));});
+
+ // while there are job files in the folder
+ while (Directory.GetFiles(gfax.SpoolDirectory, "C_*").Length > 0) {
+
+ string[] controlFiles = Directory.GetFiles(gfax.SpoolDirectory, "C_*");
+ // for each job try send it
+ foreach (string controlFile in controlFiles) {
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine("Control files are ----> {0}", controlFile);
+ }
+
+ //Application.Invoke (delegate {gfax.GAppbar.ClearStack();});
+ Application.Invoke (delegate {gfax.GStatusTextBuffer.InsertAtCursor(
+ Catalog.GetString("Running job " + controlFile));});
+
+ try {
+ infile = File.OpenText(controlFile);
+
+ for (int i=0; (buf = infile.ReadLine()) != null; i++) {
+ string[] sa = buf.Split('=');
+ if ( sa[1].Length != 0 )
+ sts[i] = sa[1];
+ else
+ sts[i] = "-";
+ }
+ infile.Close();
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine("[Efaxd] Buffer is {0}", buf);
+ }
+ }
+ catch (Exception e) {continue; }
+
+ //lines[num_lines++] = String.Format("{0}={1}={2}={3}={4}={5}={6}={7}\n",
+ // sts[0],sts[2],sts[3],sts[4],sts[5],sts[6],sts[10],sts[7]);
+
+ // If we aborted for some reason check the retries
+ if (Convert.ToInt32(sts[6]) >= Settings.EfaxRetries) {
+ sts[10] = Catalog.GetString("Busy retries exceeded");
+ update_status_code(sts, controlFile, "F");
+ continue;
+ }
+
+ sts[10] = ""; // clear error message
+ update_status_code(sts, controlFile, "R");
+
+ // default "-iM1L0"
+ speakerModeVolume = String.Concat("-i",
+ speakerMode[Settings.EfaxModemSpeakerMode],
+ speakerVolume[Settings.EfaxModemSpeakerVolume]);
+
+ string [] tifFiles = Directory.GetFiles(sts[1], "tmp.*");
+ StringBuilder filesToSend = new StringBuilder();
+ foreach (string f in tifFiles) {
+ filesToSend.Append(f);
+ filesToSend.Append(" ");
+ }
+
+
+ ProcessStartInfo pidInfo = new ProcessStartInfo();
+ pidInfo.FileName = "efax";
+ pidInfo.RedirectStandardError = true;
+ pidInfo.UseShellExecute = false;
+ //used for testing
+ //Thread.Sleep(5000);
+ //pidInfo.FileName = "echo";
+ //pidInfo.FileName = "sleep 5";
+
+ pidInfo.Arguments = String.Concat(
+ "-d /dev/", Settings.EfaxModemDevice, //modem port
+ " -x ", Settings.EfaxLockfile, Settings.EfaxModemDevice, // lockfile
+ " \"", Settings.EfaxModemInit, "\"", // init sequence
+ " \"", speakerModeVolume, "\"", // speaker enable / mode
+ " -l \"", Settings.FaxNumber, "\"", // Our fax number
+ " \"", Settings.EfaxModemReset, "\"", // how to reset modem
+ " -f /usr/bin/efaxfont",
+ " -h \'%d/%d\'", // should be name number and date
+ " -v i", // session progress information
+ " -t T", sts[2], // should make sure there are no bad chars
+ " ", filesToSend); // files to send
+
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine("[Efax.send]\n {0}", pidInfo.Arguments);
+ }
+ Application.Invoke (delegate {gfax.GAppbar.ClearStack();});
+ Application.Invoke (delegate {gfax.GAppbar.Push(Catalog.GetString("Sending facsimile..."));});
+ Process pid = Process.Start(pidInfo);
+ StreamReader myStreamReader = pid.StandardError;
+
+ //start the pulser
+ Application.Invoke (delegate {gfax.Pulser.StartPulse();});
+ Application.Invoke (delegate {gfax.Status.Append("");});
+
+ while (!pid.HasExited) {
+ string str = myStreamReader.ReadLine();
+ Application.Invoke (delegate {gfax.Status.Append(str);});
+ System.Threading.Thread.Sleep(200);
+ }
+ //stop the pulser.
+ Application.Invoke (delegate {gfax.Pulser.EndPulse();});
+
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine("[Efax.efaxd] Exit code - {0}", pid.ExitCode);
+ }
+
+ switch (pid.ExitCode) {
+ case 0:
+ // If successful then mv the control file to the done queue and flag
+ // a date for it's removal.
+ sts[10] = Catalog.GetString("Success");
+ update_status_code(sts, controlFile, "D");
+ // remove directory path
+ string basefilename = controlFile.Remove(0, gfax.SpoolDirectory.Length + 1);
+ string newfilename = String.Concat(gfax.SpoolDirectory,"/doneq/", basefilename);
+ File.Move(controlFile, newfilename);
+ break;
+ case 1:
+ // busy number, continue after timeout
+ // update listview as well
+ retries = Convert.ToInt32(sts[6]);
+ if (retries++ < Settings.EfaxRetries) {
+ sts[6] = retries.ToString();
+ update_status_code(sts, controlFile, "W");
+ }
+ else {
+ sts[10] = Catalog.GetString("Busy retries exceeded");
+ update_status_code(sts, controlFile, "F");
+ }
+ break;
+ case 2:
+ // fatal errors - no retry
+ //fatalError = true;
+ // change code in file
+ sts[10] = Catalog.GetString("Fatal error");
+ update_status_code(sts, controlFile, "F");
+ break;
+ case 3:
+ // Modem error - no retry
+ //fatalError = true;
+ sts[10] = Catalog.GetString("Fatal modem error");
+ update_status_code(sts, controlFile, "F");
+ break;
+ case 4:
+ // Modem not responding
+ //fatalError = true;
+ sts[10] = Catalog.GetString("Modem not responding");
+ update_status_code(sts, controlFile, "B");
+ break;
+ case 5:
+ // Program terminated
+ //fatalError = true;
+ sts[10] = Catalog.GetString("Program terminated");
+ update_status_code(sts, controlFile, "F");
+ break;
+ }// end of switch
+
+ //sleep between each fax for the modem to stablize
+ System.Threading.Thread.Sleep(3000);
+ } // end of foreach
+ // This basically sleeps between busy numbers.
+ System.Threading.Thread.Sleep(30000);
+ }
+ System.Threading.Thread.Sleep(30000); // sleep 30 seconds
+ // Moved this from case 0 above
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine("Deleting --->{0}", sts[1]);
+ }
+ //Directory.Delete(sts[1], true);
+ }// end of while
+ }
+
+
+ // Updates the status code in the control file and writes it back to disk
+ public void update_status_code (string[] job, string file, string status)
+ {
+ string fname = file;
+
+ if ( status == "F" ) {
+ string filename = file.Remove(0, gfax.SpoolDirectory.Length + 1);
+ fname = String.Concat(gfax.SpoolDirectory,"/doneq/", filename);
+ File.Delete(file);
+ Directory.Delete(job[1], true);
+ }
+
+
+ // Thread safe
+ TextWriter outfile = TextWriter.Synchronized(File.CreateText(fname));
+
+ // TODO change this to string.concat and just issue one write
+ try {
+ //outfile = File.CreateText(file);
+
+ outfile.Write("Jobid=");
+ outfile.WriteLine(job[0]);
+ outfile.Write("JobDirectory=");
+ outfile.WriteLine(job[1]);
+ outfile.Write("PhoneNumber=");
+ outfile.WriteLine(job[2]);
+ outfile.Write("Status=");
+ outfile.WriteLine(status);
+ outfile.Write("Owner=");
+ outfile.WriteLine(job[4]);
+ outfile.Write("Pages=");
+ outfile.WriteLine(job[5]);
+ outfile.Write("Dials=");
+ outfile.WriteLine(job[6]);
+ outfile.Write("Sendat=");
+ outfile.WriteLine(job[7]);
+ outfile.Write("Notification=");
+ outfile.WriteLine(job[8]);
+ outfile.Write("Email=");
+ outfile.WriteLine(job[9]);
+ outfile.Write("ErrorMessage=");
+ outfile.WriteLine(job[10]);
+
+ outfile.Close();
+ }
+ catch (Exception e) {}
+ }
+
+ }
+}
diff --git a/src/evolution.cs b/src/evolution.cs
new file mode 100755
index 0000000..5622a69
--- /dev/null
+++ b/src/evolution.cs
@@ -0,0 +1,134 @@
+// GFAX - Gnome fax application
+// Copyright (C) 2003 - 2008 George A. Farris
+//
+// 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 3 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 Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+namespace gfax {
+ using System;
+ using System.IO;
+ using GLib;
+ using Gtk;
+ using GtkSharp;
+ using System.Collections;
+ using System.Reflection;
+ using Evolution;
+
+ //************************************************************************
+ //
+ //
+ //
+ public class EdsPhoneBooks
+ {
+
+ private void OnContactsAdded (object o, Evolution.ContactsAddedArgs args)
+ {
+ Console.WriteLine ("Contacts added:");
+ foreach (Evolution.Contact contact in args.Contacts) {
+ Console.WriteLine ("\nId: {0}", contact.Id);
+ Console.WriteLine ("Fullname: {0}", contact.FullName);
+ }
+ }
+
+ private void OnContactsChanged (object o, Evolution.ContactsChangedArgs args)
+ {
+ }
+
+ private void OnContactsRemoved (object o, Evolution.ContactsRemovedArgs args)
+ {
+
+ }
+
+ public ArrayList GetPhoneBooks ()
+ {
+ ArrayList ebooks = new ArrayList();
+
+ SourceList slist = new SourceList ("/apps/evolution/addressbook/sources");
+ if (slist != null) {
+ SList group_list = slist.Groups;
+ //Console.WriteLine ("Group count: {0}", group_list.Count);
+
+ foreach (SourceGroup group in group_list) {
+ //Only get phone books on this machine.
+ if (group.Name == "On This Computer") {
+ SList src_list = group.Sources;
+
+ foreach (Evolution.Source src in src_list) {
+ ebooks.Add(src.Name);
+ }
+ }
+ }
+ }
+ return ebooks;
+ }
+
+
+ public ArrayList GetContacts (string bookName)
+ {
+ string contact_fax = null;
+ ArrayList ebooks = new ArrayList();
+ ArrayList records = new ArrayList();
+
+ SourceList slist = new SourceList ("/apps/evolution/addressbook/sources");
+ if (slist != null) {
+ SList group_list = slist.Groups;
+ foreach (SourceGroup group in group_list) {
+ //Only get phone books on this machine.
+ if (group.Name == "On This Computer") {
+ SList src_list = group.Sources;
+
+ foreach (Evolution.Source src in src_list) {
+ if (src.Name == bookName) {
+ //Book bk = Book.NewSystemAddressbook ();
+ Book bk = new Book(src);
+ bk.Open (true);
+
+ BookQuery q = BookQuery.AnyFieldContains ("");
+ Contact[] contactlist = bk.GetContacts (q);
+ //Console.WriteLine ("Contact count (range) : {0}", contactlist.Length);
+
+ if (contactlist != null) {
+
+ foreach (Contact comp in contactlist) {
+ contact_fax = null;
+
+ if (comp.BusinessFax != null && comp.BusinessFax != String.Empty) {
+ contact_fax = comp.BusinessFax;
+ }
+ else if (comp.OtherFax != null && comp.OtherFax != String.Empty) {
+ contact_fax = comp.OtherFax;
+ }
+ else if (comp.HomeFax != null && comp.HomeFax != String.Empty) {
+ contact_fax = comp.HomeFax;
+ }
+
+ if (contact_fax != null) {
+ GfaxContact gc = new GfaxContact();
+ //Console.WriteLine ("Id: {0}", comp.Id);
+ gc.PhoneNumber = contact_fax;
+ gc.ContactPerson = comp.FullName;
+ gc.Organization = comp.Org;
+ records.Add(gc);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return records;
+ }
+ }
+}
diff --git a/src/fax.cs b/src/fax.cs
new file mode 100755
index 0000000..91d0f0f
--- /dev/null
+++ b/src/fax.cs
@@ -0,0 +1,501 @@
+// GFAX - Gnome fax application
+// Copyright (C) 2003 - 2008 George A. Farris
+//
+// 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 3 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 Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+//#define DEBUGHYLAFAX
+
+
+namespace gfax {
+ using Mono.Unix;
+ using System;
+ using System.Collections;
+
+ public enum FaxStatus: int {
+ Sent,
+ Fail,
+ New,
+ Busy,
+ Block,
+ Sleep,
+ Run,
+ Receiving,
+ Received
+ };
+
+ public class Fax
+ {
+ static Hylafax hfax;
+ static Efax efax;
+ static bool firstRun = true;
+
+ public class FaxQueue
+ {
+ public string Jobid;
+ public string Number;
+ public string Status;
+ public FaxStatus StatusType;
+ public string Owner;
+ public string Pages;
+ public string Dials;
+ public string Error;
+ public object Sendat;
+ }
+
+ public class FaxRecQueue
+ {
+ public string Pages;
+ public string Status;
+ public FaxStatus StatusType;
+ public string Sender;
+ public object TimeReceived;
+ public string Filename;
+ }
+
+ public static string async_get_server_status ()
+ {
+
+ if (Settings.TransmitAgent == "hylafax") {
+ hfax = new Hylafax();
+
+ if ( !hfax.connect() )
+ return (Catalog.GetString("No Connection"));
+ hfax.asyncstatus("status");
+ hfax.close();
+ hfax = null;
+ return ("");
+ }
+
+ if (Settings.TransmitAgent == "efax") {
+ //TODO put modem ready status here
+ if (firstRun) {
+ firstRun = false;
+ return (Catalog.GetString("Efax transmit process running...\nScanning job files every 30 seconds."));
+ }
+ else
+ return (null);
+ }
+
+ return (Catalog.GetString("Error transport agent not specified!"));
+ }
+
+ public static ArrayList async_get_queue_status (string queue)
+ {
+ if (Settings.TransmitAgent == "hylafax") {
+ hfax = new Hylafax();
+
+ if ( hfax.connect() )
+ hfax.asyncstatus(queue);
+ hfax.close();
+ hfax = null;
+ }
+
+ if (Settings.TransmitAgent == "efax") {
+ string reply = gfax.efax.status(queue);
+
+ if (queue == "doneq" || queue == "sendq")
+ return (parse_senddone(reply));
+ else // (queue == "recvq")
+ return (parse_receive(reply));
+ }
+ return (null);
+ }
+
+ // parse the send or done queue
+ public static ArrayList parse_senddone (string reply)
+ {
+ ArrayList list = new ArrayList();
+
+ if (reply.Length > 0) {
+ foreach (string s in reply.Split('\n')) {
+ FaxQueue hq = new FaxQueue();
+ //Console.WriteLine("s length equals --> {0}", s.Length);
+ if (s.Length == 0 )
+ break;
+
+ string[] sa = s.Split('=');
+
+ // TODO put error here about bad network comms
+ if (sa.Length != 8) {
+ break;
+ }
+
+ if ( sa[0].Length != 0 )
+ hq.Jobid = sa[0].Trim();
+ else
+ hq.Jobid = "";
+ if ( sa[1].Length != 0 )
+ hq.Number = sa[1].Trim();
+ else
+ hq.Number = "";
+ if ( sa[2].Length != 0 ) {
+ switch (sa[2]) {
+ case "R":
+ hq.Status = Catalog.GetString("Run");
+ hq.StatusType = FaxStatus.Run;
+ break;
+ case "S":
+ hq.Status = Catalog.GetString("Sleep");
+ hq.StatusType = FaxStatus.Sleep;
+ break;
+ case "B":
+ hq.Status = Catalog.GetString("Block");
+ hq.StatusType = FaxStatus.Block;
+ break;
+ case "W":
+ hq.Status = Catalog.GetString("Busy");
+ hq.StatusType = FaxStatus.Busy;
+ break;
+ case "D":
+ hq.Status = Catalog.GetString("Done");
+ hq.StatusType = FaxStatus.Sent;
+ break;
+ case "F":
+ hq.Status = Catalog.GetString("Fail");
+ hq.StatusType = FaxStatus.Fail;
+ break;
+ case "P":
+ hq.Status = Catalog.GetString("New");
+ hq.StatusType = FaxStatus.New;
+ break;
+ }
+ }
+ else
+ hq.Status = "";
+ if ( sa[3].Length != 0 )
+ hq.Owner = sa[3].Trim();
+ else
+ hq.Owner = "";
+ if ( sa[4].Length != 0 )
+ hq.Pages = sa[4].Trim();
+ else
+ hq.Pages = "";
+ if ( sa[5].Length != 0 )
+ hq.Dials = sa[5].Trim();
+ else
+ hq.Dials = "";
+ if ( sa[6].Length != 0 )
+ hq.Error = sa[6];
+ else
+ hq.Error = "";
+
+ if ( sa[7].Length != 0 ) { // 2004/03/09 18.01.51
+ try {
+ hq.Sendat = (DateTime)System.DateTime.ParseExact(sa[7].Replace(".", ":").Trim(), "yyyy/MM/dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture);
+ }
+ catch(FormatException e)
+ {
+ hq.Sendat = null;
+ }
+ } else {
+ hq.Sendat = null;
+ }
+
+ list.Add(hq);
+ }
+
+ } else { // no status
+
+ FaxQueue hq = new FaxQueue();
+ hq.Jobid = "";
+ hq.Number = "";
+ hq.Status = "";
+ hq.Owner = "";
+ hq.Pages = "";
+ hq.Dials = "";
+ hq.Error = "";
+ hq.Sendat = null;
+
+ list.Add(hq);
+ }
+
+ return (list);
+ }
+
+ // parse the receive queue
+ //
+ //Page S Sender/TSI Recvd@ Filename
+ //1 +49 30 7865224 10Nov04 fax00004.tif
+ // should come back as
+ //1= =+49 30 7865224=10Nov04=fax00004.tif
+ public static ArrayList parse_receive (string reply)
+ {
+ ArrayList list = new ArrayList();
+
+
+ if (reply.Length > 0) {
+ foreach (string s in reply.Split('\n')) {
+ FaxRecQueue hq = new FaxRecQueue();
+ if (s.Length == 0 )
+ break;
+
+ string[] sa = s.Split('=');
+ if (sa.Length != 5) {
+ break;
+ }
+
+ if ( sa[0].Length != 0 )
+ hq.Pages = sa[0].Trim();
+ else
+ hq.Pages = "";
+ if ( sa[1].Length != 0 )
+ switch (sa[1]) {
+ case "N*":
+ hq.Status = Catalog.GetString("Receiving");
+ hq.StatusType = FaxStatus.Receiving;
+ break;
+ case "N ":
+ hq.Status = Catalog.GetString("Done");
+ hq.StatusType = FaxStatus.Received;
+ break;
+ }
+ if ( sa[2].Length != 0 )
+ hq.Sender = sa[2].Trim();
+ else
+ hq.Sender = "";
+ if ( sa[3].Length != 0 )
+ {
+ try {
+ hq.TimeReceived = (DateTime)System.DateTime.ParseExact(sa[3], "ddMMMyy", System.Globalization.CultureInfo.InvariantCulture);
+ }
+ catch(FormatException e )
+ {
+ hq.TimeReceived = null;
+ }
+ }
+ else
+ hq.TimeReceived = null;
+ if ( sa[4].Length != 0 )
+ hq.Filename = sa[4].Trim();
+ else
+ hq.Filename = "";
+
+ list.Add(hq);
+ }
+
+ } else { // no status
+
+ FaxRecQueue hq = new FaxRecQueue();
+ hq.Pages = "";
+ hq.Status = "";
+ hq.Sender = "";
+ hq.TimeReceived = null;
+ hq.Filename = "";
+
+ list.Add(hq);
+ }
+
+ return (list);
+ }
+
+
+
+ public static void sendfax (string fname)
+ {
+ string remote_fname;
+
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine("[Fax.sendfax] File name is : {0}", fname);
+ }
+
+ if (Settings.TransmitAgent == "hylafax") {
+ Hylafax hfaxsf = new Hylafax();
+ // hylafax actually stores the file to the server
+ hfaxsf.connect();
+ remote_fname = hfaxsf.send_init(fname);
+
+ // if "Cancel" button pressed on progess bar
+ if (remote_fname == "cancelled")
+ return;
+
+ if (Settings.Faxtracing == true) {
+ if (Settings.TransmitAgent == "hylafax") {
+ Console.WriteLine("[Fax.sendfax] Remote file name is : {0}", remote_fname);
+ }
+ }
+
+ //System.Threading.Thread.Sleep(2000);
+
+ IEnumerator enu = gfax.Destinations.GetEnumerator();
+
+ if (Settings.Faxtracing == true) {
+ if (Settings.TransmitAgent == "hylafax") {
+ Console.WriteLine("[Fax.sendfax] Destinations has a count of : {0}", gfax.Destinations.Count);
+ }
+ }
+
+ while ( enu.MoveNext() ) {
+ // TODO try catch exception here
+ GfaxContact c = (GfaxContact)enu.Current;
+
+ if (Settings.Faxtracing == true) {
+ if (Settings.TransmitAgent == "hylafax") {
+ Console.WriteLine("[Fax.sendfax] In while loop contact is -----> {0}", c.PhoneNumber);
+ }
+ }
+
+ hfaxsf.send(remote_fname, c);
+
+ if (Settings.Faxtracing == true) {
+ if (Settings.TransmitAgent == "hylafax") {
+ Console.WriteLine("[Fax.sendfax] In while loop bottom... ");
+ }
+ }
+
+ //System.Threading.Thread.Sleep(1000);
+ // open the log and log out going fax to server
+ // Date Time PhoneNumber Organization ContactPerson
+ // log file is in ~/.etc/gfax
+ //if (Settings.LogEnabled)
+ //log_it((GfaxContact)enu.Current);
+ }
+
+ if (Settings.Faxtracing == true) {
+ if (Settings.TransmitAgent == "hylafax") {
+ Console.WriteLine("[Fax.sendfax] End of send contact loop...");
+ }
+ }
+
+ hfaxsf = null;
+ }
+
+
+ //Efax transport
+ if (Settings.TransmitAgent == "efax") {
+
+ // Convert the file with ghostscript
+ string directory = gfax.efax.send_init(fname);
+ if (directory == "cancelled")
+ return;
+
+ IEnumerator enu = gfax.Destinations.GetEnumerator();
+ while ( enu.MoveNext() ) {
+ gfax.efax.send(directory, (GfaxContact)enu.Current);
+ if (Settings.LogEnabled)
+ log_it((GfaxContact)enu.Current);
+ }
+ }
+ }
+
+ public static bool recvfax (string fname)
+ {
+
+ // Hylafax support
+ if (Settings.TransmitAgent == "hylafax") {
+ hfax = new Hylafax();
+ // hylafax actually stores the file to the server
+ hfax.connect();
+ return(hfax.getfile(fname));
+ }
+
+ // Efax transport
+ if (Settings.TransmitAgent == "efax") {
+ return false;
+ }
+
+ return false;
+ }
+
+
+ public static void log_it (GfaxContact contact)
+ {
+
+ }
+
+
+ public static void modify_job (string jobid, string number, string sendat, string dials)
+ {
+ if (Settings.TransmitAgent == "hylafax") {
+ hfax = new Hylafax();
+ hfax.connect();
+ hfax.job_select(jobid);
+ hfax.job_suspend();
+ hfax.job_param_set("SENDTIME", sendat);
+ hfax.job_param_set("EXTERNAL", number);
+ hfax.job_param_set("DIALSTRING", number);
+ hfax.job_param_set("MAXDIALS", dials);
+ hfax.job_submit();
+ hfax = null;
+ }
+
+ /*
+ if (Settings.TransmitAgent == "efax") {
+ gfax.efax.job_kill(jobid);
+ gfax.efax.job_delete(jobid);
+ }
+ */
+
+ }
+
+ public static void resubmit_job (string jobid, string number, string sendat, string dials)
+ {
+ // will have to query the job, get the file name
+ // possibly retrieve the file and then re-submit the job
+
+ if (Settings.TransmitAgent == "hylafax") {
+ hfax = new Hylafax();
+ hfax.connect();
+ hfax.job_select(jobid);
+
+ /*
+ hfax.job_reset("P");
+ hfax.job_suspend();
+ hfax.job_param_set("SENDTIME", sendat);
+ hfax.job_param_set("EXTERNAL", number);
+ hfax.job_param_set("DIALSTRING", number);
+ hfax.job_param_set("MAXDIALS", dials);
+ hfax.job_submit();
+ hfax = null;
+ */
+ }
+
+ }
+
+
+ public static void delete_job (string jobid)
+ {
+ if (Settings.TransmitAgent == "hylafax") {
+ hfax = new Hylafax();
+ hfax.connect();
+ hfax.job_select(jobid);
+ hfax.job_kill();
+ hfax.job_delete();
+ hfax = null;
+ }
+
+ if (Settings.TransmitAgent == "efax") {
+ gfax.efax.job_kill(jobid);
+ gfax.efax.job_delete(jobid);
+ }
+
+ }
+
+ public static int delete_file (string fname)
+ {
+ if (Settings.TransmitAgent == "hylafax") {
+ hfax = new Hylafax();
+ hfax.connect();
+ int reply = hfax.deletefile(fname);
+ hfax = null;
+ return (reply);
+ }
+
+ if (Settings.TransmitAgent == "efax") {
+ return(0);
+ }
+ return(0);
+ }
+ }
+}
diff --git a/src/gfaxphonebook.cs b/src/gfaxphonebook.cs
new file mode 100755
index 0000000..be922c0
--- /dev/null
+++ b/src/gfaxphonebook.cs
@@ -0,0 +1,498 @@
+// 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+namespace gfax {
+ using Mono.Unix;
+ using System;
+ using System.IO;
+ using GLib;
+ using Gtk;
+ using Gnome;
+ using Glade;
+ using GConf.PropertyEditors;
+ using GtkSharp;
+ using System.Runtime.InteropServices;
+ using System.Collections;
+ using System.Diagnostics;
+ using System.Reflection;
+
+ //************************************************************************
+ // GfaxPhonebook class
+ //
+
+ public class GfaxPhonebook
+ {
+ const string APPNAME = "Gfax";
+
+ const int COLUMN_0 = 0;
+ const int COLUMN_1 = 1;
+ const int COLUMN_2 = 2;
+ const int COLUMN_3 = 3;
+ const int ALL_COLUMNS = -1;
+
+ string tempName;
+ string tempNumber;
+ string tempCompany;
+
+ bool eventsEnabled = true;
+
+ [Glade.Widget] Gtk.Window PhbookWindow;
+ [Glade.Widget] Gtk.ComboBox PhonebookComboBox;
+ [Glade.Widget] Gtk.TreeView ItemTreeview;
+ [Glade.Widget] Gtk.Entry PhonebookComboEntry;
+ [Glade.Widget] Gtk.Entry EditPhbNumberEntry;
+ [Glade.Widget] Gtk.Entry EditPhbNameEntry;
+ [Glade.Widget] Gtk.Entry EditPhbCompanyEntry;
+ [Glade.Widget] Gtk.ToolButton SaveCloseButton;
+ [Glade.Widget] Gtk.ToolButton DeletePhonebookButton;
+ [Glade.Widget] Gtk.Button AddButton;
+ [Glade.Widget] Gtk.Button UpdateButton;
+ [Glade.Widget] Gtk.Button ClearButton;
+ [Glade.Widget] Gtk.Statusbar Statusbar;
+
+ Gtk.ListStore ItemStore; //phonebook item store
+ G_ListView ItemView;
+
+ GConf.PropertyEditors.EditorShell shell;
+ Phonebook[] myPhoneBooks;
+ Glade.XML gxml;
+ const int id = 1;
+ bool pbIsReadOnly = false; //wether current phone book is no editable.
+
+ public GfaxPhonebook ()
+ {
+ myPhoneBooks = Phonetools.get_phonebooks();
+
+ Application.Init ();
+ gxml = new Glade.XML (null, "send-druid.glade","PhbookWindow",null);
+ gxml.Autoconnect (this);
+
+ ItemStore = new ListStore(typeof (string), typeof (string), typeof (string));
+ ItemView = new G_ListView(ItemTreeview, ItemStore);
+ ItemView.AddColumnTitle(Catalog.GetString("Organization"), 0, COLUMN_0);
+ ItemView.AddColumnTitle(Catalog.GetString("Phone Number"), 1, COLUMN_1);
+ ItemView.AddColumnTitle(Catalog.GetString("Contact"), 2, COLUMN_2);
+ ItemTreeview.HeadersVisible = true;
+ //ItemTreeview.Selection.Mode = SelectionMode.Multiple;
+ ItemTreeview.Selection.Changed +=
+ new EventHandler(on_ItemTreeview_selection);
+
+ // Populate the drop down combo box with phonebooks and populate
+ // the list with the first phonebook.
+ // TODO sort these alphabetically
+ if ( myPhoneBooks.Length > 0) {
+ string[] list = new string[myPhoneBooks.Length];
+
+ if ( myPhoneBooks != null ) {
+ // populate the list
+ int i = 0;
+ PhonebookComboBox.RemoveText(0);
+ foreach (Phonebook p in myPhoneBooks) {
+ list[i++] = p.Name;
+ PhonebookComboBox.AppendText(p.Name);
+ }
+ PhonebookComboBox.Active = 0;
+ }
+
+ //Console.WriteLine(list[PhonebookComboBox.Active]);
+ DeletePhonebookButton.Sensitive = true;
+ } else {
+ DeletePhonebookButton.Sensitive = false;
+ }
+
+ SaveCloseButton.Sensitive = false;
+ UpdateButton.Sensitive = false;
+ ClearButton.Sensitive = false;
+ AddButton.Sensitive = false;
+
+ Application.Run ();
+ }
+
+
+ private void on_PhbookWindow_delete_event (object o, DeleteEventArgs args)
+ {
+ PhbookWindow.Destroy();
+ Application.Quit ();
+ }
+
+ // Menu signals
+ private void on_New_activate (object o, EventArgs args)
+ {
+ on_NewPhonebookButton_clicked(null, null);
+ }
+
+ private void on_SaveAndClose_activate (object o, EventArgs args)
+ {
+ on_SaveCloseButton_clicked(null, null);
+ }
+
+ private void on_Delete_activate (object o, EventArgs args)
+ {
+ on_DeletePhonebookButton_clicked(null, null);
+ }
+
+ private void on_Close_activate (object o, EventArgs args)
+ {
+ on_CloseButton_clicked(null, null);
+ }
+ //--------- end of menu -----------------
+
+
+ private void on_NewPhonebookButton_clicked (object o, EventArgs args)
+ {
+ // Unselect any phone book otherwise we get gtk errors.
+ ItemTreeview.Selection.UnselectAll();
+
+ // run the wizard
+ NewPhoneBook nphb = new NewPhoneBook ();
+ nphb.Run();
+
+ if ( nphb.PhoneBookNames.Count > 0 ) { // don't do this if cancelled
+ IEnumerator enu = nphb.PhoneBookNames.GetEnumerator();
+
+ while ( enu.MoveNext() ) {
+ Phonebook ph = new Phonebook();
+ if (nphb.PhoneBookType == "gfax")
+ ph.Path = gfax.ConfigDirectory + "/" + (string)enu.Current;
+ else
+ ph.Path = "";
+
+ ph.Name = (string)enu.Current; // get the new book name
+ ph.Type = nphb.PhoneBookType;
+ Phonetools.add_book(ph);
+ PhonebookComboBox.AppendText(ph.Name);
+ }
+ // Reload the phone books
+ myPhoneBooks = Phonetools.get_phonebooks();
+
+ if ( myPhoneBooks.Length > 0) {
+ //PhonebookComboBox.AppendText(ph.Name);
+ PhonebookComboBox.Active = 0;
+ DeletePhonebookButton.Sensitive = true;
+ }
+ }
+
+ nphb = null;
+ }
+
+ private void on_DeletePhonebookButton_clicked (object o, EventArgs args)
+ {
+
+ if ( myPhoneBooks.Length > 0) {
+ string[] list = new string[myPhoneBooks.Length];
+
+ if ( myPhoneBooks != null ) {
+ // populate the list
+ int i = 0;
+ foreach (Phonebook pb in myPhoneBooks) {
+ list[i++] = pb.Name;
+ }
+ }
+ string book = list[PhonebookComboBox.Active];
+
+ MessageDialog md = new MessageDialog (
+ null,
+ DialogFlags.DestroyWithParent,
+ MessageType.Question,
+ ButtonsType.YesNo,
+ Catalog.GetString("Are you sure you want to delete the phone book?")
+ );
+
+ ResponseType result = (ResponseType)md.Run ();
+
+ if (result == ResponseType.Yes) {
+ md.Destroy();
+
+ if (book == null)
+ return;
+ Phonetools.delete_book(book);
+
+ PhonebookComboBox.RemoveText(PhonebookComboBox.Active);
+ ItemStore.Clear();
+
+ myPhoneBooks = Phonetools.get_phonebooks();
+
+ if (myPhoneBooks.Length > 0) {
+ // now reload
+ PhonebookComboBox.Active = 0;
+ on_PhonebookComboBox_changed(null, null);
+ } else {
+ DeletePhonebookButton.Sensitive = false;
+ PhonebookComboBox.InsertText(0," ");
+ }
+ PhonebookComboBox.Active = 0;
+
+ } else {
+ md.Destroy();
+ }
+ }
+ }
+
+ private void on_SaveCloseButton_clicked (object o, EventArgs args)
+ {
+ ArrayList rows;
+ ArrayList contacts = new ArrayList();
+ string book;
+
+ if ( myPhoneBooks.Length > 0) {
+ string[] list = new string[myPhoneBooks.Length];
+
+ if ( myPhoneBooks != null ) {
+ // populate the list
+ int i = 0;
+ foreach (Phonebook pb in myPhoneBooks)
+ list[i++] = pb.Name;
+ }
+ book = list[PhonebookComboBox.Active];
+
+ // just get all items and save
+ SaveCloseButton.Sensitive = false;
+ //eventsEnabled = false;
+ EditPhbCompanyEntry.Text = "";
+ EditPhbNumberEntry.Text = "";
+ EditPhbNameEntry.Text = "";
+
+ rows = ItemView.GetAllRows();
+
+ IEnumerator enu = rows.GetEnumerator();
+ while ( enu.MoveNext() ) {
+ GfaxContact c = new GfaxContact();
+ c.Organization = ((string[])enu.Current)[0];
+ c.PhoneNumber = ((string[])enu.Current)[1];
+ c.ContactPerson = ((string[])enu.Current)[2];
+ contacts.Add(c);
+ }
+
+ Phonetools.save_phonebook_items(book, contacts);
+ //EditPhbList.Selection.UnselectAll();
+ }
+
+ PhbookWindow.Destroy();
+ Application.Quit ();
+ }
+
+ private void on_CloseButton_clicked (object o, EventArgs args)
+ {
+ if (SaveCloseButton.Sensitive) {
+ MessageDialog md = new MessageDialog (
+ null,
+ DialogFlags.DestroyWithParent,
+ MessageType.Question,
+ ButtonsType.YesNo,
+ Catalog.GetString("You have unsaved phone book entries.\n Are you sure you want to Quit?")
+ );
+
+ ResponseType result = (ResponseType)md.Run ();
+
+ if (result == ResponseType.Yes) {
+ md.Destroy();
+ PhbookWindow.Destroy();
+ Application.Quit ();
+ } else {
+ md.Destroy();
+ }
+ } else {
+ PhbookWindow.Destroy();
+ Application.Quit ();
+ }
+ }
+
+
+ private void on_PhonebookComboBox_changed (object o, EventArgs args)
+ {
+ ArrayList contacts = null;
+ Phonebook p;
+
+ // get the first book in the list and load the liststore
+ if ( myPhoneBooks.Length > 0) {
+ string[] list = new string[myPhoneBooks.Length];
+
+ if ( myPhoneBooks != null ) {
+ // populate the list
+ int i = 0;
+ foreach (Phonebook pb in myPhoneBooks) {
+ list[i++] = pb.Name;
+ }
+ }
+
+ p = Phonetools.get_book_from_name(list[PhonebookComboBox.Active]);
+ if (p == null)
+ return;
+
+ // Clear the list_store
+ ItemStore.Clear();
+
+ contacts = Phonetools.get_contacts(p);
+
+ if (contacts != null) {
+ IEnumerator enu = contacts.GetEnumerator();
+ while ( enu.MoveNext() ) {
+ GfaxContact c = new GfaxContact();
+ c = (GfaxContact)enu.Current;
+ ItemView.AddTextToRow(c.Organization, c.PhoneNumber, c.ContactPerson);
+ }
+ if (p.Type == "evolution") {
+ pbIsReadOnly = true;
+ EditPhbCompanyEntry.Sensitive = false;
+ EditPhbNumberEntry.Sensitive = false;
+ EditPhbNameEntry.Sensitive = false;
+
+ } else {
+ pbIsReadOnly = false;
+ EditPhbCompanyEntry.Sensitive = true;
+ EditPhbNumberEntry.Sensitive = true;
+ EditPhbNameEntry.Sensitive = true;
+ eventsEnabled = true;
+ }
+ }
+ }
+ }
+
+ private void on_EditPhbNumberEntry_changed (object o, EventArgs args)
+ {
+ if (eventsEnabled) {
+ ArrayList al = ItemView.GetSelections(ALL_COLUMNS);
+ // if single contact selected
+ if (al.Count > 0) {
+ UpdateButton.Sensitive = true;
+ } else {
+ AddButton.Sensitive = true;
+ ClearButton.Sensitive = true;
+ }
+ }
+ }
+ private void on_EditPhbNameEntry_changed (object o, EventArgs args)
+ {
+ if (eventsEnabled) {
+ ArrayList al = ItemView.GetSelections(ALL_COLUMNS);
+ // if single contact selected
+ if (al.Count > 0) {
+ UpdateButton.Sensitive = true;
+ } else {
+ AddButton.Sensitive = true;
+ ClearButton.Sensitive = true;
+ }
+ }
+ }
+ private void on_EditPhbCompanyEntry_changed (object o, EventArgs args)
+ {
+ if (eventsEnabled) {
+ ArrayList al = ItemView.GetSelections(ALL_COLUMNS);
+ // if single contact selected
+ if (al.Count > 0) {
+ UpdateButton.Sensitive = true;
+ } else {
+ AddButton.Sensitive = true;
+ ClearButton.Sensitive = true;
+ }
+ }
+ }
+
+ private void on_ClearButton_clicked (object o, EventArgs args)
+ {
+ eventsEnabled = false;
+ EditPhbCompanyEntry.Text = "";
+ EditPhbNumberEntry.Text = "";
+ EditPhbNameEntry.Text = "";
+ UpdateButton.Sensitive = false;
+ ItemTreeview.Selection.UnselectAll();
+ ClearButton.Sensitive = false;
+ AddButton.Sensitive = false;
+ Statusbar.Pop(id);
+ Statusbar.Push(id, " ");
+ }
+
+ private void on_AddButton_clicked (object o, EventArgs args)
+ {
+ ItemView.AddTextToRow(EditPhbCompanyEntry.Text,
+ EditPhbNumberEntry.Text,
+ EditPhbNameEntry.Text);
+
+ eventsEnabled = false; // no updates till selected
+ EditPhbCompanyEntry.Text = "";
+ EditPhbNumberEntry.Text = "";
+ EditPhbNameEntry.Text = "";
+ EditPhbNumberEntry.HasFocus = true;
+ SaveCloseButton.Sensitive = true;
+ ClearButton.Sensitive = false;
+ AddButton.Sensitive = false;
+ eventsEnabled = true;
+ }
+
+ private void on_UpdateButton_clicked (object o, EventArgs args)
+ {
+ ItemView.UpdateColumnText(tempNumber, EditPhbNumberEntry.Text, COLUMN_1);
+ ItemView.UpdateColumnText(tempName, EditPhbNameEntry.Text, COLUMN_2);
+ ItemView.UpdateColumnText(tempCompany, EditPhbCompanyEntry.Text, COLUMN_0);
+ EditPhbCompanyEntry.Text = "";
+ EditPhbNumberEntry.Text = "";
+ EditPhbNameEntry.Text = "";
+ UpdateButton.Sensitive = false;
+ ItemTreeview.Selection.UnselectAll();
+ ClearButton.Sensitive = false;
+ SaveCloseButton.Sensitive = true;
+ Statusbar.Pop(id);
+ Statusbar.Push(id, " ");
+ }
+
+ private void on_ItemTreeview_selection (object o, EventArgs args)
+ {
+ ArrayList al;
+
+ eventsEnabled = false; // no updates
+ if (!pbIsReadOnly) {
+ al = ItemView.GetSelections(ALL_COLUMNS);
+ Statusbar.Push(id,Catalog.GetString("Press the <DELETE> key to delete an entry."));
+
+ // if single contact selected
+ if (al.Count == 3) {
+ IEnumerator enu = al.GetEnumerator();
+ enu.MoveNext();
+ EditPhbCompanyEntry.Text = (string)enu.Current;
+ tempCompany = (string)enu.Current;
+ enu.MoveNext();
+ EditPhbNumberEntry.Text = (string)enu.Current;
+ tempNumber = (string)enu.Current;
+ enu.MoveNext();
+ EditPhbNameEntry.Text = (string)enu.Current;
+ tempName = (string)enu.Current;
+ }
+ AddButton.Sensitive = false;
+ ClearButton.Sensitive = true;
+ eventsEnabled = true;
+ }
+ }
+
+ private void on_ItemTreeview_key_press_event (object o, KeyPressEventArgs args)
+ {
+ if (args.Event.Key == Gdk.Key.Delete ) {
+
+ //eventsEnabled = false; // no updates
+ ArrayList al = ItemView.GetSelections(ALL_COLUMNS);
+
+ // if single contact selected
+ //if (al.Count == 3) {
+ ItemView.RemoveSelectedRow();
+ EditPhbCompanyEntry.Text = "";
+ EditPhbNumberEntry.Text = "";
+ EditPhbNameEntry.Text = "";
+ //}
+ AddButton.Sensitive = false;
+ ClearButton.Sensitive = false;
+ SaveCloseButton.Sensitive = true;
+ //eventsEnabled = true;
+ }
+ }
+ }
+}
diff --git a/src/gfaxprefs.cs b/src/gfaxprefs.cs
new file mode 100755
index 0000000..0ff9e6d
--- /dev/null
+++ b/src/gfaxprefs.cs
@@ -0,0 +1,302 @@
+// GFAX - Gnome fax application
+// Copyright (C) 2003 - 2008 George A. Farris
+//
+// 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 3 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+namespace gfax {
+ using Mono.Unix;
+ using System;
+ using System.IO;
+ using GLib;
+ using Gtk;
+ using Gnome;
+ using Glade;
+ using GConf.PropertyEditors;
+ using GtkSharp;
+ using System.Runtime.InteropServices;
+ using System.Collections;
+ using System.Diagnostics;
+ using System.Reflection;
+
+ //************************************************************************
+ // GfaxPrefs class
+ //
+ // This is the preferences window.
+ public class GfaxPrefs
+ {
+ Glade.XML gxml;
+ [Glade.Widget] Gtk.Dialog PrefsDialog;
+ [Glade.Widget] Gtk.Notebook PrefsNotebook;
+ //System Tab
+ [Glade.Widget] Gtk.RadioButton HylafaxRadioButton;
+ [Glade.Widget] Gtk.RadioButton EfaxRadioButton;
+ [Glade.Widget] Gtk.Entry FaxNumberEntry;
+ [Glade.Widget] Gtk.Entry DialPrefixEntry;
+ [Glade.Widget] Gtk.Entry ModemEntry;
+ [Glade.Widget] Gtk.Entry FaxViewerEntry;
+
+ //Hylafax Tab
+ [Glade.Widget] Gtk.Entry HylafaxHostnameEntry;
+ [Glade.Widget] Gtk.Entry HylafaxPortEntry;
+ [Glade.Widget] Gtk.Entry HylafaxUsernameEntry;
+
+ //Efax Tab
+ [Glade.Widget] Gtk.Entry EfaxModemDeviceEntry;
+ [Glade.Widget] Gtk.ComboBox EfaxPapersizeComboBox;
+ [Glade.Widget] Gtk.ComboBox EfaxModemTypeComboBox;
+ [Glade.Widget] Gtk.ComboBox EfaxModemSpeakerVolumeComboBox;
+
+ //User Tab
+ [Glade.Widget] Gtk.CheckButton EmailNotifyCheckButton;
+ [Glade.Widget] Gtk.Entry EmailAddressEntry;
+ [Glade.Widget] Gtk.CheckButton SendNowCheckButton;
+ [Glade.Widget] Gtk.CheckButton FaxLogCheckButton;
+ [Glade.Widget] Gtk.CheckButton CoverPageCheckButton;
+ [Glade.Widget] Gtk.CheckButton HiResCheckButton;
+
+ // we set this otherwise setting inital values will wipe
+ // out all the other settings.
+ bool eventsEnabled = false;
+
+ bool taChanged = false;
+
+ const int HYLAFAX_PAGE = 1;
+ const int EFAX_PAGE = 2;
+
+ string[] papersize = {"letter", "legal", "a4"};
+
+ string[] modemType = {@"-j\Q4",@"-j\Q1",@"-j*F1",@"-j&H2&I0&R1&D3I4",@"-or"};
+ /*
+ # FCINIT='-j\Q4' # AT&T (Dataport, Paradyne)
+ # FCINIT='-j\Q1' # Motorola (Power Modem, 3400 Pro,...)
+ # FCINIT='-j*F1' # QuickComm (Spirit II)
+ # FCINIT='-j&H2&I0&R1&D3I4' # USR (Courier, Sportster)
+ # FCINIT='-or' # Multi-Tech (for bit reversal)
+ */
+
+
+ public GfaxPrefs ()
+ {
+ gxml = new Glade.XML (null, "gfax.glade","PrefsDialog",null);
+ //GConf.PropertEditors
+ EditorShell shell = new EditorShell (gxml);
+ gxml.Autoconnect(this);
+
+
+ // System Tab
+ if (Settings.TransmitAgent == "hylafax") {
+ HylafaxRadioButton.Active = true;
+ CoverPageCheckButton.Visible = false;
+ PrefsNotebook.GetNthPage(EFAX_PAGE).Hide();
+ }
+ else if (Settings.TransmitAgent == "efax") {
+ EfaxRadioButton.Active = true;
+ EmailNotifyCheckButton.Sensitive = false;
+ EmailAddressEntry.Sensitive = false;
+ Settings.SendNow = SendNowCheckButton.Active;
+ FaxLogCheckButton.Visible = false;
+ CoverPageCheckButton.Visible = false;
+ Settings.HiResolution = HiResCheckButton.Active;
+
+ PrefsNotebook.GetNthPage(HYLAFAX_PAGE).Hide();
+ }
+
+ // Set these regardless so they are set if we need them
+ switch (Settings.EfaxPapersize) {
+ case "letter":
+ EfaxPapersizeComboBox.Active = 0;
+ break;
+ case "legal":
+ EfaxPapersizeComboBox.Active = 1;
+ break;
+ case "a4":
+ EfaxPapersizeComboBox.Active = 2;
+ break;
+ default:
+ EfaxPapersizeComboBox.Active = 0;
+ break;
+ }
+ //"-j\\Q4","-j\\Q1","-j*F1","-j&H2&I0&R1&D3I4","-or"
+ switch (Settings.EfaxModemFcinit) {
+ case @"-j\Q4":
+ EfaxModemTypeComboBox.Active = 0;
+ break;
+ case @"-j\Q1":
+ EfaxModemTypeComboBox.Active = 1;
+ break;
+ case @"-j*F1":
+ EfaxModemTypeComboBox.Active = 2;
+ break;
+ case @"-j&H2&I0&R1&D3I4":
+ EfaxModemTypeComboBox.Active = 3;
+ break;
+ case @"-or":
+ EfaxModemTypeComboBox.Active = 4;
+ break;
+ default:
+ EfaxModemTypeComboBox.Active = 5;
+ break;
+ }
+
+ EfaxModemSpeakerVolumeComboBox.Active = Settings.EfaxModemSpeakerVolume;
+
+
+
+ // changes that happen automagically
+ shell.Add(SettingKeys.FaxNumber, "FaxNumberEntry");
+ shell.Add(SettingKeys.PhonePrefix, "DialPrefixEntry");
+ shell.Add(SettingKeys.FaxViewer, "FaxViewerEntry");
+
+ // Hylafax Tab
+ shell.Add(SettingKeys.Hostname, "HylafaxHostnameEntry");
+ shell.Add(SettingKeys.Port, "HylafaxPortEntry");
+ shell.Add(SettingKeys.Username, "HylafaxUsernameEntry");
+
+ // Efax Tab
+ shell.Add(SettingKeys.EfaxModemDevice, "EfaxModemDeviceEntry");
+
+
+ // User tab
+ shell.Add(SettingKeys.EmailNotify, "EmailNotifyCheckButton");
+ shell.Add(SettingKeys.EmailAddress, "EmailAddressEntry");
+ shell.Add(SettingKeys.SendNow, "SendNowCheckButton");
+ shell.Add(SettingKeys.LogEnabled, "FaxLogCheckButton");
+ shell.Add(SettingKeys.CoverPage, "CoverPageCheckButton");
+ shell.Add(SettingKeys.HiResolution, "HiResCheckButton");
+
+ eventsEnabled = true;
+
+ }
+
+
+ private void on_PrefsDialog_delete_event (object o, DeleteEventArgs args)
+ {
+ MessageDialog md;
+ if (taChanged) {
+ md = new MessageDialog (
+ null,
+ DialogFlags.DestroyWithParent,
+ MessageType.Warning,
+ ButtonsType.Ok,
+ Catalog.GetString("You need to exit Gfax and restart it when you change transport agents")
+ );
+ md.Run ();
+ md.Destroy();
+ }
+ PrefsDialog.Destroy();
+ args.RetVal = true;
+ }
+
+ private void on_CloseButton_clicked (object o, EventArgs args)
+ {
+ MessageDialog md;
+ if (taChanged) {
+ md = new MessageDialog (
+ null,
+ DialogFlags.DestroyWithParent,
+ MessageType.Warning,
+ ButtonsType.Ok,
+ Catalog.GetString("You need to exit Gfax and restart it when you change transport agents")
+ );
+ md.Run ();
+ md.Destroy();
+ }
+ PrefsDialog.Destroy();
+ }
+
+ private void on_HelpButton_clicked (object o, EventArgs args)
+ {
+
+ }
+
+ private void system_tab_changed (object o, EventArgs args)
+ {
+ if (eventsEnabled) {
+ //eventsEnabled = false;
+ if (HylafaxRadioButton.Active) {
+ Settings.TransmitAgent = "hylafax";
+ Settings.RefreshQueueInterval = 30;
+ Settings.RefreshQueueEnabled = false;
+ PrefsNotebook.GetNthPage(HYLAFAX_PAGE).Show();
+ PrefsNotebook.GetNthPage(EFAX_PAGE).Hide();
+ }
+ else if (EfaxRadioButton.Active) {
+ Settings.TransmitAgent = "efax";
+ Settings.RefreshQueueInterval = 15;
+ Settings.RefreshQueueEnabled = true;
+ PrefsNotebook.GetNthPage(EFAX_PAGE).Show();
+ PrefsNotebook.GetNthPage(HYLAFAX_PAGE).Hide();
+
+ }
+
+ Settings.FaxNumber = FaxNumberEntry.Text;
+ Settings.PhonePrefix = DialPrefixEntry.Text;
+ Settings.FaxViewer = FaxViewerEntry.Text;
+ }
+ }
+
+ private void user_tab_changed (object o, EventArgs args)
+ {
+ if (eventsEnabled) {
+ Settings.EmailNotify = EmailNotifyCheckButton.Active;
+ Settings.EmailAddress = EmailAddressEntry.Text;
+ Settings.SendNow = SendNowCheckButton.Active;
+ Settings.LogEnabled = FaxLogCheckButton.Active;
+ Settings.CoverPage = CoverPageCheckButton.Active;
+ Settings.HiResolution = HiResCheckButton.Active;
+ }
+ }
+
+ private void radio_button_toggled (object o, EventArgs args)
+ {
+ if (eventsEnabled)
+ taChanged = true;
+ }
+
+
+ private void efax_setup_changed (object o, EventArgs args)
+ {
+
+ if (eventsEnabled) {
+ // Option 5 is custom define so we don't change anything
+ if (EfaxModemTypeComboBox.Active != 5) {
+ switch (EfaxModemTypeComboBox.Active) {
+ case 0:
+ Settings.EfaxModemFcinit = @"-j\Q4";
+ break;
+ case 1:
+ Settings.EfaxModemFcinit = @"-j\Q1";
+ break;
+ case 2:
+ Settings.EfaxModemFcinit = @"-j*F1";
+ break;
+ case 3:
+ Settings.EfaxModemFcinit = @"-j&H2&I0&R1&D3I4";
+ break;
+ case 4:
+ Settings.EfaxModemFcinit = @"-or";
+ break;
+ default:
+ Settings.EfaxModemFcinit = @"-j&H2&I0&R1&D3I4";
+ break;
+ }
+ }
+
+ Settings.EfaxPapersize = EfaxPapersizeComboBox.ActiveText;
+ Settings.EfaxModemSpeakerVolume = EfaxModemSpeakerVolumeComboBox.Active;
+ }
+ }
+ }
+}
diff --git a/src/gfaxsend.cs b/src/gfaxsend.cs
new file mode 100644
index 0000000..444ed91
--- /dev/null
+++ b/src/gfaxsend.cs
@@ -0,0 +1,364 @@
+// 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+//************************************************************************
+// GfaxSend class
+//
+// This is a the send window for sending of a facsimile.
+namespace gfax {
+ using Mono.Unix;
+ using System;
+ using System.IO;
+ using GLib;
+ using Gtk;
+ using Gnome;
+ using Glade;
+ using GConf.PropertyEditors;
+ using GtkSharp;
+ using System.Runtime.InteropServices;
+ using System.Collections;
+ using System.Diagnostics;
+ using System.Reflection;
+
+
+ public class GfaxSend // : Program
+ {
+ const string APPNAME = "Gfax";
+
+ const int COLUMN_0 = 0;
+ const int COLUMN_1 = 1;
+ const int COLUMN_2 = 2;
+ const int COLUMN_3 = 3;
+ const int ALL_COLUMNS = -1;
+
+ [Glade.Widget] Gtk.Window NewFaxDialog;
+ [Glade.Widget] Gtk.Button BrowseButton;
+ [Glade.Widget] Gtk.Button PhoneButton;
+ [Glade.Widget] Gtk.Entry NumberEntry;
+ [Glade.Widget] Gtk.Entry EmailEntry;
+ [Glade.Widget] Gtk.Entry FilenameEntry;
+ [Glade.Widget] Gtk.CheckButton ResolutionCheckbutton;
+ [Glade.Widget] Gtk.CheckButton EmailCheckbutton;
+ [Glade.Widget] Gtk.CheckButton SendCheckbutton;
+ [Glade.Widget] Gtk.TreeView ItemTreeview;
+ [Glade.Widget] Gnome.DateEdit SendDateedit;
+ //[Glade.Widget] Gnome.FileEntry PSFileEntry;
+
+
+ Gtk.ListStore ItemStore;
+ G_ListView ItemListview;
+
+ GConf.PropertyEditors.EditorShell shell;
+
+ Glade.XML gxml;
+ string filename, includeFilename;
+ bool dosend;
+
+ public GfaxSend (string fname, string[] args)
+ {
+
+ filename = fname;
+ includeFilename = args[0];
+
+ Application.Init ();
+
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine("[GfaxSend] File name is : {0}", fname);
+ }
+
+ // check to see if we've run before, if so gfax will be there
+ if ( Settings.RunSetupAtStart ) {
+ Settings.RunSetupAtStart = false;
+ MessageDialog md;
+ md = new MessageDialog (
+ null,
+ DialogFlags.DestroyWithParent,
+ MessageType.Info,
+ ButtonsType.Ok,
+ Catalog.GetString(
+ @"
+This is the first time you have run Gfax.
+Please run Gfax from the menu or command line and set your
+MODEM TYPE, PORT and Fax number under preferences.
+
+Gfax is initially setup to use Efax, you may change it use
+Hylafax if you prefer or require connection to a network
+facsimile server.")
+ );
+ md.Run ();
+ md.Destroy();
+ Application.Quit();
+ dosend = false;
+ Environment.Exit(0);
+ }
+/*
+ if ( Settings.FaxNumber.Length <= 4 ) {
+ MessageDialog md;
+ md = new MessageDialog (
+ null,
+ DialogFlags.DestroyWithParent,
+ MessageType.Info,
+ ButtonsType.Ok,
+ Catalog.GetString(
+ @"
+You must have a Fax number set in your preferences under
+Phone Information.")
+ );
+ md.Run ();
+ md.Destroy();
+ //Application.Quit();
+ dosend = false;
+ return;
+ }
+*/
+ gxml = new Glade.XML (null, "send-druid.glade","NewFaxDialog",null);
+ gxml.Autoconnect (this);
+
+ // Set the program icon
+ //Gdk.Pixbuf Icon = new Gdk.Pixbuf(null, "gfax.png");
+ //((Gtk.Window) gxml["NewFaxDialog"]).Icon = Icon;
+ //NewFaxDialog.Icon = Icon;
+
+ ItemStore = new ListStore(
+ typeof (Boolean),
+ typeof (string),
+ typeof (string),
+ typeof (string));
+
+ ItemListview = new G_ListView(ItemTreeview, ItemStore);
+
+ ItemListview.AddColumnTitleToggle(Catalog.GetString("Send"), 0, COLUMN_0);
+ ItemListview.AddColumnTitle(Catalog.GetString("Phone Number"), 0, COLUMN_1);
+ ItemListview.AddColumnTitle(Catalog.GetString("Organization"), 0, COLUMN_2);
+ ItemListview.AddColumnTitle(Catalog.GetString("Contact"), 0, COLUMN_3);
+
+ ItemTreeview.HeadersVisible = true;
+
+ //ItemTreeview.Selection.Mode = SelectionMode.Multiple;
+
+ ResolutionCheckbutton.Active = Settings.HiResolution;
+ EmailCheckbutton.Active = Settings.EmailNotify;
+ EmailEntry.Text = Settings.EmailAddress;
+
+ if (Settings.TransmitAgent == "efax") {
+ EmailCheckbutton.Visible = false;
+ EmailEntry.Visible = false;
+ SendCheckbutton.Visible = false;
+ SendDateedit.Visible = false;
+ }
+
+ if (SendCheckbutton.Active)
+ SendDateedit.Sensitive = false;
+
+ // If we have a file name from the gnome print dialog
+ if (includeFilename != "do_filename") {
+ FilenameEntry.Text = Catalog.GetString("Spooled from print job");
+ FilenameEntry.Sensitive = false;
+ BrowseButton.Sensitive = false;
+ }
+
+ Application.Run ();
+ }
+
+ public bool DoSend
+ {
+ get { return dosend; }
+ }
+
+ public string Filename
+ {
+ get { return filename; }
+ }
+
+
+ private void on_window1_delete_event (object o, DeleteEventArgs args)
+ {
+ dosend = false;
+ //((Gtk.Window) gxml["NewFaxDialog"]).Destroy();
+ NewFaxDialog.Destroy();
+ Application.Quit ();
+ args.RetVal = true;
+ }
+
+ private void on_CancelButton_clicked (object o, EventArgs args)
+ {
+ dosend = false;
+ //((Gtk.Window) gxml["NewFaxDialog"]).Destroy();
+ NewFaxDialog.Destroy();
+ Application.Quit ();
+ }
+
+ private void on_NumberEntry_changed (object o, EventArgs args)
+ {
+ //if (NumberEntry.Text == "\t")
+ //((Gnome.Druid) gxml["send_druid"]).HasFocus = true;
+ }
+
+ private void on_SendCheckButton_toggled (object o, EventArgs args)
+ {
+ SendDateedit.Sensitive = ! SendDateedit.Sensitive;
+ }
+
+ private void on_NumberEntry_activate (object o, EventArgs args)
+ {
+ Gtk.TreeIter iter = new Gtk.TreeIter();
+
+ iter = ItemStore.AppendValues(true, NumberEntry.Text, "", "");
+ ItemTreeview.Model = ItemStore;
+ NumberEntry.Text = "";
+ }
+
+
+ private void on_BrowseButton_clicked (object o, EventArgs args)
+ {
+ FileChooserDialog fc = new FileChooserDialog("Choose postscript file", null, FileChooserAction.Open);
+ fc.AddButton (Gtk.Stock.Cancel, Gtk.ResponseType.Cancel);
+ fc.AddButton (Gtk.Stock.Open, Gtk.ResponseType.Ok);
+
+ ResponseType result = (ResponseType)fc.Run ();
+
+ if (result == ResponseType.Ok) {
+ FilenameEntry.Text = fc.Filename;
+ fc.Destroy();
+ } else {
+ fc.Destroy();
+ }
+ }
+
+
+ private void on_PhoneButton_clicked (object o, EventArgs args)
+ {
+ Gtk.TreeIter iter = new Gtk.TreeIter();
+ // display the phone book, when we return gfax.Destinations
+ // will be set with contacts.
+ GfaxSendPhoneBook gfs = new GfaxSendPhoneBook(gxml, "gfaxsend");
+
+ ItemStore.Clear();
+
+ if (gfax.Destinations.Count > 0) {
+ IEnumerator enu = gfax.Destinations.GetEnumerator();
+
+ while ( enu.MoveNext() ) {
+ iter = ItemStore.AppendValues(true,
+ ((GfaxContact)enu.Current).PhoneNumber,
+ ((GfaxContact)enu.Current).Organization,
+ ((GfaxContact)enu.Current).ContactPerson);
+ ItemTreeview.Model = ItemStore;
+ }
+ }
+ }
+
+
+ // When finished gfax.Destinations will contain a list of contacts
+ // of Phonebook.Contact type.
+ private void on_SendfaxButton_clicked (object o, EventArgs args)
+ {
+ Gtk.TreeIter iter = new Gtk.TreeIter();
+ ArrayList rows = new ArrayList();
+
+ if (includeFilename == "do_filename")
+ filename = FilenameEntry.Text;
+
+ if (!File.Exists(filename)) {
+ MessageDialog md;
+ md = new MessageDialog (null, DialogFlags.DestroyWithParent,
+ MessageType.Info, ButtonsType.Ok,
+ Catalog.GetString(
+ @"
+The file you have entered does not exist.
+Please check the name and try again.")
+ );
+ md.Run ();
+ md.Destroy();
+ return;
+ }
+
+ // clear all the distinations, it's a little wierd yup
+ gfax.Destinations.Clear();
+
+ // Get the first row.
+ ItemStore.GetIterFirst(out iter);
+
+ try {
+ if ( (bool)ItemStore.GetValue(iter, 0) ) { // if send is true (toggle set)
+
+ GfaxContact c = new GfaxContact();
+ c.PhoneNumber = (string)ItemStore.GetValue(iter, 1); // number
+ c.Organization = (string)ItemStore.GetValue(iter, 2); // organization
+ c.ContactPerson = (string)ItemStore.GetValue(iter, 3); // contact
+
+ rows.Add(c);
+ }
+ }
+ catch (Exception e) {
+ MessageDialog md;
+ md = new MessageDialog (
+ null,
+ DialogFlags.DestroyWithParent,
+ MessageType.Info,
+ ButtonsType.Ok,
+ Catalog.GetString(
+ @"
+You have not entered a facsimile number!
+Please enter a number and press the <i><b>Enter</b></i> key or
+click the <i><b>Phone Book</b></i> button to select numbers or
+entire phone books.")
+ );
+ md.Run ();
+ md.Destroy();
+ return;
+ }
+
+ // get the rest of the rows
+ while (ItemStore.IterNext(ref iter)) {
+
+ try {
+ if ( (bool)ItemStore.GetValue(iter, 0) ) { // if send is true (toggle set)
+
+ GfaxContact c = new GfaxContact();
+ c.PhoneNumber = (string)ItemStore.GetValue(iter, 1); // number
+ c.Organization = (string)ItemStore.GetValue(iter, 2); // organization
+ c.ContactPerson = (string)ItemStore.GetValue(iter, 3); // contact
+
+ rows.Add(c);
+ }
+ }
+ catch (Exception e) {}
+ }
+
+
+ if (SendCheckbutton.Active) {
+ gfax.timeToSend = DateTime.UtcNow;
+ } else {
+ // Convert to UTC for Hylafax
+ gfax.timeToSend = (SendDateedit.Time).ToUniversalTime();
+ }
+
+ gfax.Destinations = rows;
+
+ //get the fine resolution status
+ gfax.sendWizardResolution = ResolutionCheckbutton.Active;
+ //get the email flag and email address
+ gfax.sendWizardEmailNotify = EmailCheckbutton.Active;
+ gfax.sendWizardEmailAddress = EmailEntry.Text;
+
+ if ( gfax.Destinations.Count > 0 )
+ dosend = true; // yes send the fax
+
+ //((Gtk.Window) gxml["NewFaxDialog"]).Hide();
+ NewFaxDialog.Hide();
+ Application.Quit();
+ }
+ }
+}
diff --git a/src/gui.cs b/src/gui.cs
new file mode 100755
index 0000000..b5ab51a
--- /dev/null
+++ b/src/gui.cs
@@ -0,0 +1,1137 @@
+// GFAX - Gnome fax application
+// Copyright (C) 2003 - 2008 George A. Farris
+//
+// 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 3 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 Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+//#define DEBUG
+
+namespace gfax {
+ using Mono.Unix;
+ using System;
+ using System.IO;
+ using GLib;
+ using Gdk;
+ using Gtk;
+ using Gnome;
+ using Glade;
+ using GConf.PropertyEditors;
+ using GtkSharp;
+ using System.Runtime.InteropServices;
+ using System.Collections;
+ using System.Diagnostics;
+ using System.Reflection;
+
+
+ //************************************************************************
+ // Gfax class
+ //
+ // This is the main application window
+
+ public class Gfax : Program
+ {
+ const string VERSION = "0.7.7";
+ const string NAME = "Gfax";
+ const string APPNAME = "Gfax";
+
+ // Notebook pages
+ const int SENDQ_PAGE = 0;
+ const int DONEQ_PAGE = 1;
+ const int RECEIVEQ_PAGE = 2;
+
+ const int COLUMN_0 = 0;
+ const int COLUMN_1 = 1;
+ const int COLUMN_2 = 2;
+ const int COLUMN_3 = 3;
+ const int COLUMN_4 = 4;
+ const int COLUMN_5 = 5;
+ const int ALL_COLUMNS = -1;
+
+ // Strings to hold old contact info temporarily
+ string tempName;
+ string tempNumber;
+ string tempCompany;
+
+ ArrayList oldSendQueue = null; // hold old queue results
+
+ bool restart = true;
+ bool eventsEnabled = true;
+ bool queueBusy = false;
+
+ enum ActiveQ { done, send, receive };
+ ActiveQ activeQ;
+
+
+ Glade.XML gxml;
+
+ [Glade.Widget] Gtk.Window GfaxWindow;
+ [Glade.Widget] Gnome.AppBar Appbar;
+
+ [Glade.Widget] Gtk.TreeView StatusList;
+ [Glade.Widget] Gtk.TreeView JobsCompleteList;
+ [Glade.Widget] Gtk.TreeView JobsReceivedList;
+ [Glade.Widget] Gtk.Notebook StatusNotebook;
+ [Glade.Widget] Gtk.Button DeleteJobButton;
+ [Glade.Widget] Gtk.Button ModifyJobButton;
+ [Glade.Widget] Gtk.Button ViewPrintButton;
+ [Glade.Widget] Gtk.Button RecvfaxDeleteButton;
+ [Glade.Widget] Gtk.TextView StatusText;
+
+
+ // Menu items
+ [Glade.Widget] Gtk.CheckMenuItem AutoQRefreshCheckMenuItem;
+ [Glade.Widget] Gtk.CheckMenuItem EmailNotificationCheckMenuItem;
+ [Glade.Widget] Gtk.CheckMenuItem HiResolutionModeCheckMenuItem;
+ [Glade.Widget] Gtk.CheckMenuItem LogEnabledCheckMenuItem;
+ [Glade.Widget] Gtk.CheckMenuItem FaxTracingCheckMenuItem;
+
+ //Gtk.Window MainWindow;
+
+ Gtk.ListStore StatusStore;
+ Gtk.ListStore RecvStore;
+ Gtk.TreeModel StatusModel;
+ G_ListView lv, jobsCompletedView, jobsReceivedView;
+
+ // text buffer for status text area
+ TextBuffer StatusTextBuffer = new TextBuffer(new TextTagTable());
+
+ Phonebook[] myPhoneBooks;
+
+ GConf.PropertyEditors.EditorShell shell;
+
+ long filePos = 0;
+ static bool iconified = true; // gfax starts iconified
+
+ static long lastMaxOffset;
+
+
+
+ public Gfax (string fname, string[] args)
+ : base (APPNAME, VERSION, Modules.UI, args, new object [0])
+ {
+ //Phonebook[] pb; delete me
+
+ // Set the program icon
+ Gtk.Window.DefaultIconName = "gfax";
+
+ Application.Init ();
+
+ // check to see if we've run before, if so gfax will be there
+ if ( Settings.RunSetupAtStart ) {
+ Settings.RunSetupAtStart = false;
+
+ MessageDialog md;
+ md = new MessageDialog (
+ null,
+ DialogFlags.DestroyWithParent,
+ MessageType.Info,
+ ButtonsType.Ok,
+ Catalog.GetString(
+ @"
+This is the first time you have run Gfax.
+You should set your MODEM TYPE and PORT under preferences.
+
+Gfax is initially setup to use Efax, you may change it use
+Hylafax if you prefer or require connection to a network
+facsimile server.")
+ );
+ md.Run ();
+ md.Destroy();
+ }
+
+ if (!Directory.Exists(gfax.SpoolDirectory)) {
+ G_Message gm = new G_Message(Catalog.GetString(
+ @"Your spool directory is missing!
+
+Please login as the root user and create the "
++ gfax.SpoolDirectory +
+" directory.\n\nAll users should be able to write to it.\n"));
+ return;
+ }
+ if (!Directory.Exists(gfax.SpoolDirectory + "/doneq")) {
+ G_Message gm = new G_Message(Catalog.GetString(
+ @"The doneq directory is missing in your spool directory!
+
+Please login as the root user and create the "
++ gfax.SpoolDirectory + "/doneq" +
+" directory.\n\nAll users should be able to write to it.\n"));
+ return;
+ }
+ if (!Directory.Exists(gfax.SpoolDirectory + "/recq")) {
+ G_Message gm = new G_Message(Catalog.GetString(
+ @"The recq directory is missing in your spool directory!
+
+Please login as the root user and create the "
++ gfax.SpoolDirectory + "/recq" +
+" directory.\n\nAll users should be able to write to it.\n"));
+ return;
+ }
+
+
+ gxml = new Glade.XML (null, "gfax.glade", "GfaxWindow", null);
+ gxml.Autoconnect (this);
+
+
+ // Set initial gui state as per preferences
+ // GConf.PropertyEditors.EditorShell doesn't handle
+ // checkmenuitems;
+ eventsEnabled = false;
+ if (Settings.TransmitAgent == "hylafax") {
+ AutoQRefreshCheckMenuItem.Active = Settings.RefreshQueueEnabled;
+ EmailNotificationCheckMenuItem.Active = Settings.EmailNotify;
+ HiResolutionModeCheckMenuItem.Active = Settings.HiResolution;
+ LogEnabledCheckMenuItem.Active = Settings.LogEnabled;
+ }
+ if (Settings.TransmitAgent == "efax") {
+ AutoQRefreshCheckMenuItem.Active = Settings.RefreshQueueEnabled;
+ AutoQRefreshCheckMenuItem.Sensitive = false;
+ EmailNotificationCheckMenuItem.Active = false;
+ EmailNotificationCheckMenuItem.Sensitive = false;
+ HiResolutionModeCheckMenuItem.Active = Settings.HiResolution;
+ LogEnabledCheckMenuItem.Visible = false;
+ }
+ eventsEnabled = true;
+
+ StatusText.Editable = false;
+ StatusText.CanFocus = false;
+ StatusText.Buffer = StatusTextBuffer;
+
+ // Set the program icon
+ Gdk.Pixbuf Icon = new Gdk.Pixbuf(null, "gfax.png");
+
+ gfax.MainWindow = GfaxWindow;
+
+ // Setup listview icons
+ InitListViewIcons();
+
+ StatusStore = new ListStore(
+ typeof (Gdk.Pixbuf),
+ typeof (string),
+ typeof (string),
+ typeof (string),
+ typeof (string),
+ typeof (string),
+ typeof (string),
+ typeof (DateTime),
+ typeof (string));
+
+ RecvStore = new ListStore(
+ typeof (Gdk.Pixbuf),
+ typeof (string),
+ typeof (string),
+ typeof (string),
+ typeof (DateTime),
+ typeof (string));
+
+
+ lv = new G_ListView(StatusList, StatusStore);
+ lv.AddColumnIcon(Gtk.Stock.Info, 0);
+ lv.AddColumnTitle(Catalog.GetString("Jobid"), 1, 1);
+ lv.AddColumnTitle(Catalog.GetString("Number"), 2, 2);
+ lv.AddColumnTitle(Catalog.GetString("Status"), 3, 3);
+ lv.AddColumnTitle(Catalog.GetString("Owner"), 4, 4);
+ lv.AddColumnTitle(Catalog.GetString("Pages"), 5, 5);
+ lv.AddColumnTitle(Catalog.GetString("Dials"), 6, 6);
+ lv.AddColumnDateTime(Catalog.GetString("Send At"), "G", 7, 7);
+ lv.AddColumnTitle(Catalog.GetString("Information"), 8, 8);
+
+ // List view for completed jobs tab
+ jobsCompletedView = new G_ListView(JobsCompleteList, StatusStore);
+ jobsCompletedView.AddColumnIcon(Gtk.Stock.Info, 0);
+ jobsCompletedView.AddColumnTitle(Catalog.GetString("Jobid"), 1, 1);
+ jobsCompletedView.AddColumnTitle(Catalog.GetString("Number"), 2, 2);
+ jobsCompletedView.AddColumnTitle(Catalog.GetString("Status"), 3, 3);
+ jobsCompletedView.AddColumnTitle(Catalog.GetString("Owner"), 4, 4);
+ jobsCompletedView.AddColumnTitle(Catalog.GetString("Pages"), 5, 5);
+ jobsCompletedView.AddColumnTitle(Catalog.GetString("Dials"), 6, 6);
+ jobsCompletedView.AddColumnDateTime(Catalog.GetString("Send At"), "G", 7, 7);
+ jobsCompletedView.AddColumnTitle(Catalog.GetString("Information"), 8, 8);
+
+ jobsReceivedView = new G_ListView(JobsReceivedList, RecvStore);
+ jobsReceivedView.AddColumnIcon(Gtk.Stock.Info, 0);
+ jobsReceivedView.AddColumnTitle(Catalog.GetString("Sender"), 1, 1);
+ jobsReceivedView.AddColumnTitle(Catalog.GetString("Status"), 2, 2);
+ jobsReceivedView.AddColumnTitle(Catalog.GetString("Pages "), 3, 3);
+ jobsReceivedView.AddColumnDateTime(Catalog.GetString("Arrived"), "d", 4, 4);
+ jobsReceivedView.AddColumnTitle(Catalog.GetString("Filename"), 5, 5);
+
+ StatusList.Selection.Changed +=
+ new EventHandler(on_StatusList_selection);
+ StatusList.Selection.Mode = SelectionMode.Multiple;
+ StatusList.HeadersVisible = true;
+
+ JobsCompleteList.Selection.Changed +=
+ new EventHandler(on_JobsCompleteList_selection);
+ JobsCompleteList.Selection.Mode = SelectionMode.Multiple;
+ JobsCompleteList.HeadersVisible = true;
+
+ JobsReceivedList.Selection.Changed +=
+ new EventHandler(on_JobsReceivedList_selection);
+ JobsReceivedList.Selection.Mode = SelectionMode.Multiple;
+ JobsReceivedList.HeadersVisible = true;
+
+ // Make sure headers are visible
+ lv.AddTextToRow(null,"","","","","","",null,"");
+ jobsCompletedView.AddTextToRow(null,"","","","","","",null,"");
+ jobsReceivedView.AddTextToRow(null,"","","",null,"");
+ StatusStore.Clear();
+ RecvStore.Clear();
+
+ DeleteJobButton.Sensitive = false;
+ if (Settings.TransmitAgent == "hylafax")
+ ModifyJobButton.Sensitive = false;
+ else
+ ModifyJobButton.Visible = false;
+ ViewPrintButton.Sensitive = false;
+
+ // Setup some global variables
+ gfax.MainProgressBar = Appbar.Progress;
+ gfax.GStatusTextBuffer = StatusTextBuffer;
+ gfax.GAppbar = Appbar;
+
+ gfax.Pulser = new Pulser();
+ gfax.Status = new Status(StatusText, StatusTextBuffer);
+
+ if (Settings.RefreshQueueEnabled)
+ GLib.Timeout.Add((uint)(Settings.RefreshQueueInterval * 1000),
+ new TimeoutHandler (queue_refresh));
+
+ async_update_status();
+
+ if (Settings.TransmitAgent == "hylafax" ) {
+ while (gfax.activeNetwork)
+ System.Threading.Thread.Sleep(100);
+
+ async_net_read_finished();
+ }
+
+ activeQ = ActiveQ.send;
+ async_update_queue_status("sendq");
+
+ StatusIcon sicon = new StatusIcon(Icon);
+ sicon.Activate += new EventHandler (OnImageClick);
+ sicon.Tooltip = "Gfax Facsimile Sender";
+ // showing the trayicon
+ sicon.Visible = true;
+ // setup system tray icon
+ gfax.MainWindow.SkipTaskbarHint = true;
+ gfax.MainWindow.Iconify();
+
+ Application.Run ();
+ }
+
+ // end up here if we click the icon in the notifier
+ private static void OnImageClick(object o, EventArgs arg)
+ {
+ if (iconified) {
+ gfax.MainWindow.Deiconify();
+ iconified = false;
+ gfax.MainWindow.SkipTaskbarHint = false;
+ } else {
+ gfax.MainWindow.Iconify();
+ gfax.MainWindow.SkipTaskbarHint = true;
+ iconified = true;
+ }
+ }
+
+ // End up here if we iconify with the window manager
+ private static void on_mainWindow_window_state_event(object o, WindowStateEventArgs args)
+ {
+ //Console.WriteLine ("state event: type=" + args.Event.Type +
+ // "; new_window_state=" + args.Event.NewWindowState);
+
+ if (args.Event.NewWindowState == Gdk.WindowState.Iconified) {
+ iconified = true;
+ gfax.MainWindow.SkipTaskbarHint = true;
+ } else {
+ gfax.MainWindow.SkipTaskbarHint = false;
+ iconified = false;
+ }
+
+ }
+ //************************************************************************
+ // queue_refresh
+ // returns true to continue timeout functioning
+ //
+ // Queue_refresh connects to the hylafax server and retrieves
+ // updated queue information on regular intervals. This is called
+ // from a GLib.TimeoutHandler
+ public bool queue_refresh ()
+ {
+ if (!Settings.RefreshQueueEnabled)
+ return false;
+
+ // always do main status
+ //update_status(Fax.get_server_status());
+
+ // TODO do all this stuff with Delegates and events
+ async_update_status();
+ while (gfax.activeNetwork)
+ System.Threading.Thread.Sleep(100);
+ // now do queue
+
+ switch (activeQ) {
+ case ActiveQ.done :
+ async_update_queue_status("doneq");
+ break;
+ case ActiveQ.send :
+ async_update_queue_status("sendq");
+ break;
+ case ActiveQ.receive :
+ async_update_queue_status("recvq");
+ break;
+ }
+
+ return true; // must return true from timeout to keep it active
+ }
+
+ // Set to true if we need to restart for changed transport agent
+ public bool Restart
+ {
+ get { return restart; }
+ set { restart = value; }
+ }
+
+
+//========================= PRIVATE METHODS ====================================
+ private void on_StatusList_selection (object o, EventArgs args)
+ {
+ if (StatusList.Selection.CountSelectedRows() > 0) {
+ DeleteJobButton.Sensitive = true;
+ ModifyJobButton.Sensitive = true;
+ } else {
+ DeleteJobButton.Sensitive = false;
+ ModifyJobButton.Sensitive = false;
+ }
+ }
+
+
+ private void on_JobsCompleteList_selection (object o, EventArgs args)
+ {
+ DeleteJobButton.Sensitive = true;
+ }
+
+ private void on_JobsReceivedList_selection (object o, EventArgs args)
+ {
+ if (JobsReceivedList.Selection.CountSelectedRows() > 0) {
+ ViewPrintButton.Sensitive = true;
+ RecvfaxDeleteButton.Sensitive = true;
+ } else {
+ ViewPrintButton.Sensitive = false;
+ RecvfaxDeleteButton.Sensitive = false;
+ }
+ }
+
+ // Double click (Send tab)
+ private void on_StatusList_row_activated (object o, RowActivatedArgs args)
+ {
+ modify_job(lv.GetSelections(ALL_COLUMNS), "sendq");
+ }
+
+
+ private void on_JobsCompleteList_row_activated (object o, RowActivatedArgs args)
+ {
+ //modify_job(jobsCompletedView.GetSelections(ALL_COLUMNS), "doneq");
+ }
+
+
+ private void on_JobsReceivedList_row_activated (object o, RowActivatedArgs args)
+ {
+ // get the selected jobs
+ ArrayList al;
+ string hfaxfile = null;
+
+ // COLUMN_5 is the filename
+ al = jobsReceivedView.GetSelections(COLUMN_5);
+
+ IEnumerator enu = al.GetEnumerator();
+ while ( enu.MoveNext() ) {
+ hfaxfile = (string)enu.Current;
+ }
+ //Console.WriteLine("File to receive is {0}", hfaxfile);
+
+ view_received_fax( hfaxfile );
+ }
+
+ private void on_exitButton_clicked (object o, EventArgs args)
+ {
+ Application.Quit();
+ }
+
+ private void on_mainWindow_delete_event (object o, DeleteEventArgs args)
+ {
+ Application.Quit();
+ args.RetVal = true;
+ }
+
+ private void on_exit1_activate (object o, EventArgs args)
+ {
+ Application.Quit();
+ restart = true;
+ }
+
+
+//Status list notebook signal, switch pages to show different queues
+ private void on_StatusNotebook_switch_page (object o, SwitchPageArgs args)
+ {
+ async_update_status();
+ while (gfax.activeNetwork)
+ System.Threading.Thread.Sleep(100);
+
+ switch (StatusNotebook.CurrentPage) {
+ case SENDQ_PAGE:
+ activeQ = ActiveQ.send;
+ //if (update_queue_status("sendq") > 0)
+ // DeleteJobButton.Sensitive = true;
+ //else {
+ DeleteJobButton.Sensitive = false;
+ //}
+ async_update_queue_status("sendq");
+ break;
+ case DONEQ_PAGE:
+ DeleteJobButton.Sensitive = false;
+ activeQ = ActiveQ.done;
+ async_update_queue_status("doneq");
+ break;
+ case RECEIVEQ_PAGE:
+ DeleteJobButton.Sensitive = false;
+ RecvfaxDeleteButton.Sensitive = false;
+ activeQ = ActiveQ.receive;
+ async_update_queue_status("recvq");
+ break;
+ }
+
+ }
+
+//Main toolbar buttons
+//=======================================================================
+ private void on_NewFaxButton_clicked (object o, EventArgs args)
+ {
+ send_new_fax();
+ }
+
+
+ private void on_PhonebookButton_clicked (object o, EventArgs args)
+ {
+ GfaxPhonebook gpb = new GfaxPhonebook();
+ }
+
+
+ private void on_ModifyJobButton_clicked (object o, EventArgs args)
+ {
+ modify_job(lv.GetSelections(ALL_COLUMNS), "sendq");
+ }
+
+ private void modify_job (ArrayList al, string id)
+ {
+
+ string jobid = null;
+ string number = null;
+ string status = null;
+ string user = null;
+ string pages = null;
+ string dials = null;
+ object sendat = null;
+ string error = null;
+
+ IEnumerator enu = al.GetEnumerator();
+ while ( enu.MoveNext() ) {
+ enu.MoveNext();
+ jobid = (string)enu.Current;
+ enu.MoveNext();
+ number = (string)enu.Current;
+ enu.MoveNext();
+ status = (string)enu.Current;
+ enu.MoveNext();
+ user = (string)enu.Current;
+ enu.MoveNext();
+ pages = (string)enu.Current;
+ enu.MoveNext();
+ int idx = ((string)enu.Current).LastIndexOf(':');
+ dials = ((string)enu.Current).Substring(idx + 1);
+ enu.MoveNext();
+ sendat = (object)enu.Current;
+ enu.MoveNext();
+ error = (string)enu.Current;
+ }
+
+ #if DEBUG
+ Console.WriteLine("[ModifyJob] Date is {0}", sendat);
+ #endif
+
+ Glade.XML xml = new Glade.XML (null, "gfax.glade","vbox74",null);
+ Dialog mjd = new Dialog();
+ mjd.VBox.Add(xml.GetWidget("vbox74"));
+ Gtk.Entry mje = (Gtk.Entry)xml.GetWidget("ModifyJobNumberEntry");
+ Gnome.DateEdit mjde = (Gnome.DateEdit)xml.GetWidget("ModifyJobDate");
+ Gtk.SpinButton mjmd = (Gtk.SpinButton)xml.GetWidget("MaxDialsSpinbutton");
+
+ mjd.AddButton (Gtk.Stock.Cancel, Gtk.ResponseType.Cancel);
+ mjd.AddButton (Gtk.Stock.Ok, Gtk.ResponseType.Ok);
+
+ // this is to re-enable the entry for editing so it won't be selected
+ // to begin with??? Maybe something to do with re-parenting or something.
+ mje.FocusInEvent +=
+ new FocusInEventHandler (on_ModifyJobNumberEntry_focus_in_event);
+
+ mje.IsEditable = false;
+ mje.Text = number.Trim();
+
+ mjde.Time = sendat == null ? new DateTime(): (DateTime)sendat;
+
+ mjmd.Value = Convert.ToDouble(dials.Trim());
+
+ ResponseType result = (ResponseType)mjd.Run ();
+
+ if (result == ResponseType.Ok) {
+ DateTime newsend = (mjde.Time).ToUniversalTime();
+
+ // Format time to send - timezone is in UTC format.
+ string tts = String.Format("{0}{1:00}{2:00}{3:00}{4:00}",
+ newsend.Year,
+ newsend.Month,
+ newsend.Day,
+ newsend.Hour,
+ newsend.Minute);
+
+ if (id == "sendq" )
+ Fax.modify_job(jobid, mje.Text, tts, (mjmd.ValueAsInt).ToString());
+ else // "doneq"
+ Fax.resubmit_job(jobid, mje.Text, tts, (mjmd.ValueAsInt).ToString());
+
+ mjd.Destroy();
+ } else {
+ mjd.Destroy();
+ }
+
+ async_update_queue_status("sendq");
+ ModifyJobButton.Sensitive = false;
+ DeleteJobButton.Sensitive = false;
+ }
+
+ public void on_ModifyJobNumberEntry_focus_in_event (object o, EventArgs args)
+ {
+ Gtk.Entry e = o as Gtk.Entry;
+ e.IsEditable = true;
+ }
+
+ private void on_DeleteJobButton_clicked (object o, EventArgs args)
+ {
+ // get the selected jobs
+ ArrayList al;
+
+ // get a list of jobids to kill
+ al = lv.GetSelections(COLUMN_1);
+
+ IEnumerator enu = al.GetEnumerator();
+ while ( enu.MoveNext() ) {
+ Fax.delete_job((string)enu.Current);
+ }
+
+ switch (activeQ) {
+ case ActiveQ.done :
+ async_update_queue_status("doneq");
+ break;
+ case ActiveQ.send :
+ async_update_queue_status("sendq");
+ break;
+ case ActiveQ.receive :
+ async_update_queue_status("recvq");
+ break;
+ }
+
+ DeleteJobButton.Sensitive = false;
+ ModifyJobButton.Sensitive = false;
+ }
+
+ private void on_ViewPrintButton_clicked (object o, EventArgs args)
+ {
+ // get the selected jobs
+ ArrayList al;
+ string hfaxfile = null;
+
+ // COLUMN_5 is the filename
+ al = jobsReceivedView.GetSelections(COLUMN_5);
+
+ IEnumerator enu = al.GetEnumerator();
+ while ( enu.MoveNext() ) {
+ hfaxfile = (string)enu.Current;
+ }
+
+ view_received_fax (hfaxfile);
+ }
+
+ private void view_received_fax (string s)
+ {
+ // TODO get proper Gnome mime type and use that first if running Gnome
+ try {
+ if (Fax.recvfax(s)) {
+ ProcessStartInfo pidInfo = new ProcessStartInfo();
+ pidInfo.FileName = Settings.FaxViewer;
+ pidInfo.Arguments = String.Concat(gfax.SpoolDirectory, "/tif/", s);
+ System.Diagnostics.Process pid = System.Diagnostics.Process.Start(pidInfo);
+ } else {
+ G_Message gm = new G_Message(Catalog.GetString(
+@"Cannot read the facsimile file from the server. You most likely do not
+have permission to read the file. Check the settings on your fax server." ));
+ return;
+ }
+
+ } catch (Exception e) {
+ G_Message gm = new G_Message(Catalog.GetString(
+@"Cannot start your faxviewer program.
+Please check your settings. It is currently set to " + Settings.FaxViewer + "." ));
+ }
+
+ switch (activeQ) {
+ case ActiveQ.done :
+ async_update_queue_status("doneq");
+ break;
+ case ActiveQ.send :
+ async_update_queue_status("sendq");
+ break;
+ case ActiveQ.receive :
+ async_update_queue_status("recvq");
+ break;
+ }
+
+ // Reset progressbar
+ gfax.MainProgressBar.Fraction = 0;
+ }
+
+ private void on_RecvfaxDeleteButton_clicked (object o, EventArgs args)
+ {
+ // get the selected jobs
+ ArrayList al;
+ string hfaxfile = null;
+
+ // COLUMN_5 is the filename
+ al = jobsReceivedView.GetSelections(COLUMN_5);
+
+ IEnumerator enu = al.GetEnumerator();
+ while ( enu.MoveNext() ) {
+ hfaxfile = (string)enu.Current;
+
+ try {
+ if (Fax.delete_file(hfaxfile) == 1) {
+ G_Message gm = new G_Message(Catalog.GetString(
+@"Cannot delete the facsimile file from the server. You most likely do not
+have permission to delete the file. Check the settings on your fax server." ));
+ return;
+ }
+ } catch (Exception e) {
+ G_Message gm = new G_Message(Catalog.GetString(
+@"Cannot delete the file on the Hylafax server.
+Please check your settings or contact your system Administrator"));
+ }
+
+ switch (activeQ) {
+ case ActiveQ.done :
+ async_update_queue_status("doneq");
+ break;
+ case ActiveQ.send :
+ async_update_queue_status("sendq");
+ break;
+ case ActiveQ.receive :
+ async_update_queue_status("recvq");
+ break;
+ }
+ }
+ }
+
+
+
+// Menu items selected =============================================
+ private void on_newfax_activate (object o, EventArgs args)
+ {
+ send_new_fax();
+ }
+
+ private void on_preferences_activate (object o, EventArgs args)
+ {
+ GfaxPrefs gp = new GfaxPrefs();
+ }
+
+ private void on_jobs1_activate (object o, EventArgs args)
+ {
+
+ }
+
+ private void on_auto_queue_refresh_check_menu_item_activate (object o, EventArgs args)
+ {
+ if (eventsEnabled) {
+ Settings.RefreshQueueEnabled = !Settings.RefreshQueueEnabled;
+ if (Settings.RefreshQueueEnabled)
+ GLib.Timeout.Add((uint)(Settings.RefreshQueueInterval * 1000),
+ new TimeoutHandler(queue_refresh));
+ }
+ }
+
+ private void on_log_enabled_check_menu_item_activate (object o, EventArgs args)
+ {
+ if (eventsEnabled)
+ Settings.LogEnabled = !Settings.LogEnabled;
+ }
+
+ private void on_email_notification_check_menu_item_activate (object o, EventArgs args)
+ {
+ if (eventsEnabled)
+ Settings.EmailNotify = !Settings.EmailNotify;
+ }
+
+ private void on_hi_resolution_mode_check_menu_item_activate (object o, EventArgs args)
+ {
+ if (eventsEnabled)
+ Settings.HiResolution = !Settings.HiResolution;
+ }
+
+ private void on_fax_tracing_check_menuItem_activate (object o, EventArgs args)
+ {
+ if (eventsEnabled)
+ Settings.Faxtracing = !Settings.Faxtracing;
+ }
+
+
+ private static AboutDialog about = null;
+ private static void on_about_activate (object sender, EventArgs args)
+ {
+ if (about == null)
+ about = new AboutDialog();
+
+ about.Name = NAME;
+ about.Version = VERSION;
+ about.LogoIconName = "gfax";
+ about.Authors = new string[] { "George Farris <farrisg@shaw.ca>" };
+ about.Documenters = new string[] {};
+ about.Copyright = Catalog.GetString("Copyright (C) 2003 George Farris <farrisg@shaw.ca>");
+ about.Comments = Catalog.GetString("A Facsimile application for GNOME");
+ about.TranslatorCredits = (
+ "Johannes Rohr <johannes@rohr.org> - German\n" +
+ "Maris Dembovskis <marisdembovskis@gmail.com> - Latvian\n" +
+ "Sasa Ostrouska <saxa@droplinegnome.org> Italian\n" +
+ "Bart Verstraete <bartverstraete@telenet.be> - Dutch");
+ about.Run();
+ about.Hide();
+ }
+
+
+//--------------------------- SUPPORT FUNCTIONS -------------------------------
+ Gdk.Pixbuf fax_fail;
+ Gdk.Pixbuf fax_sent;
+ Gdk.Pixbuf fax_sleep;
+ Gdk.Pixbuf fax_block;
+ Gdk.Pixbuf fax_run;
+ Gdk.Pixbuf fax_receiving;
+ Gdk.Pixbuf fax_received;
+
+ public void InitListViewIcons()
+ {
+ fax_receiving = Gtk.IconTheme.Default.LoadIcon ("document-save", 16, 0);
+ fax_fail = Gtk.IconTheme.Default.LoadIcon ("gtk-cancel", 16, 0);
+ fax_sent = Gtk.IconTheme.Default.LoadIcon ("gtk-apply", 16, 0);
+ fax_run = Gtk.IconTheme.Default.LoadIcon ("printer-printing", 16, 0);
+ fax_block = Gtk.IconTheme.Default.LoadIcon ("printer-error", 16, 0);
+ fax_sleep = Gtk.IconTheme.Default.LoadIcon ("appointment-soon", 16, 0);
+ fax_received = Gtk.IconTheme.Default.LoadIcon ("text-x-generic", 16, 0);
+ }
+
+ public Gdk.Pixbuf GetFaxStatusIcon (FaxStatus status)
+ {
+ switch (status)
+ {
+ case FaxStatus.Fail:
+ return fax_fail;
+ case FaxStatus.New:
+ return fax_run;
+ case FaxStatus.Busy:
+ return fax_block;
+ case FaxStatus.Block:
+ return fax_block;
+ case FaxStatus.Sleep:
+ return fax_sleep;
+ case FaxStatus.Run:
+ return fax_run;
+ case FaxStatus.Receiving:
+ return fax_receiving;
+ case FaxStatus.Received:
+ return fax_received;
+ }
+
+ return fax_sent;
+ }
+
+ // Updates the status text widget
+ // only used for Efax
+ public void update_status (string s)
+ {
+ if (s == null)
+ return;
+
+ if (Settings.TransmitAgent == "efax") {
+ TextMark tm = StatusTextBuffer.GetMark("insert");
+ StatusTextBuffer.InsertAtCursor(String.Concat(s, "\n"));
+ StatusText.ScrollMarkOnscreen(tm);
+ }
+ }
+
+ public void async_update_status ()
+ {
+ string s;
+
+ if (Settings.TransmitAgent == "efax") {
+ s = Fax.async_get_server_status();
+ if (s != null ) {
+ TextMark tm = StatusTextBuffer.GetMark("insert");
+ StatusTextBuffer.InsertAtCursor(String.Concat(s, "\n"));
+ StatusText.ScrollMarkOnscreen(tm);
+ }
+ }
+
+ if (Settings.TransmitAgent == "hylafax") {
+ // Progressbar pulser - add this when we have async comms
+ GLib.Timeout.Add((uint)(100), new TimeoutHandler (queue_progress));
+
+ // update status bar
+ Appbar.ClearStack();
+ Appbar.Push(Catalog.GetString("Refreshing server status..."));
+ Appbar.Refresh();
+ //GLib.MainContext.Iteration ();
+ while (Gtk.Application.EventsPending ())
+ Gtk.Application.RunIteration ();
+
+ s = Fax.async_get_server_status();
+ }
+ }
+
+
+ private void async_update_queue_status(string queue)
+ {
+ G_ListView view;
+ Fax.FaxQueue q = null;
+ Fax.FaxRecQueue rq = null;
+
+ view = lv;
+
+ switch (queue) {
+ case "sendq":
+ view = lv;
+ break;
+ case "doneq":
+ view = jobsCompletedView;
+ break;
+ case "recvq":
+ view = jobsReceivedView;
+ break;
+ }
+
+ if (Settings.TransmitAgent == "hylafax") {
+ // Progressbar pulser - add this when we have async comms
+ GLib.Timeout.Add((uint)(100), new TimeoutHandler (queue_progress));
+
+ // update status bar
+ Appbar.ClearStack();
+ Appbar.Push(Catalog.GetString("Refreshing queue..."));
+ Appbar.Refresh();
+ //GLib.MainContext.Iteration ();
+ while (Gtk.Application.EventsPending ())
+ Gtk.Application.RunIteration ();
+
+ Fax.async_get_queue_status(queue);
+ }
+ if (Settings.TransmitAgent == "efax") {
+ async_update_listview(Fax.async_get_queue_status(queue), queue);
+ }
+ }
+
+ // We end up here when an async network read is finished
+ private void async_net_read_finished ()
+ {
+ switch (gfax.asyncReadType) {
+ case "doneq" :
+ async_update_listview(Fax.parse_senddone(gfax.asyncFolderMessageBuffer), "doneq");
+ break;
+ case "sendq" :
+ async_update_listview(Fax.parse_senddone(gfax.asyncFolderMessageBuffer), "sendq");
+ break;
+ case "recvq" :
+ async_update_listview(Fax.parse_receive(gfax.asyncFolderMessageBuffer), "recvq");
+ break;
+ case "status" :
+ StatusTextBuffer.Text = gfax.asyncServerMessageBuffer;
+ break;
+ }
+ }
+
+ private void async_update_listview(ArrayList reply, string queue)
+ {
+ G_ListView view;
+ Fax.FaxQueue q = null;
+ Fax.FaxRecQueue rq = null;
+
+ view = lv;
+
+ switch (queue) {
+ case "sendq":
+ view = lv;
+ break;
+ case "doneq":
+ view = jobsCompletedView;
+ break;
+ case "recvq":
+ view = jobsReceivedView;
+ break;
+ }
+
+ if (reply.Count > 0) {
+ StatusStore.Clear();
+ RecvStore.Clear();
+ IEnumerator enu = reply.GetEnumerator();
+
+ if (queue == "sendq" || queue == "doneq") {
+ while ( enu.MoveNext() ) {
+ q = (Fax.FaxQueue)enu.Current;
+ view.AddTextToRow(GetFaxStatusIcon(q.StatusType), q.Jobid, q.Number, q.Status, q.Owner, q.Pages, q.Dials, q.Sendat, q.Error);
+ }
+
+ Appbar.ClearStack();
+
+ if (q.Jobid != "") {
+ Appbar.Push(Catalog.GetString("There are " + reply.Count + " jobs in the queue"));
+ Appbar.Refresh();
+ //((Gtk.Window) gxml["Gfax"]).Title = "Gfax (" + reply.Count + ")";
+ GfaxWindow.Title = "Gfax (" + reply.Count + ")";
+ //return reply.Count;
+ return;
+ } else {
+ Appbar.Push(Catalog.GetString("There are 0 jobs in the queue"));
+ Appbar.Refresh();
+ //((Gtk.Window) gxml["Gfax"]).Title = "Gfax";
+ GfaxWindow.Title = "Gfax";
+ }
+ } else { //receive queue
+ while ( enu.MoveNext() ) {
+ rq = (Fax.FaxRecQueue)enu.Current;
+ view.AddTextToRow(GetFaxStatusIcon(rq.StatusType), rq.Sender, rq.Status, rq.Pages, rq.TimeReceived, rq.Filename);
+ }
+
+ if (rq.Sender != "") {
+ Appbar.Push(Catalog.GetString("There are " + reply.Count + " jobs in the queue"));
+ Appbar.Refresh();
+ //((Gtk.Window) gxml["Gfax"]).Title = "Gfax (" + reply.Count + ")";
+ GfaxWindow.Title = "Gfax (" + reply.Count + ")";
+ //return reply.Count;
+ return;
+ } else {
+ Appbar.Push(Catalog.GetString("There are 0 jobs in the queue"));
+ Appbar.Refresh();
+ //((Gtk.Window) gxml["Gfax"]).Title = "Gfax";
+ GfaxWindow.Title = "Gfax";
+ }
+ }
+
+ oldSendQueue = reply; // else save queue
+ }
+
+
+ StatusStore.Clear();
+ RecvStore.Clear();
+ }
+
+
+ private bool queue_progress ()
+ {
+ if (gfax.activeNetwork) {
+ Appbar.Progress.Pulse();
+ return (true);
+ }
+ else {
+ async_net_read_finished();
+ Appbar.Progress.Fraction = 0;
+ return (false);
+ }
+ }
+
+ // This is where we end up if the New Fax button or the menu item
+ // has been selected.
+ private void send_new_fax ()
+ {
+
+ string [] largs = {"do_filename"};
+ GfaxSend sd = new GfaxSend ("", largs);
+
+ // send the faxes
+ if (sd.DoSend) {
+ Fax.sendfax(sd.Filename);
+ // if file is temp data (/var/spool/gfax/D.*) then delete it
+ FileInfo f = new FileInfo(sd.Filename);
+ if (File.Exists(String.Concat(gfax.SpoolDirectory, "/", f.Name)))
+ File.Delete(String.Concat(gfax.SpoolDirectory, "/", f.Name));
+ }
+ activeQ = ActiveQ.send;
+ async_update_queue_status("sendq");
+ sd = null;
+ largs = null;
+ }
+
+ }
+
+ public class Status
+ {
+ TextBuffer stb;
+ TextView stv;
+
+ public Status (Gtk.TextView StatusText, TextBuffer StatusTextBuffer)
+ {
+ stv = StatusText;
+ stb = StatusTextBuffer;
+ }
+
+ public void Append (string s)
+ {
+ TextMark tm = stb.GetMark("insert");
+ stb.InsertAtCursor(String.Concat(s, "\n"));
+ stv.ScrollMarkOnscreen(tm);
+ }
+ }
+
+ // pulse the main window progressbar
+ public class Pulser
+ {
+ public bool endPulse;
+
+ public void StartPulse ()
+ {
+ endPulse = true;
+ GLib.Timeout.Add((uint)(200),
+ new TimeoutHandler (PulseIt));
+ }
+
+ public void EndPulse ()
+ {
+ endPulse = false;
+ }
+
+ private bool PulseIt ()
+ {
+ gfax.MainProgressBar.Pulse();
+ if (endPulse)
+ return(true);
+ else {
+ gfax.MainProgressBar.Fraction = 0;
+ return(false);
+ }
+ }
+ }
+
+}
diff --git a/src/guitools.cs b/src/guitools.cs
new file mode 100755
index 0000000..8828941
--- /dev/null
+++ b/src/guitools.cs
@@ -0,0 +1,540 @@
+// GFAX - Gnome fax application
+// Copyright (C) 2003 - 2008 George A. Farris
+//
+// 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 3 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 Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+namespace gfax {
+ using System;
+ using System.IO;
+ using System.Collections;
+ using System.Reflection;
+ using GLib;
+ using Gtk;
+ using Gdk;
+ using Gnome;
+ using Glade;
+ using GtkSharp;
+
+ // G_ProgressBar
+ public class G_ProgressBar
+ {
+ [Glade.Widget] Gtk.Dialog HylafaxProgressDialog;
+ [Glade.Widget] ProgressBar HylafaxProgressbar;
+ [Glade.Widget] Gtk.Notebook HylafaxProgressNotebook;
+ [Glade.Widget] Gtk.Button HylafaxProgressCancelButton;
+ [Glade.Widget] Gtk.Button HylafaxProgressCloseButton;
+
+ bool close = true;
+ bool cancel = false; // Cancel all jobs
+
+ public G_ProgressBar ()
+ {
+ Glade.XML xml = new Glade.XML (null, "gfax.glade","HylafaxProgressDialog",null);
+ xml.Autoconnect (this);
+
+ HylafaxProgressNotebook.CurrentPage = 0;
+ HylafaxProgressCloseButton.Hide();
+ HylafaxProgressDialog.Show();
+ }
+
+ public bool Cancel
+ {
+ get { return cancel; }
+ }
+
+ private void on_HylafaxProgressCancelButton_clicked(object o, EventArgs args)
+ {
+ cancel = true;
+ }
+
+ private void on_HylafaxProgressCloseButton_clicked(object o, EventArgs args)
+ {
+ close = false;
+ HylafaxProgressDialog.Destroy();
+ }
+
+ public void Close()
+ {
+ //close = false;
+ //HylafaxProgressDialog.Hide();
+ //HylafaxProgressDialog.Dispose();
+ HylafaxProgressDialog.Destroy();
+ }
+
+ //public void Run ()
+ //{
+ // HylafaxProgressDialog.Run();
+ //}
+
+ public double Fraction
+ {
+ set { HylafaxProgressbar.Fraction = value; }
+ }
+
+ public void Finished()
+ {
+ HylafaxProgressNotebook.CurrentPage = 1;
+ HylafaxProgressCancelButton.Hide();
+ HylafaxProgressCloseButton.Show();
+ // TODO Bad, bad, slap your wrist boy, do timer function
+ // or fix this somehow. Can I say 100% processor useage.
+ //while (close) {
+ // while (Gtk.Application.EventsPending ())
+ // Gtk.Application.RunIteration ();
+ //}
+ }
+ }
+
+ // G_Message class
+ //
+ // A simple message dialog
+ public class G_Message
+ {
+ public G_Message (string s)
+ {
+ MessageDialog d = new MessageDialog (
+ null, DialogFlags.DestroyWithParent, MessageType.Error, ButtonsType.Ok, s);
+ d.Run ();
+ d.Destroy ();
+ }
+
+ public G_Message (string s, bool toplevel)
+ {
+ Application.Init();
+ MessageDialog d = new MessageDialog (
+ null, DialogFlags.DestroyWithParent, MessageType.Error, ButtonsType.Ok, s);
+ d.Run ();
+ d.Destroy ();
+ Application.Quit();
+ }
+ }
+
+ public class G_Password
+ {
+ [Glade.Widget] Gtk.Dialog PasswordDialog;
+ [Glade.Widget] Gtk.Entry PasswordEntry;
+
+ string pass; // the password entered
+ bool cancel = false; // Cancel the connection
+ bool remember = false; // Remember the password
+
+ public G_Password ()
+ {
+ Glade.XML xml = new Glade.XML (null, "gfax.glade","PasswordDialog",null);
+ xml.Autoconnect (this);
+
+ PasswordDialog.Show();
+ }
+
+ public bool Cancel
+ {
+ get { return cancel; }
+ }
+
+ public bool RememberPassword
+ {
+ get { return remember; }
+ }
+
+ public string Password
+ {
+ get { return pass; }
+ }
+
+ public void Run ()
+ {
+ PasswordDialog.Run();
+ }
+
+ private void on_PasswordCheckbutton_toggled(object o, EventArgs args)
+ {
+ remember = true;
+ }
+
+ private void on_cancelbutton_clicked(object o, EventArgs args)
+ {
+ cancel = true;
+ PasswordDialog.Hide();
+ }
+
+ private void on_PasswordEntry_activate(object o, EventArgs args)
+ {
+ pass = PasswordEntry.Text;
+ PasswordDialog.Hide();
+ }
+
+ private void on_okbutton_clicked(object o, EventArgs args)
+ {
+ pass = PasswordEntry.Text;
+ PasswordDialog.Hide();
+ }
+
+ public void Close()
+ {
+ PasswordDialog.Destroy();
+ }
+ }
+
+
+ // ***********************************************************************
+ //
+ // G_GetFilename class
+ //
+ // Implements a GTK+ fileselector with signal handler for Ok and Cancel
+ // Arguments:
+ // string title : Title open file selection dialog
+ // string dir : Starting directory
+
+ public class G_GetFilename
+ {
+ string fname;
+ public Gtk.FileSelection fs;
+
+ public G_GetFilename (string title, string dir)
+ {
+ fs = new FileSelection(title);
+ fs.Filename = dir;
+ fs.Modal = true;
+ fs.HideFileopButtons ();
+ fs.OkButton.Clicked += new EventHandler (ok);
+ fs.CancelButton.Clicked += new EventHandler (cancel);
+
+/*
+ check_button = new CheckButton ("Show Fileops");
+ check_button.Toggled += new EventHandler (show_fileops);
+ fs.ActionArea.PackStart (check_button, false, false, 0);
+
+ toggle_button = new ToggleButton ("Select Multiple");
+ toggle_button.Clicked += new EventHandler (select_multiple);
+ fs.ActionArea.PackStart (toggle_button, false, false, 0);
+*/
+ fs.ShowAll();
+ fs.Run ();
+ }
+
+ public void Destroy ()
+ {
+ fs.Destroy();
+ }
+
+ private void cancel (object o, EventArgs args)
+ {
+ //Console.WriteLine("[Cancel] file selection cancel");
+ fs.Hide ();
+ }
+
+ private void ok (object o, EventArgs args)
+ {
+ //Console.WriteLine(fs.Filename);
+ fname = fs.Filename;
+ fs.Hide ();
+ }
+
+ public string Fname
+ {
+ get {return fname;}
+ set {fname = value;}
+ }
+
+
+ }
+
+ public class CellRendererDateTime: CellRendererText
+ {
+ public string Format;
+ }
+
+ public class G_ListView
+ {
+ Gtk.ListStore store;
+ Gtk.TreeView tree;
+ Gtk.TreeViewColumn column;
+ Gtk.CellRendererText textrenderer;
+ CellRendererDateTime datetimerenderer;
+ Gtk.CellRendererPixbuf iconrenderer;
+ Gtk.TreeIter iter;
+ Value valnot = new Value(false);
+ Value valone = new Value(true);
+
+ const int COLUMN_0 = 0;
+ const int COLUMN_1 = 1;
+ const int COLUMN_2 = 2;
+ const int ALL_COLUMNS = -1;
+
+ public G_ListView (Gtk.TreeView tr, Gtk.ListStore st)
+ {
+ store = st;
+ tree = tr;
+ iter = new Gtk.TreeIter();
+ }
+
+ public void AddColumnIcon (string iconname, int col)
+ {
+ column = new TreeViewColumn ();
+ iconrenderer = new Gtk.CellRendererPixbuf ();
+ column.Expand = false;
+ column.Resizable = false;
+ column.Clickable = false;
+ column.Reorderable = false;
+ column.Alignment = 0.5f;
+ column.Widget = new Gtk.Image(
+ Gtk.IconTheme.Default.LoadIcon (iconname, 16, 0)
+ );
+ column.Widget.Show();
+ column.PackStart (iconrenderer, true);
+ column.AddAttribute (iconrenderer, "pixbuf", col);
+ tree.AppendColumn(column);
+ }
+
+ protected int DateTimeTreeIterCompareFunc (TreeModel model, TreeIter a, TreeIter b)
+ {
+ int col = -1;
+ SortType sort;
+
+ bool is_sorted = ((Gtk.ListStore)model).GetSortColumnId (out col, out sort);
+ if(!is_sorted)
+ return 0;
+
+ DateTime dateA = (DateTime)model.GetValue (a, col);
+ DateTime dateB = (DateTime)model.GetValue (b, col);
+
+ return dateA.CompareTo(dateB);
+ }
+
+ protected void DateTimeColumnDataHandler (TreeViewColumn column,
+ CellRenderer cell, TreeModel model, TreeIter iter)
+ {
+ DateTime date = (DateTime)model.GetValue (iter, column.SortColumnId);
+ CellRendererDateTime renderer = (CellRendererDateTime)cell;
+ renderer.Text = date.ToString(renderer.Format);
+ }
+
+ public void AddColumnDateTime (string title, string format, int sortid, int col)
+ {
+ store.SetSortFunc(col, new TreeIterCompareFunc(DateTimeTreeIterCompareFunc));
+
+ column = new TreeViewColumn ();
+ datetimerenderer = new CellRendererDateTime ();
+ datetimerenderer.Format = format == null ? "G" : format;
+ column.Title = title;
+ column.SortColumnId = sortid;
+ column.Sizing = TreeViewColumnSizing.Autosize;
+ column.Reorderable = true;
+ column.Resizable = true;
+ column.Expand = false;
+ column.Alignment = 0.0f;
+ column.PackStart (datetimerenderer, true);
+ column.SetCellDataFunc (datetimerenderer, new TreeCellDataFunc(DateTimeColumnDataHandler));
+ tree.AppendColumn(column);
+ }
+
+ public void AddColumnTitle (string title, int sortid, int col)
+ {
+ column = new TreeViewColumn ();
+ textrenderer = new CellRendererText ();
+ //text.Editable = true;object
+ column.Title = title;
+ column.SortColumnId = sortid;
+ column.Sizing = TreeViewColumnSizing.Autosize;
+ column.Reorderable = true;
+ column.Resizable = true;
+ column.Expand = false;
+ column.Alignment = 0.0f;
+ column.PackStart (textrenderer, true);
+ column.AddAttribute (textrenderer, "text", col);
+ tree.AppendColumn(column);
+ }
+
+// TODO move this to GfaxSend in gui.cs
+ public void AddColumnTitleToggle (string title, int sortid, int col)
+ {
+ column = new TreeViewColumn ();
+ CellRendererToggle toggle = new CellRendererToggle ();
+ toggle.Activatable = true;
+ toggle.Toggled += new ToggledHandler (toggle_it);
+ column.Title = title;
+ column.PackStart (toggle, false);
+ column.AddAttribute (toggle, "active", col);
+ tree.AppendColumn(column);
+ }
+
+ // we need to manually set the toggle when selected otherwise
+ // it won't show in the gui.
+ public void toggle_it (object o, Gtk.ToggledArgs args)
+ {
+ store.GetIterFromString(out iter, args.Path);
+ bool tog = (bool)store.GetValue(iter, 0);
+ store.SetValue(iter, 0, !tog);
+ }
+// end of move
+
+ // Each arg is a new column
+ public void AddTextToRow (params object[] args)
+ {
+ iter = store.AppendValues(args);
+ tree.Model = store;
+ }
+
+ // returns a list of arrays of columns size
+ public ArrayList GetAllRows()
+ {
+ ArrayList rows = new ArrayList();
+
+ // Really get the whole row.
+ string[] col = new string[store.NColumns];
+ store.GetIterFirst(out iter);
+
+ for ( int i = 0; i < store.NColumns; i++) {
+ try {
+ col[i] = (string)store.GetValue(iter, i);
+ //Console.WriteLine("Column {0}",col[i]);
+ }
+ catch (Exception e) { }
+ }
+ rows.Add(col);
+
+ #if DEBUG
+ Console.WriteLine("got colums");
+ #endif
+
+ while (store.IterNext(ref iter)) {
+ string[] coln = new string[store.NColumns];
+ for ( int i = 0; i < store.NColumns; i++) {
+ coln[i] = (string)store.GetValue(iter, i);
+ }
+ rows.Add(coln);
+ }
+ return rows;
+ }
+
+ // get multiple selections, return a list of objects
+ public ArrayList GetSelections(int column)
+ {
+ ArrayList selects = new ArrayList();
+
+ // Really get the whole row.
+ if (column == ALL_COLUMNS) {
+ store.GetIterFirst(out iter);
+ if ( tree.Selection.IterIsSelected(iter)) {
+ for ( int i = 0; i < store.NColumns; i++) {
+ selects.Add(store.GetValue(iter, i));
+ }
+ }
+
+ while (store.IterNext(ref iter)) {
+ if ( tree.Selection.IterIsSelected(iter)) {
+ for ( int i = 0; i < store.NColumns; i++) {
+ selects.Add(store.GetValue(iter, i));
+ }
+ }
+ }
+ }
+ else
+ {
+ store.GetIterFirst(out iter);
+ if ( tree.Selection.IterIsSelected(iter)) {
+ selects.Add(store.GetValue(iter, column));
+ }
+
+ while (store.IterNext(ref iter)) {
+ if ( tree.Selection.IterIsSelected(iter)) {
+ selects.Add(store.GetValue(iter, column));
+ }
+ }
+ }
+ return selects;
+ }
+
+ // get single selection
+ public object GetSingleSelection ()
+ {
+ object sel = null;
+ Gtk.TreeIter iter = new Gtk.TreeIter();
+
+ store.GetIterFirst(out iter);
+ if ( tree.Selection.IterIsSelected(iter)) {
+ sel = store.GetValue(iter, 0);
+ }
+
+ while (store.IterNext(ref iter)) {
+ if ( tree.Selection.IterIsSelected(iter)) {
+ sel = store.GetValue(iter, 0);
+ }
+ }
+ return sel;
+ }
+
+ public void RemoveSelectedRow ()
+ {
+ Gtk.TreeIter iter = new Gtk.TreeIter();
+
+ store.GetIterFirst(out iter);
+ if ( tree.Selection.IterIsSelected(iter)) {
+ store.Remove(ref iter);
+ return;
+ }
+
+ while (store.IterNext(ref iter)) {
+ if ( tree.Selection.IterIsSelected(iter)) {
+ store.Remove(ref iter);
+ break;
+ }
+ }
+ return;
+ }
+
+ //TODO get this to work
+ public void RemoveSelectedRows ()
+ {
+ Gtk.TreeIter iter = new Gtk.TreeIter();
+
+ store.GetIterFirst(out iter);
+ if ( tree.Selection.IterIsSelected(iter)) {
+ store.Remove(ref iter);
+ }
+
+ while (store.IterNext(ref iter)) {
+ if ( tree.Selection.IterIsSelected(iter)) {
+ store.Remove(ref iter);
+ }
+ }
+ return;
+ }
+
+
+ public void UpdateColumnText (string oldString, string newString, int column)
+ {
+ Gtk.TreeIter iter = new Gtk.TreeIter();
+
+ store.GetIterFirst(out iter);
+ // Check for a null Stamp (no initial entry in the list)
+ if (iter.Stamp == 0)
+ return;
+
+ if ( oldString == (string)store.GetValue(iter, column)) {
+ GLib.Value val = new GLib.Value(newString);
+ store.SetValue (iter, column, val);
+ }
+
+ while (store.IterNext(ref iter)) {
+ if ( oldString == (string)store.GetValue(iter, column)) {
+ GLib.Value val1 = new GLib.Value(newString);
+ store.SetValue (iter, column, val1);
+ }
+ }
+
+ }
+ }
+}
diff --git a/src/hylafax.cs b/src/hylafax.cs
new file mode 100755
index 0000000..54ab63f
--- /dev/null
+++ b/src/hylafax.cs
@@ -0,0 +1,950 @@
+// GFAX - Gnome fax application
+// Copyright (C) 2003 - 2008 George A. Farris
+//
+// 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 3 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 Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ // Sequence to send a file is:
+ // 1) Make sure we're connected
+ // 2) Store the filename on the server [storefile_open]
+ // 3) Send the file line by line
+ // 4) Close the stream for sending the file
+ // 5) For all the phone numbers do:
+ // a) job_new [job_new]
+ // b) set all job parms [job_parm_set]
+ // c) submit the job [submit_job]
+ // 6) Close the connection.
+
+// Properties
+// string Hostname, Username, Password
+// int IPPort
+
+//#define DEBUGHYLAFAX
+
+namespace gfax {
+ using Mono.Unix;
+ using System;
+ using System.IO;
+ using System.Text; //Encoding.ASCII.GetBytes
+ using System.Collections;
+ using System.Threading;
+ using System.Net;
+ using System.Net.Sockets;
+
+
+ public class Hylafax
+ {
+ TcpClient mainclient = new TcpClient();
+ NetworkStream mainstream;
+ string host, user, pass;
+ int port;
+ bool permission;
+
+
+ public class StateObject
+ {
+ public TcpClient client = null;
+ public int totalBytesRead = 0;
+ public const int BufferSize = 256;
+ public string readType = null;
+ public byte[] buffer = new byte[BufferSize];
+ public StringBuilder messageBuffer = new StringBuilder();
+ }
+
+
+ // connect
+ // return false on sucess or true on cancel
+ public bool connect ()
+ {
+ host = Settings.Hostname;
+ port = Convert.ToInt32(Settings.Port);
+ user = Settings.Username;
+ if (gfax.hylafaxPassword == null) // if we already entered a pass but
+ if (Settings.Password != "") // don't want to remember it it won't be null
+ gfax.hylafaxPassword = Settings.Password;
+
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine ("Initializing hylafax class .......");
+ }
+
+ try {
+ mainclient.Connect(host, port);
+ mainstream = mainclient.GetStream();
+ string s = read(mainstream, mainclient);
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine ("[hylafax.connect] on connect : {0}", s);
+ }
+
+
+ if(mainstream.CanWrite && mainstream.CanRead){
+ // Write username
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine ("[hylafax.connect] Sending USER : {0}", user);
+ }
+
+ //If the username is null then hylafax doesn't need usernames
+ // TODO check the hylafax protocol about this
+ if (user == "")
+ user = "anonymous";
+
+ write (mainstream, "USER " + user + "\n");
+ // Read result
+ // If the result is ("230 User <username> logged in.")
+ // I don't need to send a password
+ // Else if the result is ("331 Password required for <username>.")
+ // I must send a password.
+ string returndata = read(mainstream, mainclient);
+
+ if (returndata.Substring(0,3) == "331") {
+ //Console.WriteLine("Password is {0}", gfax.hylafaxPassword);
+ for (int i = 0; i < 3; i++) {
+
+ if (gfax.hylafaxPassword == null) {
+ G_Password gpass = new G_Password();
+ gpass.Run();
+
+ if (gpass.Cancel) {
+ return false; // connection cancelled
+ }
+ gfax.hylafaxPassword = gpass.Password;
+ if (gpass.RememberPassword)
+ Settings.Password = gpass.Password;
+ gpass.Close();
+ }
+ // 530 Login incorrect. result from bad password
+ //prompt for password
+ write (mainstream, "PASS " + gfax.hylafaxPassword + "\n");
+
+ string rtn = read(mainstream, mainclient);
+ //Console.WriteLine("Return is {0}", rtn);
+ if (rtn.Substring(0,3) == "230") // user is logged in
+ break;
+ else {
+ gfax.hylafaxPassword = null;
+ write (mainstream, "USER " + user + "\n");
+ string rtndata = read(mainstream, mainclient);
+ }
+ }
+ }
+
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine("[hylafax.connect] USER returned : {0}", returndata);
+ }
+ }
+ else if (!mainstream.CanRead) {
+ Console.WriteLine(Catalog.GetString("You can not write data to this stream"));
+ mainclient.Close();
+ }
+ else if (!mainstream.CanWrite) {
+ Console.WriteLine(Catalog.GetString("You can not read data from this stream"));
+ mainclient.Close();
+ }
+
+ return true;
+ }
+ catch (Exception e ) {
+ Console.WriteLine(e.ToString());
+ G_Message m = new G_Message(Catalog.GetString("Could not connect to your Hylafax server.\n" +
+ "Check console messages for further information\n\n" +
+ "You might need to set a value for username."));
+ return false;
+ }
+ }
+
+ public void close ()
+ {
+ mainclient.Close();
+ }
+
+ // Method status(queue)
+ //
+ // queue is the queue directory of the hylafax server it can be one of:
+ // 'status', 'sendq', 'doneq' or 'recvq'
+ //
+ // Return a list containing lines
+/*
+ public string status (string queue)
+ {
+ #if DEBUGHYLAFAX
+ Console.WriteLine ("[hylafax.status] queue is : {0}", queue);
+ #endif
+ // try
+ return getfolder(queue);
+ }
+*/
+ public void asyncstatus (string queue)
+ {
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine ("[hylafax.status] queue is : {0}", queue);
+ }
+ asyncgetfolder(queue);
+ }
+
+ // send_init (string filename)
+ //
+ // 2) Store the filename on the server [storefile_open]
+ // 3) Send the file line by line
+ // 4) Close the stream for sending the file
+ public string send_init (string fname)
+ {
+ G_ProgressBar pbar;
+ TcpClient myclient;
+ NetworkStream mystream;
+ StreamReader fp = null;
+ string buf;
+ string remote_fname;
+ double lines = 0;
+ double lines_sent = 0;
+ double percent = 0;
+
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine("[Hylafax.send_init] Filename : {0}", fname);
+ }
+
+ //timezone("LOCAL");
+ // Setup the server and return a passive connection
+ // PASV, STOT
+ myclient = storefile_open();
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine("[Hylafax.send_init] Got tcpclient");
+ }
+
+ mystream = myclient.GetStream();
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine("[Hylafax.send_init] Stream is open");
+ }
+ //figure out how many lines in the file for progress bar
+ // TODO progress bar and error
+ try { fp = File.OpenText(fname); }
+ catch (Exception e) { }
+
+ while ( (buf = fp.ReadLine()) != null ) {
+ lines = lines + 1;
+ }
+ fp.Close();
+
+ try { fp = File.OpenText(fname); }
+ catch (Exception e) { }
+
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine("[Hylafax.send_init] File :{0} is open and has {1} lines", fname,lines);
+ }
+
+ pbar = new G_ProgressBar();
+ //pbar.Text = "File xmit";
+ lines_sent = 1;
+ while ( (buf = fp.ReadLine()) != null ) {
+ write(mystream, buf);
+ write(mystream, "\n");
+ lines_sent = lines_sent + 1;
+ percent = lines_sent / lines;
+ if (percent <= 1.0)
+ pbar.Fraction = percent;
+ //GLib.MainContext.Iteration ();
+ while (Gtk.Application.EventsPending ())
+ Gtk.Application.RunIteration ();
+ if (pbar.Cancel)
+ break;
+ }
+ fp.Close();
+ remote_fname = storefile_close(myclient);
+
+ if (pbar.Cancel) { //If the transfer was cancelled
+ deletefile(remote_fname);
+ remote_fname = "cancelled";
+ pbar.Close();
+ } else {
+ pbar.Finished();
+ }
+
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine("[Hylafax.send_init] Stream is closed, sent {0} lines",lines_sent);
+ }
+ return remote_fname;
+ }
+
+ // Method send(string filename_on_server, Contact contact)
+ //
+ // Sequence to send a file is:
+ // a) job_new [job_new]
+ // b) set all job parms [job_parm_set]
+ // c) submit the job [submit_job]
+ // format send time - should be as such:
+ // yyyymmddhhmm
+ //-> JPARM SENDTIME 200403100509
+ //213 SENDTIME set to 20040310050900.
+ public void send (string remote_fname, GfaxContact contact)
+ {
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine("Hylafax.send] top of method...");
+ }
+
+ string emailAddress = Settings.EmailAddress;
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine("Hylafax.send] email address {0}", emailAddress);
+ }
+
+ string resolution = "98";
+ string emailNotify = "none";
+
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine("[Hylafax.send] gfax.timeToSend : {0}", gfax.timeToSend);
+ Console.WriteLine("[Hylafax.send] Remote file name is : {0}", remote_fname);
+ }
+
+ // if this is sent from GfaxSend wizard
+ if (gfax.fromSendWizard) {
+ if (gfax.sendWizardResolution)
+ resolution = "196";
+
+ if (gfax.sendWizardEmailNotify) {
+ emailNotify = "done";
+ emailAddress = gfax.sendWizardEmailAddress;
+ }
+ } else {
+ if (Settings.EmailNotify)
+ emailNotify = "done";
+
+ if (Settings.HiResolution)
+ resolution = "196";
+ }
+
+ // Format time to send - timezone is in UTC format.
+ string tts = String.Format("{0}{1:00}{2:00}{3:00}{4:00}",
+ gfax.timeToSend.Year,
+ gfax.timeToSend.Month,
+ gfax.timeToSend.Day,
+ gfax.timeToSend.Hour,
+ gfax.timeToSend.Minute);
+
+ string jid = job_new();
+ //TODO try catch exception here
+ //#item[1] is the name #item[2] is the company
+
+ job_param_set("FROMUSER", Environment.UserName);
+ job_param_set("LASTTIME", "000259");
+ job_param_set("SENDTIME", tts);
+ job_param_set("MAXDIALS", "12");
+ job_param_set("MAXTRIES", "3");
+ job_param_set("SCHEDPRI", "127");
+ job_param_set("DIALSTRING", contact.PhoneNumber);
+ job_param_set("NOTIFYADDR", emailAddress);
+ job_param_set("VRES", resolution);
+ job_param_set("PAGEWIDTH", "215");
+ job_param_set("PAGELENGTH", "279");
+ job_param_set("NOTIFY", emailNotify); //can be "none" or "done"
+ job_param_set("PAGECHOP", "default");
+ job_param_set("CHOPTHRESHOLD", "3");
+ job_param_set("DOCUMENT", remote_fname);
+ job_submit();
+ }
+
+ public bool getfile (string fname)
+ {
+ G_ProgressBar pbar;
+ TcpClient myclient;
+ NetworkStream mystream;
+ FileStream fp;
+ string data;
+ double fsize = 0;
+ double totalBytes = 0;
+ double percent = 0;
+
+ // get the file size for the receive progress bar
+ write(mainstream, String.Concat("SIZE recvq/", fname, "\n"));
+ data = read(mainstream, mainclient);
+ try {
+ string[] s = data.Split();
+ fsize = Convert.ToDouble(s[1]);
+ } catch (Exception e) {
+ Console.WriteLine("Couldn't get file size");
+ Console.WriteLine("Hylafax exception {0}", e);
+ return (false);
+ }
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine("[hylafax.getfile] \"File size is : {0}", fsize);
+ }
+
+ // assume we have permission to open file
+ permission = true;
+ // PASV, RETR
+ myclient = recvfile_open(fname);
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine("[Hylafax.getfile] Got tcpclient");
+ }
+
+ mystream = myclient.GetStream();
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine("[Hylafax.getfile] Stream is open");
+ }
+
+ if (!permission) {
+ return (false);
+ }
+
+ try {
+ fp = new FileStream(String.Concat(gfax.SpoolDirectory,"/tif/",fname), FileMode.Create);
+ } catch (Exception e) {
+ Console.WriteLine(e.ToString());
+ return(false);
+ }
+
+ byte[] bytes = new byte[256];
+
+ do {
+ try {
+ gfax.MainProgressBar.Fraction = percent;
+ while (Gtk.Application.EventsPending ())
+ Gtk.Application.RunIteration ();
+
+ int len = mystream.Read(bytes, 0, bytes.Length);
+ if (len > 0 ) {
+ totalBytes = totalBytes + len;
+ percent = totalBytes / fsize;
+ if (percent <= 1.0)
+ gfax.MainProgressBar.Fraction = percent;
+ //GLib.MainContext.Iteration ();
+ while (Gtk.Application.EventsPending ())
+ Gtk.Application.RunIteration ();
+ fp.Write(bytes,0,len);
+ }
+ } catch ( Exception e ) {
+ Console.WriteLine(e.ToString());
+ return(false);
+ }
+ // Seems if we don't sleep here for a bit, we never read
+ // all the data??? Maybe a Hylafax thing.
+ System.Threading.Thread.Sleep(1);
+
+ } while (mystream.DataAvailable);
+
+ fp.Close();
+ recvfile_close(myclient);
+
+ // valid file received
+ return(true);
+ }
+
+
+
+ private string job_new ()
+ {
+ string data;
+ string[] tmp;
+ //string jobid;
+
+ try {
+ write(mainstream, "JOB default\n");
+ data = read(mainstream, mainclient);
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine("[hylafax.job_new] \"JOB default\" data returned : {0}", data);
+ }
+
+ write(mainstream, "JNEW\n");
+ data = read(mainstream, mainclient);
+ // data = 200 New job created: jobid: 14433 groupid: 14433.
+ tmp = data.Split(' ');
+
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine("[hylafax.job_new] \"JNEW\" data returned : {0}", data);
+ }
+
+ } catch (Exception e) {
+ Console.WriteLine("Hylafax exception {0}", e);
+ return ("");
+ }
+
+ // jobid might need to be Convert.ToInt32
+ return tmp[5];
+ }
+
+ public void job_param_set (string pname, string pvalue)
+ {
+ string data;
+
+ write(mainstream, "JPARM " + pname + " " + pvalue +"\n");
+ data = read(mainstream, mainclient);
+ if (Settings.Faxtracing == true) {
+ Console.Write("[hylafax.job_param_set] \"JPARM\" data returned : {0}", data);
+ }
+ }
+
+ public void job_submit ()
+ {
+ string data;
+
+ write(mainstream, "JSUBM\n");
+ data = read(mainstream, mainclient);
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine("[hylafax.job_submit] \"JSUBM\" data returned : {0}", data);
+ }
+ }
+
+ private TcpClient storefile_open ()
+ {
+ TcpClient myclient = new TcpClient();
+ NetworkStream mystream;
+ IPAddress ipaddr;
+ int ipport;
+ string data;
+
+ write(mainstream, "PASV\n");
+ data = read(mainstream, mainclient);
+
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine("[hylafax.storefile_open] data returned : {0}", data);
+ }
+
+ // dig out ip address and port for new connection
+ ipaddr = get_ip_addr(data);
+ ipport = get_ip_port(data);
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine("[hylafax.storefile_open] ipaddr, port : {0}, {1}", ipaddr, ipport);
+ }
+
+ try {
+ myclient.Connect(ipaddr, ipport);
+ }
+ catch (Exception e ) {
+ Console.WriteLine(e.ToString());
+ // handle error here
+ }
+
+ mystream = myclient.GetStream();
+ write(mainstream, "STOT\n");
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine("[hylafax.storefile_open] wrote STOT");
+ }
+ data = read(mainstream, mainclient);
+ //data = 150 FILE: /tmp/doc1097.ps (Opening new data connection).
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine("[hylafax.storefile_open] returned from STOT : {0}", data);
+ }
+ return myclient;
+ }
+
+ private string storefile_close(TcpClient tc)
+ {
+ string data;
+ string[] s;
+ string fn;
+
+ tc.Close();
+ data = read(mainstream, mainclient);
+ // data = 226 Transfer complete (FILE: /tmp/doc1101.ps).
+ // TODO error checking
+
+ // remove white space first, Arrgggh!
+ fn = data.Trim();
+ s = fn.Split(' ');
+
+ return(s[4].TrimEnd(')','.'));
+ }
+
+ private TcpClient recvfile_open (string fname)
+ {
+ TcpClient myclient = new TcpClient();
+ NetworkStream mystream;
+ IPAddress ipaddr;
+ int ipport;
+ string data;
+
+ write(mainstream, "PASV\n");
+ data = read(mainstream, mainclient);
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine("[hylafax.recvfile_open] data returned : {0}", data);
+ }
+
+ // dig out ip address and port for new connection
+ ipaddr = get_ip_addr(data);
+ ipport = get_ip_port(data);
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine("[hylafax.recvfile_open] ipaddr, port : {0}, {1}", ipaddr, ipport);
+ }
+
+ try {
+ myclient.Connect(ipaddr, ipport);
+ }
+ catch (Exception e ) {
+ Console.WriteLine(e.ToString());
+ // handle error here
+ }
+
+ mystream = myclient.GetStream();
+ write(mainstream, "TYPE I\n");
+ data = read(mainstream, mainclient);
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine("[hylafax.recvfile_open] data returned : {0}", data);
+ }
+
+ write(mainstream, String.Concat("RETR recvq/", fname, "\n"));
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine("[hylafax.recvfile_open] wrote RETR");
+ }
+ data = read(mainstream, mainclient);
+
+ if (data.Substring(0,3) == "550")
+ permission = false;
+ //data = returned from RETR : 550 recvq/fax000000018.tif: Operation not permitted.
+ //data = returned from RETR : 150 Opening new data connection for recvq/fax000000018.tif (2793 bytes).
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine("[hylafax.recvfile_open] returned from RETR : {0}", data);
+ }
+ return myclient;
+ }
+
+ private string recvfile_close(TcpClient tc)
+ {
+ string data;
+ string[] s;
+ string fn;
+
+ tc.Close();
+ data = read(mainstream, mainclient);
+ // data = 226 Transfer complete (FILE: /tmp/doc1101.ps).
+ // TODO error checking
+
+ // remove white space first, Arrgggh!
+ //fn = data.Trim();
+ //s = fn.Split(' ');
+
+ //return(s[4].TrimEnd(')','.'));
+ return "";
+ }
+
+/*
+ private string getfolder (string folder)
+ {
+ TcpClient myclient = new TcpClient();
+ NetworkStream mystream;
+ IPAddress ipaddr;
+ int ipport;
+ string jobfmt;
+
+ write(mainstream, "PASV\n");
+ string data = read(mainstream, mainclient);
+
+ // dig out ip address and port for new connection
+ ipaddr = get_ip_addr(data);
+ ipport = get_ip_port(data);
+
+ try {
+ myclient.Connect(ipaddr, ipport);
+ }
+ catch (Exception e ) {
+ Console.WriteLine(e.ToString());
+ // handle error here
+ }
+
+ mystream = myclient.GetStream();
+ /*
+ RCVFMT (receive)
+ %4p%1z %14.14s %7t %f
+ p - number of pages
+ z - * if still receiving, <space> otherwise
+ s - sender (TIS)
+ t - time received
+ f - filename
+
+ 1= =Malaspina Univ=16Oct06=fax000000018.tif
+
+ JOBFMT (send, done)
+ j - Job identifier
+ e - Phone number
+ a - Job state (one-character symbol)
+ o - Job owner
+ P - # pages transmitted/total # pages to transmit
+ D - Total # dials/maximum # dials
+ s - Job status information from last failure
+ Y - Scheduled date and time
+ */
+/* // set the job format string
+ if (folder == "doneq" || folder == "sendq") {
+ jobfmt = "\"%-4j=%-14e=%1a=%-12o=%-5P=%-5D=%.35s=%-19Y\"";
+ write(mainstream, "JOBFMT "+jobfmt+"\n");
+ data = read(mainstream, mainclient);
+ }
+ if (folder == "recvq") {
+ jobfmt = "\"%4p=N%1z=%14.14s=%7t=%f\"";
+ write(mainstream, "RCVFMT "+jobfmt+"\n");
+ data = read(mainstream, mainclient);
+ }
+ write(mainstream, "LIST "+folder+"\n");
+ data = read(mystream, myclient);
+
+
+ #if DEBUGHYLAFAX
+ Console.WriteLine("[hylafax.getfolder] list folder data : {0}", data);
+ Console.WriteLine("[hylafax.getfolder] data length : {0}", data.Length);
+ #endif
+
+ myclient.Close();
+ return data;
+ }
+*/
+
+ private void asyncgetfolder (string folder)
+ {
+ TcpClient myclient = new TcpClient();
+ IPAddress ipaddr;
+ int ipport;
+ string jobfmt;
+
+ write(mainstream, "PASV\n");
+ string data = read(mainstream, mainclient);
+
+ // dig out ip address and port for new connection
+ ipaddr = get_ip_addr(data);
+ ipport = get_ip_port(data);
+
+ try {
+ myclient.Connect(ipaddr, ipport);
+ }
+ catch (Exception e ) {
+ Console.WriteLine(e.ToString());
+ // handle error here
+ }
+
+ /*
+ RCVFMT (receive)
+ %4p%1z %14.14s %7t %f
+ p - number of pages
+ z - * if still receiving, <space> otherwise
+ s - sender (TIS)
+ t - time received
+ f - filename
+
+ 1= =Malaspina Univ=16Oct06=fax000000018.tif
+
+ JOBFMT (send, done)
+ j - Job identifier
+ e - Phone number
+ a - Job state (one-character symbol)
+ o - Job owner
+ P - # pages transmitted/total # pages to transmit
+ D - Total # dials/maximum # dials
+ s - Job status information from last failure
+ Y - Scheduled date and time
+ */
+ // set the job format string
+ if (folder == "doneq" || folder == "sendq") {
+ jobfmt = "\"%-4j=%-14e=%1a=%-12o=%-5P=%-5D=%.35s=%-19Y\"";
+ write(mainstream, "JOBFMT "+jobfmt+"\n");
+ data = read(mainstream, mainclient);
+ }
+ if (folder == "recvq") {
+ jobfmt = "\"%4p=N%1z=%28.28s=%7t=%f\"";
+ write(mainstream, "RCVFMT "+jobfmt+"\n");
+ data = read(mainstream, mainclient);
+ }
+ write(mainstream, "LIST "+folder+"\n");
+ //data = read(mystream, myclient);
+ asyncread(myclient, folder);
+ }
+
+ private IPAddress get_ip_addr (string ipdata)
+ {
+ int index = ipdata.IndexOf("(");
+ int len = ipdata.IndexOf(")") - index;
+ string s = ipdata.Substring(index + 1, len - 1 );
+ char[] splitter = {','};
+ string[] sa = s.Split(splitter);
+ string sipaddr = String.Concat(sa[0],".",sa[1],".",sa[2],".",sa[3]);
+ return IPAddress.Parse(sipaddr);
+ }
+
+ private int get_ip_port (string ipdata)
+ {
+ // find port returned
+ int index = ipdata.IndexOf("(");
+ int len = ipdata.IndexOf(")") - index;
+ string s = ipdata.Substring(index + 1, len - 1 );
+ char[] splitter = {','};
+ string[] sa = s.Split(splitter);
+ return (Convert.ToInt32(sa[4]) * 256 + Convert.ToInt32(sa[5]));
+ }
+
+
+ private void write (NetworkStream sock, string s)
+ {
+ byte[] bytes = Encoding.ASCII.GetBytes(s);
+ sock.Write(bytes, 0, bytes.Length);
+ }
+
+
+ private string read (NetworkStream str, TcpClient c)
+ {
+ StringBuilder buf = new StringBuilder();
+ byte[] bytes = new byte[256];
+
+ do {
+ try {
+ int len = str.Read(bytes, 0, bytes.Length);
+ if (len > 0 ) {
+ buf.Append(Encoding.ASCII.GetString(bytes,0,len));
+ }
+ } catch ( Exception e ) {
+ Console.WriteLine("Network IO problem " + e.ToString());
+ }
+ // Seems if we don't sleep here for a bit, we never read
+ // all the data??? Maybe a Hylafax thing.
+ System.Threading.Thread.Sleep(5);
+
+ } while (str.DataAvailable);
+ return (buf.ToString());
+ }
+
+
+ //public void asyncread (TcpClient sock, string readType)
+ private void asyncread (TcpClient sock, string readType)
+ {
+ gfax.activeNetwork = true;
+ if (readType == "status") {
+ gfax.asyncServerMessageBuffer = "";
+ } else {
+ gfax.asyncFolderMessageBuffer = "";
+ }
+
+ StateObject state = new StateObject();
+ state.client = sock;
+ state.readType = readType;
+ NetworkStream stream = sock.GetStream();
+
+ if (stream.CanRead) {
+ try {
+ IAsyncResult ar = stream.BeginRead (state.buffer, 0, StateObject.BufferSize,
+ new AsyncCallback(myReadCallBack), state);
+ } catch ( Exception e ) {
+ Console.WriteLine("Network IO problem " + e.ToString());
+ }
+ }
+ }
+
+
+ //========================================================
+ //public static void myReadCallBack(IAsyncResult ar )
+ private static void myReadCallBack(IAsyncResult ar )
+ {
+ int numberOfBytesRead;
+ StateObject state = (StateObject) ar.AsyncState;
+ NetworkStream mas = state.client.GetStream();
+ string type = null;
+
+ numberOfBytesRead = mas.EndRead(ar);
+ state.totalBytesRead += numberOfBytesRead;
+
+ //Console.WriteLine("Byes read ---------------> {0}", numberOfBytesRead);
+ if ( numberOfBytesRead > 0) {
+ state.messageBuffer.Append(Encoding.ASCII.GetString(state.buffer, 0, numberOfBytesRead));
+ mas.BeginRead(state.buffer, 0, StateObject.BufferSize,
+ new AsyncCallback(myReadCallBack), state);
+ } else {
+ mas.Close();
+ state.client.Close();
+ //Console.WriteLine("Byes read ---------------> {0}", state.totalBytesRead);
+ //Console.WriteLine("You received the following message : {0} " + state.messageBuffer);
+ if (state.readType == "status") {
+ gfax.asyncServerMessageBuffer = state.messageBuffer.ToString();
+ } else {
+ gfax.asyncFolderMessageBuffer = state.messageBuffer.ToString();
+ }
+ gfax.asyncReadType = state.readType;
+ mas = null;
+ state = null;
+ gfax.activeNetwork = false;
+ }
+ }
+
+ public void job_select (string jobid)
+ {
+ write(mainstream, "JOB " + jobid + "\n");
+ string s = read(mainstream, mainclient);
+ #if DEBUGHYLAFAX
+ Console.WriteLine("[hylafax.select] returned: {0}", s);
+ #endif
+ }
+
+ public void job_kill ()
+ {
+ write (mainstream, "JKILL\n");
+ string s = read(mainstream, mainclient);
+ #if DEBUGHYLAFAX
+ Console.WriteLine("[hylafax.kill] returned: {0}", s);
+ #endif
+ }
+
+ public void job_delete ()
+ {
+ write (mainstream, "JDELE\n");
+ string s = read(mainstream, mainclient);
+ #if DEBUGHYLAFAX
+ Console.WriteLine("[hylafax.delete] returned: {0}", s);
+ #endif
+ }
+
+ public void job_suspend ()
+ {
+ write (mainstream, "JSUSP\n");
+ string s = read(mainstream, mainclient);
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine("[hylafax.suspend] returned: {0}", s);
+ }
+ }
+
+ // Returns
+ // 550 fax000000019.tif: Operation not permitted.
+ //
+ public int deletefile (string name)
+ {
+ write (mainstream, String.Concat("DELE ", "recvq/", name, "\n"));
+ string s = read(mainstream, mainclient);
+ if (s.Substring(0,3) == "550")
+ return(1);
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine("[hylafax.deletefile] returned: {0}", s);
+ }
+ return (0);
+ }
+
+
+ private void job_param (string parms)
+ {
+ write (mainstream, "JPARM " + parms + "\n");
+ string s = read(mainstream, mainclient);
+ #if DEBUGHYLAFAX
+ Console.WriteLine("[hylafax.param] returned: {0}", s);
+ #endif
+ }
+
+ public void job_reset (string parms)
+ {
+ write (mainstream, "JREST " + parms + "\n");
+ string s = read(mainstream, mainclient);
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine("[hylafax.reset] returned: {0}", s);
+ }
+
+ }
+
+
+ private void timezone (string name) // can be "LOCAL" or "GMT"
+ {
+ write (mainstream, "TZONE " + name + "\n");
+ string s = read(mainstream, mainclient);
+ if (Settings.Faxtracing == true) {
+ Console.WriteLine("[hylafax.timezone] returned: {0}", s);
+ }
+ }
+ }
+}
diff --git a/src/main.cs b/src/main.cs
new file mode 100644
index 0000000..e44b897
--- /dev/null
+++ b/src/main.cs
@@ -0,0 +1,243 @@
+// GFAX - Gnome fax application
+// Copyright (C) 2003 - 2008 George A. Farris
+//
+// 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 3 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 Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+namespace gfax {
+ using GLib;
+ using Gtk;
+ using GtkSharp;
+ using Mono.Unix;
+ using System;
+ using System.IO;
+ using System.Collections;
+ using System.Text; //Encoding.ASCII.GetBytes
+ using System.Threading;
+ using System.Diagnostics;
+
+
+
+ public class gfax
+ {
+ // Gfax Global variables ( ya, ya I know)
+ //
+ // list of contacts of type Contact to xmit, we use this everywhere so it is
+ // simpler to make it public and global.
+ public static ArrayList Destinations = new ArrayList();
+ public static DateTime timeToSend;
+ public static bool quitAfterSend = false;
+ public static bool fromSendWizard = false;
+ public static bool sendWizardResolution = false;
+ public static bool sendWizardEmailNotify = false;
+ public static string sendWizardEmailAddress = null;
+ public static string hylafaxPassword = null;
+ public static string ConfigDirectory = null;
+ public static string SpoolDirectory = null;
+ public static bool activeNetwork = false;
+ public static Gnome.AppBar GAppbar = null;
+ public static Gtk.ProgressBar MainProgressBar = null;
+ public static Gtk.TextBuffer GStatusTextBuffer = null;
+ public static Gtk.Window MainWindow = null;
+ public static string asyncFolderMessageBuffer = "";
+ public static string asyncServerMessageBuffer = "";
+ public static string asyncReadType = "";
+
+ public static Efax efax;
+ public static Status Status;
+ public static Pulser Pulser;
+
+ public static string filename = null;
+ public static string[] pargs;
+
+ const bool TOPLEVEL = true;
+
+
+ public static void Main (string[] args)
+ {
+
+ string HOMEDIR = Environment.GetEnvironmentVariable("HOME");
+ string USER = Environment.GetEnvironmentVariable("USER");
+ ConfigDirectory = HOMEDIR + "/.config/gfax";
+ SpoolDirectory = HOMEDIR + "/.local/share/gfax/spool";
+ pargs = args;
+
+ // TODO put this is try/catch
+ if ( !Directory.Exists(ConfigDirectory)) {
+ if ( !Directory.Exists(HOMEDIR + "/.config")) {
+ Directory.CreateDirectory(HOMEDIR + "/.config");
+ }
+ // Move data from old ~/.etc directory
+ if ( Directory.Exists(HOMEDIR + "/.etc/gfax")) {
+ Directory.Move(HOMEDIR + "/.etc/gfax", ConfigDirectory);
+ } else {
+ Directory.CreateDirectory(ConfigDirectory);
+ }
+ }
+ if ( !Directory.Exists(HOMEDIR + "/.local/share/gfax/spool") ) {
+ if ( !Directory.Exists(HOMEDIR + "/.local/share/gfax") ) {
+ if ( !Directory.Exists(HOMEDIR + "/.local/share") ) {
+ if ( !Directory.Exists(HOMEDIR + "/.local") )
+ Directory.CreateDirectory(HOMEDIR + "/.local");
+ Directory.CreateDirectory(HOMEDIR + "/.local/share");
+ }
+ Directory.CreateDirectory(HOMEDIR + "/.local/share/gfax");
+ }
+ Directory.CreateDirectory(HOMEDIR + "/.local/share/gfax/spool");
+ Directory.CreateDirectory(HOMEDIR + "/.local/share/gfax/spool/doneq");
+ Directory.CreateDirectory(HOMEDIR + "/.local/share/gfax/spool/recq");
+ }
+
+ // Clean out the spool/tif directory - incoming faxes
+ if ( !Directory.Exists(HOMEDIR + "/.local/share/gfax/spool/tif")) {
+ Directory.CreateDirectory(HOMEDIR + "/.local/share/gfax/spool/tif");
+ } else {
+ Directory.Delete(HOMEDIR + "/.local/share/gfax/spool/tif/", true);
+ Directory.CreateDirectory(HOMEDIR + "/.local/share/gfax/spool/tif");
+ }
+
+
+
+ // Initialize GETTEXT
+ Catalog.Init ("gfax", Defines.GNOME_LOCALE_DIR);
+
+ // handle command line args ourselves
+ for (int i=0; i < args.Length; i++ ) {
+ //Console.WriteLine("{0} {1}", i, args[i]);
+ switch (args[i])
+ {
+ case "--help" :
+ Console.WriteLine (Catalog.GetString("Gfax help..."));
+ Console.WriteLine ("Gfax spool dir -> {0}", SpoolDirectory);
+ break;
+ case "-f" : // file name is present
+ filename = args[i+1];
+ break;
+ //case "-q" : // immediately quit after sending fax
+ // filename = args[i+1];
+ // break;
+ default:
+ if (File.Exists(args[i]))
+ filename = args[i];
+ break;
+ }
+ }
+
+ try {
+ if ( Settings.RunSetupAtStart ) {
+ // Set some default preferences.
+ Settings.TransmitAgent = "efax";
+ Settings.SendNow = true;
+ Settings.EfaxModemDevice = "ttyS0";
+ Settings.RefreshQueueInterval = 15;
+ Settings.RefreshQueueEnabled = true;
+ }
+ } catch (Exception e) {
+ //TODO HIG love required
+ G_Message gm = new G_Message(
+ Catalog.GetString(
+@"Gconfd cannot find your settings.
+If you are running Gfax immediately
+after an installation, you may have
+to log out and log back in again."), TOPLEVEL);
+ Console.WriteLine("Exception in main.cs {0}", e);
+ Environment.Exit(0);
+ }
+
+ // If we have a file name run the send dialog
+ if (filename != null) {
+ GfaxSend sd = new GfaxSend (filename, args);
+ FileInfo f = new FileInfo(filename);
+
+ // send the faxes
+ if (sd.DoSend) {
+ fromSendWizard = true;
+
+ // Start the fax daemon if efax
+ if (Settings.TransmitAgent == "efax") {
+ efax = new Efax();
+ efax.run_efaxd();
+ }
+
+ Fax.sendfax(filename);
+ // delete the spool file (~.local/share/gfax/spool/D.*)
+ if (File.Exists(String.Concat(SpoolDirectory, "/", f.Name)))
+ File.Delete(String.Concat(SpoolDirectory, "/", f.Name));
+
+ //if (!quitAfterSend) {
+ //Gfax gf = new Gfax (filename, args);
+ //}
+ }
+
+ // delete the spool file that gfaxlpr created if it exists
+ if (File.Exists(String.Concat("/var/spool/gfax/", USER, "/", f.Name)))
+ File.Delete(String.Concat("/var/spool/gfax/", USER, "/", f.Name));
+
+ }else {
+ // check to see if we've run before, if so gfax will be there
+
+ if ( !Directory.Exists("/var/spool/gfax/" + USER)) {
+ Directory.CreateDirectory("/var/spool/gfax/" + USER);
+ }
+
+ FileSystemWatcher watcher = new FileSystemWatcher();
+ watcher.Path = "/var/spool/gfax/" + USER;
+
+ watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
+ | NotifyFilters.FileName | NotifyFilters.DirectoryName;
+ // Only watch text files.
+ watcher.Filter = "*";
+ watcher.Created += new FileSystemEventHandler(TIOnChanged);
+ // Begin watching.
+ watcher.EnableRaisingEvents = true;
+
+ // Start the fax daemon if efax
+ if (Settings.TransmitAgent == "efax") {
+ efax = new Efax();
+ efax.run_efaxd();
+ }
+
+ Gfax gf = new Gfax (filename, args);
+ }
+
+ }
+
+ // Define the event handlers.
+ private static void TIOnChanged(object source, FileSystemEventArgs e)
+ {
+ // Specify what is done when a file is changed, created, or deleted.
+ Console.WriteLine("File---: " + e.FullPath + " " + e.ChangeType);
+ //GfaxSend sd = new GfaxSend ("/home/george/log.txt", pargs);
+
+ quitAfterSend = true;
+
+ ProcessStartInfo pidInfo = new ProcessStartInfo();
+ pidInfo.FileName = "gfax";
+
+ pidInfo.Arguments = String.Concat("-f ",e.FullPath + " " + e.ChangeType);
+
+ if (Settings.Faxtracing == true) {
+ if (Settings.TransmitAgent == "efax") {
+ Console.WriteLine("[Efax.send_init]\n {0}", pidInfo.Arguments);
+ }
+ }
+
+ System.Diagnostics.Process pid = System.Diagnostics.Process.Start(pidInfo);
+ pid.WaitForExit();
+
+
+ }
+
+ }
+}
diff --git a/src/newphonebook.cs b/src/newphonebook.cs
new file mode 100755
index 0000000..1424977
--- /dev/null
+++ b/src/newphonebook.cs
@@ -0,0 +1,187 @@
+// GFAX - Gnome fax application
+// Copyright (C) 2003 - 2008 George A. Farris
+//
+// 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 3 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+//************************************************************************
+// NewPhoneBook class
+//
+// A new phone book druid, should make it easier for people to create
+// new phone books. The old way was a little confusing.
+//
+
+namespace gfax {
+ using Mono.Unix;
+ using System;
+ using System.IO;
+ using GLib;
+ using Gtk;
+ using Gnome;
+ using Glade;
+ using GConf.PropertyEditors;
+ using GtkSharp;
+ using System.Runtime.InteropServices;
+ using System.Collections;
+ using System.Diagnostics;
+ using System.Reflection;
+
+ public class NewPhoneBook
+ {
+ [Glade.Widget] Gtk.Dialog NewPhoneBookDialog;
+ [Glade.Widget] Gnome.Druid NewPhoneBookDruid;
+ [Glade.Widget] Gnome.DruidPage EvoDruidPageStandard;
+ [Glade.Widget] Gnome.DruidPage druidpagestandard12;
+ [Glade.Widget] Gtk.RadioButton GfaxRadioButton;
+ [Glade.Widget] Gtk.RadioButton EvolutionRadioButton;
+ [Glade.Widget] Gtk.RadioButton DatabaseRadioButton;
+ [Glade.Widget] Gtk.RadioButton LDAPRadioButton;
+ [Glade.Widget] Gtk.Entry NewPhoneBookNameEntry;
+ [Glade.Widget] Gtk.TreeView EvolutionTreeView;
+
+ // Properties
+ ArrayList booknames;
+ string phonebooktype;
+
+ Gtk.ListStore store;
+ G_ListView view;
+
+ const int COLUMN_0 = 0;
+ const int COLUMN_1 = 1;
+
+ public NewPhoneBook ()
+ {
+ booknames = new ArrayList();
+
+ Glade.XML xml = new Glade.XML (null, "gfax.glade","NewPhoneBookDialog",null);
+ xml.Autoconnect (this);
+
+ GfaxRadioButton.Active = true;
+
+ EvolutionRadioButton.Sensitive = true;
+ // turn these off until somewhere near supported
+ DatabaseRadioButton.Visible = false;
+ LDAPRadioButton.Visible = false;
+
+ store = new ListStore(
+ typeof (Boolean),
+ typeof (string));
+
+ view = new G_ListView(EvolutionTreeView, store);
+
+ view.AddColumnTitleToggle(Catalog.GetString("Use"), 0, COLUMN_0);
+ view.AddColumnTitle(Catalog.GetString("Phone Book"), 0, COLUMN_1);
+
+ EvolutionTreeView.HeadersVisible = true;
+
+ NewPhoneBookDruid.ShowAll();
+ }
+
+ public ArrayList PhoneBookNames
+ {
+ get { return booknames; }
+ }
+
+ public string PhoneBookType
+ {
+ get { return phonebooktype; }
+ }
+
+ public void Run()
+ {
+ NewPhoneBookDialog.Run();
+ }
+
+ private void on_NewPhoneBookDialog_delete_event (object o, DeleteEventArgs args)
+ {
+ NewPhoneBookDialog.Hide();
+ NewPhoneBookDialog.Dispose();
+ args.RetVal = true;
+ }
+
+ private void on_NewPhoneBookDruidEdge_finish (object o, Gnome.FinishClickedArgs args)
+ {
+
+ if (GfaxRadioButton.Active) {
+ phonebooktype = "gfax";
+ booknames.Add( NewPhoneBookNameEntry.Text );
+ } else if (EvolutionRadioButton.Active) {
+ phonebooktype = "evolution";
+
+ Gtk.TreeIter iter = new Gtk.TreeIter();
+
+ // Get the first row.
+ store.GetIterFirst(out iter);
+
+ try {
+ if ( (bool)store.GetValue(iter, 0) ) { // if use is true (toggle set)
+ booknames.Add( (string)store.GetValue(iter, 1) );
+ }
+ } catch (Exception e) {}
+
+ // get the rest of the rows
+ while (store.IterNext(ref iter)) {
+
+ try {
+ if ( (bool)store.GetValue(iter, 0) ) {
+ booknames.Add( (string)store.GetValue(iter, 1) );
+ }
+ }
+ catch (Exception e) {}
+ }
+ }
+ else if (DatabaseRadioButton.Active)
+ phonebooktype = "sql";
+ else if (LDAPRadioButton.Active)
+ phonebooktype = "ldap";
+
+ NewPhoneBookDialog.Hide();
+ NewPhoneBookDialog.Dispose();
+ }
+
+ private void on_NewPhoneBookDruid_cancel (object o, EventArgs args)
+ {
+ NewPhoneBookDialog.Hide();
+ NewPhoneBookDialog.Dispose();
+ }
+
+ private void on_druidpagestandard12_next (object o, Gnome.NextClickedArgs args)
+ {
+ // we're on the gfax phone book enter name pages
+ // skip to finish on next signal
+ NewPhoneBookDruid.Page = EvoDruidPageStandard;
+ }
+
+
+ private void on_BookDruidPageStandard_next (object o, Gnome.NextClickedArgs args)
+ {
+ // skip next page if active
+ if (EvolutionRadioButton.Active) {
+ NewPhoneBookDruid.Page = druidpagestandard12;
+
+ EdsPhoneBooks eds = new EdsPhoneBooks();
+ ArrayList ebooks = new ArrayList();
+ ebooks = eds.GetPhoneBooks();
+
+ Gtk.TreeIter iter = new Gtk.TreeIter();
+
+ IEnumerator enu = ebooks.GetEnumerator();
+ while ( enu.MoveNext() ) {
+ iter = store.AppendValues(false, enu.Current);
+ EvolutionTreeView.Model = store;
+ }
+ }
+ }
+ }
+}
diff --git a/src/phonebook.cs b/src/phonebook.cs
new file mode 100755
index 0000000..fbb8621
--- /dev/null
+++ b/src/phonebook.cs
@@ -0,0 +1,386 @@
+// GFAX - Gnome fax application
+// Copyright (C) 2003 - 2008 George A. Farris
+//
+// 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 3 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 Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+namespace gfax {
+ using Mono.Unix;
+ using System;
+ using System.IO;
+ using System.Text;
+ using System.Collections;
+
+ // Phone book that holds multiple numbers
+ public class Phonebook
+ {
+ public string Name; //Name book is called by
+ public string Path; //Filename including path
+ public string Type; // Type of phone book (gfax,gcard etc)
+ }
+
+ // Individual contact in phone book
+ public class GfaxContact
+ {
+ public string Organization;
+ public string PhoneNumber;
+ public string ContactPerson;
+ }
+
+ public class Phonetools
+ {
+ public static Phonebook[] get_phonebooks ()
+ {
+ StreamReader infile = null;
+ string buf;
+ bool migrate = false;
+
+ Phonebook[] pbooks = null;
+
+ // TODO get location from gconf
+ string HOMEDIR = Environment.GetEnvironmentVariable("HOME");
+ string PHONEBOOKS = gfax.ConfigDirectory + "/phonebooks";
+
+ #if DEBUG
+ Console.WriteLine("[Phonebook] Reading phonebook file");
+ #endif
+
+ int numberOfBooks = get_number_of_books();
+ pbooks = new Phonebook[numberOfBooks];
+
+ if (numberOfBooks == 0) {
+ return (pbooks);
+ }
+
+
+ try {
+ infile = File.OpenText(PHONEBOOKS);
+ int i = 0;
+
+ while ( (buf = infile.ReadLine()) != null ) {
+ switch (buf.Trim()) {
+ case "<book>" :
+ // TODO more robust file reading
+ Phonebook c = new Phonebook();
+ c.Name = strip_tag(infile.ReadLine(), "name");
+ c.Type = strip_tag(infile.ReadLine(), "type");
+ c.Path = strip_tag(infile.ReadLine(), "path");
+
+ // Migrate from old location
+ if (c.Type == "gfax") {
+ if (Path.GetDirectoryName(c.Path) == HOMEDIR + "/.etc/gfax") {
+ c.Path = gfax.ConfigDirectory + "/" + Path.GetFileName(c.Path);
+ migrate = true;
+ }
+ }
+
+ pbooks[i++] = c;
+ continue;
+ }
+ }
+
+ infile.Close();
+ if (migrate)
+ save_phonebooks(pbooks);
+ return pbooks;
+ }
+ catch (Exception e) {
+ Console.WriteLine("get_phonebooks - Exception in phonebook.cs {0}", e);
+ return pbooks;
+ }
+
+ }
+
+ // save or create phonebooks files
+ public static void save_phonebooks (Phonebook[] pbooks)
+ {
+ StreamWriter outfile;
+
+ // TODO get location from gconf
+ string PHONEBOOKS = gfax.ConfigDirectory + "/phonebooks";
+
+ try {
+ outfile = File.CreateText(PHONEBOOKS);
+ } catch (Exception e) {
+ Console.WriteLine("Exception in phonebook.cs {0}", e);
+ return;
+ }
+
+ outfile.WriteLine("<gfax>");
+ Console.WriteLine("Len :{0}", pbooks.Length);
+ foreach (Phonebook p in pbooks) {
+ outfile.WriteLine(" <book>");
+ outfile.WriteLine(" <name>" + p.Name + "</name>");
+ outfile.WriteLine(" <type>" + p.Type + "</type>");
+ outfile.WriteLine(" <path>" + p.Path + "</path>");
+ outfile.WriteLine(" </book>");
+ }
+ outfile.WriteLine("</gfax>");
+ outfile.Close();
+ }
+
+ public static void delete_book (string book)
+ {
+ StreamReader infile = null;
+ string buf;
+ string deleteme = null;
+ Phonebook[] pbooks = null;
+
+ // make array size less 1 because we're deleting 1
+ pbooks = new Phonebook[get_number_of_books() - 1];
+
+ // TODO get location from gconf
+ string PHONEBOOKS = gfax.ConfigDirectory + "/phonebooks";
+ string type = "";
+ try {
+ infile = File.OpenText(PHONEBOOKS);
+ int i = 0;
+
+ // iterate through the phonebook file and skip past book to delete
+ while ( (buf = infile.ReadLine()) != null ) {
+ switch (buf.Trim()) {
+ case "<book>" :
+ // TODO more robust file reading
+ Phonebook c = new Phonebook();
+ c.Name = strip_tag(infile.ReadLine(), "name");
+ c.Type = strip_tag(infile.ReadLine(), "type");
+ c.Path = strip_tag(infile.ReadLine(), "path");
+
+ if (c.Name != book)
+ pbooks[i++] = c;
+ else {
+ deleteme = c.Path;
+ type = "gfax";
+ }
+ continue;
+ }
+ }
+ infile.Close();
+ save_phonebooks(pbooks);
+
+ if (type == "gfax")
+ if (File.Exists(deleteme))
+ File.Delete(deleteme);
+ }
+ catch (Exception e) {
+ Console.WriteLine("delete_book - Exception in phonebook.cs {0}", e);
+ return;
+ }
+ }
+
+ // Create or add the new phone book to the "phonebooks" file.
+ public static void add_book (Phonebook p)
+ {
+ StreamReader infile = null;
+ string buf;
+ Phonebook[] pbooks = null;
+
+ // make array plus 1 because we're adding 1
+ pbooks = new Phonebook[get_number_of_books() + 1];
+
+ // TODO get location from gconf
+ string PHONEBOOKS = gfax.ConfigDirectory + "/phonebooks";
+
+ if (p.Type == "gfax") {
+ // add default path if not specified
+ if (Path.GetDirectoryName(p.Path) == "")
+ p.Path = gfax.ConfigDirectory + p.Path;
+ }
+ // Create the file.
+ if (!File.Exists(PHONEBOOKS)) {
+ FileStream fs = File.Create(PHONEBOOKS);
+ fs.Close();
+ }
+
+ int i = 0;
+ try {
+ infile = File.OpenText(PHONEBOOKS);
+
+ while ( (buf = infile.ReadLine()) != null ) {
+ switch (buf.Trim()) {
+ case "<book>" :
+ // TODO more robust file reading
+ Phonebook c = new Phonebook();
+ c.Name = strip_tag(infile.ReadLine(), "name");
+ c.Type = strip_tag(infile.ReadLine(), "type");
+ c.Path = strip_tag(infile.ReadLine(), "path");
+
+ pbooks[i++] = c;
+ continue;
+ }
+ }
+ infile.Close();
+ }
+ catch (Exception e) {
+ // TODO catch file ops error
+ Console.WriteLine("add_book - Exception in phonebook.cs {0}", e);
+ return;
+ }
+
+
+ pbooks[i++] = p; // add the new book
+ save_phonebooks(pbooks);
+ }
+
+ // save a list (ArrayList) of contacts
+ public static void save_phonebook_items (string book, ArrayList contacts)
+ {
+ Phonebook p;
+ StreamWriter outfile;
+
+ p = get_book_from_name(book);
+
+ if (p.Type == "gfax") {
+ // TODO error reporting
+ try { outfile = File.CreateText(p.Path); }
+ catch (Exception e) {
+ Console.WriteLine("save_phonebook_items - Exception in phonebook.cs {0}", e);
+ return;
+ }
+
+ outfile.WriteLine("#Gfax phone book");
+
+ IEnumerator enu = contacts.GetEnumerator();
+ while ( enu.MoveNext() ) {
+ GfaxContact c = new GfaxContact();
+ c = (GfaxContact)enu.Current;
+ outfile.WriteLine("{0}:{1}:{2}",c.PhoneNumber,c.ContactPerson,c.Organization);
+ }
+ outfile.Close();
+ }
+ }
+
+ public static StreamReader open_phonebook (Phonebook p)
+ {
+ StreamReader infile = null;
+
+ // If it doesn't exist yet just return
+ if (!File.Exists(p.Path))
+ return(null);
+
+ try {
+ infile = File.OpenText(p.Path);
+ }
+ catch (Exception e) {
+ Console.WriteLine("open_phonebook - Exception in phonebook.cs {0}", e);
+ return null;
+ }
+ return infile;
+ }
+
+ public static ArrayList get_contacts (Phonebook p)
+ {
+ string buf = null;
+ string[] sa;
+ //char[] ca = {':',':',':'}; delete me
+
+ ArrayList records = new ArrayList();
+ StreamReader fp = null;
+
+ // TODO add popup message
+ if ( p.Type == "gfax" ) {
+ fp = open_phonebook(p);
+ if (fp == null) {
+ Console.WriteLine(Catalog.GetString("Can't open file : {0}"), p.Path);
+ return records;
+ }
+
+ while ( (buf = fp.ReadLine()) != null ) {
+ buf.Trim();
+
+ if (buf[0] == '#')
+ continue;
+ else {
+ sa = buf.Split(':');
+ GfaxContact contact = new GfaxContact();
+ contact.PhoneNumber = sa[0];
+ contact.ContactPerson = sa[1];
+ contact.Organization = sa[2];
+ records.Add(contact);
+ }
+ }
+
+ fp.Close();
+ }
+
+ if ( p.Type == "evolution" ) {
+ EdsPhoneBooks eds = new EdsPhoneBooks();
+ ArrayList ebooks = new ArrayList();
+ ebooks = eds.GetPhoneBooks();
+
+ IEnumerator enu = ebooks.GetEnumerator();
+ while ( enu.MoveNext() ) {
+ if ((string)enu.Current == p.Name) {
+ records = eds.GetContacts((string)enu.Current);
+ }
+ }
+ }
+
+ return records;
+
+ }
+
+ public static string strip_tag (string line, string tag)
+ {
+ string bt = "<" + tag + ">";
+ string et = "</" + tag + ">";
+ string s = (line.Trim()).Replace(bt, "");
+ return s.Replace(et, "");
+ }
+
+ private static int get_number_of_books ()
+ {
+ StreamReader infile = null;
+ string buf;
+ int count = 0;
+
+ // TODO get location from gconf
+ string PHONEBOOKS = gfax.ConfigDirectory + "/phonebooks";
+
+ if (!File.Exists(PHONEBOOKS))
+ return(0);
+
+ try {
+ infile = File.OpenText(PHONEBOOKS);
+ } catch (Exception e) {
+ Console.WriteLine("get_number_of_books - Exception in phonebook.cs {0}", e);
+ return 0;
+ }
+
+ // how many phone books do we have, Trim() removes white space
+ while ( (buf = infile.ReadLine()) != null ) {
+ if ( buf.Trim() == "<book>") {
+ count++;
+ }
+ }
+ infile.Close();
+ return count;
+ }
+
+ public static Phonebook get_book_from_name(string name)
+ {
+ Phonebook[] books;
+ //int count; delete me
+
+ //count = get_number_of_books(); delete me
+ books = get_phonebooks();
+
+ foreach (Phonebook p in books) {
+ if (name == p.Name)
+ return p;
+ }
+ return null;
+ }
+ }
+}
diff --git a/src/sendphonebook.cs b/src/sendphonebook.cs
new file mode 100755
index 0000000..cc1dc62
--- /dev/null
+++ b/src/sendphonebook.cs
@@ -0,0 +1,242 @@
+// GFAX - Gnome fax application
+// Copyright (C) 2003 - 2008 George A. Farris
+//
+// 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 3 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 Library 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+namespace gfax {
+ using Mono.Unix;
+ using System;
+ using System.IO;
+ using GLib;
+ using Gtk;
+ using Gnome;
+ using Glade;
+ using GtkSharp;
+ using System.Runtime.InteropServices;
+ using System.Collections;
+ using System.Reflection;
+
+ //************************************************************************
+ // GfaxSendPhoneBook class
+ //
+ //
+ //
+ public class GfaxSendPhoneBook
+ {
+ Gtk.Dialog phbd;
+ Gtk.TreeView book, list;
+ //Gtk.TreeModel book_model; delete me
+ Gtk.ListStore book_store, list_store;
+ G_ListView bs, ls;
+ Glade.XML gsxml;
+
+ [Glade.Widget] Gtk.Dialog PhbookDialog;
+ [Glade.Widget] Gtk.TreeView book_treeview;
+ [Glade.Widget] Gtk.TreeView list_treeview;
+
+ const int COLUMN_0 = 0;
+ const int COLUMN_1 = 1;
+ const int COLUMN_2 = 2;
+ const int ALL_COLUMNS = -1;
+ //string parent; delete me
+ Phonebook[] myPhoneBooks;
+
+ public GfaxSendPhoneBook (Glade.XML xml, string myparent)
+ {
+
+ //Phonebook[] pb; delete me
+
+ //gxml = xml;
+ //parent = myparent; delete me
+ myPhoneBooks = Phonetools.get_phonebooks();
+
+ if ( myPhoneBooks == null ) {
+ G_Message m = new G_Message(Catalog.GetString("You don't have any phone books yet."));
+ m = null;
+ return;
+ }
+
+ gsxml = new Glade.XML (null, "send-druid.glade","PhbookDialog",null);
+ gsxml.Autoconnect (this);
+
+ // Get the widget so we can manipulate it
+ //phbd = (Gtk.Dialog) gsxml.GetWidget("PhbookDialog");
+ //book = (Gtk.TreeView) gsxml.GetWidget("book_treeview");
+ //list = (Gtk.TreeView) gsxml.GetWidget("list_treeview");
+ phbd = PhbookDialog;
+ book = book_treeview;
+ list = list_treeview;
+
+ book.Selection.Changed += new EventHandler (on_book_treeview_selection);
+
+ phbd.Resizable = true;
+ book_store = new ListStore(typeof(string));
+ book.HeadersVisible = false;
+ book.Selection.Mode = SelectionMode.Multiple;
+
+ bs = new G_ListView(book, book_store);
+ // Got have a column title or things won't show up
+ bs.AddColumnTitle(Catalog.GetString("Phone books"), 0, COLUMN_0);
+
+
+ list_store = new ListStore(
+ typeof (string),
+ typeof (string),
+ typeof (string));
+
+ ls = new G_ListView(list, list_store);
+ ls.AddColumnTitle(Catalog.GetString("Organization"), 0, COLUMN_0);
+ ls.AddColumnTitle(Catalog.GetString("Phone Number"), 1, COLUMN_1);
+ ls.AddColumnTitle(Catalog.GetString("Contact"), 2, COLUMN_2);
+ list.HeadersVisible = true;
+ list.Selection.Mode = SelectionMode.Multiple;
+
+ // populate the list
+ foreach (Phonebook p in myPhoneBooks)
+ bs.AddTextToRow(p.Name);
+
+ phbd.Run();
+ }
+
+ // load the phone book
+ // Since we have SelectionMode.Multiple turned on we have to
+ // jump through these hoops in GTK-2.0 to get a selection
+ private void on_book_treeview_selection(object o, EventArgs args)
+ {
+ Gtk.TreeIter iter = new Gtk.TreeIter();
+ //Value value = new Value(); delete me
+ string selectionText = null;
+
+ book_store.GetIterFirst(out iter);
+ if ( book.Selection.IterIsSelected(iter)) {
+ selectionText = (string)book_store.GetValue(iter, 0);
+ }
+
+ while (book_store.IterNext(ref iter)) {
+ if ( book.Selection.IterIsSelected(iter)) {
+ selectionText = (string)book_store.GetValue(iter, 0);
+ }
+ }
+
+ // Ok now we can finally load the phone book
+ foreach (Phonebook p in myPhoneBooks)
+ if (p.Name == selectionText)
+ load_phone_book(p);
+
+ }
+
+ // If we double click the phonebook.
+ private void on_book_treeview_row_activated(object o, RowActivatedArgs args)
+ {
+ /*
+ ArrayList bsdest = new ArrayList();
+ ArrayList contacts = new ArrayList();
+
+ bsdest = bs.GetSelections(COLUMN_0);
+ if ( bsdest.Count > 0 ) {
+ IEnumerator enu = bsdest.GetEnumerator();
+ while ( enu.MoveNext() ) {
+ foreach (Phonebook p in myPhoneBooks)
+ if (p.Name == (string)enu.Current)
+ contacts = Phonetools.get_contacts(p);
+
+ // add contacts to global desinations
+ IEnumerator enuc = contacts.GetEnumerator();
+ while ( enuc.MoveNext() )
+ gfax.Destinations.Add((Contact)enuc.Current);
+ }
+ }
+
+ phbd.Destroy();
+ */
+ }
+
+
+ private void on_list_treeview_row_activated(object o, RowActivatedArgs args)
+ {
+ }
+
+ private void on_ok_button_clicked(object o, EventArgs args)
+ {
+ ArrayList lsdest = new ArrayList();
+ ArrayList bsdest = new ArrayList();
+ ArrayList contacts = new ArrayList();
+
+ lsdest = ls.GetSelections(ALL_COLUMNS);
+
+ // if there are indiviual entries don't do entire phonebooks
+ if (lsdest.Count > 0) {
+ IEnumerator enu = lsdest.GetEnumerator();
+ while ( enu.MoveNext() ) {
+ GfaxContact c = new GfaxContact();
+ c.Organization = (string)enu.Current;
+ enu.MoveNext();
+ c.PhoneNumber = (string)enu.Current;
+ enu.MoveNext();
+ c.ContactPerson = (string)enu.Current;
+ gfax.Destinations.Add(c);
+ }
+ }
+ else {
+ bsdest = bs.GetSelections(COLUMN_0);
+ if ( bsdest.Count > 0 ) {
+ IEnumerator enu = bsdest.GetEnumerator();
+ while ( enu.MoveNext() ) {
+ foreach (Phonebook p in myPhoneBooks)
+ if (p.Name == (string)enu.Current)
+ contacts = Phonetools.get_contacts(p);
+
+ // add contacts to global desinations
+ if (contacts.Count > 0) {
+ IEnumerator enuc = contacts.GetEnumerator();
+ while ( enuc.MoveNext() )
+ gfax.Destinations.Add((GfaxContact)enuc.Current);
+ }
+ }
+ }
+ }
+
+ phbd.Destroy();
+ }
+
+ // loads the phone book into list_store
+ private void load_phone_book(Phonebook p)
+ {
+ ArrayList contacts = null;
+
+ // Clear the list_store
+ list_store.Clear();
+
+ contacts = Phonetools.get_contacts(p);
+ if (contacts == null)
+ return;
+
+ IEnumerator enu = contacts.GetEnumerator();
+ while ( enu.MoveNext() ) {
+ GfaxContact c = new GfaxContact();
+ c = (GfaxContact)enu.Current;
+ ls.AddTextToRow(c.Organization, c.PhoneNumber, c.ContactPerson);
+ }
+ }
+
+ private void on_cancel_button_clicked(object o, EventArgs args)
+ {
+ phbd.Destroy();
+ }
+
+ }
+
+}