diff options
51 files changed, 27543 insertions, 0 deletions
@@ -0,0 +1,2 @@ +George Farris <farrisg@shaw.ca> - Main author +Johannes Rohr <johannes@rohr.org> - German translation @@ -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 +-------------- @@ -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. @@ -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 @@ -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. @@ -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 @@ -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 Binary files differnew file mode 100644 index 0000000..e0cb102 --- /dev/null +++ b/data/icons/16x16/gfax.png 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 Binary files differnew file mode 100644 index 0000000..49c3db3 --- /dev/null +++ b/data/icons/48x48/gfax.png 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> @@ -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 "popup" 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 "Host Name" should be set to "localhost". +</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"><b>Server</b></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 "9" 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"><b><big>Fax Transport Agent</big></b></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"><b><big>Phone Information</big></b></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"><b><big>Facsimile Viewer Program</big></b></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 "localhost" 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"><b><big>Hylafax Setup</big></b></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"><b><big>Efax Setup</big></b></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"><b><big>E-Mail Notification</big></b></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"><b><big>Transmit Properties</big></b></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"><b><big>Fax Properties</big></b></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"><b>Alter facsimile job parameters</b></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 <maxdials> calls in attempting to send the facsimile. Once <maxdials> 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 <enter>.</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 <enter>.</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"><b>New fax information</b></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"><b>Facsimile Job Details</b></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"><b><big>Current Phone Books</big></b></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"><b><big>Edit Phone book</big></b></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/'/'/g; # ' + s/"/"/g; # " + s/&/&/g; + + return $_; +} + +sub entity_decode +{ + local ($_) = @_; + + s/'/'/g; # ' + s/"/"/g; # " + s/</</g; + s/>/>/g; + s/&/&/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; + "ed_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/'/'/g; # ' + s/"/"/g; # " + s/</</g; + s/>/>/g; + s/&/&/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 """ if $_ == 34; + return "&" if $_ == 38; + return "'" if $_ == 39; + return "<" if $_ == 60; + return ">" 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/\"(([^\"]|\\\")*[^\\\"])\"/"\"" . "ed_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(); + } + + } + +} |