summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomas Bzatek <tbzatek@users.sourceforge.net>2008-06-07 20:34:49 +0200
committerTomas Bzatek <tbzatek@users.sourceforge.net>2008-06-07 20:34:49 +0200
commitecde167da74c86bc047aaf84c5e548cf65a5da98 (patch)
treea015dfda84f28a65811e3aa0d369f8f211ec8c60
downloadtuxcmd-0.6.36.tar.xz
-rw-r--r--COPYING339
-rw-r--r--INSTALL62
-rw-r--r--Makefile120
-rw-r--r--README61
-rw-r--r--UChecksum.pas475
-rw-r--r--UChecksumDruid.pas629
-rw-r--r--UChmod.pas236
-rw-r--r--UChown.pas198
-rw-r--r--UColumns.pas221
-rw-r--r--UConfig.pas1132
-rw-r--r--UConnectionManager.pas293
-rw-r--r--UConnectionProperties.pas334
-rw-r--r--UCopyMove.pas78
-rw-r--r--UCore.pas2785
-rw-r--r--UCoreClasses.pas349
-rw-r--r--UCoreUtils.pas1821
-rw-r--r--UDirDelete.pas100
-rw-r--r--UEngines.pas1140
-rw-r--r--UFileAssoc.pas358
-rw-r--r--UFileTypeSettings.pas901
-rw-r--r--UGTKLoader.pas62
-rw-r--r--UGlibC_compat.pas256
-rw-r--r--UGlibThreads.pas111
-rw-r--r--UGnome.pas1274
-rw-r--r--ULocale.pas297
-rw-r--r--ULogin.pas146
-rw-r--r--UMain.pas6128
-rw-r--r--UMounterPrefs.pas565
-rw-r--r--UNewDir.pas80
-rw-r--r--UOverwrite.pas173
-rw-r--r--UPreferences.pas822
-rw-r--r--UProgress.pas142
-rw-r--r--UProperties.pas144
-rw-r--r--URemoteWait.pas106
-rw-r--r--URunFromVFS.pas260
-rw-r--r--USearch.pas1030
-rw-r--r--USelect.pas151
-rw-r--r--USetPassword.pas105
-rw-r--r--USplitFile.pas115
-rw-r--r--USymlink.pas89
-rw-r--r--UTestPlugin.pas181
-rw-r--r--UToolTips.pas401
-rw-r--r--UViewer.pas451
-rw-r--r--libgtk_kylix/GTKClasses.pas174
-rw-r--r--libgtk_kylix/GTKConsts.pas259
-rw-r--r--libgtk_kylix/GTKControls.pas1050
-rw-r--r--libgtk_kylix/GTKDialogs.pas248
-rw-r--r--libgtk_kylix/GTKExtCtrls.pas707
-rw-r--r--libgtk_kylix/GTKForms.pas874
-rw-r--r--libgtk_kylix/GTKMenus.pas530
-rw-r--r--libgtk_kylix/GTKPixbuf.pas214
-rw-r--r--libgtk_kylix/GTKStdCtrls.pas1008
-rw-r--r--libgtk_kylix/GTKText.pas167
-rw-r--r--libgtk_kylix/GTKUtils.pas212
-rw-r--r--libgtk_kylix/GTKView.pas1376
-rw-r--r--pixmaps/emblem_symbolic_link_png.inc29
-rw-r--r--pixmaps/gnome_dev_cdrom_16_png.inc73
-rw-r--r--pixmaps/gnome_dev_floppy_16_png.inc73
-rw-r--r--pixmaps/gnome_dev_harddisk_16_png.inc73
-rw-r--r--pixmaps/gnome_dev_removable_usb_16_png.inc73
-rw-r--r--pixmaps/gnome_mime_application_zip_16_png.inc73
-rw-r--r--pixmaps/gnome_mime_x_directory_smb_share_16_png.inc73
-rw-r--r--pixmaps/stock_folder_16_png.inc73
-rw-r--r--pixmaps/stock_lock_16_png.inc73
-rw-r--r--pixmaps/stock_lock_48_png.inc585
-rw-r--r--pixmaps/stock_new_16_png.inc73
-rw-r--r--pixmaps/stock_up_one_dir_16_png.inc73
-rw-r--r--translations/UTranslation_CZ.pas1256
-rw-r--r--translations/UTranslation_DE.pas1236
-rw-r--r--translations/UTranslation_EN.pas1267
-rw-r--r--translations/UTranslation_ES.pas1253
-rw-r--r--translations/UTranslation_FR.pas1254
-rw-r--r--translations/UTranslation_HU.pas1256
-rw-r--r--translations/UTranslation_IT.pas1255
-rw-r--r--translations/UTranslation_PL.pas1108
-rw-r--r--translations/UTranslation_RU.pas1254
-rw-r--r--translations/UTranslation_SR.pas1261
-rw-r--r--translations/UTranslation_SV.pas1252
-rw-r--r--translations/UTranslation_UA.pas1265
-rw-r--r--tuxcmd.conf32
-rw-r--r--tuxcmd.dpr89
-rw-r--r--tuxcmd.resbin0 -> 32 bytes
-rw-r--r--vfs/ModuleLoader.pas156
-rw-r--r--vfs/UVFSCore.pas1075
-rw-r--r--vfs/common/vfs_types.h114
-rw-r--r--vfs/null_plugin/COPYING339
-rw-r--r--vfs/null_plugin/Makefile22
-rw-r--r--vfs/null_plugin/README15
-rw-r--r--vfs/null_plugin/null_plugin.c357
l---------vfs/null_plugin/vfs_types.h1
-rw-r--r--vfs/uVFSprototypes.pas246
91 files changed, 50247 insertions, 0 deletions
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..d511905
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ 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.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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 Lesser General
+Public License instead of this License.
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000..212ef34
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,62 @@
+INSTALL INSTRUCTIONS
+--------------------
+
+Here are the basic instructions, what you need to do if you want to compile
+Txu Commander.
+
+Quick instructions: Type make help to see list of available targets.
+
+
+There are two compilers supported: FreePascal and Kylix.
+
+FreePascal prerequisities
+-------------------------
+Install the FreePascal package from your distribution or grab the binary
+snapshot from the official web site (http://freepascal.org/). Make sure
+the /etc/fpc.cfg file contains valid configuration (consult the manual first) or
+you may encounter file not found errors.
+
+
+Kylix prerequisities
+--------------------
+First of all you will need to install Borland Kylix. This project is designed
+for use with version 3 Open Edition, but it should compile also with other
+variations (Professional, Enterprise).
+Then you will need the sources of 'gtk2 for pascal' project, they can be
+downloaded from the project site on SourceForge
+(http://gtk2forpascal.sourceforge.net/) or directly from our site
+(http://tuxcmd.sourceforge.net/).
+Extract the downloaded sources (tuxcmd-x.x.x.tar.bz2). Then you need to edit
+the Makefile file. You have to specify real path to Kylix 3 installation
+(it means top-level directory here, where the bin, help, lib
+and source directories are located) - this is the KYLIXPREFIX variable.
+For GTK2FORPASCAL_LIBDIR, specify the path to extracted gtk2 for pascal package
+sources. These are enough informations required to compile the sources.
+The correct make command is 'make kylix'
+
+
+
+At last, you will need basic development utilities, such as GNU make and
+install and gcc & g++ with system development libraries.
+
+Since some of the VFS modules are written in C/C++ and require development
+headers installed in the system, you may experience difficulties with their
+installation. There's no configure script at this moment, only the gnome-vfs
+module requires unusual packages (libgnomevfs2).
+
+So you have configured the sources and you are ready to compilation. Just type
+make or gmake in the directory where is the Makefile file located. It will
+compile the application and all VFS modules. There should not be any problems;
+if some occurs, please check if you have specified correct paths or if you have
+Kylix installed correctly. Also check if you have all required development
+headers installed in your system. To make the application without the modules,
+type 'make tuxcmd' and to make the modules separately run 'make modules'.
+
+To install the application, type 'make install'. You need to have write
+permissions to the target directories, so you probably must be root to do this.
+You can also run 'make clean' to clean the sources and 'make uninstall' to
+safely remove the installed application and all modules.
+
+There are no support for any desktop environment yet, so don't expect any new
+icons in your application menu.
+
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..10ff1a5
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,120 @@
+# Makefile -- Tux Commander build system
+#
+# Copyright (C) 2008 Tomas Bzatek <tbzatek@users.sourceforge.net>
+# Check for updates on tuxcmd.sourceforge.net
+#
+# 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 or
+# 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
+
+
+# Specify paths
+DESTDIR=/usr
+
+# following paths are optional; needed only for Kylix compilation
+KYLIXPREFIX=/usr/local/kylix3
+GTK2FORPASCAL_LIBDIR=./gtk2
+
+### End of user writeable section
+
+
+
+INSTALL=install -c
+INSTALL_DATA = ${INSTALL} -m 644
+CLEAN_OBJS=*.o *.a *.d *.s *.ppu *.dcu *.rst *~ *.~* core tuxcmd fpcver.inc
+LIB_SUFFIX=`if test \`uname -m\` = x86_64; then echo 64; fi`
+
+
+# -Ct must be disabled here, causes unneeded crashes
+# -CR and -Cr must be disabled here, causes range check errors with gnome-power-manager
+# -Cg generates internal compiler errors on i386
+CFLAGS= -vweh -Un -Ci -Co
+
+
+
+tuxcmd::
+ echo "const" > fpcver.inc
+ echo " ConstFPCVersionString = '`fpc -iW`';" >> fpcver.inc
+ echo " ConstFPCDateString = '`fpc -iD`';" >> fpcver.inc
+ echo " ConstFPCCompilerOSString = '`fpc -iSO`';" >> fpcver.inc
+ echo " ConstFPCCompilerHostProcessorString = '`fpc -iSP`';" >> fpcver.inc
+ echo " ConstFPCTargetOSString = '`fpc -iTO`';" >> fpcver.inc
+ echo " ConstFPCTargetProcessorString = '`fpc -iTP`';" >> fpcver.inc
+ fpc -Mdelphi $(CFLAGS) \
+ -d__FPC__ \
+ -Fu./libgtk_kylix -Fu./translations -Fu./vfs \
+ tuxcmd.dpr
+
+debug: CFLAGS += -g
+debug: tuxcmd
+
+
+kylix::
+ $(KYLIXPREFIX)/bin/dcc -DKYLIX \
+ -U$(GTK2FORPASCAL_LIBDIR)/glib -U$(GTK2FORPASCAL_LIBDIR)/pango \
+ -U$(GTK2FORPASCAL_LIBDIR)/atk -U$(GTK2FORPASCAL_LIBDIR)/gtk+/gtk \
+ -U$(GTK2FORPASCAL_LIBDIR)/gtk+/gdk -U$(GTK2FORPASCAL_LIBDIR)/gtk+/gdk-pixbuf \
+ -U$(KYLIXPREFIX)/lib \
+ -U./libgtk_kylix -U./translations -U./vfs ./tuxcmd.dpr
+
+
+modules::
+ (cd "vfs" && $(MAKE) `echo $@ | sed s/-recursive//` ) || exit 1;
+
+modules_install:
+ (cd "vfs" && $(MAKE) install "$(DESTDIR)") || exit 1;
+
+
+
+clean cleandir:
+ rm -f $(CLEAN_OBJS)
+ ( cd vfs && rm -f $(CLEAN_OBJS) )
+ ( cd libgtk_kylix && rm -f $(CLEAN_OBJS) )
+ ( cd translations && rm -f $(CLEAN_OBJS) )
+
+
+tuxcmd_install:
+ if [ ! -d $(DESTDIR) ]; then mkdir -p $(DESTDIR); fi;
+ if [ ! -d $(DESTDIR)/bin ]; then mkdir -p $(DESTDIR)/bin; fi;
+ if [ ! -d $(DESTDIR)/share ]; then mkdir -p $(DESTDIR)/share; fi;
+ if [ ! -d $(DESTDIR)/share/doc ]; then mkdir -p $(DESTDIR)/share/doc; fi;
+ if [ ! -d $(DESTDIR)/share/doc/tuxcmd ]; then mkdir -p $(DESTDIR)/share/doc/tuxcmd; fi;
+ if [ ! -d $(DESTDIR)/lib$(LIB_SUFFIX) ]; then mkdir -p $(DESTDIR)/lib$(LIB_SUFFIX); fi;
+ if [ ! -d $(DESTDIR)/lib$(LIB_SUFFIX)/tuxcmd ]; then mkdir -p $(DESTDIR)/lib$(LIB_SUFFIX)/tuxcmd; fi;
+ $(INSTALL) ./tuxcmd $(DESTDIR)/bin
+ $(INSTALL_DATA) ./COPYING $(DESTDIR)/share/doc/tuxcmd
+ $(INSTALL_DATA) ./README $(DESTDIR)/share/doc/tuxcmd
+
+uninstall:
+ if [ -f $(DESTDIR)/bin/tuxcmd ]; then rm -f $(DESTDIR)/bin/tuxcmd; fi;
+ if [ -d $(DESTDIR)/share/doc/tuxcmd ]; then rm -Rf $(DESTDIR)/share/doc/tuxcmd; fi;
+ if [ -d $(DESTDIR)/lib$(LIB_SUFFIX)/tuxcmd ]; then rm -Rf $(DESTDIR)/lib$(LIB_SUFFIX)/tuxcmd; fi;
+
+help::
+ @echo "Tux Commander build system"
+ @echo
+ @echo "Following targets are available:"
+ @echo
+ @echo " tuxcmd Build tuxcmd with FreePascal [default]"
+ @echo " kylix Build tuxcmd with Kylix (needs paths setup in Makefile)"
+ @echo " install Install tuxcmd to the system (DESTDIR overrides default path)"
+ @echo " uninstall Remove tuxcmd from the system (DESTDIR overrides default path)"
+ @echo " clean Cleanup the build structure"
+ @echo " modules Build modules (in vfs/)"
+ @echo " modules_install Install modules to the system"
+ @echo
+ @exit 0
+
+install: tuxcmd_install
+
+all: tuxcmd
diff --git a/README b/README
new file mode 100644
index 0000000..2bf4805
--- /dev/null
+++ b/README
@@ -0,0 +1,61 @@
+Tux Commander development release
+ Version: 0.6.36
+ Release date: 2008-Jun-01
+
+Copyright (c) 2008 Tomas Bzatek <tbzatek@users.sourceforge.net>
+http://tuxcmd.sourceforge.net
+
+Please check project site for more details
+
+
+
+Introduction
+------------
+
+Tux Commander is a windowed file manager with 2 panels side by side similar to
+popular Total Commander or Midnight Commander file managers. The main goal of
+this project is to create powerful and user friendly file manager for Unix
+operating systems.
+
+General features:
+ * Graphical application, uses GTK2 windowing toolkit
+ * Two directory panels side by side (vertical)
+ * Tabbed interface, buttons for quick access to favorite places
+ * Configurable mounter bar for quick access to removable media and
+ network shares
+ * Multilingual user interface
+ * Basic VFS (Virtual File System) support, allowing you to browse archives
+ and network places
+ * Extendable via plugin system, several VFS modules available
+ in the distribution
+ * Portable, no installation required, usable right after the extraction
+ * Designed for GNOME and XFCE desktop environments while preserving complete
+ independency (libraries are loaded dynamically when available)
+ * Extension-based file type actions (associations)
+ * Threaded file operations
+ * Large files (> 4GB) support
+ * Main application written in Object Pascal language (with FreePascal
+ as default compiler), plugins are written in C/C++ language
+
+
+Using Object Pascal language might be considered as limiting factor, however
+we recently switched to FreePascal compiler, solving many compatibility issues.
+Also, the x86_64 port was introduced and is officially supported as well as
+the i386 platform. Kylix compatibility will be still maintained though.
+This project uses Pascal GTK2 bindings from the gtk2 for pascal project,
+which are now part of FreePascal v2.0 distribution.
+
+
+
+Install
+----------
+For installation and compilation instructions please follow the INSTALL file.
+
+
+Testing
+----------
+Tux Commander needs testing, I would be pleased if you will send any comments
+or bug reports. When sending a bug report, please run "tuxcmd --debug"
+and attach the log to your e-mail.
+
+
diff --git a/UChecksum.pas b/UChecksum.pas
new file mode 100644
index 0000000..895f7ec
--- /dev/null
+++ b/UChecksum.pas
@@ -0,0 +1,475 @@
+(*
+ Tux Commander - UChecksum - Checksum dialog
+ Copyright (C) 2004 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit UChecksum;
+
+interface
+
+uses
+ glib2, gdk2, gtk2, SysUtils, Types, Classes, Variants, GTKControls, GTKForms, GTKStdCtrls, GTKExtCtrls, GTKConsts, GTKView, GTKText,
+ UEngines;
+
+type
+ TFChecksum = class(TGTKDialog)
+ BottomBox, HBox: TGTKHBox;
+ CheckButton: TGTKButton;
+ ProgressBar: TGTKProgressBar;
+ HPaned: TGTKHPaned;
+ FileList: TGTKListView;
+ CommentTextView: TGTKTextView;
+ FileListScrolledWindow, CommentTextViewScrolledWindow: TGTKScrolledWindow;
+ StatLabel: TGTKLabel;
+ procedure FormCreate(Sender: TObject); override;
+ procedure FormDestroy(Sender: TObject);
+ procedure FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+ procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
+ procedure FormResponse(Sender: TObject; const ResponseID: integer);
+ procedure FormShow(Sender: TObject);
+ procedure CheckButtonClick(Sender: TObject);
+ private
+ MD5Present, SFVPresent, CommentOpen, Processing, Stop: boolean;
+ procedure ConstructViews;
+ procedure ProcessLine(s, Path: string; const IsMD5: boolean);
+ procedure ListViewCellDataFunc(Sender: TObject; tree_view: PGtkTreeView; tree_column : PGtkTreeViewColumn; cell : PGtkCellRenderer; tree_model : PGtkTreeModel; iter : PGtkTreeIter);
+ function CompareFunc(Sender: TObject; var model: PGtkTreeModel; var a, b: PGtkTreeIter): integer;
+ procedure GoProcess;
+ procedure MarkAsBad(const FileName: string);
+ public
+ Engine: TPanelEngine;
+ DataList: TList;
+ AListView: TGTKListView;
+ List: TList;
+ function ProcessFile(FileName: string): boolean;
+ end;
+
+var
+ FChecksum: TFChecksum;
+
+implementation
+
+uses ULocale, UCoreUtils, Libc, UCore, DateUtils;
+
+type TFileListItem = class
+ CRC: LongWord;
+ MD5: string;
+ Name, FullPath: string;
+ Status: byte;
+ IsMD5: boolean;
+ Size: Int64;
+ end;
+
+
+procedure TFChecksum.FormCreate(Sender: TObject);
+begin
+ WindowTypeHint := whNormal;
+ List := TList.Create;
+ MD5Present := False;
+ SFVPresent := False;
+ CommentOpen := False;
+ Processing := False;
+ Stop := False;
+ OnDestroy := FormDestroy;
+ SetDefaultSize(750, 350);
+ Caption := LANGVerifyChecksumsCaption;
+ Buttons := [mbClose];
+ StatLabel := TGTKLabel.Create(Self);
+ StatLabel.Caption := LANGChecksumNotChecked;
+ StatLabel.UseMarkup := True;
+ BottomBox := TGTKHBox.Create(Self);
+ BottomBox.Homogeneous := False;
+ CheckButton := TGTKButton.Create(Self);
+ CheckButton.Caption := LANGCheckButtonCaptionCheck;
+ CheckButton.SetSizeRequest(90, -1);
+ ProgressBar := TGTKProgressBar.Create(Self);
+ ProgressBar.Text := '0 %';
+ BottomBox.AddControlEx(StatLabel, False, False, 5);
+ BottomBox.AddControlEx(ProgressBar, True, True, 5);
+ BottomBox.AddControlEx(CheckButton, False, False, 5);
+ HBox := TGTKHBox.Create(Self);
+ HPaned := TGTKHPaned.Create(Self);
+ ConstructViews;
+ FileListScrolledWindow := TGTKScrolledWindow.Create(Self);
+ FileListScrolledWindow.HorizScrollBarPolicy := sbAutomatic;
+ FileListScrolledWindow.VertScrollBarPolicy := sbAutomatic;
+ FileListScrolledWindow.ShadowType := stShadowIn;
+ FileListScrolledWindow.AddControl(FileList);
+ CommentTextViewScrolledWindow := TGTKScrolledWindow.Create(Self);
+ CommentTextViewScrolledWindow.HorizScrollBarPolicy := sbAutomatic;
+ CommentTextViewScrolledWindow.VertScrollBarPolicy := sbAutomatic;
+ CommentTextViewScrolledWindow.ShadowType := stShadowIn;
+ CommentTextViewScrolledWindow.AddControl(CommentTextView);
+ HPaned.Child1 := FileListScrolledWindow;
+ HPaned.Child2 := CommentTextViewScrolledWindow;
+ ClientArea.AddControlEx(HPaned, True, True, 3);
+ ClientArea.AddControlEx(BottomBox, False, True, 0);
+ OnKeyDown := FormKeyDown;
+ OnCloseQuery := FormCloseQuery;
+ OnResponse := FormResponse;
+ OnShow := FormShow;
+ CheckButton.OnClick := CheckButtonClick;
+
+ if CheckButton.Enabled then CheckButton.SetFocus
+ else ActionArea.SetFocus;
+end;
+
+procedure TFChecksum.ConstructViews;
+var Column: TGTKTreeViewColumn;
+ i: integer;
+begin
+ FileList := TGTKListView.CreateTyped(Self, True, [lcPointer]);
+ FileList.SelectionMode := smSingle;
+ FileList.Tooltip := LANGFileListTooltip;
+ FileList.CellDataFunc := ListViewCellDataFunc;
+ FileList.CompareFunc := CompareFunc;
+ FileList.RulesHint := True;
+ Column := FileList.Columns.Add;
+ Column.Caption := LANGFilenameColumnCaption;
+ Column.FixedWidth := 350;
+ Column.SortID := 0;
+ Column := FileList.Columns.Add;
+ Column.Caption := 'CRC-32';
+ Column.FixedWidth := 80;
+ for i := 1 to 2 do begin
+ FileList.Columns[i - 1].SizingMode := smFixed;
+ FileList.Columns[i - 1].Resizable := True;
+ FileList.Columns[i - 1].SetProperty('ypad', 0);
+ FileList.Columns[i - 1].SetProperty('yalign', 0.5);
+ end;
+ CommentTextView := TGTKTextView.Create(Self);
+ CommentTextView.ReadOnly := True;
+ CommentTextView.CursorVisible := True;
+end;
+
+procedure TFChecksum.FormDestroy(Sender: TObject);
+var i: integer;
+begin
+ Application.ProcessMessages;
+ try
+ if List.Count > 0 then
+ for i := 0 to List.Count - 1 do
+ TFileListItem(List[i]).Free;
+ List.Free;
+ except end;
+end;
+
+procedure TFChecksum.FormShow(Sender: TObject);
+begin
+ CheckButton.Enabled := FileList.Items.Count > 0;
+ if MD5Present and (not SFVPresent) and (CommentTextView.TextBuffer.LineCount = 1)
+ then HPaned.Position := Width - 90;
+end;
+
+procedure TFChecksum.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
+begin
+ Stop := True;
+end;
+
+procedure TFChecksum.FormResponse(Sender: TObject; const ResponseID: integer);
+begin
+ Stop := True;
+end;
+
+procedure TFChecksum.FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+begin
+{ case Key of
+ GDK_RETURN, GDK_KP_ENTER: ModalResult := mbOK;
+ GDK_ESCAPE: ModalResult := mbCancel;
+ end; }
+end;
+
+function TFChecksum.ProcessFile(FileName: string): boolean;
+const ChksumBlockSize = 32768; // Maximum of PByteArray
+var FD: TEngineFileDes;
+ Error, Count, i, Start: integer;
+ Buffer: Pointer;
+ s: string;
+ Stat: PDataItemSL;
+ IsMD5: boolean;
+begin
+ Result := False;
+ Stat := Engine.GetFileInfoSL(FileName);
+ if (Stat.Size > 128*1024) then begin
+ i := integer(Application.MessageBox(Format(LANGTheFileSYouAreTryingToOpenIsQuiteBig, [ANSIToUTF8(ExtractFileName(FileName))]), [mbYes, mbNo], mbWarning, mbNone, mbNo));
+ if (i = integer(mbNo)) or (i = 251) then Exit;
+ end;
+ IsMD5 := (Pos('MD5', ANSIUpperCase(FileName)) > 0) or ((Pos('SFV', ANSIUpperCase(FileName)) = 0) and (Pos('SUM', ANSIUpperCase(FileName)) > 0));
+ if IsMD5 then MD5Present := True
+ else SFVPresent := True;
+ if MD5Present and SFVPresent then FileList.Columns[1].Caption := 'CRC32/MD5'
+ else if MD5Present then FileList.Columns[1].Caption := 'MD5 sum'
+ else if SFVPresent then FileList.Columns[1].Caption := 'CRC-32';
+
+ try
+ Buffer := Libc.malloc(ChksumBlockSize);
+ Libc.memset(Buffer, 0, ChksumBlockSize);
+ except
+ Application.MessageBox(LANGAnErrorOccuredWhileInitializingMemoryBlock, [mbOK], mbError, mbNone, mbOK);
+ Exit;
+ end;
+ FD := Engine.OpenFile(FileName, omRead, Error);
+ if Error <> 0 then begin
+ Application.MessageBox(Format(LANGAnErrorOccuredWhileOpeningFileSS, [ANSIToUTF8(ExtractFileName(FileName)), ANSIToUTF8(GetErrorString(Error))]), [mbOK], mbError, mbNone, mbOK);
+ Libc.free(Buffer);
+ Exit;
+ end;
+ s := '';
+ CommentOpen := True;
+ repeat
+ Count := Engine.ReadFile(FD, Buffer, ChksumBlockSize, Error);
+ if Error <> 0 then begin
+ Application.MessageBox(Format(LANGAnErrorOccuredWhileReadingFileSS, [ANSIToUTF8(ExtractFileName(FileName)), ANSIToUTF8(GetErrorString(Error))]), [mbOK], mbError, mbNone, mbOK);
+ Engine.CloseFile(FD);
+ Libc.free(Buffer);
+ Exit;
+ end;
+ // processing begins
+ Start := 1;
+ if Count > 0 then
+ for i := 0 to Count - 1 do
+ if (PByteArray(Buffer)^[i] in [13, 10]) or (i = Count - 1) then begin
+ s := s + Copy(PChar(Buffer), Start, i - Start + 1 + Ord(i = Count - 1));
+ Start := i + 2;
+ if PByteArray(Buffer)^[i] in [13, 10] then begin
+ ProcessLine(s, ExtractFilePath(FileName), IsMD5);
+ s := '';
+ end;
+ end;
+ // processing ends
+ until Count < ChksumBlockSize;
+ if Length(s) > 0 then ProcessLine(s, ExtractFilePath(FileName), IsMD5);
+
+ CommentOpen := False;
+ Engine.CloseFile(FD);
+ Libc.free(Buffer);
+ Result := True;
+end;
+
+procedure TFChecksum.ProcessLine(s, Path: string; const IsMD5: boolean);
+var Item: TFileListItem;
+ ListItem: TGTKListItem;
+ S1, S2: string;
+ i: integer;
+ Stat: PDataItemSL;
+begin
+ TrimCRLFESC(s);
+ if Length(s) < 1 then Exit;
+ if s[1] = ';' then begin
+ if CommentOpen then begin
+ CommentOpen := False;
+ if CommentTextView.TextBuffer.LineCount > 1 then begin
+ s1 := '';
+ for i := 1 to 50 do s1 := s1 + Chr($2212);
+ CommentTextView.TextBuffer.InsertText(s1 + #13);
+ end;
+ end;
+ CommentTextView.TextBuffer.InsertText(ANSIToUTF8(Copy(s, 2, Length(s) - 1) + #13));
+ end else begin
+ Trim(s);
+ if Pos(' ', s) = 0 then Exit;
+ Item := TFileListItem.Create;
+ Item.Status := 0;
+ Item.IsMD5 := IsMD5;
+ if not IsMD5 then begin // CRC32
+ s1 := Trim(Copy(s, 1, LastDelimiter(' ', s) - 1));
+ s2 := Trim(Copy(s, LastDelimiter(' ', s) + 1, Length(s) - LastDelimiter(' ', s)));
+ try
+ Item.CRC := StrToInt64('$' + s2);
+ except
+ Exit;
+ end;
+ Item.Name := ExtractFileName(s1);
+ Item.FullPath := IncludeTrailingPathDelimiter(Path) + s1;
+ end else begin // MD5
+ s1 := Trim(Copy(s, 1, Pos(' ', s) - 1));
+ s2 := Trim(Copy(s, Pos(' ', s) + 1, Length(s) - Pos(' ', s)));
+ try
+ Item.MD5 := LowerCase(s1);
+ except
+ Exit;
+ end;
+ s2 := ExcludeTrailingPathDelimiter(s2);
+ if Pos('/', s2) > 0 then s2 := Copy(s2, LastDelimiter('/', s2) + 1, Length(s2) - LastDelimiter('/', s2));
+ Item.Name := ExtractFileName(s2);
+ Item.FullPath := IncludeTrailingPathDelimiter(Path) + s2;
+ end;
+ Stat := Engine.GetFileInfoSL(Item.FullPath);
+ if Assigned(Stat) then Item.Size := Stat.Size
+ else Item.Size := 0;
+ List.Add(Item);
+ ListItem := FileList.Items.Add;
+ ListItem.Data := Item;
+ if not Application.GTKVersion_2_0_5_Up then ListItem.SetValue(0, Item);
+ end;
+end;
+
+procedure TFChecksum.ListViewCellDataFunc(Sender: TObject; tree_view: PGtkTreeView; tree_column : PGtkTreeViewColumn; cell : PGtkCellRenderer; tree_model : PGtkTreeModel; iter : PGtkTreeIter);
+const StatusStr : array[0..3] of string = ('?', 'OK', 'BAD', 'N/A');
+var Data: TFileListItem;
+ Path: PGtkTreePath;
+begin
+ if not Application.GTKVersion_2_0_5_Up then gtk_tree_model_get(tree_model, iter, 0, @Data, -1)
+ else begin
+ Path := gtk_tree_model_get_path(tree_model, iter);
+ if not Assigned(Path) then Exit;
+ (Sender as TGTKListView).ConvertPathToChild(Path);
+ Data := List[gtk_tree_path_get_indices(Path)^];
+ gtk_tree_path_free(Path);
+ end;
+ case gtk_tree_view_column_get_sort_column_id(tree_column) of
+ 0: g_object_set(cell, 'text', PChar(Format('[%s] %s', [StatusStr[Data.Status], ANSIToUTF8(Data.Name)])), nil);
+ -1: if not Data.IsMD5 then g_object_set(cell, 'text', PChar('0x' + IntToHex(Data.CRC, 8)), nil)
+ else g_object_set(cell, 'text', PChar(Data.MD5), nil);
+ end;
+end;
+
+function TFChecksum.CompareFunc(Sender: TObject; var model: PGtkTreeModel; var a, b: PGtkTreeIter): integer;
+var Data1, Data2: TFileListItem;
+ Path: PGtkTreePath;
+begin
+ Result := 0;
+ if not Application.GTKVersion_2_0_5_Up then begin
+ gtk_tree_model_get(model, a, 0, @Data1, -1);
+ gtk_tree_model_get(model, b, 0, @Data2, -1);
+ end else begin
+ Path := gtk_tree_model_get_path(model, a);
+ if not Assigned(Path) then Exit;
+ Data1 := List[gtk_tree_path_get_indices(Path)^];
+ gtk_tree_path_free(Path);
+ Path := gtk_tree_model_get_path(model, b);
+ if not Assigned(Path) then Exit;
+ Data2 := List[gtk_tree_path_get_indices(Path)^];
+ gtk_tree_path_free(Path);
+ end;
+ if (Sender as TGTKView).SortColumnID = 0 then Result := CompareTextsEx(PChar(Data1.Name), PChar(Data2.Name));
+end;
+
+procedure TFChecksum.CheckButtonClick(Sender: TObject);
+begin
+ if not Processing then GoProcess
+ else Stop := True;
+end;
+
+procedure TFChecksum.GoProcess;
+const ChksumBlockSize = 65536*4;
+var i, Error, Count: integer;
+ FD: TEngineFileDes;
+ Buffer: Pointer;
+ MaxSize, OldPos: Int64;
+ Data: TFileListItem;
+ Time1, Time2: TDateTime;
+ CRC: LongWord;
+ MD5Hash: THash_MD5;
+begin
+ if List.Count = 0 then Exit;
+ CheckButton.Caption := LANGCheckButtonCaptionStop;
+ Stop := False;
+ Processing := True;
+ UnselectAll(AListView, DataList);
+ StatLabel.Caption := LANGChecksumChecking;
+ StatLabel.UseMarkup := True;
+
+ MaxSize := 0;
+ OldPos := 0;
+ for i := 0 to List.Count - 1 do Inc(MaxSize, TFileListItem(List[i]).Size);
+ ProgressBar.Max := MaxSize;
+ ProgressBar.Value := 0;
+ Application.ProcessMessages;
+ try
+ Buffer := Libc.malloc(ChksumBlockSize);
+ Libc.memset(Buffer, 0, ChksumBlockSize);
+ except
+ Application.MessageBox(LANGAnErrorOccuredWhileInitializingMemoryBlock, [mbOK], mbError, mbNone, mbOK);
+ Exit;
+ end;
+
+ Time1 := Now;
+ for i := 0 to List.Count - 1 do begin
+ if Stop then Break;
+ if i > 0 then Inc(OldPos, TFileListItem(List[i - 1]).Size);
+ ProgressBar.Value := OldPos;
+ ProgressBar.Text := Format('%d %%', [Trunc(ProgressBar.Fraction * 100)]);
+ FileList.Items[i].Selected := True;
+ FileList.Items[i].SetCursor(0, False, False, 0, 0);
+ Application.ProcessMessages;
+ Data := List[i];
+ CRC := $FFFFFFFF;
+ MD5Hash := nil;
+ if Data.IsMD5 then MD5Hash := THash_MD5.Create;
+ FD := Engine.OpenFile(Data.FullPath, omRead, Error);
+ if Error <> 0 then begin
+ Data.Status := 3;
+ Continue;
+ end;
+ repeat
+ Count := Engine.ReadFile(FD, Buffer, ChksumBlockSize, Error);
+ if Error <> 0 then begin
+ Data.Status := 3;
+ Engine.CloseFile(FD);
+ Continue;
+ end;
+ if not Data.IsMD5 then CRC := CRC32(CRC, Buffer, Count)
+ else MD5Hash.Calc(Buffer^, Count);
+ ProgressBar.Value := ProgressBar.Value + Count;
+ ProgressBar.Text := Format('%d %%', [Trunc(ProgressBar.Fraction * 100)]);
+ Application.ProcessMessages;
+ until (Count < ChksumBlockSize) or Stop;
+ if Stop then Break;
+ Engine.CloseFile(FD);
+ if not Data.IsMD5 then Data.Status := Ord(not ((not CRC) = Data.CRC)) + 1 else begin
+ MD5Hash.Done;
+ Data.Status := Ord(AnsiCompareText(Data.MD5, MD5Hash.GetKeyStrH) <> 0) + 1;
+ MD5Hash.Free;
+ end;
+ if Data.Status in [2, 3] then MarkAsBad(Data.FullPath);
+ end;
+ Time2 := Now;
+ DebugMsg([Format('Checksum processing: %d:%3d = %.3f MB/s', [SecondOf(Time2 - Time1), MillisecondOf(Time2 - Time1),
+ (MaxSize / (SecondOf(Time2 - Time1) + MillisecondOf(Time2 - Time1) / 1000)) / (1024 * 1024)])]);
+ FileList.Items[List.Count - 1].RedrawRow;
+ Libc.free(Buffer);
+ ProgressBar.Fraction := 1;
+ CheckButton.Caption := LANGCheckButtonCaptionCheck;
+ if Stop then StatLabel.Caption := LANGChecksumInterrupted else begin
+ Error := 0;
+ if List.Count > 0 then
+ for i := 0 to List.Count - 1 do
+ if TFileListItem(List[i]).Status <> 1 then Inc(Error);
+ StatLabel.Caption := Format(LANGChecksumDOK, [Round(100 * (List.Count - Error) / List.Count)]);
+ end;
+ StatLabel.UseMarkup := True;
+ Stop := False;
+ Processing := False;
+ ActionArea.SetFocus;
+end;
+
+procedure TFChecksum.MarkAsBad(const FileName: string);
+var i: integer;
+begin
+ if DataList.Count > 0 then
+ for i := 0 to DataList.Count - 1 do
+ if (not PDataItem(DataList[i])^.IsDir) and (not PDataItem(DataList[i])^.UpDir) and
+ (AnsiCompareText(Trim(PDataItem(DataList[i])^.AName), ExtractFileName(FileName)) = 0) then
+ begin
+ PDataItem(DataList[i])^.Selected := True;
+ AListView.Items[i].RedrawRow;
+ end;
+end;
+
+end.
+
diff --git a/UChecksumDruid.pas b/UChecksumDruid.pas
new file mode 100644
index 0000000..81266f6
--- /dev/null
+++ b/UChecksumDruid.pas
@@ -0,0 +1,629 @@
+(*
+ Tux Commander - UChecksumDruid - Checksum calculation druid
+ Copyright (C) 2004 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit UChecksumDruid;
+
+interface
+
+uses
+ glib2, gdk2, gtk2, SysUtils, Types, Classes, Variants, GTKControls, GTKForms, GTKStdCtrls, GTKExtCtrls, GTKConsts,
+ GTKView, GTKText, GTKUtils,
+ UEngines;
+
+type
+ TFChecksumDruid = class(TGTKDialog)
+ CancelButton, BackButton, ForwardButton: TGTKButton;
+ ButtonBox: TGTKHButtonBox;
+ TitleLabel, Page1Label, Page4Label, FilenameLabel, Page6Label, Page7Label, ProcessingLabel, Page6Spacer, ErrorLabel: TGTKLabel;
+ TitleLabelBox, PageAreaColor, LeftSpacer, Page2Color, Page3Color, Page4Color, Page5Color, Page6Color, LeftSpacer7: TGTKEventBox;
+ Page1, FileNameHBox, SeparateFileCheckHBox, Page7, ProgressHBox, ErrorTextViewHBox: TGTKHBox;
+ Page2, Page3, Page4, Page5, Page6: TGTKEventBox;
+ DruidArea, PageArea, Page2ClientArea, Page3ClientArea, Page5ClientArea, Page6ClientArea: TGTKVBox;
+ FileNameEntry: TGTKEntry;
+ SeparateFileCheckBox: TGTKCheckButton;
+ SFVRadioButton, MD5RadioButton: TGTKRadioButton;
+ Progress: TGTKProgressBar;
+ ErrorLabelScrolledWindow: TGTKScrolledWindow;
+ procedure FormCreate(Sender: TObject); override;
+ procedure FormDestroy(Sender: TObject);
+ procedure FormResponse(Sender: TObject; const ResponseID: integer);
+ procedure CancelButtonClick(Sender: TObject);
+ procedure BackButtonClick(Sender: TObject);
+ procedure ForwardButtonClick(Sender: TObject);
+ procedure FileNameEntryChanged(Sender: TObject);
+ procedure SeparateFileCheckBoxToggled(Sender: TObject);
+ procedure FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+ private
+ ColorFG, ColorBG, ColorGray: PGdkColor;
+ CurrentPage: integer;
+ Processing, Stop, StopBreak: boolean;
+ Buffer: Pointer;
+ FileDes: TEngineFileDes;
+ BufferPos: integer;
+ procedure CreatePages;
+ procedure SetCurrentPage(const Num: integer; const GoingForward: boolean);
+ procedure Process;
+ function ProcessFile(const FName: string; const IsItSFV: boolean; var HashString: string): boolean;
+ procedure CheckStop;
+ procedure WriteLine(const FName, CheckedFName, HashString: string; const IsItSFV, CreateFile, CloseFile: boolean);
+ procedure WriteSFVComment(const FName: string);
+ public
+ Engine: TPanelEngine;
+ FileNames: TStringList;
+ DirName: string;
+ end;
+
+const NumPages = 7;
+
+var
+ FChecksumDruid: TFChecksumDruid;
+
+implementation
+
+uses ULocale, UCoreUtils, Libc, UCore, DateUtils, UConfig, StrUtils;
+
+
+procedure TFChecksumDruid.FormCreate(Sender: TObject);
+begin
+ CurrentPage := 0;
+ Processing := False;
+ Stop := False;
+ StopBreak := False;
+ Buffer := nil;
+ BufferPos := 0;
+ SetDefaultSize(400, 210);
+ Caption := LANGCreateChecksumsCaption;
+ OnDestroy := FormDestroy;
+ OnResponse := FormResponse;
+ FileNames := TStringList.Create;
+ ShowSeparator := False;
+ Buttons := [];
+ ActionArea.SetSizeRequest(0, 0);
+ DruidArea := TGTKVBox.Create(Self);
+ DruidArea.BorderWidth := 2;
+ ClientArea.AddControlEx(DruidArea, True, True, 0);
+ CancelButton := TGTKButton.CreateFromStock(Self, 'gtk-cancel');
+ CancelButton.OnClick := CancelButtonClick;
+ BackButton := TGTKButton.CreateFromStock(Self, 'gtk-go-back');
+ BackButton.OnClick := BackButtonClick;
+ ForwardButton := TGTKButton.CreateFromStock(Self, 'gtk-go-forward');
+ ForwardButton.OnClick := ForwardButtonClick;
+ ButtonBox := TGTKHButtonBox.Create(Self);
+ ButtonBox.Layout := blEnd;
+ ButtonBox.Spacing := 10;
+ ButtonBox.BorderWidth := 5;
+ ButtonBox.AddControlEx(CancelButton, False, False, 0);
+ ButtonBox.AddControlEx(BackButton, False, False, 0);
+ ButtonBox.AddControlEx(ForwardButton, False, False, 0);
+ ClientArea.AddControlEndEx(ButtonBox, False, False, 0);
+ ColorFG := GetDefaultForegroundColor(3);
+ ColorBG := GetDefaultBackgroundColor(3);
+ ColorGray := GetDefaultBackgroundColor(2);
+ TitleLabel := TGTKLabel.Create(Self);
+ TitleLabelBox := TGTKEventBox.Create(Self);
+ TitleLabelBox.AddControl(TitleLabel);
+ TitleLabelBox.BorderWidth := 0;
+ TitleLabel.SetAlignment(0, 0.5);
+ TitleLabel.SetPadding(5, 5);
+ TitleLabel.SetForegroundColor(ColorFG);
+ TitleLabelBox.SetBackgroundColor(ColorBG);
+ DruidArea.AddControlEx(TitleLabelBox, False, False, 0);
+ PageAreaColor := TGTKEventBox.Create(Self);
+ PageAreaColor.SetBackgroundColor(ColorGray);
+ PageArea := TGTKVBox.Create(Self);
+ PageAreaColor.AddControl(PageArea);
+ DruidArea.AddControlEx(PageAreaColor, True, True, 0);
+
+ CreatePages;
+
+ SetCurrentPage(1, True);
+ OnKeyDown := FormKeyDown;
+end;
+
+procedure TFChecksumDruid.FormDestroy(Sender: TObject);
+begin
+ FileNames.Free;
+end;
+
+procedure TFChecksumDruid.FormResponse(Sender: TObject; const ResponseID: integer);
+begin
+ Stop := True;
+end;
+
+procedure TFChecksumDruid.FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+begin
+// if Key = GDK_ESCAPE then ModalResult := mbCancel;
+ if (Key = GDK_RETURN) or (Key = GDK_KP_ENTER) then ForwardButtonClick(Sender);
+end;
+
+procedure TFChecksumDruid.CreatePages;
+begin
+ Page1 := TGTKHBox.Create(Self);
+ Page1.Homogeneous := False;
+ LeftSpacer := TGTKEventBox.Create(Self);
+ LeftSpacer.SetBackgroundColor(ColorBG);
+ LeftSpacer.SetSizeRequest(100, -1);
+ Page1Label := TGTKLabel.Create(Self);
+ Page1Label.LineWrap := True;
+ Page1Label.SetAlignment(0.5, 0.5);
+ Page1Label.Caption := LANGCCHKSUMPage1Text;
+ Page1.AddControlEx(LeftSpacer, False, False, 0);
+ Page1.AddControlEx(Page1Label, True, True, 0);
+
+ Page2 := TGTKEventBox.Create(Self);
+ Page2.SetBackgroundColor(0, 0, 0);
+ Page2Color := TGTKEventBox.Create(Self);
+ Page2Color.BorderWidth := 1;
+ Page2Color.SetBackgroundColor(ColorGray);
+ Page2.AddControl(Page2Color);
+ Page2ClientArea := TGTKVBox.Create(Self);
+ Page2Color.AddControl(Page2ClientArea);
+ SFVRadioButton := TGTKRadioButton.Create(Self);
+ SFVRadioButton.Caption := LANGCCHKSUMSFVFile;
+ MD5RadioButton := TGTKRadioButton.Create(Self);
+ MD5RadioButton.Caption := LANGCCHKSUMMD5sumFile;
+ MD5RadioButton.SetRadioGroup(SFVRadioButton);
+ SFVRadioButton.Checked := True;
+ Page2ClientArea.AddControlEx(SFVRadioButton, False, False, 3);
+ Page2ClientArea.AddControlEx(MD5RadioButton, False, False, 3);
+ Page2ClientArea.BorderWidth := 30;
+
+ Page3 := TGTKEventBox.Create(Self);
+ Page3.SetBackgroundColor(0, 0, 0);
+ Page3Color := TGTKEventBox.Create(Self);
+ Page3Color.BorderWidth := 1;
+ Page3Color.SetBackgroundColor(ColorGray);
+ Page3.AddControl(Page3Color);
+ Page3ClientArea := TGTKVBox.Create(Self);
+ Page3Color.AddControl(Page3ClientArea);
+ FilenameLabel := TGTKLabel.Create(Self);
+ FilenameLabel.Caption := LANGCCHKSUMFileName;
+ FilenameLabel.UseUnderline := True;
+ FileNameEntry := TGTKEntry.Create(Self);
+ FileNameEntry.Text := 'checksums.sfv';
+ FileNameEntry.SetSizeRequest(215, -1);
+ FileNameEntry.OnChanged := FileNameEntryChanged;
+ FilenameLabel.FocusControl := FileNameEntry;
+ SeparateFileCheckBox := TGTKCheckButton.CreateWithLabel(Self, LANGCCHKSUMCreateSeparateChecksumFiles);
+ SeparateFileCheckBox.OnToggled := SeparateFileCheckBoxToggled;
+ Page3ClientArea.BorderWidth := 30;
+ FileNameHBox := TGTKHBox.Create(Self);
+ FileNameHBox.Homogeneous := False;
+ FileNameHBox.AddControlEx(FilenameLabel, False, False, 5);
+ FileNameHBox.AddControlEx(FileNameEntry, False, False, 5);
+ Page3ClientArea.AddControlEx(FileNameHBox, False, False, 0);
+ SeparateFileCheckHBox := TGTKHBox.Create(Self);
+ SeparateFileCheckHBox.Homogeneous := False;
+ SeparateFileCheckHBox.AddControlEx(SeparateFileCheckBox, False, False, 20);
+ SeparateFileCheckHBox.AddControlEx(TGTKLabel.Create(Self), True, True, 0);
+ Page3ClientArea.AddControlEx(SeparateFileCheckHBox, False, False, 5);
+
+ Page4 := TGTKEventBox.Create(Self);
+ Page4.SetBackgroundColor(0, 0, 0);
+ Page4Color := TGTKEventBox.Create(Self);
+ Page4Color.BorderWidth := 1;
+ Page4Color.SetBackgroundColor(ColorGray);
+ Page4.AddControl(Page4Color);
+ Page4Label := TGTKLabel.Create(Self);
+ Page4Label.LineWrap := True;
+ Page4Label.SetAlignment(0.5, 0.5);
+ Page4Label.Caption := LANGCCHKSUMPage4Text;
+ Page4Color.AddControl(Page4Label);
+
+ Page5 := TGTKEventBox.Create(Self);
+ Page5.SetBackgroundColor(0, 0, 0);
+ Page5Color := TGTKEventBox.Create(Self);
+ Page5Color.BorderWidth := 1;
+ Page5Color.SetBackgroundColor(ColorGray);
+ Page5.AddControl(Page5Color);
+ Page5ClientArea := TGTKVBox.Create(Self);
+ Page5Color.AddControl(Page5ClientArea);
+ ProcessingLabel := TGTKLabel.Create(Self);
+ ProcessingLabel.Caption := Format(LANGCCHKSUMNowProcessingFileS, ['---']);
+ ProcessingLabel.XPadding := 20;
+ ProcessingLabel.XAlign := 0;
+ ProcessingLabel.YPadding := 10;
+ ProcessingLabel.SetSizeRequest(10, -1);
+ Page5ClientArea.AddControlEx(ProcessingLabel, False, False, 10);
+ ProgressHBox := TGTKHBox.Create(Self);
+ Progress := TGTKProgressBar.Create(Self);
+ ProgressHBox.AddControlEx(Progress, True, True, 20);
+ Page5ClientArea.AddControlEx(ProgressHBox, True, True, 10);
+ Page5ClientArea.AddControlEx(TGTKLabel.Create(Self), True, True, 0);
+
+ Page6 := TGTKEventBox.Create(Self);
+ Page6.SetBackgroundColor(0, 0, 0);
+ Page6Color := TGTKEventBox.Create(Self);
+ Page6Color.BorderWidth := 1;
+ Page6Color.SetBackgroundColor(ColorGray);
+ Page6.AddControl(Page6Color);
+ Page6Label := TGTKLabel.Create(Self);
+ Page6Label.LineWrap := True;
+ Page6Label.SetAlignment(0.5, 0.4);
+ Page6Label.Caption := LANGCCHKSUMPage6Text;
+ Page6Label.UseMarkup := True;
+ Page6Label.XAlign := 0.05;
+ Page6Label.YAlign := 0;
+ Page6Spacer := TGTKLabel.Create(Self);
+ Page6Spacer.SetSizeRequest(-1, 6);
+ Page6ClientArea := TGTKVBox.Create(Self);
+ Page6ClientArea.AddControlEx(Page6Spacer, False, False, 0);
+ Page6ClientArea.AddControlEx(Page6Label, False, False, 0);
+ Page6Color.AddControl(Page6ClientArea);
+ ErrorLabel := TGTKLabel.Create(Self);
+ ErrorLabel.Selectable := True;
+ ErrorLabel.SetAlignment(0, 0);
+ ErrorLabel.SetPadding(2, 2);
+ ErrorLabel.Alignment := taLeftJustify;
+ ErrorLabelScrolledWindow := TGTKScrolledWindow.Create(Self);
+ ErrorLabelScrolledWindow.HorizScrollBarPolicy := sbAutomatic;
+ ErrorLabelScrolledWindow.VertScrollBarPolicy := sbAutomatic;
+ ErrorLabelScrolledWindow.AddWithViewPort(ErrorLabel);
+ ErrorTextViewHBox := TGTKHBox.Create(Self);
+ ErrorTextViewHBox.AddControlEx(ErrorLabelScrolledWindow, True, True, 25);
+ Page6ClientArea.AddControlEx(ErrorTextViewHBox, True, True, 10);
+
+ Page7 := TGTKHBox.Create(Self);
+ Page7.Homogeneous := False;
+ LeftSpacer7 := TGTKEventBox.Create(Self);
+ LeftSpacer7.SetBackgroundColor(ColorBG);
+ LeftSpacer7.SetSizeRequest(100, -1);
+ Page7Label := TGTKLabel.Create(Self);
+ Page7Label.LineWrap := True;
+ Page1Label.SetAlignment(0.5, 0.5);
+ Page7Label.Caption := LANGCCHKSUMPage7Text;
+ Page7.AddControlEx(LeftSpacer7, False, False, 0);
+ Page7.AddControlEx(Page7Label, True, True, 0);
+
+ PageArea.AddControlEx(Page1, True, True, 0);
+ PageArea.AddControlEx(Page2, True, True, 0);
+ PageArea.AddControlEx(Page3, True, True, 0);
+ PageArea.AddControlEx(Page4, True, True, 0);
+ PageArea.AddControlEx(Page5, True, True, 0);
+ PageArea.AddControlEx(Page6, True, True, 0);
+ PageArea.AddControlEx(Page7, True, True, 0);
+end;
+
+
+(********************************************************************************************************************************)
+procedure TFChecksumDruid.SetCurrentPage(const Num: integer; const GoingForward: boolean);
+const Ext: array[boolean] of string = ('.md5', '.sfv');
+var s: string;
+ i: TEngineFileDes;
+ Error: integer;
+begin
+ // A simple test before we can continue
+ if (CurrentPage = 3) and (not SeparateFileCheckBox.Checked) and GoingForward then begin
+ s := UTF8ToANSI(FileNameEntry.Text);
+ i := Engine.OpenFile(s, omWrite, Error);
+ if Error <> 0 then begin
+ Application.MessageBox(Format(LANGCCHKSUMAnErrorOccuredWhileOpeningFileSS, [ANSIToUTF8(ExtractFileName(s)), ANSIToUTF8(GetErrorString(Error))]),
+ [mbOK], mbError, mbNone, mbOK);
+ Exit;
+ end;
+ Engine.CloseFile(i);
+ end;
+ // Changing page
+ CurrentPage := Num;
+ if CurrentPage < 1 then CurrentPage := 1;
+ if CurrentPage > NumPages then CurrentPage := NumPages;
+ case CurrentPage of
+ 1: TitleLabel.SetMarkup(LANGCCHKSUMPage1Title);
+ 2: TitleLabel.SetMarkup(LANGCCHKSUMPage2Title);
+ 3: TitleLabel.SetMarkup(LANGCCHKSUMPage3Title);
+ 4: TitleLabel.SetMarkup(LANGCCHKSUMPage4Title);
+ 5: TitleLabel.SetMarkup(LANGCCHKSUMPage5Title);
+ 6: TitleLabel.SetMarkup(LANGCCHKSUMPage6Title);
+ 7: TitleLabel.SetMarkup(LANGCCHKSUMPage7Title);
+ end;
+ Page1.Visible := CurrentPage = 1;
+ Page2.Visible := CurrentPage = 2;
+ Page3.Visible := CurrentPage = 3;
+ Page4.Visible := CurrentPage = 4;
+ Page5.Visible := CurrentPage = 5;
+ Page6.Visible := CurrentPage = 6;
+ Page7.Visible := CurrentPage = 7;
+ BackButton.Enabled := CurrentPage > 1;
+ ForwardButton.Enabled := CurrentPage < NumPages;
+ if CurrentPage < NumPages then begin
+ if not ForwardButton.UseStock then ForwardButton.Caption := 'gtk-go-forward';
+ ForwardButton.UseStock := True;
+ end else begin
+ ForwardButton.UseStock := False;
+ ForwardButton.Caption := LANGCCHKSUMFinishCaption;
+ end;
+ // after page changed
+ case CurrentPage of
+ 1: ForwardButton.SetFocus;
+ 2: if SFVRadioButton.Checked then SFVRadioButton.SetFocus
+ else MD5RadioButton.SetFocus;
+ 3: begin
+ SeparateFileCheckBox.Visible := MD5RadioButton.Checked and (FileNames.Count > 1);
+ FileNameEntry.Enabled := (not SeparateFileCheckBox.Checked) or (not SeparateFileCheckBox.Visible);
+ if FileNames.Count = 1
+ then FileNameEntry.Text := ANSIToUTF8(ExtractFileName(FileNames[0]) + Ext[SFVRadioButton.Checked])
+ else FileNameEntry.Text := ANSIToUTF8(DirName + Ext[SFVRadioButton.Checked]);
+ FileNameEntry.SetFocus;
+ FileNameEntryChanged(Self);
+ end;
+ 4: ForwardButton.SetFocus;
+ 5: Process;
+ 6: begin
+ BackButton.SetFocus;
+ ForwardButton.Enabled := False;
+ s := ErrorLabel.Caption;
+ if (Length(s) > 1) and (s[Length(s)] = #10) then Delete(s, Length(s), 1);
+ ErrorLabel.Caption := s;
+ end;
+ 7: begin
+ BackButton.Enabled := False;
+ CancelButton.Enabled := False;
+ ForwardButton.Enabled := True;
+ ForwardButton.SetFocus;
+ end;
+ end;
+end;
+
+procedure TFChecksumDruid.CancelButtonClick(Sender: TObject);
+begin
+ ModalResult := mbCancel;
+end;
+
+procedure TFChecksumDruid.BackButtonClick(Sender: TObject);
+begin
+ SetCurrentPage(CurrentPage - 1 - Ord(CurrentPage = 6), False);
+end;
+
+procedure TFChecksumDruid.ForwardButtonClick(Sender: TObject);
+begin
+ if CurrentPage = 7 then ModalResult := mbOK
+ else SetCurrentPage(CurrentPage + 1, True);
+end;
+
+procedure TFChecksumDruid.FileNameEntryChanged(Sender: TObject);
+begin
+ ForwardButton.Enabled := Length(Trim(FileNameEntry.Text)) > 0;
+end;
+
+procedure TFChecksumDruid.SeparateFileCheckBoxToggled(Sender: TObject);
+begin
+ FileNameEntry.Enabled := not SeparateFileCheckBox.Checked;
+end;
+
+(********************************************************************************************************************************)
+procedure TFChecksumDruid.CheckStop;
+begin
+ if Stop and (not StopBreak) then
+ if Application.MessageBox(LANGCCHKSUMAreYouSureYouWantToAbortTheProcessing, [mbYes, mbNo], mbQuestion, mbNone, mbNo) = mbYes
+ then StopBreak := True
+ else begin Stop := False; StopBreak := False; end;
+end;
+
+procedure TFChecksumDruid.Process;
+const Ext: array[boolean] of string = ('.md5', '.sfv');
+var i: integer;
+ MaxSize, LastValue: Int64;
+ Stat: PDataItemSL;
+ s, s2: string;
+begin
+ if FileNames.Count = 0 then begin
+ SetCurrentPage(7, True);
+ Exit;
+ end;
+ FileNames.Sorted := True;
+ CancelButton.SetFocus;
+ ForwardButton.Enabled := False;
+ BackButton.Enabled := False;
+ Processing := True;
+ Stop := False;
+ StopBreak := False;
+ ErrorLabel.Caption := '';
+ Application.ProcessMessages;
+
+ // Compute maximal size of selected files
+ MaxSize := 0;
+ for i := 0 to FileNames.Count - 1 do begin
+ Stat := Engine.GetFileInfoSL(FileNames[i]);
+ if Assigned(Stat) then Inc(MaxSize, Stat.Size);
+ end;
+ Progress.Max := MaxSize;
+ Progress.Value := 0;
+ Progress.Text := '0 %';
+
+ if SFVRadioButton.Checked then WriteSFVComment(ProcessPattern(Engine, UTF8ToANSI(FileNameEntry.Text), IncludeTrailingPathDelimiter(ExtractFilePath(FileNames[0])), '', False));
+ // Process each file
+ for i := 0 to FileNames.Count - 1 do begin
+ ProcessingLabel.Caption := Format(LANGCCHKSUMNowProcessingFileS, [ANSIToUTF8(ExtractFileName(FileNames[i]))]);
+ LastValue := Progress.Value;
+ Stat := Engine.GetFileInfoSL(FileNames[i]);
+ Application.ProcessMessages;
+ try
+ if ProcessFile(FileNames[i], SFVRadioButton.Checked, s) then begin
+ if not SeparateFileCheckBox.Checked
+ then s2 := ProcessPattern(Engine, UTF8ToANSI(FileNameEntry.Text), IncludeTrailingPathDelimiter(ExtractFilePath(FileNames[0])), '', False)
+ else s2 := IncludeTrailingPathDelimiter(ExtractFilePath(FileNames[i])) + ExtractFileName(FileNames[i]) + Ext[SFVRadioButton.Checked];
+ WriteLine(s2, FileNames[i], s, SFVRadioButton.Checked, ((i = 0) and MD5RadioButton.Checked) or SeparateFileCheckBox.Checked,
+ (i = FileNames.Count - 1) or SeparateFileCheckBox.Checked);
+ end;
+ except end;
+ if Assigned(Stat) then Progress.Value := LastValue + Stat.Size;
+ Progress.Text := Format('%d %%', [Trunc(Progress.Fraction * 100)]);
+ Application.ProcessMessages;
+ CheckStop;
+ if StopBreak then Break;
+ end;
+
+ Application.ProcessMessages;
+ Processing := False;
+ Stop := False;
+ StopBreak := False;
+ Application.ProcessMessages;
+ SetCurrentPage(7 - Ord(ErrorLabel.Caption <> ''), ErrorLabel.Caption = '');
+end;
+
+function TFChecksumDruid.ProcessFile(const FName: string; const IsItSFV: boolean; var HashString: string): boolean;
+const ChksumBlockSize = 65536*4;
+var FD: TEngineFileDes;
+ Error, Count: integer;
+ Buffer: Pointer;
+ CRC: LongWord;
+ MD5Hash: THash_MD5;
+begin
+ HashString := '';
+ Result := False;
+ try
+ Buffer := Libc.malloc(ChksumBlockSize);
+ Libc.memset(Buffer, 0, ChksumBlockSize);
+ except
+ ErrorLabel.Caption := ErrorLabel.Caption + LANGAnErrorOccuredWhileInitializingMemoryBlock + #10;
+ Exit;
+ end;
+ CRC := $FFFFFFFF;
+ MD5Hash := nil;
+ if not IsItSFV then MD5Hash := THash_MD5.Create;
+
+ FD := Engine.OpenFile(FName, omRead, Error);
+ if Error <> 0 then begin
+ ErrorLabel.Caption := ErrorLabel.Caption + Format(LANGCCHKSUMAnErrorOccuredWhileOpeningFileSS, [ANSIToUTF8(ExtractFileName(FName)), ANSIToUTF8(GetErrorString(Error))]);
+ Exit;
+ end;
+ repeat
+ Count := Engine.ReadFile(FD, Buffer, ChksumBlockSize, Error);
+ if Error <> 0 then begin
+ ErrorLabel.Caption := ErrorLabel.Caption + Format(LANGCCHKSUMAnErrorOccuredWhileReadingFileSS, [ANSIToUTF8(ExtractFileName(FName)), ANSIToUTF8(GetErrorString(Error))]);
+ Engine.CloseFile(FD);
+ Exit;
+ end;
+ if IsItSFV then CRC := CRC32(CRC, Buffer, Count)
+ else MD5Hash.Calc(Buffer^, Count);
+ Progress.Value := Progress.Value + Count;
+ Progress.Text := Format('%d %%', [Trunc(Progress.Fraction * 100)]);
+ Application.ProcessMessages;
+ CheckStop;
+ until (Count < ChksumBlockSize) or Stop;
+ Engine.CloseFile(FD);
+ Libc.free(Buffer);
+
+ if IsItSFV then HashString := IntToHex(not CRC, 8) else
+ begin
+ MD5Hash.Done;
+ HashString := MD5Hash.GetKeyStrH;
+ MD5Hash.Free;
+ end;
+ Result := True;
+end;
+
+const ChksumBlockSize = 32768; // Maximum of PByteArray
+
+procedure TFChecksumDruid.WriteLine(const FName, CheckedFName, HashString: string; const IsItSFV, CreateFile, CloseFile: boolean);
+var i, Error, Count: integer;
+ s: string;
+begin
+ if CreateFile then begin
+ FileDes := Engine.OpenFile(FName, omWrite, Error);
+ if Error <> 0 then begin
+ ErrorLabel.Caption := ErrorLabel.Caption + Format(LANGCCHKSUMAnErrorOccuredWhileOpeningFileSS, [ANSIToUTF8(ExtractFileName(FName)), ANSIToUTF8(GetErrorString(Error))]);
+ Exit;
+ end;
+ try
+ Buffer := Libc.malloc(ChksumBlockSize);
+ Libc.memset(Buffer, 0, ChksumBlockSize);
+ except
+ ErrorLabel.Caption := ErrorLabel.Caption + LANGAnErrorOccuredWhileInitializingMemoryBlock + #10;
+ Exit;
+ end;
+ BufferPos := -1;
+ end;
+ if Buffer = nil then Exit;
+
+ if IsItSFV then s := Format('%s %s'#13#10, [ExtractFileName(CheckedFName), Trim(ANSIUpperCase(HashString))])
+ else s := Format('%s %s'#10, [Trim(AnsiLowerCase(HashString)), ExtractFileName(CheckedFName)]);
+ for i := 1 to Length(s) do begin
+ if BufferPos + 1 >= ChksumBlockSize then begin
+ Count := Engine.WriteFile(FileDes, Buffer, ChksumBlockSize, Error);
+ BufferPos := -1;
+ if (Error <> 0) or (Count <> ChksumBlockSize) then begin
+ ErrorLabel.Caption := ErrorLabel.Caption + Format(LANGCCHKSUMAnErrorOccuredWhileWritingFileSS, [ANSIToUTF8(ExtractFileName(FName)), ANSIToUTF8(GetErrorString(Error))]);
+ Exit;
+ end;
+ end;
+ Inc(BufferPos);
+ PByteArray(Buffer)^[BufferPos] := Byte(s[i]);
+ end;
+
+ if CloseFile then begin
+ Inc(BufferPos); // Counting with zero-starting element
+ Count := Engine.WriteFile(FileDes, Buffer, BufferPos, Error);
+ if (Error <> 0) or (Count <> BufferPos) then begin
+ ErrorLabel.Caption := ErrorLabel.Caption + Format(LANGCCHKSUMAnErrorOccuredWhileWritingFileSS, [ANSIToUTF8(ExtractFileName(FName)), ANSIToUTF8(GetErrorString(Error))]);
+ Exit;
+ end;
+ BufferPos := -1;
+ Engine.CloseFile(FileDes);
+ Libc.free(Buffer);
+ end;
+end;
+
+procedure TFChecksumDruid.WriteSFVComment(const FName: string);
+var i, Error, Count: integer;
+ Stat: PDataItemSL;
+ s: string;
+begin
+ FileDes := Engine.OpenFile(FName, omWrite, Error);
+ if Error <> 0 then begin
+ ErrorLabel.Caption := ErrorLabel.Caption + Format(LANGCCHKSUMAnErrorOccuredWhileOpeningFileSS, [ANSIToUTF8(ExtractFileName(FName)), ANSIToUTF8(GetErrorString(Error))]);
+ Exit;
+ end;
+ try
+ Buffer := Libc.malloc(ChksumBlockSize);
+ Libc.memset(Buffer, 0, ChksumBlockSize);
+ except
+ ErrorLabel.Caption := ErrorLabel.Caption + LANGAnErrorOccuredWhileInitializingMemoryBlock + #10;
+ Exit;
+ end;
+ BufferPos := -1;
+ if Buffer = nil then Exit;
+
+ s := Format('; Generated by WIN-SFV32 v1 [added for sfv32 compatibility]'#13#10'; Using Tux Commander v%s [%s] on %s'#13#10 +
+ '; http://tuxcmd.sourceforge.net/'#13#10'; '#13#10'; /----'#13#10, [ConstAboutVersion, ConstAboutBuildDate,
+ FormatDateTime('mm.dd.yyyy "at" hh:nn:ss', Now)]);
+ for i := 0 to FileNames.Count - 1 do begin
+ Stat := Engine.GetFileInfoSL(FileNames[i]);
+ if Assigned(Stat) then s := s + Format('; %s %s %s'#13#10, [PadRightStr(IntToStr(Stat^.Size), 11),
+ FormatDateTime('hh:nn.ss yyyy-mm-dd', Stat^.ModifyTime), ExtractFileName(FileNames[i])]);
+ end;
+ s := s + '; \----'#13#10'; '#13#10;
+
+ for i := 1 to Length(s) do begin
+ if BufferPos + 1 >= ChksumBlockSize then begin
+ Count := Engine.WriteFile(FileDes, Buffer, ChksumBlockSize, Error);
+ BufferPos := -1;
+ if (Error <> 0) or (Count <> ChksumBlockSize) then begin
+ ErrorLabel.Caption := ErrorLabel.Caption + Format(LANGCCHKSUMAnErrorOccuredWhileWritingFileSS, [ANSIToUTF8(ExtractFileName(FName)), ANSIToUTF8(GetErrorString(Error))]);
+ Exit;
+ end;
+ end;
+ Inc(BufferPos);
+ PByteArray(Buffer)^[BufferPos] := Byte(s[i]);
+ end;
+end;
+
+end.
+
+
diff --git a/UChmod.pas b/UChmod.pas
new file mode 100644
index 0000000..971260b
--- /dev/null
+++ b/UChmod.pas
@@ -0,0 +1,236 @@
+(*
+ Tux Commander - UChmod - Change permissions dialog
+ Copyright (C) 2007 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit UChmod;
+
+interface
+
+uses
+ SysUtils, Types, Classes, Variants, GTKControls, GTKForms, GTKStdCtrls, GTKExtCtrls, GTKConsts, GTKMenus;
+
+type
+ TFChmod = class(TGTKDialog)
+ HBox, HBox2, HBox3: TGTKHBox;
+ VBox: TGTKVBox;
+ PermissionFrame, FileFrame: TGTKFrame;
+ RecursiveCheckButton, cbSUID, cbSGID, cbSticky, cbUSRRead, cbUSRWrite, cbUSRExec, cbGRPRead, cbGRPWrite, cbGRPExec,
+ cbALLRead, cbALLWrite, cbALLExec: TGTKCheckButton;
+ RecursiveOptionMenu: TGTKOptionMenu;
+ miAllFiles, miDirectories, miFiles: TGTKMenuItem;
+ FileLabel, OctalLabel, TextLabel: TGTKLabel;
+ OctalEntry: TGTKEntry;
+ procedure FormCreate(Sender: TObject); override;
+ procedure FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+ procedure RecursiveCheckButtonToggled(Sender: TObject);
+ procedure PermissionsCheckBoxToggle(Sender: TObject);
+ procedure OctalEntryChanged(Sender: TObject);
+ private
+ Busy: boolean;
+ public
+ LastMode: Cardinal;
+ procedure AssignMode(const Mode: Cardinal; const FileName, User, Group: string);
+ end;
+
+var
+ FChmod: TFChmod;
+
+implementation
+
+uses Libc, ULocale, UCoreUtils;
+
+
+procedure TFChmod.FormCreate(Sender: TObject);
+begin
+ SetDefaultSize(-1, -1);
+ LastMode := 0;
+ Busy := True;
+ Caption := LANGFChmod_Caption;
+ Buttons := [mbOK, mbCancel];
+ HBox := TGTKHBox.Create(Self);
+ HBox.Homogeneous := False;
+ HBox.BorderWidth := 6;
+ PermissionFrame := TGTKFrame.Create(Self);
+ PermissionFrame.Caption := LANGFChmod_PermissionFrame;
+ FileFrame := TGTKFrame.Create(Self);
+ FileFrame.Caption := LANGFChmod_FileFrame;
+ HBox.AddControlEx(PermissionFrame, True, True, 5);
+ HBox.AddControlEx(FileFrame, True, True, 5);
+ HBox2 := TGTKHBox.Create(Self);
+ HBox2.Homogeneous := False;
+ HBox2.BorderWidth := 5;
+ RecursiveCheckButton := TGTKCheckButton.CreateWithLabel(Self, LANGFChmod_ApplyRecursivelyFor);
+ RecursiveCheckButton.OnToggled := RecursiveCheckButtonToggled;
+ RecursiveOptionMenu := TGTKOptionMenu.Create(Self);
+ miAllFiles := TGTKMenuItem.Create(Self);
+ miAllFiles.Caption := LANGFChmod_miAllFiles;
+ RecursiveOptionMenu.Items.Add(miAllFiles);
+ miDirectories := TGTKMenuItem.Create(Self);
+ miDirectories.Caption := LANGFChmod_miDirectories;
+ RecursiveOptionMenu.Items.Add(miDirectories);
+ miFiles := TGTKMenuItem.Create(Self);
+ miFiles.Caption := LANGmiFiles_Caption;
+ RecursiveOptionMenu.Items.Add(miFiles);
+ HBox2.AddControlEx(TGTKLabel.Create(Self), False, False, 10);
+ HBox2.AddControlEx(RecursiveCheckButton, False, False, 5);
+ HBox2.AddControlEx(RecursiveOptionMenu, False, False, 5);
+
+ HBox3 := TGTKHBox.Create(Self);
+ HBox3.Homogeneous := False;
+ HBox3.BorderWidth := 5;
+ OctalLabel := TGTKLabel.Create(Self);
+ OctalLabel.Caption := LANGFChmod_OctalLabel;
+ OctalEntry := TGTKEntry.Create(Self);
+ OctalEntry.MaxLength := 4;
+ OctalEntry.SetSizeRequest(50, -1);
+ OctalLabel.FocusControl := OctalEntry;
+ OctalLabel.UseUnderline := True;
+ TextLabel := TGTKLabel.Create(Self);
+ TextLabel.Caption := '<span weight="ultrabold">Text:</span> rw-rw-r--';
+ TextLabel.UseMarkup := True;
+ HBox3.AddControlEx(TGTKLabel.Create(Self), False, False, 10);
+ HBox3.AddControlEx(OctalLabel, False, False, 5);
+ HBox3.AddControlEx(OctalEntry, False, False, 5);
+ HBox3.AddControlEx(TGTKVSeparator.Create(Self), False, False, 10);
+ HBox3.AddControlEx(TextLabel, False, False, 10);
+
+ ClientArea.AddControlEx(HBox, True, True, 0);
+ ClientArea.AddControlEx(TGTKHSeparator.Create(Self), False, False, 5);
+ ClientArea.AddControlEx(HBox3, False, False, 0);
+ ClientArea.AddControlEx(TGTKHSeparator.Create(Self), False, False, 5);
+ ClientArea.AddControlEx(HBox2, False, False, 0);
+
+ FileLabel := TGTKLabel.Create(Self);
+ FileLabel.SetAlignment(0, 0);
+ FileLabel.SetPadding(10, 5);
+ FileLabel.Caption := '<span weight="ultrabold">File:</span> .adobe'#10'<span weight="ultrabold">Text:</span> rw-rw-rw'#10 +
+ '<span weight="ultrabold">Octal:</span> 666'#10'<span weight="ultrabold">Owner:</span> root'#10 +
+ '<span weight="ultrabold">Group:</span> root';
+ FileLabel.UseMarkup := True;
+ FileFrame.AddControl(FileLabel);
+
+ VBox := TGTKVBox.Create(Self);
+ VBox.BorderWidth := 5;
+ cbSUID := TGTKCheckButton.CreateWithLabel(Self, LANGFChmod_SUID);
+ VBox.AddControlEx(cbSUID, False, False, 0); cbSUID.OnToggled := PermissionsCheckBoxToggle;
+ cbSGID := TGTKCheckButton.CreateWithLabel(Self, LANGFChmod_SGID);
+ VBox.AddControlEx(cbSGID, False, False, 0); cbSGID.OnToggled := PermissionsCheckBoxToggle;
+ cbSticky := TGTKCheckButton.CreateWithLabel(Self, LANGFChmod_Sticky);
+ VBox.AddControlEx(cbSticky, False, False, 0); cbSticky.OnToggled := PermissionsCheckBoxToggle;
+ VBox.AddControlEx(TGTKHSeparator.Create(Self), False, False, 2);
+ cbUSRRead := TGTKCheckButton.CreateWithLabel(Self, LANGFChmod_RUSR);
+ VBox.AddControlEx(cbUSRRead, False, False, 0); cbUSRRead.OnToggled := PermissionsCheckBoxToggle;
+ cbUSRWrite := TGTKCheckButton.CreateWithLabel(Self, LANGFChmod_WUSR);
+ VBox.AddControlEx(cbUSRWrite, False, False, 0); cbUSRWrite.OnToggled := PermissionsCheckBoxToggle;
+ cbUSRExec := TGTKCheckButton.CreateWithLabel(Self, LANGFChmod_XUSR);
+ VBox.AddControlEx(cbUSRExec, False, False, 0); cbUSRExec.OnToggled := PermissionsCheckBoxToggle;
+ VBox.AddControlEx(TGTKHSeparator.Create(Self), False, False, 2);
+ cbGRPRead := TGTKCheckButton.CreateWithLabel(Self, LANGFChmod_RGRP);
+ VBox.AddControlEx(cbGRPRead, False, False, 0); cbGRPRead.OnToggled := PermissionsCheckBoxToggle;
+ cbGRPWrite := TGTKCheckButton.CreateWithLabel(Self, LANGFChmod_WGRP);
+ VBox.AddControlEx(cbGRPWrite, False, False, 0); cbGRPWrite.OnToggled := PermissionsCheckBoxToggle;
+ cbGRPExec := TGTKCheckButton.CreateWithLabel(Self, LANGFChmod_XGRP);
+ VBox.AddControlEx(cbGRPExec, False, False, 0); cbGRPExec.OnToggled := PermissionsCheckBoxToggle;
+ VBox.AddControlEx(TGTKHSeparator.Create(Self), False, False, 2);
+ cbALLRead := TGTKCheckButton.CreateWithLabel(Self, LANGFChmod_ROTH);
+ VBox.AddControlEx(cbALLRead, False, False, 0); cbALLRead.OnToggled := PermissionsCheckBoxToggle;
+ cbALLWrite := TGTKCheckButton.CreateWithLabel(Self, LANGFChmod_WOTH);
+ VBox.AddControlEx(cbALLWrite, False, False, 0); cbALLWrite.OnToggled := PermissionsCheckBoxToggle;
+ cbALLExec := TGTKCheckButton.CreateWithLabel(Self, LANGFChmod_XOTH);
+ VBox.AddControlEx(cbALLExec, False, False, 0); cbALLExec.OnToggled := PermissionsCheckBoxToggle;
+ PermissionFrame.AddControl(VBox);
+
+ Busy := False;
+ OnKeyDown := FormKeyDown;
+ OctalEntry.OnChanged := OctalEntryChanged;
+ RecursiveCheckButtonToggled(Self);
+end;
+
+procedure TFChmod.FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+begin
+ case Key of
+ GDK_RETURN, GDK_KP_ENTER: ModalResult := mbOK;
+ GDK_ESCAPE: ModalResult := mbCancel;
+ end;
+end;
+
+procedure TFChmod.RecursiveCheckButtonToggled(Sender: TObject);
+begin
+ RecursiveOptionMenu.Enabled := RecursiveCheckButton.Checked;
+end;
+
+procedure TFChmod.PermissionsCheckBoxToggle(Sender: TObject);
+var Mode: Cardinal;
+begin
+ if Busy then Exit; Busy := True;
+ Mode := 0;
+ {$WARNINGS OFF}
+ Mode := Mode or (Ord(cbSUID.Checked) * __S_ISUID);
+ Mode := Mode or (Ord(cbSGID.Checked) * __S_ISGID);
+ Mode := Mode or (Ord(cbSticky.Checked) * __S_ISVTX);
+ Mode := Mode or (Ord(cbUSRRead.Checked) * S_IRUSR);
+ Mode := Mode or (Ord(cbUSRWrite.Checked) * S_IWUSR);
+ Mode := Mode or (Ord(cbUSRExec.Checked) * S_IXUSR);
+ Mode := Mode or (Ord(cbGRPRead.Checked) * S_IRGRP);
+ Mode := Mode or (Ord(cbGRPWrite.Checked) * S_IWGRP);
+ Mode := Mode or (Ord(cbGRPExec.Checked) * S_IXGRP);
+ Mode := Mode or (Ord(cbALLRead.Checked) * S_IROTH);
+ Mode := Mode or (Ord(cbALLWrite.Checked) * S_IWOTH);
+ Mode := Mode or (Ord(cbALLExec.Checked) * S_IXOTH);
+ {$WARNINGS ON}
+ LastMode := Mode;
+ TextLabel.Caption := Format(LANGFChmod_TextLabel, [AttrToStr(Mode, False)]);;
+ TextLabel.UseMarkup := True;
+ OctalEntry.Text := Format('%.4d', [AttrToOctal(Mode)]);
+ Busy := False;
+end;
+
+procedure TFChmod.OctalEntryChanged(Sender: TObject);
+var Mode: Cardinal;
+begin
+ if Busy then Exit; Busy := True;
+ Mode := OctalToAttr(StrToIntDef(OctalEntry.Text, 0));
+ LastMode := Mode;
+ cbSUID.Checked := Mode and __S_ISUID = __S_ISUID;
+ cbSGID.Checked := Mode and __S_ISGID = __S_ISGID;
+ cbSticky.Checked := Mode and __S_ISVTX = __S_ISVTX;
+ cbUSRRead.Checked := Mode and S_IRUSR = S_IRUSR;
+ cbUSRWrite.Checked := Mode and S_IWUSR = S_IWUSR;
+ cbUSRExec.Checked := Mode and S_IXUSR = S_IXUSR;
+ cbGRPRead.Checked := Mode and S_IRGRP = S_IRGRP;
+ cbGRPWrite.Checked := Mode and S_IWGRP = S_IWGRP;
+ cbGRPExec.Checked := Mode and S_IXGRP = S_IXGRP;
+ cbALLRead.Checked := Mode and S_IROTH = S_IROTH;
+ cbALLWrite.Checked := Mode and S_IWOTH = S_IWOTH;
+ cbALLExec.Checked := Mode and S_IXOTH = S_IXOTH;
+ TextLabel.Caption := Format(LANGFChmod_TextLabel, [AttrToStr(Mode, False)]);;
+ TextLabel.UseMarkup := True;
+ Busy := False;
+end;
+
+procedure TFChmod.AssignMode(const Mode: Cardinal; const FileName, User, Group: string);
+begin
+ LastMode := Mode mod $1000;
+ OctalEntry.Text := Format('%.4d', [AttrToOctal(LastMode)]);
+ FileLabel.Caption := Format(LANGFChmod_FileLabel, [ANSIToUTF8(FileName), AttrToStr(Mode), AttrToOctal(Mode), ANSIToUTF8(User), ANSIToUTF8(Group)]);
+ FileLabel.UseMarkup := True;
+ if Length(FileName) > 20 then FileLabel.SetSizeRequest(200, -1);
+end;
+
+end.
+
diff --git a/UChown.pas b/UChown.pas
new file mode 100644
index 0000000..c85fa00
--- /dev/null
+++ b/UChown.pas
@@ -0,0 +1,198 @@
+(*
+ Tux Commander - UChown - Change owner dialog
+ Copyright (C) 2004 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit UChown;
+
+interface
+
+uses
+ SysUtils, Types, Classes, Variants, GTKControls, GTKForms, GTKStdCtrls, GTKExtCtrls, GTKConsts, GTKMenus, GTKView;
+
+type
+ TFChown = class(TGTKDialog)
+ HBox, HBox2: TGTKHBox;
+ VBox: TGTKVBox;
+ OwnerFrame, GroupFrame, FileFrame: TGTKFrame;
+ OwnerListView, GroupListView: TGTKListView;
+ OwnerListViewScrolledWindow, GroupListViewScrolledWindow: TGTKScrolledWindow;
+ RecursiveCheckButton: TGTKCheckButton;
+ FileLabel: TGTKLabel;
+ procedure FormCreate(Sender: TObject); override;
+ procedure FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+ procedure OwnerListViewSelectionChanged(Sender: TObject);
+ procedure GroupListViewSelectionChanged(Sender: TObject);
+ public
+ LastUID, LastGID: integer;
+ procedure AssignMode(const Mode: Cardinal; const FileName: string; const UID, GID: integer);
+ private
+ procedure FillData;
+ end;
+
+var
+ FChown: TFChown;
+
+implementation
+
+uses Libc, ULocale, UCoreUtils, UCoreClasses;
+
+
+procedure TFChown.FormCreate(Sender: TObject);
+begin
+ SetDefaultSize(-1, -1);
+ LastUID := geteuid;
+ LastGID := getegid;
+ Caption := LANGFChown_Caption;
+ Buttons := [mbOK, mbCancel];
+ HBox := TGTKHBox.Create(Self);
+ HBox.Homogeneous := False;
+ HBox.BorderWidth := 6;
+ OwnerFrame := TGTKFrame.Create(Self);
+ OwnerFrame.Caption := LANGFChown_OwnerFrame;
+ GroupFrame := TGTKFrame.Create(Self);
+ GroupFrame.Caption := LANGFChown_GroupFrame;
+ FileFrame := TGTKFrame.Create(Self);
+ FileFrame.Caption := LANGFChown_FileFrame;
+ HBox.AddControlEx(OwnerFrame, True, True, 5);
+ HBox.AddControlEx(GroupFrame, True, True, 5);
+ HBox.AddControlEx(FileFrame, True, True, 5);
+ HBox2 := TGTKHBox.Create(Self);
+ HBox2.Homogeneous := False;
+ RecursiveCheckButton := TGTKCheckButton.CreateWithLabel(Self, LANGFChown_ApplyRecursively);
+ HBox2.AddControlEx(RecursiveCheckButton, False, False, 15);
+
+ ClientArea.AddControlEx(HBox, True, True, 0);
+ ClientArea.AddControlEx(TGTKHSeparator.Create(Self), False, False, 5);
+ ClientArea.AddControlEx(HBox2, False, False, 3);
+
+ FileLabel := TGTKLabel.Create(Self);
+ FileLabel.SetAlignment(0, 0);
+ FileLabel.SetPadding(10, 5);
+ FileLabel.Caption := '<span weight="ultrabold">File:</span> .adobe'#10'<span weight="ultrabold">Text:</span> rw-rw-rw'#10 +
+ '<span weight="ultrabold">Octal:</span> 666'#10'<span weight="ultrabold">Owner:</span> root'#10 +
+ '<span weight="ultrabold">Group:</span> root';
+ FileLabel.UseMarkup := True;
+ FileFrame.AddControl(FileLabel);
+
+ OwnerListView := TGTKListView.CreateTyped(Self, False, [lcText, lcNumber]);
+ OwnerListView.RulesHint := True;
+ OwnerListView.ShowHeaders := False;
+ OwnerListView.Columns.Add.AddAttribute('text', 0);
+ OwnerListViewScrolledWindow := TGTKScrolledWindow.Create(Self);
+ OwnerListViewScrolledWindow.ShadowType := stShadowIn;
+ OwnerListViewScrolledWindow.HorizScrollBarPolicy := sbAutomatic;
+ OwnerListViewScrolledWindow.VertScrollBarPolicy := sbAutomatic;
+ OwnerListViewScrolledWindow.BorderWidth := 10;
+ OwnerListViewScrolledWindow.AddControl(OwnerListView);
+ OwnerListViewScrolledWindow.SetSizeRequest(200, 200);
+ OwnerFrame.AddControl(OwnerListViewScrolledWindow);
+
+ GroupListView := TGTKListView.CreateTyped(Self, False, [lcText, lcNumber]);
+ GroupListView.RulesHint := True;
+ GroupListView.ShowHeaders := False;
+ GroupListView.Columns.Add.AddAttribute('text', 0);
+ GroupListViewScrolledWindow := TGTKScrolledWindow.Create(Self);
+ GroupListViewScrolledWindow.ShadowType := stShadowIn;
+ GroupListViewScrolledWindow.HorizScrollBarPolicy := sbAutomatic;
+ GroupListViewScrolledWindow.VertScrollBarPolicy := sbAutomatic;
+ GroupListViewScrolledWindow.BorderWidth := 10;
+ GroupListViewScrolledWindow.AddControl(GroupListView);
+ GroupListViewScrolledWindow.SetSizeRequest(200, 200);
+ GroupFrame.AddControl(GroupListViewScrolledWindow);
+
+ FillData;
+ OnKeyDown := FormKeyDown;
+end;
+
+procedure TFChown.FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+begin
+ case Key of
+ GDK_RETURN, GDK_KP_ENTER: ModalResult := mbOK;
+ GDK_ESCAPE: ModalResult := mbCancel;
+ end;
+end;
+
+procedure TFChown.AssignMode(const Mode: Cardinal; const FileName: string; const UID, GID: integer);
+var i: integer;
+ susr, sgrp: string;
+begin
+ LastUID := UID;
+ LastGID := GID;
+ susr := 'N/A';
+ sgrp := 'N/A';
+ // Lookup and select current user and group
+ if OwnerListView.Items.Count > 0 then
+ for i := 0 to OwnerListView.Items.Count - 1 do
+ if OwnerListView.Items[i].AsInteger(1) = UID then begin
+ OwnerListView.Items[i].Selected := True;
+ OwnerListView.Items[i].SetCursor(0, False, not Application.GTKVersion_2_2_0_Up, 0.5, 0);
+ susr := OwnerListView.Items[i].AsString(0);
+ Break;
+ end;
+ if GroupListView.Items.Count > 0 then
+ for i := 0 to GroupListView.Items.Count - 1 do
+ if GroupListView.Items[i].AsInteger(1) = GID then begin
+ GroupListView.Items[i].Selected := True;
+ GroupListView.Items[i].SetCursor(0, False, not Application.GTKVersion_2_2_0_Up, 0.5, 0);
+ sgrp := GroupListView.Items[i].AsString(0);
+ Break;
+ end;
+ // Fill more info
+ FileLabel.Caption := Format(LANGFChmod_FileLabel, [ANSIToUTF8(FileName), AttrToStr(Mode), AttrToOctal(Mode), susr, sgrp]);
+ FileLabel.UseMarkup := True;
+ if Length(FileName) > 20 then FileLabel.SetSizeRequest(200, -1);
+ OwnerListView.OnSelectionChanged := OwnerListViewSelectionChanged;
+ GroupListView.OnSelectionChanged := GroupListViewSelectionChanged;
+end;
+
+procedure TFChown.FillData;
+var UsrManager: TUserManager;
+ i: integer;
+ Item: TGTKListItem;
+begin
+ UsrManager := TUserManager.Create;
+ try
+ if UsrManager.UserList.Count > 0 then
+ for i := 0 to UsrManager.UserList.Count - 1 do begin
+ Item := OwnerListView.Items.Add;
+ Item.SetValue(0, ANSIToUTF8(TUser(UsrManager.UserList[i]).UserName));
+ Item.SetValue(1, TUser(UsrManager.UserList[i]).UID);
+ end;
+ if UsrManager.GroupList.Count > 0 then
+ for i := 0 to UsrManager.GroupList.Count - 1 do begin
+ Item := GroupListView.Items.Add;
+ Item.SetValue(0, ANSIToUTF8(TGroup(UsrManager.GroupList[i]).GroupName));
+ Item.SetValue(1, TGroup(UsrManager.GroupList[i]).GID);
+ end;
+ finally
+ UsrManager.Free;
+ end;
+end;
+
+procedure TFChown.OwnerListViewSelectionChanged(Sender: TObject);
+begin
+ if Assigned(OwnerListView.Selected) then LastUID := OwnerListView.Selected.AsInteger(1);
+end;
+
+procedure TFChown.GroupListViewSelectionChanged(Sender: TObject);
+begin
+ if Assigned(GroupListView.Selected) then LastGID := GroupListView.Selected.AsInteger(1);
+end;
+
+end.
+
diff --git a/UColumns.pas b/UColumns.pas
new file mode 100644
index 0000000..70c736f
--- /dev/null
+++ b/UColumns.pas
@@ -0,0 +1,221 @@
+(*
+ Tux Commander - UColumns - Panel Columns Settings dialog
+ Copyright (C) 2007 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit UColumns;
+
+interface
+
+uses
+ glib2, gdk2, gtk2, pango, SysUtils, Types, Classes, Variants, GTKControls, GTKForms, GTKStdCtrls, GTKExtCtrls, GTKConsts, GTKView,
+ GTKUtils, GTKDialogs, GTKPixbuf, GTKClasses,
+ UCoreClasses;
+
+type
+ TFColumns = class(TGTKDialog)
+ TitleFrame: TGTKFrame;
+ TitleLabel: TGTKLabel;
+ TitleEventBox: TGTKEventBox;
+ TitleIcon: TGTKImage;
+ TitleHBox: TGTKHBox;
+ ListView: TGTKListView;
+ ListViewScrolledWindow: TGTKScrolledWindow;
+ ListViewTable: TGTKTable;
+ MoveUpButton, MoveDownButton: TGTKImageButton;
+ procedure FormCreate(Sender: TObject); override;
+ procedure ListViewSelectionChanged(Sender: TObject);
+ procedure MoveUpDownButtonButtonClick(Sender: TObject);
+ procedure ListViewColumnToggled(Sender: TObject; Column: TGTKTreeViewColumn; Item: TGTKListItem);
+ private
+ procedure AddColumnItems;
+ public
+ procedure ApplyColumnList;
+ end;
+
+var
+ FColumns: TFColumns;
+
+implementation
+
+uses ULocale, UCoreUtils, UConfig, UCore;
+
+
+procedure TFColumns.FormCreate(Sender: TObject);
+var Column: TGTKTreeViewColumn;
+ row_targets: TGtkTargetEntry;
+begin
+ row_targets.target := PChar('GTK_TREE_MODEL_ROW');
+ row_targets.flags := GTK_TARGET_SAME_WIDGET;
+ row_targets.info := 1;
+
+ SetDefaultSize(250, 350);
+ Caption := LANGColumns_Caption;
+ Buttons := [mbOK, mbCancel];
+ ShowSeparator := False;
+ TitleEventBox := TGTKEventBox.Create(Self);
+ TitleLabel := TGTKLabel.Create(Self);
+ TitleLabel.Caption := Format('<span size="x-large" weight="ultrabold">%s</span>', [LANGColumns_Title]);
+ TitleLabel.UseMarkup := True;
+ TitleLabel.XAlign := 0;
+ TitleLabel.XPadding := 0;
+ TitleLabel.YPadding := 3;
+ TitleEventBox.ControlState := csPrelight;
+ TitleFrame := TGTKFrame.CreateWithoutLabel(Self);
+ TitleFrame.ShadowType := stShadowOut;
+ TitleIcon := TGTKImage.Create(Self);
+ TitleIcon.SetFromStock('gtk-justify-center', isLargeToolbar);
+ TitleHBox := TGTKHBox.Create(Self);
+ TitleHBox.Homogeneous := False;
+ TitleHBox.AddControlEx(TGTKEventBox.Create(Self), False, False, 5);
+ TitleHBox.AddControlEx(TitleIcon, False, False, 0);
+ TitleHBox.AddControlEx(TitleLabel, True, True, 10);
+ TitleEventBox.AddControl(TitleHBox);
+ TitleFrame.AddControl(TitleEventBox);
+ ClientArea.AddControlEx(TitleFrame, False, True, 0);
+
+ ListViewTable := TGTKTable.Create(Self);
+ ListViewTable.BorderWidth := 7;
+ ClientArea.AddControlEx(ListViewTable, True, True, 0);
+
+ ListView := TGTKListView.CreateTyped(Self, False, [lcBoolean, lcText, lcNumber]);
+
+ { ListView.Reorderable := True;
+ g_object_set(ListView.FWidget, 'reorderable', integer(True), nil); }
+ gtk_tree_view_enable_model_drag_source(GTK_TREE_VIEW(ListView.FWidget), GDK_BUTTON1_MASK, @row_targets, 1, GDK_ACTION_MOVE);
+ gtk_tree_view_enable_model_drag_dest(GTK_TREE_VIEW(ListView.FWidget), @row_targets, 1, GDK_ACTION_MOVE);
+
+ ListView.RulesHint := True;
+ ListView.ShowHeaders := False;
+ Column := ListView.Columns.AddTyped(ctToggle);
+ Column.AddAttribute('active', 0);
+ Column.Resizable := False;
+ Column.FixedWidth := 20;
+ Column.SizingMode := smFixed;
+ Column.OnToggled := ListViewColumnToggled;
+ Column := ListView.Columns.Add;
+ Column.AddAttribute('text', 1);
+ Column.Resizable := False;
+ Column.SizingMode := smAutoSize;
+ ListViewScrolledWindow := TGTKScrolledWindow.Create(Self);
+ ListViewScrolledWindow.AddControl(ListView);
+ ListViewScrolledWindow.HorizScrollBarPolicy := sbAutomatic;
+ ListViewScrolledWindow.VertScrollBarPolicy := sbAutomatic;
+ ListViewScrolledWindow.ShadowType := stShadowIn;
+
+ MoveUpButton := TGTKImageButton.CreateWithoutLabel(Self);
+ MoveUpButton.SetFromStock('gtk-go-up', isSmallToolbar);
+ MoveUpButton.Tooltip := LANGColumns_MoveUpButtonTooltip;
+ MoveUpButton.CanFocus := False;
+ MoveDownButton := TGTKImageButton.CreateWithoutLabel(Self);
+ MoveDownButton.SetFromStock('gtk-go-down', isSmallToolbar);
+ MoveDownButton.Tooltip := LANGColumns_MoveDownButtonTooltip;
+ MoveDownButton.CanFocus := False;
+
+ ListViewTable.AddControlEx(0, 1, 3, 4, ListViewScrolledWindow, [taoExpand, taoFill], [taoExpand, taoFill], 0, 5);
+ ListViewTable.AddControlEx(3, 2, 1, 1, MoveUpButton, [taoShrink, taoFill], [taoShrink], 5, 5);
+ ListViewTable.AddControlEx(3, 3, 1, 1, MoveDownButton, [taoShrink, taoFill], [taoShrink], 5, 5);
+ ListViewTable.AddControlEx(3, 1, 1, 1, TGTKLabel.Create(Self), [taoShrink, taoFill], [taoExpand, taoFill], 0, 2);
+ ListViewTable.AddControlEx(3, 4, 1, 1, TGTKLabel.Create(Self), [taoShrink, taoFill], [taoExpand, taoFill], 0, 2);
+
+ AddColumnItems;
+
+ ListView.OnSelectionChanged := ListViewSelectionChanged;
+ MoveUpButton.OnClick := MoveUpDownButtonButtonClick;
+ MoveDownButton.OnClick := MoveUpDownButtonButtonClick;
+
+ ListView.SetFocus;
+end;
+
+procedure TFColumns.ListViewSelectionChanged(Sender: TObject);
+begin
+ try
+ MoveUpButton.Enabled := Assigned(ListView.Selected) and (ListView.Selected.Index > 0);
+ MoveDownButton.Enabled := Assigned(ListView.Selected) and (ListView.Selected.Index < ListView.Items.Count - 1);
+ except end;
+end;
+
+procedure TFColumns.MoveUpDownButtonButtonClick(Sender: TObject);
+var i, Old, New: integer;
+ s: string;
+ b: boolean;
+begin
+ if Assigned(ListView.Selected) then begin
+ Old := ListView.Selected.Index;
+ if (Sender = MoveUpButton) and (Old > 0) then New := Old - 1 else
+ if (Sender = MoveDownButton) and (Old < ListView.Items.Count - 1) then New := Old + 1 else Exit;
+ b := boolean(ListView.Items[New].AsInteger(0));
+ ListView.Items[New].SetValue(0, integer(ListView.Items[Old].AsBoolean(0))); // Stupid but works
+ ListView.Items[Old].SetValue(0, integer(b));
+ s := ListView.Items[New].AsString(1);
+ ListView.Items[New].SetValue(1, ListView.Items[Old].AsString(1));
+ ListView.Items[Old].SetValue(1, s);
+ i := ListView.Items[New].AsInteger(2);
+ ListView.Items[New].SetValue(2, ListView.Items[Old].AsInteger(2));
+ ListView.Items[Old].SetValue(2, i);
+ ListView.Items[New].Selected := True;
+ ListView.Items[New].SetCursor(1, False, not Application.GTKVersion_2_2_0_Up, 0.5, 0);
+ end;
+end;
+
+procedure TFColumns.AddColumnItems;
+var Item: TGTKListItem;
+ i: integer;
+begin
+ for i := 1 to 10 do begin
+ Item := ListView.Items.Add;
+ Item.SetValue(0, Integer(ConfColumnVisible[i]));
+ Item.SetValue(1, ConfColumnTitlesLong[ConfColumnIDs[i]]);
+ Item.SetValue(2, ConfColumnIDs[i]);
+ end;
+end;
+
+procedure TFColumns.ListViewColumnToggled(Sender: TObject; Column: TGTKTreeViewColumn; Item: TGTKListItem);
+begin
+ if Assigned(Item) then Item.SetValue(0, not Item.AsBoolean(0));
+end;
+
+
+procedure TFColumns.ApplyColumnList;
+var i, j: integer;
+ TempIDs, TempArrayI: array[1..ConstNumPanelColumns] of integer;
+ TempArrayB: array[1..ConstNumPanelColumns] of boolean;
+begin
+ // Copy the old items
+ for i := 1 to ConstNumPanelColumns do begin
+ TempIDs[i] := ConfColumnIDs[i];
+ TempArrayI[i] := ConfColumnSizes[i];
+ TempArrayB[i] := ConfColumnVisible[i];
+ end;
+
+ // Search for moved columns
+ for i := 0 to ListView.Items.Count - 1 do
+ for j := 1 to ConstNumPanelColumns do
+ if ListView.Items[i].AsInteger(2) = TempIDs[j] then begin
+ ConfColumnIDs[i + 1] := ListView.Items[i].AsInteger(2);
+ ConfColumnSizes[i + 1] := TempArrayI[j];
+ ConfColumnVisible[i + 1] := boolean(ListView.Items[i].AsInteger(0));
+ Break;
+ end;
+end;
+
+
+
+
+
+end.
+
diff --git a/UConfig.pas b/UConfig.pas
new file mode 100644
index 0000000..68da691
--- /dev/null
+++ b/UConfig.pas
@@ -0,0 +1,1132 @@
+(*
+ Tux Commander - UConfig - Configuration saving/restoring, various constants
+ Copyright (C) 2008 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit UConfig;
+
+interface
+
+uses Classes, ULocale;
+
+resourcestring
+ ConstAppTitle = 'Tux Commander';
+ ConstAboutVersion = '0.6.36';
+ ConstAboutBuildDate = '2008-06-01';
+
+{$IFDEF __FPC__}
+ {$INCLUDE fpcver.inc}
+{$ENDIF}
+
+const ConfDefaultNormalItemFGColor = '#000000';
+ ConfDefaultActiveItemFGColor = '#FFFFFF';
+ ConfDefaultInactiveItemFGColor = '#000000';
+ ConfDefaultSelectedItemFGColor = '#FF0000';
+ ConfDefaultLinkItemFGColor = '#A0A0A0';
+ ConfDefaultDotFileItemFGColor = '#606060';
+ ConfDefaultNormalItemBGColor = '#FFFFFF';
+ ConfDefaultActiveItemBGColor = '#000000';
+ ConfDefaultInactiveItemBGColor = '#D0D0D0';
+
+ ConfSelItemsDelim = ';';
+ ConfDefaultPanelFont = 'Sans 10';
+ ConfDefaultSettingsDir = '.tuxcmd'; // Also has to be changed in UGTKLoader
+ ConfDblClickDelay = 500;
+ ConfQuickRenameDelay = ConfDblClickDelay + 250;
+ ConfInactiveTimerDelay = 0;
+ ConfEditViewFileSizeLimit = 10*1024*1024; // 10 MB
+ ConfAppNA = '---';
+ ConfDefaultRowHeight = 16;
+ ConstInternalProgressTimer = 25; // default = 25ms
+ ConstRemoteWaitDialogDelay = 800; // default = 800ms
+ ConstFileListTipsDelay = 400;
+ ConstFileListTipsDelayNeighbour = 95;
+ ConstNumPanelColumns = 10;
+ ConstPathDelim = '#';
+ ConstFullPathFormatStr = '%s#%s';
+
+ ConstTerminalCommand_xterm = 'xterm -T "TuxCommand" -e sh -c ''%s ; echo -n Press ENTER to exit... ; read''';
+ ConstTerminalCommand_rxvt = 'rxvt -T "TuxCommand" -e sh -c ''%s ; echo -n Press ENTER to exit... ; read''';
+ ConstTerminalCommand_rxvt2 = 'rxvt +si +sw -sl 1000 -g 130x50 -bg black -fg grey -T "TuxCommand" -e sh -c ''%s ; echo -n Press ENTER to exit... ; read''';
+ ConstTerminalCommand_gnometerminal = 'gnome-terminal -t "TuxCommand" --geometry=110x40 --working-directory=%cwd -x sh -c ''%s ; echo -n Press ENTER to exit... ; read''';
+ ConfViewersApps: array[1..6] of string = ('gedit', 'gvim', 'less', 'emacs', 'nano', 'vi');
+ ConfEditorApps: array[1..5] of string = ('gedit', 'gvim', 'emacs', 'nano', 'vi');
+ ConfTerminalApps: array[1..4] of string = (ConstTerminalCommand_xterm, ConstTerminalCommand_rxvt, ConstTerminalCommand_rxvt2, ConstTerminalCommand_gnometerminal);
+ ConfTerminalAppsWParam: array[1..4] of string = ('xterm', 'rxvt', 'rxvt', 'gnome-terminal');
+
+const SMOOTH_SCROLL_STEPS = 5;
+ SMOOTH_SCROLL_DURATION = 45;
+ SMOOTH_SCROLL_STEPS_PAGE = 10;
+ SMOOTH_SCROLL_DURATION_PAGE = 120;
+
+
+
+
+var ConfPanelSep, ConfRowHeight, ConfRowHeightReal, ConfNumHistoryItems,
+ ConfMainWindowWidth, ConfMainWindowHeight, ConfMainWindowPosLeft, ConfMainWindowPosTop, ConfMainWindowState,
+ ConfMainWindowLeftSortColumn, ConfMainWindowLeftSortType, ConfMainWindowRightSortColumn, ConfMainWindowRightSortType,
+ ConfSizeFormat, ConfSizeGroupPrecision, ConfCmdLineTerminalBehaviour, ConfViewerTerminalBehaviour,
+ ConfEditorTerminalBehaviour, ConfLeftTabBarTabIndex, ConfRightTabBarTabIndex, ConfSwitchOtherPanelBehaviour,
+ ConfTabMaxLength: integer;
+
+ ConfLeftPath, ConfRightPath, ConfPanelFont, ConfProfileName, ConfViewer, ConfEditor, ConfTerminalCommand,
+ ConfNormalItemFGColor, ConfActiveItemFGColor, ConfInactiveItemFGColor, ConfSelectedItemFGColor, ConfLinkItemFGColor,
+ ConfDotFileItemFGColor, ConfNormalItemBGColor, ConfActiveItemBGColor, ConfInactiveItemBGColor,
+ ParamLeftDir, ParamRightDir: string;
+
+ ParamDebug, ConfShowDotFiles, ConfClearReadOnlyAttr, ConfDisableMouseRename, ConfUseSystemFont, ConfUseFileTypeIcons,
+ ConfFocusRefresh, ConfNewStyleAltO, ConfDirsInBold, ConfDisableDirectoryBrackets, ParamDisableGnome, ConfWMCompatMode,
+ ConfUseLibcSystem, ConfUseInternalViewer, ParamDisablePlugins: boolean;
+ ConfNormalItemDefaultColors, ConfCursorDefaultColors, ConfInactiveItemDefaultColors, ConfSelectedItemDefaultColors,
+ ConfLinkItemDefaultColors, ConfDotFileItemDefaultColors, ConfLynxLikeMotion, ConfSizeGroupRequestZeroDigits,
+ ConfDisableFileTips, ConfInsMoveDown, ConfSpaceMovesDown, ConfShowFuncButtons, ConfSelectAllDirs, ConfOctalPerm: boolean;
+ ConfMounterUseFSTab, ConfShowTextUIDs, ConfMounterPushDown, ConfSavePanelTabs, ConfDuplicateTabWarning,
+ ConfOpenConnectionsWarning: boolean;
+
+ ConfShowMounterBar: integer;
+ ConfColumnSizes, ConfColumnIDs: array[1..ConstNumPanelColumns] of integer;
+ ConfColumnVisible: array[1..ConstNumPanelColumns] of boolean;
+ ConfUseURI: boolean;
+ ConfColumnTitlesLong, ConfColumnTitlesShort: array[1..ConstNumPanelColumns] of string;
+ ConfParamForceLang: string;
+ ConfTempPath: string;
+ ConfUseSmoothScrolling: boolean;
+
+
+
+
+procedure SetDefaults;
+procedure ReadMainSettings;
+procedure WriteMainSettings;
+procedure ReadMainGUISettings;
+procedure WriteMainGUISettings;
+procedure ReadAssoc;
+procedure WriteAssoc;
+procedure ReadBookmarks;
+procedure WriteBookmarks;
+procedure ReadMounter;
+procedure WriteMounter;
+procedure ReadTabs(const LeftPanel: boolean; TabList: TStringList; TabSortIDs, TabSortTypes: TList);
+procedure WriteTabs(const LeftPanel: boolean; TabList: TStringList; TabSortIDs, TabSortTypes: TList);
+procedure ReadConnections;
+procedure WriteConnections;
+procedure SearchForDefaultApps;
+function CheckConfFilesMod(var ChangedMainGUI, ChangedAssoc, ChangedBookmarks, ChangedMounter, ChangedConnections: boolean): boolean;
+// Returns True if something has changed
+
+implementation
+
+uses Libc, SysUtils, IniFiles, UCoreUtils, UCore, UFileAssoc, UCoreClasses, UGnome, UVFSCore;
+
+var InternalQuickExit, InternalDeleteHistory: boolean;
+ InternalMainGUIConfmtime, InternalBookmarksConfmtime, InternalFAssocConfmtime, InternalMounterConfmtime,
+ InternalConnMgrConfmtime: Longint;
+
+
+function GetFileTime(FileName: string): Longint; forward;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure SetDefaults;
+var i: integer;
+begin
+ InternalMainGUIConfmtime := -1;
+ InternalBookmarksConfmtime := -1;
+ InternalFAssocConfmtime := -1;
+ InternalMounterConfmtime := -1;
+ InternalConnMgrConfmtime := -1;
+ InternalQuickExit := False;
+ ConfPanelSep := 50;
+ ConfLeftPath := '/';
+ ConfRightPath := '/';
+ ConfColumnSizes[1] := 150; // Name
+ ConfColumnSizes[2] := 190; // Name + Extension
+ ConfColumnSizes[3] := 40; // Extension
+ ConfColumnSizes[4] := 90; // Size
+ ConfColumnSizes[5] := 75; // Date + Time
+ ConfColumnSizes[6] := 40; // Date
+ ConfColumnSizes[7] := 40; // Time
+ ConfColumnSizes[8] := 40; // User
+ ConfColumnSizes[9] := 40; // Group
+ ConfColumnSizes[10] := 70; // Attributes
+ for i := 1 to ConstNumPanelColumns do ConfColumnIDs[i] := i;
+ ConfColumnVisible[1] := True;
+ ConfColumnVisible[2] := False;
+ ConfColumnVisible[3] := True;
+ ConfColumnVisible[4] := True;
+ ConfColumnVisible[5] := True;
+ ConfColumnVisible[6] := False;
+ ConfColumnVisible[7] := False;
+ ConfColumnVisible[8] := False;
+ ConfColumnVisible[9] := False;
+ ConfColumnVisible[10] := True;
+ ConfRowHeight := -1;
+ ConfRowHeightReal := ConfDefaultRowHeight;
+ ConfPanelFont := ConfDefaultPanelFont;
+ ConfProfileName := 'Profile_Default';
+ ParamDebug := False;
+ ConfShowDotFiles := False;
+ ConfClearReadOnlyAttr := True;
+ ConfViewer := ConfAppNA;
+ ConfEditor := ConfAppNA;
+ ConfTerminalCommand := ConfAppNA;
+ ConfNumHistoryItems := 20;
+ ConfDisableMouseRename := False;
+ InternalDeleteHistory := False;
+ ConfUseSystemFont := True;
+ ConfUseFileTypeIcons := True;
+ ConfMainWindowWidth := 800;
+ ConfMainWindowHeight := 600;
+ ConfMainWindowPosLeft := -1;
+ ConfMainWindowPosTop := -1;
+ ConfMainWindowState := 0;
+ ConfMainWindowLeftSortColumn := 0;
+ ConfMainWindowLeftSortType := 0; // soAscending
+ ConfMainWindowRightSortColumn := 0;
+ ConfMainWindowRightSortType := 0;
+ ConfFocusRefresh := False;
+ ConfLynxLikeMotion := False;
+ ConfSizeFormat := 0;
+ ConfSizeGroupPrecision := 2;
+ ConfSizeGroupRequestZeroDigits := True;
+ ConfNewStyleAltO := True;
+ ConfDirsInBold := False;
+ ConfDisableDirectoryBrackets := False;
+ ParamDisableGnome := False;
+ ConfWMCompatMode := False;
+ ConfDisableFileTips := False;
+ ConfInsMoveDown := True;
+ ConfSpaceMovesDown := False;
+ ConfShowFuncButtons := True;
+ ConfSelectAllDirs := True;
+ ConfOctalPerm := False;
+ ConfCmdLineTerminalBehaviour := 0; // 0 = Autodetect, 1 = Terminal, 2 = no term.
+ ConfViewerTerminalBehaviour := 0;
+ ConfEditorTerminalBehaviour := 0;
+ ConfUseLibcSystem := False;
+ ConfUseInternalViewer := False;
+ ConfMounterUseFSTab := True;
+ ConfShowMounterBar := 1; // 0 = No mounter bar, 1 = one mounter bar, 2 = two mounter bars above the panels
+ ConfShowTextUIDs := True;
+ ConfMounterPushDown := False;
+ ConfUseURI := False;
+ ParamDisablePlugins := False;
+ ParamLeftDir := '';
+ ParamRightDir := '';
+ ConfLeftTabBarTabIndex := -1;
+ ConfRightTabBarTabIndex := -1;
+ ConfSavePanelTabs := True;
+ ConfParamForceLang := '';
+ ConfSwitchOtherPanelBehaviour := -1;
+ ConfDuplicateTabWarning := True;
+ ConfOpenConnectionsWarning := True;
+ ConfTabMaxLength := 25;
+ ConfTempPath := '/tmp/tuxcmd';
+ ConfUseSmoothScrolling := False;
+
+ // Setup default values for colors
+ ConfNormalItemFGColor := ConfDefaultNormalItemFGColor;
+ ConfNormalItemBGColor := ConfDefaultNormalItemBGColor;
+ ConfActiveItemFGColor := ConfDefaultActiveItemFGColor;
+ ConfActiveItemBGColor := ConfDefaultActiveItemBGColor;
+ ConfInactiveItemFGColor := ConfDefaultInactiveItemFGColor;
+ ConfInactiveItemBGColor := ConfDefaultInactiveItemBGColor;
+ ConfSelectedItemFGColor := ConfDefaultSelectedItemFGColor;
+ ConfLinkItemFGColor := ConfDefaultLinkItemFGColor;
+ ConfDotFileItemFGColor := ConfDefaultDotFileItemFGColor;
+ ConfNormalItemDefaultColors := False;
+ ConfCursorDefaultColors := False;
+ ConfInactiveItemDefaultColors := False;
+ ConfSelectedItemDefaultColors := False;
+ ConfLinkItemDefaultColors := False;
+ ConfDotFileItemDefaultColors := False;
+ SetupColors;
+end;
+
+procedure ReadMainSettings;
+var s: string;
+ IniFile: TMyIniFile;
+ i, j: integer;
+begin
+ try
+ s := IncludeTrailingPathDelimiter(GetHomePath) + ConfDefaultSettingsDir;
+ if not DirectoryExists(s) then
+ if not ForceDirectories(s) then begin
+ DebugMsg(['*** Error: Cannot read user settings']);
+ Exit;
+ end;
+
+ DebugMsg(['Using profile ''', ConfProfileName, '''']);
+ IniFile := TMyIniFile.Create(IncludeTrailingPathDelimiter(s) + 'options', True);
+ try
+ if ParamLeftDir <> '' then ConfLeftPath := ParamLeftDir else
+ ConfLeftPath := IniFile.ReadString(ConfProfileName, 'LeftPath', ConfLeftPath);
+ if ParamRightDir <> '' then ConfRightPath := ParamRightDir else
+ ConfRightPath := IniFile.ReadString(ConfProfileName, 'RightPath', ConfRightPath);
+ ConfShowDotFiles := IniFile.ReadBool(ConfProfileName, 'ShowDotFiles', ConfShowDotFiles);
+ ConfPanelSep := IniFile.ReadInteger(ConfProfileName, 'PanelSep', ConfPanelSep);
+ ConfMainWindowWidth := IniFile.ReadInteger(ConfProfileName, 'MainWindowWidth', ConfMainWindowWidth);
+ ConfMainWindowHeight := IniFile.ReadInteger(ConfProfileName, 'MainWindowHeight', ConfMainWindowHeight);
+ ConfMainWindowPosLeft := IniFile.ReadInteger(ConfProfileName, 'MainWindowPosLeft', ConfMainWindowPosLeft);
+ ConfMainWindowPosTop := IniFile.ReadInteger(ConfProfileName, 'MainWindowPosTop', ConfMainWindowPosTop);
+ ConfMainWindowState := IniFile.ReadInteger(ConfProfileName, 'MainWindowState', ConfMainWindowState);
+ for i := 1 to ConstNumPanelColumns do begin
+ ConfColumnSizes[i] := IniFile.ReadInteger(ConfProfileName, Format('ColumnSize[%d]', [i]), ConfColumnSizes[i]);
+ ConfColumnIDs[i] := IniFile.ReadInteger(ConfProfileName, Format('ColumnIDs[%d]', [i]), ConfColumnIDs[i]);
+ ConfColumnVisible[i] := IniFile.ReadBool(ConfProfileName, Format('ColumnVisible[%d]', [i]), ConfColumnVisible[i]);
+ end;
+ ConfMainWindowLeftSortColumn := IniFile.ReadInteger(ConfProfileName, 'MainWindowLeftSortColumn', ConfMainWindowLeftSortColumn);
+ ConfMainWindowLeftSortType := IniFile.ReadInteger(ConfProfileName, 'MainWindowLeftSortType', ConfMainWindowLeftSortType);
+ ConfMainWindowRightSortColumn := IniFile.ReadInteger(ConfProfileName, 'MainWindowRightSortColumn', ConfMainWindowRightSortColumn);
+ ConfMainWindowRightSortType := IniFile.ReadInteger(ConfProfileName, 'MainWindowRightSortType', ConfMainWindowRightSortType);
+ if not InternalDeleteHistory then begin
+ i := IniFile.ReadInteger('CommandLineHistory', 'NumItems', 0);
+ if i > 0 then
+ for j := 0 to i - 1 do
+ CommandLineHistory.Add(IniFile.ReadString('CommandLineHistory', Format('Item%d', [j]), ''));
+ i := IniFile.ReadInteger('SelectHistory', 'NumItems', 0);
+ if i > 0 then
+ for j := 0 to i - 1 do begin
+ s := IniFile.ReadString('SelectHistory', Format('Item%d', [j]), '');
+ if s <> '*.*' then SelectHistory.Add(s);
+ end;
+ i := IniFile.ReadInteger('SearchHistory', 'NumItems', 0);
+ if i > 0 then
+ for j := 0 to i - 1 do
+ SearchHistory.Add(IniFile.ReadString('SearchHistory', Format('Item%d', [j]), ''));
+ end;
+ ConfShowMounterBar := IniFile.ReadInteger(ConfProfileName, 'ShowMounterBar', ConfShowMounterBar);
+
+ finally
+ try IniFile.Free; except end;
+ end;
+ except end;
+end;
+
+procedure WriteMainSettings;
+var s: string;
+ IniFile: TMyIniFile;
+ i: integer;
+begin
+ if InternalQuickExit then Exit;
+ ConfLeftPath := LeftLocalEngine.Path;
+ ConfRightPath := RightLocalEngine.Path;
+ try
+ s := IncludeTrailingPathDelimiter(GetHomePath) + ConfDefaultSettingsDir;
+ if not DirectoryExists(s) then
+ if not ForceDirectories(s) then begin
+ DebugMsg(['*** Error: Cannot save user settings']);
+ Exit;
+ end;
+
+ IniFile := TMyIniFile.Create(IncludeTrailingPathDelimiter(s) + 'options', False);
+ try try
+ IniFile.WriteString(ConfProfileName, 'LeftPath', ConfLeftPath);
+ IniFile.WriteString(ConfProfileName, 'RightPath', ConfRightPath);
+ IniFile.WriteBool(ConfProfileName, 'ShowDotFiles', ConfShowDotFiles);
+ IniFile.WriteInteger(ConfProfileName, 'PanelSep', ConfPanelSep);
+ IniFile.WriteInteger(ConfProfileName, 'MainWindowState', ConfMainWindowState);
+ if ConfMainWindowState <> 4 then begin
+ IniFile.WriteInteger(ConfProfileName, 'MainWindowWidth', ConfMainWindowWidth);
+ IniFile.WriteInteger(ConfProfileName, 'MainWindowHeight', ConfMainWindowHeight);
+ IniFile.WriteInteger(ConfProfileName, 'MainWindowPosLeft', ConfMainWindowPosLeft);
+ IniFile.WriteInteger(ConfProfileName, 'MainWindowPosTop', ConfMainWindowPosTop);
+ end;
+ for i := 1 to ConstNumPanelColumns do begin
+ IniFile.WriteInteger(ConfProfileName, Format('ColumnSize[%d]', [i]), ConfColumnSizes[i]);
+ IniFile.WriteInteger(ConfProfileName, Format('ColumnIDs[%d]', [i]), ConfColumnIDs[i]);
+ IniFile.WriteBool(ConfProfileName, Format('ColumnVisible[%d]', [i]), ConfColumnVisible[i]);
+ end;
+ IniFile.WriteInteger(ConfProfileName, 'MainWindowLeftSortColumn', ConfMainWindowLeftSortColumn);
+ IniFile.WriteInteger(ConfProfileName, 'MainWindowLeftSortType', ConfMainWindowLeftSortType);
+ IniFile.WriteInteger(ConfProfileName, 'MainWindowRightSortColumn', ConfMainWindowRightSortColumn);
+ IniFile.WriteInteger(ConfProfileName, 'MainWindowRightSortType', ConfMainWindowRightSortType);
+ IniFile.WriteInteger('CommandLineHistory', 'NumItems', CommandLineHistory.Count);
+ IniFile.WriteInteger('SelectHistory', 'NumItems', SelectHistory.Count);
+ IniFile.WriteInteger('SearchHistory', 'NumItems', SearchHistory.Count);
+ if CommandLineHistory.Count > 0 then
+ for i := 0 to CommandLineHistory.Count - 1 do
+ IniFile.WriteString('CommandLineHistory', Format('Item%d', [i]), CommandLineHistory[i]);
+ if SelectHistory.Count > 0 then
+ for i := 0 to SelectHistory.Count - 1 do
+ IniFile.WriteString('SelectHistory', Format('Item%d', [i]), SelectHistory[i]);
+ if SearchHistory.Count > 0 then
+ for i := 0 to SearchHistory.Count - 1 do
+ IniFile.WriteString('SearchHistory', Format('Item%d', [i]), SearchHistory[i]);
+ IniFile.WriteInteger(ConfProfileName, 'ShowMounterBar', ConfShowMounterBar);
+
+ except
+ on E: Exception do DebugMsg(['*** Error: Cannot save user settings (', E.ClassName, '): ', E.Message]);
+ end;
+ finally
+ IniFile.Free;
+ end;
+ except end;
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure ReadMainGUISettings;
+var s: string;
+ IniFile: TMyIniFile;
+begin
+ try
+ s := IncludeTrailingPathDelimiter(GetHomePath) + ConfDefaultSettingsDir;
+ if not DirectoryExists(s) then
+ if not ForceDirectories(s) then begin
+ DebugMsg(['*** Error: Cannot read user settings']);
+ Exit;
+ end;
+
+ IniFile := TMyIniFile.Create(IncludeTrailingPathDelimiter(s) + 'gui', True);
+ try
+ ConfPanelFont := IniFile.ReadString(ConfProfileName, 'PanelFont', ConfDefaultPanelFont);
+ ConfRowHeight := IniFile.ReadInteger(ConfProfileName, 'RowHeight', ConfRowHeight);
+ if ConfRowHeight > 0 then ConfRowHeightReal := ConfRowHeight;
+ ConfClearReadOnlyAttr := IniFile.ReadBool(ConfProfileName, 'ClearReadOnlyAttr', ConfClearReadOnlyAttr);
+ ConfViewer := IniFile.ReadString(ConfProfileName, 'Viewer', ConfViewer);
+ ConfEditor := IniFile.ReadString(ConfProfileName, 'Editor', ConfEditor);
+ ConfTerminalCommand := IniFile.ReadString(ConfProfileName, 'TerminalCommand', ConfTerminalCommand);
+ ConfNumHistoryItems := IniFile.ReadInteger('General', 'NumHistoryItems', ConfNumHistoryItems);
+ ConfDisableMouseRename := IniFile.ReadBool(ConfProfileName, 'DisableMouseRename', ConfDisableMouseRename);
+ ConfUseSystemFont := IniFile.ReadBool(ConfProfileName, 'UseSystemFont', ConfUseSystemFont);
+ ConfUseFileTypeIcons := IniFile.ReadBool(ConfProfileName, 'UseFileTypeIcons', ConfUseFileTypeIcons);
+ // Read color settings
+ ConfNormalItemFGColor := IniFile.ReadString(ConfProfileName, 'NormalItemFGColor', ConfNormalItemFGColor);
+ ConfNormalItemBGColor := IniFile.ReadString(ConfProfileName, 'NormalItemBGColor', ConfNormalItemBGColor);
+ ConfActiveItemFGColor := IniFile.ReadString(ConfProfileName, 'ActiveItemFGColor', ConfActiveItemFGColor);
+ ConfActiveItemBGColor := IniFile.ReadString(ConfProfileName, 'ActiveItemBGColor', ConfActiveItemBGColor);
+ ConfInactiveItemFGColor := IniFile.ReadString(ConfProfileName, 'InactiveItemFGColor', ConfInactiveItemFGColor);
+ ConfInactiveItemBGColor := IniFile.ReadString(ConfProfileName, 'InactiveItemBGColor', ConfInactiveItemBGColor);
+ ConfSelectedItemFGColor := IniFile.ReadString(ConfProfileName, 'SelectedItemFGColor', ConfSelectedItemFGColor);
+ ConfLinkItemFGColor := IniFile.ReadString(ConfProfileName, 'LinkItemFGColor', ConfLinkItemFGColor);
+ ConfDotFileItemFGColor := IniFile.ReadString(ConfProfileName, 'DotFileItemFGColor', ConfDotFileItemFGColor);
+ ConfNormalItemDefaultColors := IniFile.ReadBool(ConfProfileName, 'NormalItemDefaultColors', ConfNormalItemDefaultColors);
+ ConfCursorDefaultColors := IniFile.ReadBool(ConfProfileName, 'CursorDefaultColors', ConfCursorDefaultColors);
+ ConfInactiveItemDefaultColors := IniFile.ReadBool(ConfProfileName, 'InactiveItemDefaultColors', ConfInactiveItemDefaultColors);
+ ConfSelectedItemDefaultColors := IniFile.ReadBool(ConfProfileName, 'SelectedItemDefaultColors', ConfSelectedItemDefaultColors);
+ ConfLinkItemDefaultColors := IniFile.ReadBool(ConfProfileName, 'LinkItemDefaultColors', ConfLinkItemDefaultColors);
+ ConfDotFileItemDefaultColors := IniFile.ReadBool(ConfProfileName, 'DotFileItemDefaultColors', ConfDotFileItemDefaultColors);
+ ConfLynxLikeMotion := IniFile.ReadBool(ConfProfileName, 'LynxLikeMotion', ConfLynxLikeMotion);
+ ConfDirsInBold := IniFile.ReadBool(ConfProfileName, 'DirsInBold', ConfDirsInBold);
+ ConfNewStyleAltO := IniFile.ReadBool(ConfProfileName, 'NewStyleAltO', ConfNewStyleAltO);
+ ConfWMCompatMode := IniFile.ReadBool(ConfProfileName, 'WMCompatibilityMode', ConfWMCompatMode);
+ ConfDisableFileTips := IniFile.ReadBool(ConfProfileName, 'DisableFileTips', ConfDisableFileTips);
+ ConfDisableDirectoryBrackets := IniFile.ReadBool(ConfProfileName, 'DisableDirectoryBrackets', ConfDisableDirectoryBrackets);
+ ConfInsMoveDown := IniFile.ReadBool(ConfProfileName, 'InsMoveDown', ConfInsMoveDown);
+ ConfSpaceMovesDown := IniFile.ReadBool(ConfProfileName, 'SpaceMovesDown', ConfSpaceMovesDown);
+ ConfSelectAllDirs := IniFile.ReadBool(ConfProfileName, 'SelectAllDirs', ConfSelectAllDirs);
+ ConfShowFuncButtons := IniFile.ReadBool(ConfProfileName, 'ShowFuncButtons', ConfShowFuncButtons);
+ ConfOctalPerm := IniFile.ReadBool(ConfProfileName, 'OctalPerm', ConfOctalPerm);
+ ConfFocusRefresh := IniFile.ReadBool(ConfProfileName, 'FocusRefresh', ConfFocusRefresh);
+ ConfSizeFormat := IniFile.ReadInteger(ConfProfileName, 'SizeFormat', ConfSizeFormat);
+ ConfSizeGroupPrecision := IniFile.ReadInteger(ConfProfileName, 'SizeGroupPrecision', ConfSizeGroupPrecision);
+ ConfSizeGroupRequestZeroDigits := IniFile.ReadBool(ConfProfileName, 'SizeGroupRequestZeroDigits', ConfSizeGroupRequestZeroDigits);
+ ConfCmdLineTerminalBehaviour := IniFile.ReadInteger(ConfProfileName, 'CmdLineTerminalBehaviour', ConfCmdLineTerminalBehaviour);
+ ConfViewerTerminalBehaviour := IniFile.ReadInteger(ConfProfileName, 'ViewerTerminalBehaviour', ConfViewerTerminalBehaviour);
+ ConfEditorTerminalBehaviour := IniFile.ReadInteger(ConfProfileName, 'EditorTerminalBehaviour', ConfEditorTerminalBehaviour);
+ ConfUseLibcSystem := IniFile.ReadBool(ConfProfileName, 'CompatUseLibcSystem', ConfUseLibcSystem);
+ ConfUseInternalViewer := IniFile.ReadBool(ConfProfileName, 'UseInternalViewer', ConfUseInternalViewer);
+ ConfSwitchOtherPanelBehaviour := IniFile.ReadInteger(ConfProfileName, 'SwitchOtherPanelBehaviour', ConfSwitchOtherPanelBehaviour);
+ ConfDuplicateTabWarning := IniFile.ReadBool(ConfProfileName, 'DuplicateTabWarning', ConfDuplicateTabWarning);
+ ConfOpenConnectionsWarning := IniFile.ReadBool(ConfProfileName, 'OpenConnectionsWarning', ConfOpenConnectionsWarning);
+ ConfShowTextUIDs := IniFile.ReadBool(ConfProfileName, 'ShowTextUIDs', ConfShowTextUIDs);
+
+
+ (********************************************* NEW !!!! *************************************************)
+ ConfSavePanelTabs := IniFile.ReadBool(ConfProfileName, 'SavePanelTabs', ConfSavePanelTabs);
+ ConfTabMaxLength := IniFile.ReadInteger(ConfProfileName, 'TabMaxLength', ConfTabMaxLength);
+ ConfTempPath := IniFile.ReadString(ConfProfileName, 'TempPath', ConfTempPath);
+ ConfUseSmoothScrolling := IniFile.ReadBool(ConfProfileName, 'UseSmoothScrolling', ConfUseSmoothScrolling);
+
+
+ SearchForDefaultApps;
+ finally
+ try IniFile.Free; except end;
+ InternalMainGUIConfmtime := GetFileTime(IncludeTrailingPathDelimiter(s) + 'gui');
+ end;
+ except end;
+end;
+
+procedure WriteMainGUISettings;
+var s: string;
+ IniFile: TMyIniFile;
+begin
+ if InternalQuickExit then Exit;
+ try
+ s := IncludeTrailingPathDelimiter(GetHomePath) + ConfDefaultSettingsDir;
+ if not DirectoryExists(s) then
+ if not ForceDirectories(s) then begin
+ DebugMsg(['*** Error: Cannot save user settings']);
+ Exit;
+ end;
+
+ IniFile := TMyIniFile.Create(IncludeTrailingPathDelimiter(s) + 'gui', False);
+ try try
+ IniFile.WriteString(ConfProfileName, 'PanelFont', ConfPanelFont);
+ IniFile.WriteInteger(ConfProfileName, 'RowHeight', ConfRowHeight);
+ IniFile.WriteBool(ConfProfileName, 'ClearReadOnlyAttr', ConfClearReadOnlyAttr);
+ IniFile.WriteString(ConfProfileName, 'Viewer', ConfViewer);
+ IniFile.WriteString(ConfProfileName, 'Editor', ConfEditor);
+ IniFile.WriteString(ConfProfileName, 'TerminalCommand', ConfTerminalCommand);
+ IniFile.WriteInteger('General', 'NumHistoryItems', ConfNumHistoryItems);
+ IniFile.WriteBool(ConfProfileName, 'DisableMouseRename', ConfDisableMouseRename);
+ IniFile.WriteBool(ConfProfileName, 'UseSystemFont', ConfUseSystemFont);
+ IniFile.WriteBool(ConfProfileName, 'UseFileTypeIcons', ConfUseFileTypeIcons);
+
+ // Save color settings
+ IniFile.WriteString(ConfProfileName, 'NormalItemFGColor', ConfNormalItemFGColor);
+ IniFile.WriteString(ConfProfileName, 'NormalItemBGColor', ConfNormalItemBGColor);
+ IniFile.WriteString(ConfProfileName, 'ActiveItemFGColor', ConfActiveItemFGColor);
+ IniFile.WriteString(ConfProfileName, 'ActiveItemBGColor', ConfActiveItemBGColor);
+ IniFile.WriteString(ConfProfileName, 'InactiveItemFGColor', ConfInactiveItemFGColor);
+ IniFile.WriteString(ConfProfileName, 'InactiveItemBGColor', ConfInactiveItemBGColor);
+ IniFile.WriteString(ConfProfileName, 'SelectedItemFGColor', ConfSelectedItemFGColor);
+ IniFile.WriteString(ConfProfileName, 'LinkItemFGColor', ConfLinkItemFGColor);
+ IniFile.WriteString(ConfProfileName, 'DotFileItemFGColor', ConfDotFileItemFGColor);
+ IniFile.WriteBool(ConfProfileName, 'NormalItemDefaultColors', ConfNormalItemDefaultColors);
+ IniFile.WriteBool(ConfProfileName, 'CursorDefaultColors', ConfCursorDefaultColors);
+ IniFile.WriteBool(ConfProfileName, 'InactiveItemDefaultColors', ConfInactiveItemDefaultColors);
+ IniFile.WriteBool(ConfProfileName, 'SelectedItemDefaultColors', ConfSelectedItemDefaultColors);
+ IniFile.WriteBool(ConfProfileName, 'LinkItemDefaultColors', ConfLinkItemDefaultColors);
+ IniFile.WriteBool(ConfProfileName, 'DotFileItemDefaultColors', ConfDotFileItemDefaultColors);
+ IniFile.WriteBool(ConfProfileName, 'LynxLikeMotion', ConfLynxLikeMotion);
+ IniFile.WriteInteger(ConfProfileName, 'SizeFormat', ConfSizeFormat);
+ IniFile.WriteInteger(ConfProfileName, 'SizeGroupPrecision', ConfSizeGroupPrecision);
+ IniFile.WriteBool(ConfProfileName, 'SizeGroupRequestZeroDigits', ConfSizeGroupRequestZeroDigits);
+ IniFile.WriteBool(ConfProfileName, 'NewStyleAltO', ConfNewStyleAltO);
+ IniFile.WriteBool(ConfProfileName, 'DirsInBold', ConfDirsInBold);
+ IniFile.WriteBool(ConfProfileName, 'DisableDirectoryBrackets', ConfDisableDirectoryBrackets);
+ IniFile.WriteBool(ConfProfileName, 'WMCompatibilityMode', ConfWMCompatMode);
+ IniFile.WriteBool(ConfProfileName, 'DisableFileTips', ConfDisableFileTips);
+ IniFile.WriteBool(ConfProfileName, 'InsMoveDown', ConfInsMoveDown);
+ IniFile.WriteBool(ConfProfileName, 'SpaceMovesDown', ConfSpaceMovesDown);
+ IniFile.WriteBool(ConfProfileName, 'ShowFuncButtons', ConfShowFuncButtons);
+ IniFile.WriteBool(ConfProfileName, 'SelectAllDirs', ConfSelectAllDirs);
+ IniFile.WriteBool(ConfProfileName, 'OctalPerm', ConfOctalPerm);
+ IniFile.WriteBool(ConfProfileName, 'FocusRefresh', ConfFocusRefresh);
+ IniFile.WriteInteger(ConfProfileName, 'CmdLineTerminalBehaviour', ConfCmdLineTerminalBehaviour);
+ IniFile.WriteInteger(ConfProfileName, 'ViewerTerminalBehaviour', ConfViewerTerminalBehaviour);
+ IniFile.WriteInteger(ConfProfileName, 'EditorTerminalBehaviour', ConfEditorTerminalBehaviour);
+ IniFile.WriteBool(ConfProfileName, 'CompatUseLibcSystem', ConfUseLibcSystem);
+ IniFile.WriteBool(ConfProfileName, 'UseInternalViewer', ConfUseInternalViewer);
+ IniFile.WriteInteger(ConfProfileName, 'SwitchOtherPanelBehaviour', ConfSwitchOtherPanelBehaviour);
+ IniFile.WriteBool(ConfProfileName, 'DuplicateTabWarning', ConfDuplicateTabWarning);
+ IniFile.WriteBool(ConfProfileName, 'OpenConnectionsWarning', ConfOpenConnectionsWarning);
+ IniFile.WriteBool(ConfProfileName, 'ShowTextUIDs', ConfShowTextUIDs);
+
+ (********************************************* NEW !!!! *************************************************)
+ IniFile.WriteBool(ConfProfileName, 'SavePanelTabs', ConfSavePanelTabs);
+ IniFile.WriteInteger(ConfProfileName, 'TabMaxLength', ConfTabMaxLength);
+ IniFile.WriteString(ConfProfileName, 'TempPath', ConfTempPath);
+ IniFile.WriteBool(ConfProfileName, 'UseSmoothScrolling', ConfUseSmoothScrolling);
+
+ except
+ on E: Exception do DebugMsg(['*** Error: Cannot save user settings (', E.ClassName, '): ', E.Message]);
+ end;
+
+ finally
+ IniFile.Free;
+ InternalMainGUIConfmtime := GetFileTime(IncludeTrailingPathDelimiter(s) + 'gui');
+ end;
+ except end;
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure ReadAssoc;
+var s: string;
+ IniFile: TMyIniFile;
+ Sections: TStringList;
+ i, j, cnt: integer;
+ Item: TFileAssoc;
+ Action: TAssocAction;
+begin
+ try
+ s := IncludeTrailingPathDelimiter(GetHomePath) + ConfDefaultSettingsDir;
+ if not DirectoryExists(s) then
+ if not ForceDirectories(s) then begin
+ DebugMsg(['*** Error: Cannot read file association settings']);
+ Exit;
+ end;
+
+ try
+ if not Assigned(AssocList) then AssocList := TList.Create else
+ if AssocList.Count > 0 then for i := 0 to AssocList.Count - 1 do TFileAssoc(AssocList[i]).Free;
+ except end;
+ AssocList.Clear;
+
+ IniFile := TMyIniFile.Create(IncludeTrailingPathDelimiter(s) + 'filetypes', True);
+ try
+ Sections := TStringList.Create;
+ IniFile.ReadSections(Sections);
+ if Sections.Count > 0 then
+ for i := 0 to Sections.Count - 1 do
+ if Sections[i] <> 'General' then begin
+ Item := TFileAssoc.Create;
+ with Item do begin
+ if (Sections[i] = ConstFTAMetaDirectory) or (Sections[i] = ConstFTAMetaFile)
+ then Extensions := ''
+ else Extensions := Sections[i];
+ FileTypeName := IniFile.ReadString(Sections[i], 'FileTypeName', '');
+ DefaultAction := IniFile.ReadInteger(Sections[i], 'DefaultAction', 0);
+ cnt := IniFile.ReadInteger(Sections[i], 'NumActions', 0);
+ FileTypeIcon := IniFile.ReadString(Sections[i], 'FileTypeIcon', '');
+ ColorString := IniFile.ReadString(Sections[i], 'ColorString', '');
+ if cnt > 0 then
+ for j := 0 to cnt - 1 do begin
+ Action := TAssocAction.Create;
+ with Action do begin
+ ActionName := IniFile.ReadString(Sections[i], Format('Action%dName', [j]), '');
+ ActionCommand := IniFile.ReadString(Sections[i], Format('Action%dCommand', [j]), '');
+ RunInTerminal := IniFile.ReadBool(Sections[i], Format('Action%dRunInTerminal', [j]), False);
+ AutodetectGUI := IniFile.ReadBool(Sections[i], Format('Action%dAutodetectGUI', [j]), True);
+ end;
+ if (Action.ActionName <> '') {and (Action.ActionCommand <> '')} then ActionList.Add(Action);
+ end;
+ end;
+ {if Length(Trim(Item.Extensions)) > 0 then} AssocList.Add(Item);
+ end;
+ Sections.Free;
+ AddDefaultItems(AssocList);
+ if Assigned(FileIcon) then RecreateIcons(AssocList);
+ finally
+ try IniFile.Free; except end;
+ InternalFAssocConfmtime := GetFileTime(IncludeTrailingPathDelimiter(s) + 'filetypes');
+ end;
+ except end;
+end;
+
+procedure WriteAssoc;
+var i, j: integer;
+ IniFile: TMyIniFile;
+ s, SectionTitle: string;
+begin
+ if InternalQuickExit then Exit;
+ try
+ s := IncludeTrailingPathDelimiter(GetHomePath) + ConfDefaultSettingsDir;
+ if not DirectoryExists(s) then
+ if not ForceDirectories(s) then begin
+ DebugMsg(['*** Error: Cannot save file association settings']);
+ Exit;
+ end;
+ s := IncludeTrailingPathDelimiter(s) + 'filetypes';
+ if Libc.access(PChar(s), R_OK) = 0 then Libc.remove(PChar(s));
+
+ IniFile := TMyIniFile.Create(s, False);
+ try try
+ if AssocList.Count > 0 then
+ for i := 0 to AssocList.Count - 1 do
+ with TFileAssoc(AssocList[i]) do begin
+ if (FileTypeName = ConstFTAMetaDirectory) or (FileTypeName = ConstFTAMetaFile)
+ then SectionTitle := FileTypeName
+ else SectionTitle := Extensions;
+ IniFile.EraseSection(SectionTitle);
+ IniFile.WriteString(SectionTitle, 'FileTypeName', FileTypeName);
+ IniFile.WriteString(SectionTitle, 'FileTypeIcon', FileTypeIcon);
+ IniFile.WriteInteger(SectionTitle, 'DefaultAction', DefaultAction);
+ IniFile.WriteInteger(SectionTitle, 'NumActions', ActionList.Count);
+ IniFile.WriteString(SectionTitle, 'ColorString', ColorString);
+ if ActionList.Count > 0 then
+ for j := 0 to ActionList.Count - 1 do begin
+ IniFile.WriteString(SectionTitle, Format('Action%dName', [j]), TAssocAction(ActionList[j]).ActionName);
+ IniFile.WriteString(SectionTitle, Format('Action%dCommand', [j]), TAssocAction(ActionList[j]).ActionCommand);
+ IniFile.WriteBool(SectionTitle, Format('Action%dRunInTerminal', [j]), TAssocAction(ActionList[j]).RunInTerminal);
+ IniFile.WriteBool(SectionTitle, Format('Action%dAutodetectGUI', [j]), TAssocAction(ActionList[j]).AutodetectGUI);
+ end;
+ end;
+ except
+ on E: Exception do DebugMsg(['*** Error: Cannot save file association settings (', E.ClassName, '): ', E.Message]);
+ end;
+ finally
+ IniFile.Free;
+ InternalFAssocConfmtime := GetFileTime(s);
+ end;
+ except end;
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure ReadBookmarks;
+var s: string;
+begin
+ try
+ s := IncludeTrailingPathDelimiter(IncludeTrailingPathDelimiter(GetHomePath) + ConfDefaultSettingsDir) + 'bookmarks';
+ Bookmarks.LoadFromFile(s);
+ InternalBookmarksConfmtime := GetFileTime(s);
+ except
+ end;
+end;
+
+procedure WriteBookmarks;
+var s: string;
+begin
+ if InternalQuickExit then Exit;
+ try
+ s := IncludeTrailingPathDelimiter(IncludeTrailingPathDelimiter(GetHomePath) + ConfDefaultSettingsDir) + 'bookmarks';
+ Bookmarks.SaveToFile(s);
+ InternalBookmarksConfmtime := GetFileTime(s);
+ except
+ end;
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure ReadMounter;
+var s: string;
+ IniFile: TMyIniFile;
+ Sections: TStringList;
+ i: integer;
+ Item: TMounterItem;
+begin
+ try
+ s := IncludeTrailingPathDelimiter(GetHomePath) + ConfDefaultSettingsDir;
+ if not DirectoryExists(s) then
+ if not ForceDirectories(s) then begin
+ DebugMsg(['*** Error: Cannot read file association settings']);
+ Exit;
+ end;
+
+ try
+ if not Assigned(MounterList) then MounterList := TList.Create else
+ if MounterList.Count > 0 then for i := 0 to MounterList.Count - 1 do TMounterItem(MounterList[i]).Free;
+ except end;
+ MounterList.Clear;
+
+ IniFile := TMyIniFile.Create(IncludeTrailingPathDelimiter(s) + 'mounter', True);
+ try
+ Sections := TStringList.Create;
+ IniFile.ReadSections(Sections);
+ if Sections.Count > 0 then
+ for i := 0 to Sections.Count - 1 do
+ if Sections[i] = 'General' then begin
+ ConfMounterUseFSTab := IniFile.ReadBool('General', 'MounterUseFSTab', ConfMounterUseFSTab);
+ ConfMounterPushDown := IniFile.ReadBool('General', 'MounterPushDown', ConfMounterPushDown);
+ end else begin
+ Item := TMounterItem.Create;
+ with Item do begin
+ Device := Sections[i];
+ DisplayText := IniFile.ReadString(Sections[i], 'DisplayText', '');
+ MountPath := IniFile.ReadString(Sections[i], 'MountPath', '');
+ IconPath := IniFile.ReadString(Sections[i], 'IconPath', '');
+ MountCommand := IniFile.ReadString(Sections[i], 'MountCommand', '');
+ UmountCommand := IniFile.ReadString(Sections[i], 'UmountCommand', '');
+ DeviceType := IniFile.ReadInteger(Sections[i], 'DeviceType', 0);
+ end;
+ MounterList.Add(Item);
+ end;
+ Sections.Free;
+ finally
+ try IniFile.Free; except end;
+ InternalMounterConfmtime := GetFileTime(IncludeTrailingPathDelimiter(s) + 'mounter');
+ end;
+ except end;
+end;
+
+procedure WriteMounter;
+var i: integer;
+ IniFile: TMyIniFile;
+ s, SectionTitle: string;
+begin
+ if InternalQuickExit then Exit;
+ try
+ s := IncludeTrailingPathDelimiter(GetHomePath) + ConfDefaultSettingsDir;
+ if not DirectoryExists(s) then
+ if not ForceDirectories(s) then begin
+ DebugMsg(['*** Error: Cannot save file association settings']);
+ Exit;
+ end;
+ s := IncludeTrailingPathDelimiter(s) + 'mounter';
+ if Libc.access(PChar(s), R_OK) = 0 then Libc.remove(PChar(s));
+
+ IniFile := TMyIniFile.Create(s, False);
+ try try
+ IniFile.WriteBool('General', 'MounterUseFSTab', ConfMounterUseFSTab);
+ IniFile.WriteBool('General', 'MounterPushDown', ConfMounterPushDown);
+ if MounterList.Count > 0 then
+ for i := 0 to MounterList.Count - 1 do
+ with TMounterItem(MounterList[i]) do begin
+ SectionTitle := Device;
+ IniFile.EraseSection(SectionTitle);
+ IniFile.WriteString(SectionTitle, 'DisplayText', DisplayText);
+ IniFile.WriteString(SectionTitle, 'MountPath', MountPath);
+ IniFile.WriteString(SectionTitle, 'IconPath', IconPath);
+ IniFile.WriteString(SectionTitle, 'MountCommand', MountCommand);
+ IniFile.WriteString(SectionTitle, 'UmountCommand', UmountCommand);
+ IniFile.WriteInteger(SectionTitle, 'DeviceType', DeviceType);
+ end;
+ except
+ on E: Exception do DebugMsg(['*** Error: Cannot save file association settings (', E.ClassName, '): ', E.Message]);
+ end;
+ finally
+ IniFile.Free;
+ InternalMounterConfmtime := GetFileTime(s);
+ end;
+ except end;
+end;
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure ReadTabs(const LeftPanel: boolean; TabList: TStringList; TabSortIDs, TabSortTypes: TList);
+const PanelPrefixes: array[boolean] of string = ('Left', 'Right');
+var s, Section: string;
+ IniFile: TMyIniFile;
+ i, j: integer;
+ NumItems: integer;
+begin
+ try
+ s := IncludeTrailingPathDelimiter(GetHomePath) + ConfDefaultSettingsDir;
+ if not DirectoryExists(s) then
+ if not ForceDirectories(s) then begin
+ DebugMsg(['*** Error: Cannot read panel tabs']);
+ Exit;
+ end;
+
+ IniFile := TMyIniFile.Create(IncludeTrailingPathDelimiter(s) + 'tabs', True);
+ try
+ Section := Format('%s_%spanel', [ConfProfileName, PanelPrefixes[LeftPanel]]);
+ NumItems := IniFile.ReadInteger(Section, 'NumTabs', 0);
+ if LeftPanel then ConfLeftTabBarTabIndex := IniFile.ReadInteger(Section, 'TabIndex', ConfLeftTabBarTabIndex)
+ else ConfRightTabBarTabIndex := IniFile.ReadInteger(Section, 'TabIndex', ConfRightTabBarTabIndex);
+ if NumItems > 0 then
+ for i := 0 to NumItems - 1 do begin
+ s := IniFile.ReadString(Section, Format('Tab%d', [i]), '');
+ if Length(s) > 0 then TabList.Add(s);
+ j := IniFile.ReadInteger(Section, Format('Tab%d_SortID', [i]), 0);
+ TabSortIDs.Add(Pointer(j));
+ j := IniFile.ReadInteger(Section, Format('Tab%d_SortType', [i]), 0);
+ TabSortTypes.Add(Pointer(j));
+ end;
+ finally
+ try IniFile.Free; except end;
+ end;
+ except end;
+end;
+
+procedure WriteTabs(const LeftPanel: boolean; TabList: TStringList; TabSortIDs, TabSortTypes: TList);
+const PanelPrefixes: array[boolean] of string = ('Left', 'Right');
+var s, Section: string;
+ IniFile: TMyIniFile;
+ i: integer;
+begin
+ if InternalQuickExit then Exit;
+ try
+ s := IncludeTrailingPathDelimiter(GetHomePath) + ConfDefaultSettingsDir;
+ if not DirectoryExists(s) then
+ if not ForceDirectories(s) then begin
+ DebugMsg(['*** Error: Cannot save panel tabs']);
+ Exit;
+ end;
+
+ IniFile := TMyIniFile.Create(IncludeTrailingPathDelimiter(s) + 'tabs', False);
+ try try
+ Section := Format('%s_%spanel', [ConfProfileName, PanelPrefixes[LeftPanel]]);
+ IniFile.EraseSection(Section);
+ IniFile.WriteInteger(Section, 'NumTabs', TabList.Count);
+ if LeftPanel then IniFile.WriteInteger(Section, 'TabIndex', ConfLeftTabBarTabIndex)
+ else IniFile.WriteInteger(Section, 'TabIndex', ConfRightTabBarTabIndex);
+ if TabList.Count > 0 then
+ for i := 0 to TabList.Count - 1 do begin
+ IniFile.WriteString(Section, Format('Tab%d', [i]), TabList[i]);
+ IniFile.WriteInteger(Section, Format('Tab%d_SortID', [i]), Integer(TabSortIDs[i]));
+ IniFile.WriteInteger(Section, Format('Tab%d_SortType', [i]), Integer(TabSortTypes[i]));
+ end;
+ except
+ on E: Exception do DebugMsg(['*** Error: Cannot save panel tabs settings (', E.ClassName, '): ', E.Message]);
+ end;
+ finally
+ IniFile.Free;
+ end;
+ except end;
+end;
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure ReadConnections;
+var s: string;
+ IniFile: TMyIniFile;
+ Sections: TStringList;
+ i: integer;
+ Item: TConnMgrItem;
+begin
+ try
+ s := IncludeTrailingPathDelimiter(GetHomePath) + ConfDefaultSettingsDir;
+ if not DirectoryExists(s) then
+ if not ForceDirectories(s) then begin
+ DebugMsg(['*** Error: Cannot read connection manager settings']);
+ Exit;
+ end;
+
+ try
+ if not Assigned(ConnectionMgrList) then ConnectionMgrList := TList.Create else
+ if ConnectionMgrList.Count > 0 then for i := 0 to ConnectionMgrList.Count - 1 do TConnMgrItem(ConnectionMgrList[i]).Free;
+ except end;
+ ConnectionMgrList.Clear;
+
+ IniFile := TMyIniFile.Create(IncludeTrailingPathDelimiter(s) + 'connmgr', True);
+ try
+ Sections := TStringList.Create;
+ IniFile.ReadSections(Sections);
+ if Sections.Count > 0 then
+ for i := 0 to Sections.Count - 1 do
+{ if Sections[i] = 'General' then begin
+ ConfMounterUseFSTab := IniFile.ReadBool('General', 'MounterUseFSTab', ConfMounterUseFSTab);
+ ConfMounterPushDown := IniFile.ReadBool('General', 'MounterPushDown', ConfMounterPushDown);
+ end else} begin
+ Item := TConnMgrItem.Create;
+ with Item do begin
+ ConnectionName := Sections[i];
+ ServiceType := IniFile.ReadString(Sections[i], 'ServiceType', '');
+ Server := IniFile.ReadString(Sections[i], 'Server', '');
+ Username := IniFile.ReadString(Sections[i], 'Username', '');
+ Password := IniFile.ReadString(Sections[i], 'Password', '');
+ TargetDir := IniFile.ReadString(Sections[i], 'TargetDir', '');
+ PluginID := IniFile.ReadString(Sections[i], 'PluginID', '');
+ URI := ConstructURI(False, ServiceType, Server, Username, Password, TargetDir);
+ end;
+ ConnectionMgrList.Add(Item);
+ end;
+ Sections.Free;
+ finally
+ try IniFile.Free; except end;
+ InternalConnMgrConfmtime := GetFileTime(IncludeTrailingPathDelimiter(s) + 'connmgr');
+ end;
+ except end;
+end;
+
+procedure WriteConnections;
+var i: integer;
+ IniFile: TMyIniFile;
+ s, SectionTitle: string;
+begin
+ if InternalQuickExit then Exit;
+ try
+ s := IncludeTrailingPathDelimiter(GetHomePath) + ConfDefaultSettingsDir;
+ if not DirectoryExists(s) then
+ if not ForceDirectories(s) then begin
+ DebugMsg(['*** Error: Cannot save connection manager settings']);
+ Exit;
+ end;
+ s := IncludeTrailingPathDelimiter(s) + 'connmgr';
+ if Libc.access(PChar(s), R_OK) = 0 then Libc.remove(PChar(s));
+
+ IniFile := TMyIniFile.Create(s, False);
+ try try
+// IniFile.WriteBool('General', 'MounterUseFSTab', ConfMounterUseFSTab);
+ if ConnectionMgrList.Count > 0 then
+ for i := 0 to ConnectionMgrList.Count - 1 do
+ with TConnMgrItem(ConnectionMgrList[i]) do begin
+ SectionTitle := ConnectionName;
+ IniFile.EraseSection(SectionTitle);
+ IniFile.WriteString(SectionTitle, 'ServiceType', ServiceType);
+ IniFile.WriteString(SectionTitle, 'Server', Server);
+ IniFile.WriteString(SectionTitle, 'Username', Username);
+ IniFile.WriteString(SectionTitle, 'Password', Password);
+ IniFile.WriteString(SectionTitle, 'TargetDir', TargetDir);
+ IniFile.WriteString(SectionTitle, 'PluginID', PluginID);
+ end;
+ except
+ on E: Exception do DebugMsg(['*** Error: Cannot save connection manager settings (', E.ClassName, '): ', E.Message]);
+ end;
+ finally
+ IniFile.Free;
+ InternalConnMgrConfmtime := GetFileTime(s);
+ end;
+ except end;
+end;
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure SearchForDefaultApps;
+var i: integer;
+ PATH: string;
+begin
+ PATH := GetEnvironmentVariable('PATH');
+ if ConfViewer = ConfAppNA then
+ for i := 1 to Length(ConfViewersApps) do
+ if FileSearch(ConfViewersApps[i], PATH) <> '' then begin
+ ConfViewer := ConfViewersApps[i];
+ Break;
+ end;
+ if ConfEditor = ConfAppNA then
+ for i := 1 to Length(ConfEditorApps) do
+ if FileSearch(ConfEditorApps[i], PATH) <> '' then begin
+ ConfEditor := ConfEditorApps[i];
+ Break;
+ end;
+ if ConfTerminalCommand = ConfAppNA then
+ for i := Length(ConfTerminalAppsWParam) downto 1 do
+ if FileSearch(ConfTerminalAppsWParam[i], PATH) <> '' then begin
+ ConfTerminalCommand := ConfTerminalApps[i];
+ Break;
+ end;
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+function GetFileTime(FileName: string): Longint;
+var StatBuf : TStatBuf64;
+begin
+ Result := -1;
+ if __lxstat64(_STAT_VER, PChar(FileName), StatBuf) <> 0 then Exit;
+ Result := StatBuf.st_mtime;
+end;
+
+function CheckConfFilesMod(var ChangedMainGUI, ChangedAssoc, ChangedBookmarks, ChangedMounter, ChangedConnections: boolean): boolean;
+var s: string;
+begin
+ s := IncludeTrailingPathDelimiter(IncludeTrailingPathDelimiter(GetHomePath) + ConfDefaultSettingsDir);
+ ChangedMainGUI := (GetFileTime(s + 'gui') > 0) and (GetFileTime(s + 'gui') > InternalMainGUIConfmtime);
+ ChangedAssoc := (GetFileTime(s + 'filetypes') > 0) and (GetFileTime(s + 'filetypes') > InternalFAssocConfmtime);
+ ChangedBookmarks := (GetFileTime(s + 'bookmarks') > 0) and (GetFileTime(s + 'bookmarks') > InternalBookmarksConfmtime);
+ ChangedMounter := (GetFileTime(s + 'mounter') > 0) and (GetFileTime(s + 'mounter') > InternalMounterConfmtime);
+ ChangedConnections := (GetFileTime(s + 'connmgr') > 0) and (GetFileTime(s + 'connmgr') > InternalConnMgrConfmtime);
+ Result := ChangedMainGUI or ChangedAssoc or ChangedBookmarks or ChangedMounter or ChangedConnections;
+ InternalMainGUIConfmtime := GetFileTime(s + 'gui');
+ InternalFAssocConfmtime := GetFileTime(s + 'filetypes');
+ InternalBookmarksConfmtime := GetFileTime(s + 'bookmarks');
+ InternalMounterConfmtime := GetFileTime(s + 'mounter');
+ InternalConnMgrConfmtime := GetFileTime(s + 'connmgr');
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure SetMiscLocaleStrings;
+begin
+ ConfColumnTitlesLong[1] := LANGColumns_TitlesLongName;
+ ConfColumnTitlesLong[2] := LANGColumns_TitlesLongNameExt;
+ ConfColumnTitlesLong[3] := LANGColumns_TitlesLongExt;
+ ConfColumnTitlesLong[4] := LANGColumns_TitlesLongSize;
+ ConfColumnTitlesLong[5] := LANGColumns_TitlesLongDateTime;
+ ConfColumnTitlesLong[6] := LANGColumns_TitlesLongDate;
+ ConfColumnTitlesLong[7] := LANGColumns_TitlesLongTime;
+ ConfColumnTitlesLong[8] := LANGColumns_TitlesLongUser;
+ ConfColumnTitlesLong[9] := LANGColumns_TitlesLongGroup;
+ ConfColumnTitlesLong[10] := LANGColumns_TitlesLongAttr;
+ ConfColumnTitlesShort[1] := LANGColumns_TitlesShortName;
+ ConfColumnTitlesShort[2] := LANGColumns_TitlesShortNameExt;
+ ConfColumnTitlesShort[3] := LANGColumns_TitlesShortExt;
+ ConfColumnTitlesShort[4] := LANGColumns_TitlesShortSize;
+ ConfColumnTitlesShort[5] := LANGColumns_TitlesShortDateTime;
+ ConfColumnTitlesShort[6] := LANGColumns_TitlesShortDate;
+ ConfColumnTitlesShort[7] := LANGColumns_TitlesShortTime;
+ ConfColumnTitlesShort[8] := LANGColumns_TitlesShortUser;
+ ConfColumnTitlesShort[9] := LANGColumns_TitlesShortGroup;
+ ConfColumnTitlesShort[10] := LANGColumns_TitlesShortAttr;
+end;
+
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure ParseCMDLine;
+var i: integer;
+ s: string;
+begin
+ if ParamCount > 0 then
+ for i := 1 to ParamCount do begin
+ s := AnsiUpperCase(ParamStr(i));
+ if s = '--DEBUG' then ParamDebug := True else
+ if s = '--DISABLE-GNOME' then ParamDisableGnome := True else
+ if s = '--DELETE-HISTORY' then InternalDeleteHistory := True else
+ if s = '--ENABLE-URI' then ConfUseURI := True else
+ if s = '--DISABLE-PLUGINS' then ParamDisablePlugins := True else
+ if Pos('--PROFILE=', s) = 1 then begin
+ ConfProfileName := 'Profile_' + Trim(Copy(ParamStr(i), 11, Length(s) - 10));
+ if ConfProfileName = '' then ConfProfileName := 'Default';
+ end else
+ if Pos('--LEFT=', s) = 1 then ParamLeftDir := Copy(ParamStr(i), 8, Length(s) - 7) else
+ if Pos('--RIGHT=', s) = 1 then ParamRightDir := Copy(ParamStr(i), 9, Length(s) - 8) else
+ if Pos('--LANG=', s) = 1 then ConfParamForceLang := Copy(ParamStr(i), 8, Length(s) - 7) else
+ if (s = '--HELP') or (s = '-H') then begin
+ WriteLn('Tux Commander v', ConstAboutVersion, ' [built ', ConstAboutBuildDate, ']');
+ WriteLn('Copyright (c) 2008 Tomas Bzatek');
+ WriteLn('Website: tuxcmd.sourceforge.net');
+ WriteLn;
+ WriteLn('Usage: tuxcmd [options...]');
+ WriteLn;
+ WriteLn('Options:');
+ WriteLn(' --debug Enable debug messages');
+ WriteLn(' --profile=<profilename> Use different configuration profile');
+ WriteLn(' --delete-history Delete command-line, selection and search history');
+ WriteLn(' (use in case of locale problems)');
+ WriteLn(' --disable-gnome Don''t load GNOME libraries');
+ WriteLn(' --disable-plugins Don''t load VFS modules');
+ WriteLn(' --left=<path> Start left panel at <path>');
+ WriteLn(' --right=<path> Start right panel at <path>');
+ WriteLn(' --lang=<language> Force GUI language (the string <language> is');
+ WriteLn(' standard two-char language id');
+ InternalQuickExit := True;
+ Halt(1);
+ end else WriteLn('tuxcmd: Unknown commandline option: ', ParamStr(i));
+ end;
+end;
+
+
+
+initialization
+ SetDefaults;
+ ParseCMDLine;
+ {$IFDEF __FPC__}
+ DebugMsg(['Tux Commander v', ConstAboutVersion, ' [', ConstAboutBuildDate, '] FreePascal build ',
+ '(version ', ConstFPCVersionString, ' ', ConstFPCDateString, ', define ', {$IFDEF CPU64}'x86_64'{$ELSE}'i386'{$ENDIF},
+ ', compiled on ', ConstFPCCompilerOSString, '/', ConstFPCCompilerHostProcessorString,
+ ' for ', ConstFPCTargetOSString, '/', ConstFPCTargetProcessorString, ')']);
+ {$ELSE}
+ DebugMsg(['Tux Commander v', ConstAboutVersion, ' [', ConstAboutBuildDate, '] Kylix build']);
+ {$ENDIF}
+ // Load GNOME libs
+ if not ParamDisableGnome then LoadGnomeLibs;
+ // Create basic objects
+ CommandLineHistory := TStringList.Create;
+ CommandLineHistory.CaseSensitive := True;
+ Bookmarks := TStringList.Create;
+ Bookmarks.CaseSensitive := True;
+ // Initialize the modules
+ DoInitPlugins;
+ // Initialize locales
+ SetTranslationTexts(ConfParamForceLang);
+ SetMiscLocaleStrings;
+ // Load the settings
+ ReadMainSettings;
+ ReadMainGUISettings;
+ ReadAssoc;
+ ReadBookmarks;
+ ReadMounter;
+ ReadConnections;
+
+ // Apply the settings
+ LoadIcons;
+ RecreateIcons(AssocList);
+finalization
+ // Save the settings
+ WriteBookmarks;
+ WriteConnections;
+ WriteMainSettings;
+ if ConfSavePanelTabs then begin
+ WriteTabs(True, LeftPanelTabs, LeftTabSortIDs, LeftTabSortTypes);
+ WriteTabs(False, RightPanelTabs, RightTabSortIDs, RightTabSortTypes);
+ end;
+ // Destroy the objects
+ LeftLocalEngine.Free;
+ RightLocalEngine.Free;
+ CommandLineHistory.Free;
+ Bookmarks.Free;
+end.
diff --git a/UConnectionManager.pas b/UConnectionManager.pas
new file mode 100644
index 0000000..1c1a057
--- /dev/null
+++ b/UConnectionManager.pas
@@ -0,0 +1,293 @@
+(*
+ Tux Commander - UConnectionManager - Connection manager dialog
+ Copyright (C) 2004 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit UConnectionManager;
+
+interface
+
+uses
+ glib2, gdk2, gtk2, pango, SysUtils, Types, Classes, GTKControls, GTKForms, GTKStdCtrls, GTKExtCtrls, GTKConsts, GTKView,
+ GTKUtils, GTKDialogs, GTKPixbuf, GTKClasses,
+ UCoreClasses;
+
+type
+ TFConnectionManager = class(TGTKDialog)
+ TitleFrame: TGTKFrame;
+ TitleLabel: TGTKLabel;
+ TitleEventBox: TGTKEventBox;
+ TitleIcon: TGTKImage;
+ TitleHBox: TGTKHBox;
+ ListView: TGTKListView;
+ ListViewScrolledWindow: TGTKScrolledWindow;
+ ListViewTable: TGTKTable;
+ AddConnectionButton, EditButton, RemoveButton: TGTKImageButton;
+ procedure FormCreate(Sender: TObject); override;
+ procedure ListViewSelectionChanged(Sender: TObject);
+ procedure FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+ procedure AddConnectionButtonClick(Sender: TObject);
+ procedure EditButtonClick(Sender: TObject);
+ procedure RemoveButtonClick(Sender: TObject);
+ procedure ListViewDblClick(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean);
+ private
+ procedure FillList;
+ end;
+
+var
+ FConnectionManager: TFConnectionManager;
+
+implementation
+
+uses ULocale, UCoreUtils, UConfig, UCore, UConnectionProperties, UVFSCore;
+
+const Connect_Button_ID = integer(mbOK);
+
+
+procedure TFConnectionManager.FormCreate(Sender: TObject);
+var Column: TGTKTreeViewColumn;
+begin
+ SetDefaultSize(550, 450);
+ Caption := LANGConnMgr_Caption;
+ AddButton(LANGConnMgr_ConnectButton, Connect_Button_ID);
+ Buttons := [mbClose];
+ ShowSeparator := False;
+ TitleEventBox := TGTKEventBox.Create(Self);
+ TitleLabel := TGTKLabel.Create(Self);
+ TitleLabel.Caption := Format('<span size="x-large" weight="ultrabold">%s</span>', [LANGConnMgr_OpenConnection]);
+ TitleLabel.UseMarkup := True;
+ TitleLabel.XAlign := 0;
+ TitleLabel.XPadding := 0;
+ TitleLabel.YPadding := 3;
+ TitleEventBox.ControlState := csPrelight;
+ TitleFrame := TGTKFrame.CreateWithoutLabel(Self);
+ TitleFrame.ShadowType := stShadowOut;
+ TitleIcon := TGTKImage.Create(Self);
+ TitleIcon.SetFromStock('gtk-connect', isLargeToolbar);
+ TitleHBox := TGTKHBox.Create(Self);
+ TitleHBox.Homogeneous := False;
+ TitleHBox.AddControlEx(TGTKEventBox.Create(Self), False, False, 5);
+ TitleHBox.AddControlEx(TitleIcon, False, False, 0);
+ TitleHBox.AddControlEx(TitleLabel, True, True, 10);
+ TitleEventBox.AddControl(TitleHBox);
+ TitleFrame.AddControl(TitleEventBox);
+ ClientArea.AddControlEx(TitleFrame, False, True, 0);
+
+ ListViewTable := TGTKTable.Create(Self);
+ ListViewTable.BorderWidth := 7;
+ ClientArea.AddControlEx(ListViewTable, True, True, 0);
+
+ ListView := TGTKListView.CreateTyped(Self, False, [lcPointer, lcText, lcText]);
+
+ ListView.RulesHint := True;
+ ListView.ShowHeaders := True;
+ Column := ListView.Columns.Add;
+ Column.AddAttribute('text', 1);
+ Column.Resizable := True;
+ Column.FixedWidth := 200;
+ Column.SizingMode := smFixed;
+ Column.Caption := LANGConnMgr_NameColumn;
+ Column.Clickable := True;
+ Column.SortID := 1;
+ Column := ListView.Columns.Add;
+ Column.AddAttribute('text', 2);
+ Column.Resizable := True;
+ Column.SizingMode := smFixed;
+ Column.Caption := LANGConnMgr_URIColumn;
+ Column.Clickable := True;
+ Column.SortID := 2;
+ ListViewScrolledWindow := TGTKScrolledWindow.Create(Self);
+ ListViewScrolledWindow.AddControl(ListView);
+ ListViewScrolledWindow.HorizScrollBarPolicy := sbAutomatic;
+ ListViewScrolledWindow.VertScrollBarPolicy := sbAutomatic;
+ ListViewScrolledWindow.ShadowType := stShadowIn;
+
+ AddConnectionButton := TGTKImageButton.Create(Self);
+ AddConnectionButton.SetFromStock('gtk-add', isSmallToolbar);
+ AddConnectionButton.Caption := LANGConnMgr_AddConnectionButtonCaption;
+ AddConnectionButton.UseUnderline := True;
+ AddConnectionButton.Tooltip := LANGConnMgr_AddConnectionButtonTooltip;
+ EditButton := TGTKImageButton.Create(Self);
+ EditButton.Caption := LANGConnMgr_EditButtonCaption;
+ EditButton.UseUnderline := True;
+ EditButton.Tooltip := LANGConnMgr_EditButtonTooltip;
+ RemoveButton := TGTKImageButton.Create(Self);
+ RemoveButton.SetFromStock('gtk-remove', isSmallToolbar);
+ RemoveButton.Caption := LANGConnMgr_RemoveButtonCaption;
+ RemoveButton.UseUnderline := True;
+ RemoveButton.Tooltip := LANGConnMgr_RemoveButtonTooltip;
+
+ ListViewTable.AddControlEx(0, 1, 3, 5, ListViewScrolledWindow, [taoExpand, taoFill], [taoExpand, taoFill], 0, 5);
+ ListViewTable.AddControlEx(3, 2, 1, 1, AddConnectionButton, [taoShrink, taoFill], [taoShrink], 5, 5);
+ ListViewTable.AddControlEx(3, 3, 1, 1, EditButton, [taoShrink, taoFill], [taoShrink], 5, 5);
+ ListViewTable.AddControlEx(3, 4, 1, 1, RemoveButton, [taoShrink, taoFill], [taoShrink], 5, 5);
+// ListViewTable.AddControlEx(3, 1, 1, 1, TGTKLabel.Create(Self), [taoShrink, taoFill], [taoExpand, taoFill], 0, 2);
+ ListViewTable.AddControlEx(3, 5, 1, 1, TGTKLabel.Create(Self), [taoShrink, taoFill], [taoExpand, taoFill], 0, 2);
+
+
+ FillList;
+ ListView.OnSelectionChanged := ListViewSelectionChanged;
+ ListView.OnDblClick := ListViewDblClick;
+ ListView.SetFocus;
+ if ListView.Items.Count > 0 then ListView.Items[0].SetCursor(0, False, False, 0, 0);
+ ListViewSelectionChanged(Self);
+ AddConnectionButton.OnClick := AddConnectionButtonClick;
+ EditButton.OnClick := EditButtonClick;
+ RemoveButton.OnClick := RemoveButtonClick;
+ OnKeyDown := FormKeyDown;
+end;
+
+procedure TFConnectionManager.ListViewSelectionChanged(Sender: TObject);
+begin
+ try
+ EditButton.Enabled := Assigned(ListView.Selected);
+ RemoveButton.Enabled := Assigned(ListView.Selected);
+ SetResponseSensitive(Connect_Button_ID, Assigned(ListView.Selected));
+ except end;
+end;
+
+procedure TFConnectionManager.FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+begin
+ case Key of
+ GDK_RETURN, GDK_KP_ENTER: if Assigned(ListView.Selected) then ModalResult := mbOK;
+ GDK_ESCAPE: ModalResult := mbCancel;
+ end;
+end;
+
+procedure TFConnectionManager.ListViewDblClick(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean);
+begin
+ if Assigned(ListView.Selected) then ModalResult := mbOK;
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure TFConnectionManager.AddConnectionButtonClick(Sender: TObject);
+var Item: TGTKListItem;
+ ConnMgrItem: TConnMgrItem;
+begin
+ try
+ FConnectionProperties := TFConnectionProperties.Create(Self);
+ if FConnectionProperties.Run = mbOK then begin
+ ConnMgrItem := TConnMgrItem.Create;
+ with FConnectionProperties do begin
+ ConnMgrItem.ConnectionName := NameEntry.Text;
+ ConnMgrItem.URI := MakeURI(False);
+ ConnMgrItem.ServiceType := Copy(ConnMgrItem.URI, 1, Pos('://', ConnMgrItem.URI) - 1);
+ ConnMgrItem.Server := ServerEntry.Text;
+ ConnMgrItem.Username := UserNameEntry.Text;
+ ConnMgrItem.Password := PasswordEntry.Text;
+ ConnMgrItem.TargetDir := TargetDirEntry.Text;
+ ConnMgrItem.PluginID := '';
+ if PluginOptionMenu.ItemIndex <> 0 then ConnMgrItem.PluginID := TVFSPlugin(PluginList[PluginOptionMenu.ItemIndex - 1]).VFSName;
+ end;
+ ConnectionMgrList.Add(ConnMgrItem);
+ Item := ListView.Items.Add;
+ Item.SetValue(0, ConnMgrItem);
+ Item.SetValue(1, ConnMgrItem.ConnectionName);
+ Item.SetValue(2, FConnectionProperties.MakeURI(True));
+ end;
+ finally
+ FConnectionProperties.Free;
+ end;
+end;
+
+procedure TFConnectionManager.EditButtonClick(Sender: TObject);
+var Item: TGTKListItem;
+ ConnMgrItem: TConnMgrItem;
+ i: integer;
+begin
+ try
+ Item := ListView.Selected;
+ if Item = nil then Exit;
+ ConnMgrItem := Item.AsPointer(0);
+ if ConnMgrItem = nil then Exit;
+ FConnectionProperties := TFConnectionProperties.Create(Self);
+ FConnectionProperties.NameEntry.Text := ConnMgrItem.ConnectionName;
+ FConnectionProperties.URIEntry.Text := ConnMgrItem.URI;
+ FConnectionProperties.ServiceTypeOptionMenuChanged(Sender);
+ // Find the plugin by PluginID
+ for i := 0 to PluginList.Count - 1 do
+ if TVFSPlugin(PluginList[i]).VFSName = ConnMgrItem.PluginID then begin
+ FConnectionProperties.PluginOptionMenu.ItemIndex := i + 1;
+ Break;
+ end;
+
+ if FConnectionProperties.Run = mbOK then begin
+ with FConnectionProperties do begin
+ ConnMgrItem.ConnectionName := NameEntry.Text;
+ ConnMgrItem.URI := MakeURI(False);
+ ConnMgrItem.ServiceType := Copy(ConnMgrItem.URI, 1, Pos('://', ConnMgrItem.URI) - 1);
+ ConnMgrItem.Server := ServerEntry.Text;
+ ConnMgrItem.Username := UserNameEntry.Text;
+ ConnMgrItem.Password := PasswordEntry.Text;
+ ConnMgrItem.TargetDir := TargetDirEntry.Text;
+ ConnMgrItem.PluginID := '';
+ if PluginOptionMenu.ItemIndex <> 0 then ConnMgrItem.PluginID := TVFSPlugin(PluginList[PluginOptionMenu.ItemIndex - 1]).VFSName;
+ end;
+ Item.SetValue(1, ConnMgrItem.ConnectionName);
+ Item.SetValue(2, FConnectionProperties.MakeURI(True));
+ end;
+ finally
+ FConnectionProperties.Free;
+ end;
+end;
+
+procedure TFConnectionManager.RemoveButtonClick(Sender: TObject);
+var Item: TGTKListItem;
+ ConnMgrItem: TConnMgrItem;
+ i: integer;
+begin
+ Item := ListView.Selected;
+ if Item = nil then Exit;
+ ConnMgrItem := Item.AsPointer(0);
+ if ConnMgrItem = nil then Exit;
+ if Application.MessageBox(Format(LANGConnMgr_DoYouWantDelete, [Item.AsString(1)]),
+ [mbYes, mbNo], mbQuestion, mbYes, mbNo) = mbYes then
+ begin
+ if ConnectionMgrList.Count > 0 then
+ for i := 0 to ConnectionMgrList.Count - 1 do
+ if ConnectionMgrList[i] = ConnMgrItem then begin
+ ConnectionMgrList.Delete(i);
+ Break;
+ end;
+ ConnMgrItem.Free;
+ ListView.Items.Delete(Item.Index);
+ end;
+end;
+
+procedure TFConnectionManager.FillList;
+var i: integer;
+ Item: TGTKListItem;
+ ConnMgrItem: TConnMgrItem;
+begin
+ if ConnectionMgrList.Count > 0 then
+ for i := 0 to ConnectionMgrList.Count - 1 do begin
+ ConnMgrItem := ConnectionMgrList[i];
+ Item := ListView.Items.Add;
+ Item.SetValue(0, ConnMgrItem);
+ Item.SetValue(1, ConnMgrItem.ConnectionName);
+ Item.SetValue(2, ConstructURI(True, ConnMgrItem.ServiceType, ConnMgrItem.Server, ConnMgrItem.Username,
+ ConnMgrItem.Password, ConnMgrItem.TargetDir));
+ end;
+
+end;
+
+
+
+
+end.
+
diff --git a/UConnectionProperties.pas b/UConnectionProperties.pas
new file mode 100644
index 0000000..0731eab
--- /dev/null
+++ b/UConnectionProperties.pas
@@ -0,0 +1,334 @@
+(*
+ Tux Commander - UConnectionProperties - Connection properties dialog
+ Copyright (C) 2004 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit UConnectionProperties;
+
+interface
+
+uses
+ SysUtils, Types, Classes, Variants, GTKControls, GTKForms, GTKStdCtrls, GTKExtCtrls, GTKConsts, GTKMenus;
+
+type
+ TFConnectionProperties = class(TGTKDialog)
+ Label1, Label2, Label3, Label4, Label5, Label6, Label7, Label8, Label9: TGTKLabel;
+ Box: TGTKVBox;
+ Table1, Table2: TGTKTable;
+ PluginOptionMenu, ServiceTypeOptionMenu: TGTKOptionMenu;
+ URIEntry, NameEntry, ServerEntry, UserNameEntry, PasswordEntry, TargetDirEntry: TGTKEntry;
+ MaskPasswordCheckButton: TGTKCheckButton;
+ procedure FormCreate(Sender: TObject); override;
+ procedure FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+ procedure NameEntryChanged(Sender: TObject);
+ procedure URIEntryChanged(Sender: TObject);
+ procedure ServiceTypeOptionMenuChanged(Sender: TObject);
+ procedure MaskPasswordCheckButtonToggled(Sender: TObject);
+ private
+ CurrentURI: string;
+ Lock: boolean;
+ function ValidSettings: boolean;
+ public
+ function MakeURI(Hidden: boolean): string;
+ end;
+
+var
+ FConnectionProperties: TFConnectionProperties;
+
+
+
+implementation
+
+uses ULocale, UVFSCore, UCoreUtils;
+
+const ServiceTypeTable_Count = 6;
+var ServiceTypeTable: array[1..ServiceTypeTable_Count, 0..1] of string;
+
+
+
+procedure TFConnectionProperties.FormCreate(Sender: TObject);
+var i: integer;
+ MenuItem: TGTKMenuItem;
+begin
+ // Set the constants
+ ServiceTypeTable[1, 0] := LANGConnProp_FTP; ServiceTypeTable[1, 1] := 'ftp';
+ ServiceTypeTable[2, 0] := LANGConnProp_SFTP; ServiceTypeTable[2, 1] := 'sftp';
+ ServiceTypeTable[3, 0] := LANGConnProp_SMB; ServiceTypeTable[3, 1] := 'smb';
+ ServiceTypeTable[4, 0] := LANGConnProp_HTTP; ServiceTypeTable[4, 1] := 'http';
+ ServiceTypeTable[5, 0] := LANGConnProp_HTTPS; ServiceTypeTable[5, 1] := 'https';
+ ServiceTypeTable[6, 0] := LANGConnProp_Other; ServiceTypeTable[6, 1] := 'unknown';
+
+ // Initialization
+ SetDefaultSize(350, -1);
+ Caption := LANGConnProp_Caption;
+ Buttons := [mbOK, mbCancel];
+ Box := TGTKVBox.Create(Self);
+ Box.BorderWidth := 8;
+ ClientArea.AddControlEx(Box, True, True, 0);
+ Label1 := TGTKLabel.Create(Self);
+ Label1.XAlign := 0;
+ Label1.XPadding := 0;
+ Label1.Caption := LANGConnProp_VFSModule;
+ PluginOptionMenu := TGTKOptionMenu.Create(Self);
+ Label1.FocusControl := PluginOptionMenu;
+ Label1.UseMarkup := True;
+ Label1.UseUnderline := True;
+ Label2 := TGTKLabel.Create(Self);
+ Label2.XAlign := 0;
+ Label2.XPadding := 0;
+ Label2.Caption := Format('<span weight="ultrabold">%s</span>', [LANGConnProp_URI]);
+ URIEntry := TGTKEntry.Create(Self);
+ URIEntry.Tooltip := LANGConnProp_URIEntryTooltip;
+ Label2.FocusControl := URIEntry;
+ Label2.UseMarkup := True;
+ Label2.UseUnderline := True;
+ Label3 := TGTKLabel.Create(Self);
+ Label3.XAlign := 0;
+ Label3.XPadding := 0;
+ Label3.Caption := Format('<span weight="ultrabold">%s</span>', [LANGConnProp_DetailedInformations]);
+ Label3.UseMarkup := True;
+ Label4 := TGTKLabel.Create(Self);
+ Label4.XAlign := 0;
+ Label4.XPadding := 0;
+ Label4.Caption := Format('<span weight="ultrabold">%s</span>', [LANGConnProp_Name]);
+ NameEntry := TGTKEntry.Create(Self);
+ Label4.FocusControl := NameEntry;
+ Label4.UseMarkup := True;
+ Label4.UseUnderline := True;
+
+
+ Label5 := TGTKLabel.Create(Self);
+ Label5.XAlign := 0;
+ Label5.XPadding := 0;
+ Label5.Caption := LANGConnProp_Server;
+ ServerEntry := TGTKEntry.Create(Self);
+ Label5.FocusControl := ServerEntry;
+ Label5.UseMarkup := True;
+ Label5.UseUnderline := True;
+ Label6 := TGTKLabel.Create(Self);
+ Label6.XAlign := 0;
+ Label6.XPadding := 0;
+ Label6.Caption := LANGConnProp_Username;
+ UserNameEntry := TGTKEntry.Create(Self);
+ UserNameEntry.Tooltip := LANGConnProp_UserNameEntryTooltip;
+ Label6.FocusControl := UserNameEntry;
+ Label6.UseMarkup := True;
+ Label6.UseUnderline := True;
+ Label7 := TGTKLabel.Create(Self);
+ Label7.XAlign := 0;
+ Label7.XPadding := 0;
+ Label7.Caption := LANGConnProp_Password;
+ PasswordEntry := TGTKEntry.Create(Self);
+ PasswordEntry.Visibility := False;
+ Label7.FocusControl := PasswordEntry;
+ Label7.UseMarkup := True;
+ Label7.UseUnderline := True;
+ Label8 := TGTKLabel.Create(Self);
+ Label8.XAlign := 0;
+ Label8.XPadding := 0;
+ Label8.Caption := LANGConnProp_TargetDirectory;
+ TargetDirEntry := TGTKEntry.Create(Self);
+ Label8.FocusControl := TargetDirEntry;
+ Label8.UseMarkup := True;
+ Label8.UseUnderline := True;
+ Label9 := TGTKLabel.Create(Self);
+ Label9.XAlign := 0;
+ Label9.XPadding := 0;
+ Label9.Caption := LANGConnProp_ServiceType;
+ ServiceTypeOptionMenu := TGTKOptionMenu.Create(Self);
+ Label9.FocusControl := PluginOptionMenu;
+ Label9.UseMarkup := True;
+ Label9.UseUnderline := True;
+ MaskPasswordCheckButton := TGTKCheckButton.CreateWithLabel(Self, LANGConnProp_MaskPassword);
+ MaskPasswordCheckButton.Checked := True;
+
+ Table1 := TGTKTable.Create(Self);
+ Box.AddControlEx(Table1, True, True, 5);
+ Table1.AddControlEx(0, 0, 1, 1, Label4, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 5, 2);
+ Table1.AddControlEx(1, 0, 1, 1, NameEntry, [taoExpand, taoFill], [taoShrink, taoExpand, taoFill], 5, 2);
+ Table1.AddControlEx(0, 1, 1, 1, Label2, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 5, 2);
+ Table1.AddControlEx(1, 1, 1, 1, URIEntry, [taoExpand, taoFill], [taoShrink, taoExpand, taoFill], 5, 2);
+ Table1.AddControlEx(0, 2, 1, 1, Label1, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 5, 2);
+ Table1.AddControlEx(1, 2, 1, 1, PluginOptionMenu, [taoExpand, taoFill], [taoShrink, taoExpand, taoFill], 5, 2);
+ Table1.AddControlEx(0, 3, 2, 1, TGTKVBox.Create(Self), [taoExpand, taoFill], [taoShrink, taoExpand, taoFill], 5, 10);
+ Table1.AddControlEx(0, 4, 2, 1, Label3, [taoExpand, taoFill], [taoShrink, taoExpand, taoFill], 5, 0);
+
+
+ Table2 := TGTKTable.Create(Self);
+ Box.AddControlEx(Table2, True, True, 5);
+ Table2.AddControlEx(0, 0, 1, 1, TGTKHBox.Create(Self), [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 10, 2);
+ Table2.AddControlEx(1, 0, 1, 1, Label9, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 5, 2);
+ Table2.AddControlEx(2, 0, 1, 1, ServiceTypeOptionMenu, [taoExpand, taoFill], [taoShrink, taoExpand, taoFill], 5, 2);
+ Table2.AddControlEx(1, 1, 1, 1, Label5, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 5, 2);
+ Table2.AddControlEx(2, 1, 1, 1, ServerEntry, [taoExpand, taoFill], [taoShrink, taoExpand, taoFill], 5, 2);
+ Table2.AddControlEx(1, 2, 1, 1, Label6, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 5, 2);
+ Table2.AddControlEx(2, 2, 1, 1, UserNameEntry, [taoExpand, taoFill], [taoShrink, taoExpand, taoFill], 5, 2);
+ Table2.AddControlEx(1, 3, 1, 1, Label7, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 5, 2);
+ Table2.AddControlEx(2, 3, 1, 1, PasswordEntry, [taoExpand, taoFill], [taoShrink, taoExpand, taoFill], 5, 2);
+ Table2.AddControlEx(2, 4, 1, 1, MaskPasswordCheckButton, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 5, 0);
+ Table2.AddControlEx(1, 5, 1, 1, Label8, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 5, 2);
+ Table2.AddControlEx(2, 5, 1, 1, TargetDirEntry, [taoExpand, taoFill], [taoShrink, taoExpand, taoFill], 5, 2);
+
+
+ // Fill the plugins menu
+ MenuItem := TGTKMenuItem.CreateTyped(Self, itLabel);
+ MenuItem.Caption := LANGConnProp_MenuItemCaption;
+ PluginOptionMenu.Items.Add(MenuItem);
+ for i := 0 to PluginList.Count - 1 do begin
+ MenuItem := TGTKMenuItem.CreateTyped(Self, itImageText);
+ MenuItem.SetCaptionPlain(Format('%s [%s]', [TVFSPlugin(PluginList[i]).VFSName,
+ ANSIToUTF8(ExtractFileName(TVFSPlugin(PluginList[i]).FullPath))]));
+ PluginOptionMenu.Items.Add(MenuItem);
+ end;
+
+ // Fill the protocol menu
+ for i := 1 to ServiceTypeTable_Count do begin
+ MenuItem := TGTKMenuItem.CreateTyped(Self, itImageText);
+ MenuItem.Caption := ServiceTypeTable[i, 0];
+ ServiceTypeOptionMenu.Items.Add(MenuItem);
+ end;
+
+
+ Lock := True;
+ OnKeyDown := FormKeyDown;
+ NameEntry.OnChanged := NameEntryChanged;
+ URIEntry.OnChanged := URIEntryChanged;
+ ServiceTypeOptionMenu.OnChanged := ServiceTypeOptionMenuChanged;
+ ServerEntry.OnChanged := ServiceTypeOptionMenuChanged;
+ UserNameEntry.OnChanged := ServiceTypeOptionMenuChanged;
+ PasswordEntry.OnChanged := ServiceTypeOptionMenuChanged;
+ TargetDirEntry.OnChanged := ServiceTypeOptionMenuChanged;
+ MaskPasswordCheckButton.OnToggled := MaskPasswordCheckButtonToggled;
+
+
+ NameEntry.SetFocus;
+ NameEntryChanged(Self);
+ Lock := False;
+end;
+
+procedure TFConnectionProperties.FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+begin
+ case Key of
+ GDK_RETURN, GDK_KP_ENTER: if ValidSettings then ModalResult := mbOK;
+ GDK_ESCAPE: ModalResult := mbCancel;
+ end;
+end;
+
+procedure TFConnectionProperties.MaskPasswordCheckButtonToggled(Sender: TObject);
+begin
+ PasswordEntry.Visibility := not MaskPasswordCheckButton.Checked;
+ ServiceTypeOptionMenuChanged(Self);
+end;
+
+(********************************************************************************************************************************)
+function TFConnectionProperties.ValidSettings: boolean;
+begin
+ Result := (Length(Trim(NameEntry.Text)) > 0) and (Length(Trim(URIEntry.Text)) > 0);
+ if Result then Result := (Pos('://', URIEntry.Text) > 1) and (Pos('://', URIEntry.Text) < Length(URIEntry.Text) - 2) and
+ (Pos(ServiceTypeTable[ServiceTypeTable_Count, 1] + '://', URIEntry.Text) <= 0);
+end;
+
+procedure TFConnectionProperties.NameEntryChanged(Sender: TObject);
+begin
+ SetResponseSensitive(integer(mbOK), ValidSettings);
+end;
+
+procedure TFConnectionProperties.URIEntryChanged(Sender: TObject);
+var i, j: integer;
+ s, s2: string;
+begin
+ NameEntryChanged(Sender);
+ s2 := URIEntry.Text;
+ Lock := True;
+
+ // Find the service type
+ if Pos('://', s2) > 1 then begin
+ s := Trim(Copy(s2, 1, Pos('://', s2) - 1));
+ j := ServiceTypeTable_Count;
+ for i := 1 to ServiceTypeTable_Count - 1 do
+ if AnsiCompareText(s, ServiceTypeTable[i, 1]) = 0 then begin
+ j := i;
+ Break;
+ end;
+ ServiceTypeOptionMenu.ItemIndex := j - 1;
+ Delete(s2, 1, Pos('://', s2) + 2);
+ end;
+
+ // Get the target directory
+ if Pos('/', s2) > 0 then begin
+ s := Copy(s2, Pos('/', s2), Length(s2) - Pos('/', s2) + 1);
+ if (s = '') or (s = '/') then TargetDirEntry.Text := ''
+ else TargetDirEntry.Text := s;
+ Delete(s2, Pos('/', s2), Length(s2) - Pos('/', s2) + 1);
+ end else TargetDirEntry.Text := '';
+
+ // Get the server string
+ if Pos('@', s2) > 0 then begin
+ s := Copy(s2, Pos('@', s2) + 1, Length(s2) - Pos('@', s2));
+ if s <> '' then ServerEntry.Text := s;
+ Delete(s2, Pos('@', s2), Length(s2) - Pos('@', s2) + 1);
+
+ // Get the user/pass
+ if Pos(':', s2) > 0 then begin
+ s := Copy(s2, Pos(':', s2) + 1, Length(s2) - Pos(':', s2));
+ if s = '' then PasswordEntry.Text := '' else
+ if Pos('*', s) <= 0 then PasswordEntry.Text := s;
+ Delete(s2, Pos(':', s2), Length(s2) - Pos(':', s2) + 1);
+ end else PasswordEntry.Text := '';
+ UserNameEntry.Text := s2;
+ end else ServerEntry.Text := s2;
+
+ CurrentURI := MakeURI(False);
+ Lock := False;
+end;
+
+function TFConnectionProperties.MakeURI(Hidden: boolean): string;
+var Prefix: string;
+begin
+ Prefix := ServiceTypeTable[ServiceTypeTable_Count, 1];
+ if ServiceTypeOptionMenu.ItemIndex < ServiceTypeTable_Count - 1
+ then Prefix := ServiceTypeTable[ServiceTypeOptionMenu.ItemIndex + 1, 1] else
+ if Pos('://', URIEntry.Text) > 1 then Prefix := Copy(URIEntry.Text, 1, Pos('://', URIEntry.Text) - 1);
+ Result := Prefix + '://';
+ if Length(UserNameEntry.Text) > 0 then begin
+ Result := Result + UserNameEntry.Text;
+ if Length(PasswordEntry.Text) > 0 then
+ if Hidden then Result := Result + ':' + StringOfChar('*', Length(PasswordEntry.Text))
+ else Result := Result + ':' + PasswordEntry.Text;
+ Result := Result + '@';
+ end;
+ Result := Result + ServerEntry.Text;
+ if Length(TargetDirEntry.Text) > 0 then begin
+ if TargetDirEntry.Text[1] <> '/' then Result := Result + '/';
+ Result := Result + TargetDirEntry.Text;
+ end;
+end;
+
+procedure TFConnectionProperties.ServiceTypeOptionMenuChanged(Sender: TObject);
+begin
+ if Lock then Exit;
+ CurrentURI := MakeURI(False);
+ URIEntry.OnChanged := nil;
+ URIEntry.Text := MakeURI(MaskPasswordCheckButton.Checked);
+ URIEntry.OnChanged := URIEntryChanged;
+ NameEntryChanged(Sender);
+end;
+
+
+
+end.
+
diff --git a/UCopyMove.pas b/UCopyMove.pas
new file mode 100644
index 0000000..8426706
--- /dev/null
+++ b/UCopyMove.pas
@@ -0,0 +1,78 @@
+(*
+ Tux Commander - UCopyMove - Copy and Rename/Move dialog and related funcions
+ Copyright (C) 2004 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit UCopyMove;
+
+interface
+
+uses
+ SysUtils, Types, Classes, Variants, GTKControls, GTKForms, GTKStdCtrls, GTKExtCtrls, GTKConsts;
+
+type
+ TFCopyMove = class(TGTKDialog)
+ Label1: TGTKLabel;
+ Entry: TGTKEntry;
+ Box: TGTKVBox;
+ procedure FormCreate(Sender: TObject); override;
+ procedure FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+ private
+ { Private declarations }
+ public
+ { Public declarations }
+ end;
+
+var
+ FCopyMove: TFCopyMove;
+
+implementation
+
+uses ULocale;
+
+
+procedure TFCopyMove.FormCreate(Sender: TObject);
+begin
+ SetDefaultSize(380, -1);
+ Caption := LANGCopyFilesSC;
+ Buttons := [mbOK, mbCancel];
+ Box := TGTKVBox.Create(Self);
+ Label1 := TGTKLabel.Create(Self);
+ Label1.Caption := 'Copy 1 file(s) to:';
+ Label1.XAlign := 0;
+ Label1.XPadding := 0;
+ Label1.SetSizeRequest(-1, 20);
+ Entry := TGTKEntry.Create(Self);
+ Box.AddControlEx(Label1, False, False, 0);
+ Box.AddControlEx(Entry, False, False, 0);
+ Box.BorderWidth := 8;
+ ClientArea.AddControlEx(Box, True, True, 0);
+ OnKeyDown := FormKeyDown;
+ Entry.SetFocus;
+end;
+
+procedure TFCopyMove.FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+begin
+ case Key of
+ GDK_RETURN, GDK_KP_ENTER: ModalResult := mbOK;
+ GDK_ESCAPE: ModalResult := mbCancel;
+ end;
+end;
+
+
+end.
+
diff --git a/UCore.pas b/UCore.pas
new file mode 100644
index 0000000..694d249
--- /dev/null
+++ b/UCore.pas
@@ -0,0 +1,2785 @@
+(*
+ Tux Commander - UCore - Some engine-related core functions
+ Copyright (C) 2008 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit UCore;
+interface
+
+uses glib2, SyncObjs, Classes, GTKForms, GTKView, Libc, UGlibC_compat, UEngines, UCoreUtils, UProgress, UVFSCore;
+
+
+function FillPanel(List: TList; ListView: TGTKListView; Engine: TPanelEngine; LeftPanel: boolean): boolean;
+function ChangeDir(Engine: TPanelEngine; Path: string; var SelItem: string; const AutoFallBack: boolean): integer;
+function MakeDirectory(ListView: TGTKListView; Engine: TPanelEngine; LeftPanel: boolean; NewDir: string): boolean;
+procedure FindNextSelected(ListView: TGTKListView; DataList: TList; var Item1, Item2: string);
+procedure UnselectAll(ListView: TGTKListView; DataList: TList);
+
+type TWorkerThread = class(TThread)
+ private
+ FCancelled: boolean;
+ GUIMutex: TCriticalSection;
+ protected
+ procedure Execute; override;
+ procedure CommitGUIUpdate;
+ public
+ // Data to updating
+ FProgress1Pos, FProgress2Pos, FProgress1Max, FProgress2Max: Int64;
+ FProgress1Text, FProgress2Text, FLabel1Text, FLabel2Text: string;
+ FGUIProgress1Pos, FGUIProgress2Pos, FGUIProgress1Max, FGUIProgress2Max: Int64;
+ FGUIProgress1Text, FGUIProgress2Text, FGUILabel1Text, FGUILabel2Text: string;
+ FGUIChanged: boolean;
+
+ FCancelMessage: string;
+ FDoneThread, FShowCancelMessage,
+ FDialogShowDirDelete, FDialogShowOverwrite, FDialogShowNewDir, FDialogShowMsgBox,
+ FSigDialogDirDelete, FSigDialogOverwrite, FSigDialogNewDir, FSigDialogMsgBox: boolean;
+ FDialogResultDirDelete, FDialogResultOverwrite, FDialogResultNewDir: integer;
+
+ FDirDeleteButtonsType: integer;
+ FDirDeleteLabel1Text, FDirDeleteLabel2Text, FDirDeleteLabel3Text, FDirDeleteCaption: string;
+ FDirDeleteLabel2Visible, FDirDeleteLabel3Visible: boolean;
+
+ FOverwriteButtonsType: integer;
+ FOverwriteFromLabel, FOverwriteFromInfoLabel, FOverwriteToLabel, FOverwriteToInfoLabel,
+ FOverwriteRenameStr, FOverwriteSourceFile, FOverwriteDestFile: string;
+
+ FNewDirCaption, FNewDirLabel, FNewDirEdit: string;
+ FMsgBoxText: string;
+ FMsgBoxButtons: TMessageButtons;
+ FMsgBoxStyle: TMessageStyle;
+ FMsgBoxDefault, FMsgBoxEscape, FDialogResultMsgBox: TMessageButton;
+
+
+ // Parameters
+ ProgressForm: TFProgress;
+ Engine, SrcEngine, DestEngine: TPanelEngine;
+ LeftPanel: boolean;
+ DataList: TList;
+ ParamBool1, ParamBool2, ParamBool3, ParamBool4, ParamBool5: boolean;
+ ParamString1, ParamString2, ParamString3: string;
+ ParamPointer1: Pointer;
+ ParamInt64: Int64;
+ ParamInt1, ParamInt2: integer;
+ ParamLongWord1: LongWord;
+ ParamCardinal1, ParamCardinal2: Cardinal;
+ ParamFloat1, ParamFloat2: Extended;
+ ParamDataItem1: PDataItem;
+ WorkerProcedure: procedure(SenderThread: TWorkerThread);
+ SelectedItem: PDataItem;
+ ExtractFromVFSMode, ExtractFromVFSAll: boolean;
+ ErrorHappened: boolean;
+
+ constructor Create;
+ destructor Destroy; override;
+ procedure CancelIt;
+ function Cancelled: boolean;
+
+ procedure UpdateProgress1(const Progress: Int64; const ProgressText: string);
+ procedure UpdateProgress2(const Progress: Int64; const ProgressText: string);
+ procedure SetProgress1Params(const ProgressMax: Int64);
+ procedure SetProgress2Params(const ProgressMax: Int64);
+ procedure UpdateCaption1(const CaptionText: string);
+ procedure UpdateCaption2(const CaptionText: string);
+
+ function ShowDirDeleteDialog(ButtonsType: integer; const Label1Text: string; const Label2Text: string = '';
+ const Label3Text: string = ''; const DirDeleteCaption: string = ''): integer;
+ function ShowOverwriteDialog(ButtonsType: integer; const FromLabel, FromInfoLabel, ToLabel, ToInfoLabel, RenameStr,
+ SourceFile, DestFile: string): integer;
+ function ShowNewDirDialog(Caption, LabelCaption, Edit: string): integer;
+ function ShowMessageBox(const Text: string; Buttons: TMessageButtons; Style: TMessageStyle;
+ Default, Escape: TMessageButton): TMessageButton;
+ end;
+
+ TGetDirSizeThread = class(TThread)
+ private
+ FCancelled: boolean;
+ protected
+ procedure Execute; override;
+ public
+ Finished: boolean;
+ Engine: TPanelEngine;
+ Path: string;
+ Result: Int64;
+ constructor Create;
+ procedure CancelIt;
+ end;
+
+ TOpenDirThread = class(TThread)
+ private
+ procedure Execute; override;
+ public
+ AEngine: TPanelEngine;
+ xEngine: TVFSEngine;
+ APath: string;
+ ASelItem: string;
+ AAutoFallBack: boolean;
+ ADirList: TList;
+ ChDirResult, ListingResult, VFSOpenResult: integer;
+ Finished, CancelIt: boolean;
+ RunningTime: Int64;
+ APlugin: TVFSPlugin;
+ AFullPath, AHighlightItem: string;
+ Password: string;
+ constructor Create;
+{ destructor Destroy; override; }
+ end;
+
+
+// Thread aware functions (also half-thread-safe) without any piece of GTK code
+procedure DeleteFilesWorker(SenderThread: TWorkerThread);
+procedure CopyFilesWorker(SenderThread: TWorkerThread);
+procedure MergeFilesWorker(SenderThread: TWorkerThread);
+procedure SplitFilesWorker(SenderThread: TWorkerThread);
+procedure ChmodFilesWorker(SenderThread: TWorkerThread);
+procedure ChownFilesWorker(SenderThread: TWorkerThread);
+procedure DummyThreadWorker(SenderThread: TWorkerThread);
+
+// Classic functions - don't need progress window
+function CreateSymlink(const FileName, PossibleNewName: string; Engine: TPanelEngine) : boolean;
+function EditSymlink(const FileName: string; Engine: TPanelEngine) : boolean;
+function HandleLogin(Parent: TComponent; Engine: TPanelEngine; UserName, Password: string): boolean;
+procedure GetDirSize(AListView: TGTKListView; Engine: TPanelEngine; DataList: TList; AllItems: boolean);
+
+
+type TMounterItem = class
+ public
+ DisplayText, MountPath, Device, IconPath, MountCommand, UmountCommand: string;
+ DeviceType: integer;
+ function Mounted: boolean;
+ function IsInFSTab: boolean;
+ function Mount: boolean;
+ function Umount: boolean;
+ function Eject: boolean;
+ end;
+
+ TConnMgrItem = class
+ public
+ ConnectionName: string;
+ URI: string; // generated at runtime
+ ServiceType, Server, Username, Password, TargetDir: string;
+ PluginID: string; // leave blank for default
+ end;
+
+procedure FillDefaultFstabMounterItems;
+
+procedure ProcessProgressThread(SenderThread: TWorkerThread; ProgressForm: TFProgress);
+
+function CRCGetInfo(FileName: string; Engine: TPanelEngine; var TargetName: string; var TargetCRC: LongWord; var Size: Int64): boolean;
+
+function ComputeBlockSize(TotalSize: Int64): longint;
+
+function PurgeDirectory(APath: string): boolean;
+procedure CleanTempDirs;
+
+procedure DebugWriteListSL(List: TList);
+procedure DebugWriteList(List: TList);
+
+var LeftLocalEngine, RightLocalEngine: TPanelEngine;
+ LeftPanelData, RightPanelData, AssocList, MounterList, ConnectionMgrList: TList;
+ CommandLineHistory, Bookmarks: TStringList;
+ LeftPanelTabs, RightPanelTabs: TStringList;
+ LeftTabSortIDs, RightTabSortIDs: TList;
+ LeftTabSortTypes, RightTabSortTypes: TList;
+ FMainEscPressed: boolean;
+ UsedTempPaths: TStringList;
+ SelectHistory, SearchHistory: TStringList;
+
+(********************************************************************************************************************************)
+implementation
+(********************************************************************************************************************************)
+uses SysUtils, DateUtils, StrUtils, UConfig, UDirDelete, UOverwrite, ULocale,
+ UNewDir, UFileAssoc, USymlink, UCoreClasses, ULogin, uVFSprototypes,
+ URemoteWait, UMain;
+
+
+
+(********************************************************************************************************************************)
+procedure ClearListData(List: TList);
+var i: integer;
+begin
+ try
+ if not Assigned(List) then Exit;
+ if List.Count > 0 then
+ for i := 0 to List.Count - 1 do
+ FreeDataItem(PDataItem(List[i]));
+ List.Clear;
+ except
+ on E: Exception do DebugMsg(['*** Exception raised in UCore.ClearListData (', E.ClassName, '): ', E.Message]);
+ end;
+end;
+
+(********************************************************************************************************************************)
+procedure AddUpDirItem(ListView: TGTKListView; DataList: TList);
+var ListItem: TGTKListItem;
+ Data: PDataItem;
+ j: integer;
+ s: string;
+begin
+ if ListView.Items.Count = 0
+ then ListItem := ListView.Items.Add
+ else ListItem := ListView.Items[0];
+ Data := Libc.malloc(SizeOf(TDataItem));
+ Libc.memset(Data, 0, SizeOf(TDataItem));
+ with Data^ do begin
+ UpDir := True;
+ IsDotFile := False;
+ AName := nil;
+ LnkPointTo := nil;
+ Selected := False;
+ IsLnk := False;
+ for j := 0 to Length(ColumnData) - 1 do ColumnData[j] := nil;
+ for j := 1 to ConstNumPanelColumns do
+ if ConfColumnVisible[j] then
+ case ConfColumnIDs[j] of
+ 1, 2: begin
+ if ConfDisableDirectoryBrackets then s := '..'
+ else s := '[..]';
+ ColumnData[ConfColumnIDs[j] - 1] := strdup(PChar(s));
+ end;
+ 4: ColumnData[ConfColumnIDs[j] - 1] := strdup(PChar(LANGDIR));
+ end;
+ Icon := UpDirIcon.FPixbuf;
+ ItemColor := NormalItemGDKColor;
+ if not Application.GTKVersion_2_0_5_Up then ListItem.SetValue(0, Data);
+ end;
+ ListItem.Data := Data;
+ DataList.Add(Data);
+end;
+
+(********************************************************************************************************************************)
+function FillPanel(List: TList; ListView: TGTKListView; Engine: TPanelEngine; LeftPanel: boolean): boolean;
+var DataList: TList;
+ i, j, SortColumnID, ItemCount : integer;
+ ListItem : TGTKListItem;
+ Ext, s, s2 : string;
+ SortOrder: TGTKTreeViewSortOrder;
+ Time1, Time2: TDateTime;
+ IsRoot: boolean;
+ UsrManager: TUserManager;
+begin
+ Result := False;
+ try
+ UsrManager := nil;
+ if LeftPanel then DataList := LeftPanelData
+ else DataList := RightPanelData;
+ IsRoot := (Engine.Path = '/') and (not ((Engine is TVFSEngine) and (Engine as TVFSEngine).ArchiveMode));
+{ Time1 := Now;
+ Time2 := Now;
+ DebugMsg(['Get Listing: ', SecondOf(Time2 - Time1), ':', MillisecondOf(Time2 - Time1)]); }
+
+ Time1 := Now;
+ SortColumnID := ListView.SortColumnID;
+ SortOrder := ListView.SortOrder;
+ ListView.SetSortInfo(-1, soAscending);
+ ClearListData(DataList);
+ if List.Count + Ord(not IsRoot) < ListView.Items.Count then
+ for i := ListView.Items.Count - 1 downto List.Count + Ord(not IsRoot) do
+ ListView.Items.Delete(i);
+ ItemCount := ListView.Items.Count;
+
+ Time2 := Now;
+ DebugMsg(['Items clear: ', SecondOf(Time2 - Time1), ':', MillisecondOf(Time2 - Time1)]);
+
+ Time1 := Now;
+ if ((Engine is TVFSEngine) and (Engine as TVFSEngine).ArchiveMode) or (Engine.Path <> '/') then AddUpDirItem(ListView, DataList);
+
+ if List.Count > 0 then
+ for i := 0 to List.Count - 1 do
+ with PDataItem(List[i])^ do begin
+ if i + Ord(not IsRoot) > ItemCount - 1
+ then ListItem := ListView.Items.Add
+ else ListItem := ListView.Items[i + Ord(not IsRoot)];
+ s := String(AName);
+ Ext := '';
+ if not IsDir then SeparateExt(s, s, Ext);
+ Ext := ANSIToUTF8(Ext);
+
+ // Fill the column data
+ for j := 1 to ConstNumPanelColumns do
+ if ConfColumnVisible[j] then
+ case ConfColumnIDs[j] of
+ 1: begin
+ if IsDir and (not ConfDisableDirectoryBrackets)
+ then s2 := ANSIToUTF8(Format('[%s]', [s]))
+ else s2 := ANSIToUTF8(s);
+ ColumnData[ConfColumnIDs[j] - 1] := strdup(PChar(s2));
+ end;
+ 2: begin
+ if IsDir and (not ConfDisableDirectoryBrackets)
+ then s2 := ANSIToUTF8(Format('[%s]', [AName]))
+ else s2 := ANSIToUTF8(AName);
+ ColumnData[ConfColumnIDs[j] - 1] := strdup(PChar(s2));
+ end;
+ 3: ColumnData[ConfColumnIDs[j] - 1] := strdup(PChar(Ext));
+ 4: begin
+ if IsDir then s2 := LANGDIR
+ else s2 := ANSIToUTF8(FormatSize(Size, 0));
+ ColumnData[ConfColumnIDs[j] - 1] := strdup(PChar(s2));
+ end;
+ 5: begin
+ s2 := FormatDateTime('ddddd tt', ModifyTime);
+ ColumnData[ConfColumnIDs[j] - 1] := strdup(PChar(s2));
+ end;
+ 6: begin
+ s2 := FormatDateTime('ddddd', ModifyTime);
+ ColumnData[ConfColumnIDs[j] - 1] := strdup(PChar(s2));
+ end;
+ 7: begin
+ s2 := FormatDateTime('tt', ModifyTime);
+ ColumnData[ConfColumnIDs[j] - 1] := strdup(PChar(s2));
+ end;
+ 8: begin
+ if ConfShowTextUIDs then begin
+ if not Assigned(UsrManager) then UsrManager := TUserManager.Create;
+ s2 := AnsiToUTF8(UsrManager.GetUserName(UID, False));
+ end else s2 := IntToStr(UID);
+ ColumnData[ConfColumnIDs[j] - 1] := strdup(PChar(s2));
+ end;
+ 9: begin
+ if ConfShowTextUIDs then begin
+ if not Assigned(UsrManager) then UsrManager := TUserManager.Create;
+ s2 := AnsiToUTF8(UsrManager.GetGroupName(GID, False));
+ end else s2 := IntToStr(GID);
+ ColumnData[ConfColumnIDs[j] - 1] := strdup(PChar(s2));
+ end;
+ 10: begin
+ if ConfOctalPerm then s2 := Format('%.4d', [AttrToOctal(Mode mod $1000)])
+ else s2 := AttrToStr(Mode);
+ ColumnData[ConfColumnIDs[j] - 1] := strdup(PChar(s2));
+ end;
+ end;
+
+ ItemColor := nil;
+ AddFileTypeIcon(List[i]);
+ DataList.Add(List[i]);
+ ListItem.Data := DataList[DataList.Count - 1];
+ if not Application.GTKVersion_2_0_5_Up then ListItem.SetValue(0, List[i]);
+ end;
+ Time2 := Now;
+ DebugMsg(['Fill panel: ', SecondOf(Time2 - Time1), ':', MillisecondOf(Time2 - Time1)]);
+
+// DebugWriteList(DataList);
+
+ if Assigned(UsrManager) then UsrManager.Free;
+ Time1 := Now;
+ ListView.SetSortInfo(SortColumnID, SortOrder);
+ Time2 := Now;
+ DebugMsg(['Sorting: ', SecondOf(Time2 - Time1), ':', MillisecondOf(Time2 - Time1)]);
+ DebugMsg(['------------------------------']);
+ Result := True;
+ except
+ on E: Exception do begin
+ Application.MessageBox(Format(LANGErrorGettingListingForSPanelNoPath, [LANGPanelStrings[LeftPanel], E.Message]), [mbOK], mbError, mbNone, mbOK);
+ Exit;
+ end;
+ end;
+end;
+
+(********************************************************************************************************************************)
+function ChangeDir(Engine: TPanelEngine; Path: string; var SelItem: string; const AutoFallBack: boolean): integer;
+
+ procedure GoUp(var NewPath: string);
+ var x: integer;
+ begin
+ if NewPath = PathDelim then Exit;
+ NewPath := ExcludeTrailingPathDelimiter(NewPath);
+ if Length(Trim(NewPath)) < 2 then Exit;
+ x := PosEnd(PathDelim, NewPath);
+ SelItem := Copy(NewPath, x + 1, Length(NewPath) - x);
+ NewPath := Copy(NewPath, 1, x);
+ NewPath := IncludeTrailingPathDelimiter(NewPath);
+ end;
+
+var APath: string;
+ Error : integer;
+begin
+ Result := 1;
+ try
+ APath := Engine.Path;
+ if Path = '..' then GoUp(APath)
+ else begin
+ APath := IncludeTrailingPathDelimiter(APath);
+ Path := IncludeTrailingPathDelimiter(Path);
+ if (Length(Path) > 0) and (Path[1] <> '/')
+ then APath := APath + Path
+ else APath := Path;
+ APath := IncludeTrailingPathDelimiter(APath);
+ end;
+
+ // AutoFallback loop
+ Error := Engine.ChangeDir(APath);
+ while AutoFallback and (Error <> 0) and (APath <> '/') do begin
+ GoUp(APath);
+ Error := Engine.ChangeDir(APath);
+ end;
+ // Going on...
+ if Error <> 0 then begin
+ Result := Error;
+ DebugMsg(['*** UCore.ChangeDir: error during Engine.ChangeDir: ', GetErrorString(Error)]);
+ Exit;
+ end;
+ Engine.Path := APath;
+ Result := 0;
+ except
+ on E: Exception do begin
+ DebugMsg(['*** Exception raised in UCore.ChangeDir (', E.ClassName, '): ', E.Message]);
+ Result := 1;
+ end;
+ end;
+end;
+
+(********************************************************************************************************************************)
+function MakeDirectory(ListView: TGTKListView; Engine: TPanelEngine; LeftPanel: boolean; NewDir: string): boolean;
+var Error: integer;
+begin
+ Result := False;
+ try
+ Error := Engine.MakeDir(IncludeTrailingPathDelimiter(Engine.Path) + NewDir);
+ if Error <> 0 then begin
+ Application.MessageBox(Format(LANGErrorCreatingNewDirectorySInSPanel, [NewDir, LANGPanelStrings[LeftPanel], ANSIToUTF8(GetErrorString(Error))]), [mbOK], mbError, mbNone, mbOK);
+ Exit;
+ end;
+ Result := True;
+ except
+ on E: Exception do begin
+ Application.MessageBox(Format(LANGErrorCreatingNewDirectorySInSPanelNoPath, [LANGPanelStrings[LeftPanel], E.Message]), [mbOK], mbError, mbNone, mbOK);
+ Exit;
+ end;
+ end;
+end;
+
+(********************************************************************************************************************************)
+procedure DeleteFilesWorker(SenderThread: TWorkerThread);
+var SkipAll: boolean;
+
+ function HandleDelete(AFileRec: PDataItemSL): boolean;
+ var Res, Response: integer;
+ begin
+ Result := True;
+// DebugMsg(['Debug: IsDir: ', AFileRec^.IsDir, ', Stage1: ', AFileRec^.Stage1, ', IsLnk: ', AFileRec^.IsLnk, '; Result = ', AFileRec^.IsDir and AFileRec^.Stage1 and (not AFileRec^.IsLnk)]);
+ if AFileRec^.IsDir and AFileRec^.Stage1 and (not AFileRec^.IsLnk) then Exit;
+ Res := SenderThread.Engine.Remove(String(AFileRec^.AName));
+// DebugMsg(['Result : ', Res]);
+ if Res <> 0 then
+ if SkipAll then Result := True else
+ begin
+ Response := SenderThread.ShowDirDeleteDialog(1, LANGTheFileDirectory, ANSIToUTF8(String(AFileRec^.AName)),
+ Format(LANGCouldNotBeDeletedS, [ANSIToUTF8(GetErrorString(Res))]));
+ case Response of
+ 1 : Result := True;
+ 3 : begin
+ SkipAll := True;
+ Result := True;
+ end;
+ 2 : Result := HandleDelete(AFileRec);
+ else Result := False;
+ end;
+ end;
+ end;
+
+var i: longint;
+ AList: TList;
+ CurrPath: string;
+ Fr: Single;
+ Response: integer;
+ DeleteAll, SkipToNext: boolean;
+
+begin
+ SkipAll := False;
+ AList := TList.Create;
+ AList.Clear;
+ with SenderThread do begin
+ CurrPath := IncludeTrailingPathDelimiter(Engine.Path);
+ if DataList.Count > 0 then
+ for i := 0 to DataList.Count - 1 do
+ with PDataItem(DataList[i])^ do
+ if (not UpDir) and Selected then
+ if IsDir and (not IsLnk)
+ then Engine.FillDirFiles(CurrPath + String(AName), AList, 1)
+ else AList.Add(Engine.GetFileInfoSL(CurrPath + String(AName)));
+ if (AList.Count = 0) and Assigned(SelectedItem) and (not SelectedItem^.UpDir) then
+ with SelectedItem^ do
+ if IsDir and (not IsLnk)
+ then Engine.FillDirFiles(CurrPath + String(AName), AList, 1)
+ else AList.Add(Engine.GetFileInfoSL(CurrPath + String(AName)));
+ if Engine.ChangeDir(CurrPath, False) <> 0 then DebugMsg(['*** WARNING: Cannot change to the origin location, strange behaviour might occur.']);
+ Engine.ExplicitChDir('/');
+
+ SetProgress1Params(AList.Count);
+ CommitGUIUpdate;
+ DeleteAll := False;
+ SkipToNext := False;
+
+// DebugWriteListSL(AList);
+
+ if AList.Count = 1 then Fr := 1 else Fr := 100 / (AList.Count - 1);
+ if AList.Count > 0 then
+ for i := 0 to AList.Count - 1 do begin
+ if Cancelled then begin
+ FCancelMessage := LANGUserCancelled;
+ FShowCancelMessage := True;
+ Break;
+ end;
+ if SkipToNext and (PDataItemSL(AList[i])^.Level > 1) then Continue;
+ if SkipToNext and (PDataItemSL(AList[i])^.Level = 1) and (not PDataItemSL(AList[i])^.Stage1) then begin
+ SkipToNext := False;
+ Continue;
+ end;
+ // Check for non-empty directory
+ if (not DeleteAll) and (PDataItemSL(AList[i])^.Level = 1) and PDataItemSL(AList[i])^.Stage1 and PDataItemSL(AList[i])^.IsDir and
+ (not PDataItemSL(AList[i])^.IsLnk) and (i < AList.Count - 2) and (PDataItemSL(AList[i + 1])^.Level = 2) then
+ begin
+ Response := ShowDirDeleteDialog(4, Format(LANGTheDirectorySIsNotEmpty, [ANSIToUTF8(string(PDataItemSL(AList[i])^.AName))]),
+ LANGDoYouWantToDeleteItWithAllItsFilesAndSubdirectories);
+ case Response of
+ 1 : ; // Do nothing in this case - I will not bother with changing the structure; it works :-)
+ 2 : DeleteAll := True;
+ 3 : SkipToNext := True;
+ else Break;
+ end;
+ end;
+ // Process delete
+ if not HandleDelete(AList[i]) then Break;
+ UpdateProgress1(i, Format('%d%%', [Round(Fr * i)]));
+ UpdateCaption1(ANSIToUTF8(PDataItemSL(AList[i])^.AName));
+ CommitGUIUpdate;
+ end;
+
+ // Free the objects
+ if AList.Count > 0 then
+ for i := AList.Count - 1 downto 0 do FreeDataItem(PDataItemSL(AList[i]));
+ AList.Clear;
+ AList.Free;
+ if Engine.ChangeDir(CurrPath, False) <> 0 then DebugMsg(['*** WARNING: Cannot change to the origin location, strange behaviour might occur.']);
+ end;
+ SenderThread.FDoneThread := True;
+end;
+
+
+
+
+
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+
+ // Return False to break the process
+ function CopyFilesWorker_ProgressFunc(Sender: Pointer; BytesDone: Int64): boolean; cdecl;
+ begin
+// DebugMsg(['*** CopyFilesWorker: ProgressFunc called (Sender=', QWord(Sender), ', BytesDone=', BytesDone, ')']);
+ try
+ if Assigned(Sender) and (TObject(Sender) is TWorkerThread) then
+ with TWorkerThread(Sender) do begin
+ if BytesDone = 0 then UpdateProgress1(0, '0%')
+ else UpdateProgress1(BytesDone, Format('%d%%', [Round(ParamFloat2 * BytesDone)]));
+ UpdateProgress2(ParamInt64 + BytesDone, Format('%d%%', [Round(ParamFloat1 * (ParamInt64 + BytesDone))]));
+ Result := not Cancelled;
+ CommitGUIUpdate;
+ end else DebugMsg(['*** CopyFilesWorker: Sender is not TWorkerThread']);
+ except
+ on E: Exception do DebugMsg(['*** Exception raised in ProgressFunc(Sender=', QWord(Sender), ', BytesDone=', BytesDone, '): (', E.ClassName, '): ', E.Message]);
+ end;
+ end;
+
+ // Return True to ignore the error (Skip, Skip All, Ignore, Cancel)
+ function CopyFilesWorker_ErrorFunc(Sender: Pointer; ErrorType, ErrorNum: integer; FileName: string): boolean; cdecl;
+ var s, s2, s3: string;
+ begin
+ with TWorkerThread(Sender) do begin
+ if ParamBool2 then begin
+ Result := True;
+ Exit;
+ end;
+ case ErrorType of
+ 1 : s := LANGMemoryAllocationFailed;
+ 2 : s := LANGCannotOpenSourceFile;
+ 3 : s := LANGCannotOpenDestinationFile;
+ 4 : s := LANGCannotCloseDestinationFile;
+ 5 : s := LANGCannotCloseSourceFile;
+ 6 : s := LANGCannotReadFromSourceFile;
+ 7 : s := LANGCannotWriteToDestinationFile;
+ end;
+ if ParamBool1 then s2 := LANGCopyError
+ else s2 := LANGMoveError;
+ if ErrorType <> 1 then s3 := ANSIToUTF8(FileName)
+ else s3 := '';
+ case ShowDirDeleteDialog(3, s, s3, ANSIToUTF8(GetErrorString(ErrorNum)), s2) of
+ 0 : begin // Cancel button
+ Result := False;
+ CancelIt;
+ end;
+ 2 : Result := True; // Ignore
+ 3 : begin // Skip All
+ ParamBool2 := True; { Skip All Err }
+ Result := False; //** True?
+ end;
+ else {1, 124, 255 :} Result := False; // Skip
+ end;
+ end;
+ end;
+
+
+procedure CopyFilesWorker(SenderThread: TWorkerThread);
+// ParamFloat1 = Fr - internal
+// ParamFloat2 = Fr2 - internal
+// ParamInt64 = SizeDone - internal
+// ParamBool1 = ModeCopy - internal
+// ParamBool2 = SkipAllErr - internal
+// ParamBool3 = CopyMode
+// ParamBool4 = QuickRename
+// ParamBool5 = OneFile
+// ParamString1 = NewPath
+// ParamString2 = Filepath
+// ParamDataItem1 = QuickRenameDataItem
+var DefResponse: integer; // Global variables for this function
+ SkipAll: boolean;
+
+
+
+ // Returns True if file was successfully copied, if not, the file will be deleted in LocalCopyFile
+ function ManualCopyFile(SourceFile, DestFile: string; Append: boolean): boolean;
+ var fsrc, fdst: TEngineFileDes;
+ Error, BSize: integer;
+ Buffer: Pointer;
+ BytesDone, BytesRead, BytesWritten: Int64;
+ Res: boolean;
+ begin
+ DebugMsg(['ManualCopyFile: ', SourceFile, ' ---> ', DestFile]);
+ with SenderThread do begin
+ Result := False;
+ Error := 0;
+ fsrc := SrcEngine.OpenFile(SourceFile, omRead, Error);
+ if Error <> 0 then begin
+ CopyFilesWorker_ErrorFunc(SenderThread, 2, Error, SourceFile); // Cannot open source file
+ Exit;
+ end;
+ if Append then fdst := DestEngine.OpenFile(DestFile, omAppend, Error)
+ else fdst := DestEngine.OpenFile(DestFile, omWrite, Error);
+ if Error <> 0 then begin
+ SrcEngine.CloseFile(fsrc);
+ CopyFilesWorker_ErrorFunc(SenderThread, 3, Error, SourceFile); // Cannot open target file
+ Exit;
+ end;
+
+ BytesDone := 0;
+ Res := True;
+
+ BSize := DestEngine.GetBlockSize;
+ Buffer := Libc.malloc(BSize);
+ if Buffer = nil then begin
+ CopyFilesWorker_ErrorFunc(SenderThread, 1, errno, SourceFile); // Memory allocation failed
+ Libc.free(Buffer);
+ Exit;
+ end;
+ Libc.memset(Buffer, 0, BSize);
+
+ BytesWritten := 0;
+ repeat
+ BytesRead := SrcEngine.ReadFile(fsrc, Buffer, BSize, Error);
+ if (BytesRead = 0) and (Error <> 0) then
+ Res := CopyFilesWorker_ErrorFunc(SenderThread, 6, Error, SourceFile); // Cannot read from source file
+ if BytesRead > 0 then begin
+ BytesWritten := DestEngine.WriteFile(fdst, Buffer, BytesRead, Error);
+ if (BytesWritten < BytesRead) then
+ Res := CopyFilesWorker_ErrorFunc(SenderThread, 7, Error, DestFile); // Cannot write to source file
+ end;
+ Inc(BytesDone, BytesRead);
+ if not CopyFilesWorker_ProgressFunc(SenderThread, BytesDone) then begin
+ Res := False;
+ Break;
+ end;
+ until (BytesRead = 0) or (BytesWritten < BytesRead);
+ Libc.free(Buffer);
+
+ if DestEngine.CloseFile(fdst) <> 0 then begin
+ CopyFilesWorker_ErrorFunc(SenderThread, 4, errno, DestFile); // Cannot close target file
+ Exit;
+ end;
+ if SrcEngine.CloseFile(fsrc) <> 0 then begin
+ CopyFilesWorker_ErrorFunc(SenderThread, 5, errno, SourceFile); // Cannot close source file
+ Exit;
+ end;
+ Result := Res;
+ end;
+ end;
+
+ // Returns True if the file was successfully copied and will be deleted on move
+ function LocalCopyFile(SourceFile, DestFile: string; Append: boolean): boolean;
+ var DataSrc, DataDest: PDataItemSL;
+ begin
+ try
+ with SenderThread do begin
+ if ((SrcEngine is TLocalTreeEngine) and (DestEngine is TLocalTreeEngine)) or
+ ((SrcEngine is TLocalTreeEngine) and (not (DestEngine is TLocalTreeEngine)))
+ then Result := DestEngine.CopyFileIn(SenderThread, SourceFile, DestFile, @CopyFilesWorker_ProgressFunc, @CopyFilesWorker_ErrorFunc, Append) else
+// DebugMsg(['2 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$']);
+ if (not (SrcEngine is TLocalTreeEngine)) and (DestEngine is TLocalTreeEngine)
+ then Result := SrcEngine.CopyFileOut(SenderThread, SourceFile, DestFile, @CopyFilesWorker_ProgressFunc, @CopyFilesWorker_ErrorFunc, Append)
+ // both files are on different engines, we will have to handle the copy process ourselves
+ else Result := ManualCopyFile(SourceFile, DestFile, Append);
+// DebugMsg(['3 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$']);
+
+ // If size differs, then delete target file
+ if (not Append) and (not Result) then begin
+// DebugMsg(['4 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$']);
+ DataSrc := SrcEngine.GetFileInfoSL(SourceFile);
+ if DataSrc = nil then Exit;
+ DataDest := DestEngine.GetFileInfoSL(DestFile);
+ if DataDest = nil then Exit;
+ if DataSrc^.Size <> DataDest^.Size then DestEngine.Remove(DestFile);
+ end;
+ end;
+// DebugMsg(['(II) CopyFilesWorker.LocalCopyFile: finished']);
+ except
+ on E: Exception do DebugMsg(['*** Exception raised in LocalCopyFile(SourceFile=', SourceFile, ', DestFile=', DestFile, ', Append=', Append, '): (', E.ClassName, '): ', E.Message]);
+ end;
+ end;
+
+ function IsOnSameFS(SrcPath, DestPath: string): boolean;
+ begin
+ DebugMsg(['### IsOnSameFS: "', SrcPath, '" vs. "', DestPath, '"'#10'## Prefix = "', SenderThread.SrcEngine.GetPrefix, '" vs. "', SenderThread.DestEngine.GetPrefix, '"']);
+ with SenderThread do
+ if SrcEngine.GetPrefix <> DestEngine.GetPrefix
+ then Result := False
+ else Result := DestEngine.IsOnSameFS(SrcPath, DestPath);
+ end;
+
+ function TwoSameFiles(Path1, Path2: string; TestCaseInsensitiveFS: boolean): boolean;
+ begin
+ with SenderThread do begin
+ if SrcEngine.GetPrefix <> DestEngine.GetPrefix then Result := False else
+ if AnsiCompareStr(Path1, Path2) = 0 then Result := True else
+ Result := TestCaseInsensitiveFS and DestEngine.TwoSameFiles(Path1, Path2);
+ end;
+ end;
+
+ function DoOperation(AFileRec: PDataItemSL; const Dst: string; var ErrorKind: integer; const Append: boolean): integer;
+ begin
+ try
+ ErrorKind := 0;
+ Result := 0;
+ with SenderThread do
+ with AFileRec^ do begin
+ if IsLnk then begin
+ // Explicit copy the file
+ if ParamBool3 or (not IsOnSameFS(String(AName), ExtractFileDir(Dst))) then begin
+ ErrorKind := DestEngine.MakeSymLink(Dst, String(LnkPointTo));
+ if ErrorKind <> 0 then Result := ERRCreateLink;
+ if not ParamBool3 then begin
+ ErrorKind := SrcEngine.Remove(String(AName));
+ if ErrorKind <> 0 then Result := ERRRemove;
+ end;
+ end else begin // Move the file
+ ErrorKind := DestEngine.RenameFile(String(AName), Dst);
+ if ErrorKind <> 0 then Result := ERRCopyMove;
+ end;
+ end else // is not link
+ if ParamBool3 then begin // Copy mode
+ if LocalCopyFile(String(AName), Dst, Append) then begin
+ if IsOnRO and ConfClearReadOnlyAttr and (Mode and S_IWUSR = 0) then Mode := Mode or S_IWUSR;
+ DestEngine.Chmod(Dst, Mode);
+ DestEngine.Chown(Dst, UID, GID);
+ DestEngine.ChangeTimes(Dst, mtime, atime);
+ end;
+ end else // Move mode
+ if IsOnSameFS(String(AName), ExtractFileDir(Dst)) then begin
+ if TwoSameFiles(String(AName), Dst, True) and (not TwoSameFiles(String(AName), Dst, False)) then begin
+ DebugMsg(['*** Activating double-rename due to renaming on case-insensitive FS']);
+ ErrorKind := DestEngine.RenameFile(String(AName), Dst + '_tcmd');
+ if ErrorKind = 0 then ErrorKind := DestEngine.RenameFile(Dst + '_tcmd', Dst);
+ end else ErrorKind := DestEngine.RenameFile(String(AName), Dst);
+ if ErrorKind <> 0 then Result := ERRCopyMove;
+ end else begin
+ if LocalCopyFile(String(AName), Dst, Append) then begin
+ if IsOnRO and ConfClearReadOnlyAttr and (Mode and S_IWUSR = 0) then Mode := Mode or S_IWUSR;
+ DestEngine.Chmod(Dst, Mode);
+ DestEngine.Chown(Dst, UID, GID);
+ DestEngine.ChangeTimes(Dst, mtime, atime);
+ if not Cancelled then begin
+ ErrorKind := SrcEngine.Remove(String(AName));
+ if ErrorKind <> 0 then Result := ERRRemove;
+ end;
+ end;
+ end;
+ end;
+// DebugMsg(['(II) CopyFilesWorker.DoOperation: finished']);
+ except
+ on E: Exception do DebugMsg(['*** Exception raised in DoOperation(AFileRec=', QWord(AFileRec), ', Dst=', Dst, ', ErrorKind=', ErrorKind, ', Append=', Append, '): (', E.ClassName, '): ', E.Message]);
+ end;
+ end;
+
+ // Return False to break the processing (Cancel)
+ function HandleCopy(AFileRec: PDataItemSL; NewFilePath: string): boolean;
+ var Res, Response, ErrorKind, r: integer;
+ Item: PDataItemSL;
+ s, s1, s3, cap: string;
+ begin
+ Result := True;
+ try
+ with SenderThread do begin
+
+ // Second stage - change permissions
+ if (not AFileRec^.Stage1) and (ParamBool3 or ((not ParamBool3) and (not AFileRec^.ForceMove))) then
+ with AFileRec^ do begin
+ if IsOnRO and ConfClearReadOnlyAttr and (Mode and S_IWUSR = 0) then Mode := Mode or S_IWUSR;
+ DestEngine.Chmod(NewFilePath, Mode);
+ DestEngine.Chown(NewFilePath, UID, GID);
+ DestEngine.ChangeTimes(NewFilePath, mtime, atime);
+ if not ParamBool3 then SrcEngine.Remove(String(AName)); // Remove directory
+ Exit;
+ end;
+
+ // First stage - copy data
+ if AFileRec^.IsDir then begin
+ Res := 0;
+ if AFileRec^.ForceMove and (not ParamBool3)
+ then begin
+ if TwoSameFiles(ExcludeTrailingPathDelimiter(string(AFileRec^.AName)), ExcludeTrailingPathDelimiter(string(AFileRec^.ADestination)), True) and (not
+ TwoSameFiles(ExcludeTrailingPathDelimiter(string(AFileRec^.AName)), ExcludeTrailingPathDelimiter(string(AFileRec^.ADestination)), False)) then
+ begin
+ DebugMsg(['*** Activating double-rename due to renaming on case-insensitive FS']);
+ ErrorKind := DestEngine.RenameFile(string(AFileRec^.AName), ExcludeTrailingPathDelimiter(string(AFileRec^.ADestination)) + '_tcmd');
+ if ErrorKind = 0 then ErrorKind := DestEngine.RenameFile(ExcludeTrailingPathDelimiter(string(AFileRec^.ADestination)) + '_tcmd', ExcludeTrailingPathDelimiter(string(AFileRec^.ADestination)));
+ end else ErrorKind := DestEngine.RenameFile(string(AFileRec^.AName), string(AFileRec^.ADestination));
+ if ErrorKind <> 0 then Res := ERRCopyMove
+ else Res := 0;
+ end else
+ if not DestEngine.DirectoryExists(NewFilePath, True) then begin
+ ErrorKind := DestEngine.MakeDir(NewFilePath);
+ if ErrorKind <> 0 then Res := ERRMkDir
+ else Res := 0;
+ end;
+ end else begin // not a directory
+ if not DestEngine.DirectoryExists(ExtractFileDir(NewFilePath), True) then DestEngine.MakeDir(ExtractFileDir(NewFilePath));
+ SetProgress1Params(AFileRec^.Size + Ord(AFileRec^.Size = 0));
+ if AFileRec^.Size <= 1 then ParamFloat2 := 1 else ParamFloat2 := 100 / (AFileRec^.Size - 1);
+ CopyFilesWorker_ProgressFunc(SenderThread, 0);
+ Res := 0;
+ if DestEngine.FileExists(NewFilePath, True) and
+ (not (not ParamBool3 and (not TwoSameFiles(NewFilePath, AFileRec^.AName, False)) and TwoSameFiles(NewFilePath, AFileRec^.AName, True)))
+ then begin
+ Response := DefResponse;
+ Item := DestEngine.GetFileInfoSL(NewFilePath);
+ if Response = 0 then begin
+ Response := ShowOverwriteDialog(1 + Ord(ParamBool3), Format(LANGOverwriteS, [ANSIToUTF8(NewFilePath)]),
+ Format(LANGOvewriteSBytesS, [FormatSize(Item^.Size, 0), FormatDateTime('ddddd t', Item^.ModifyTime)]),
+ Format(LANGWithFileS, [ANSIToUTF8(AFileRec^.AName)]),
+ Format(LANGOvewriteSBytesS, [FormatSize(AFileRec^.Size, 0), FormatDateTime('ddddd t', AFileRec^.ModifyTime)]),
+ ANSIToUTF8(ExtractFileName(NewFilePath)), ExtractFileName(AFileRec^.AName), ExtractFileName(NewFilePath));
+ s := FOverwriteRenameStr;
+ case Response of
+ // 1: Overwrite
+ // 3: Skip
+ 2 {Overwrite All}, 5 {Overwrite All Older}, 6 {Skip All}: DefResponse := Response;
+ 4 {Cancel}, 124 {Close Window}, 255: begin
+ Result := False;
+ Exit;
+ end;
+ 7: {Rename} begin
+ NewFilePath := Copy(NewFilePath, 1, LastDelimiter(PathDelim, NewFilePath)) + s;
+ Result := HandleCopy(AFileRec, NewFilePath);
+ Exit;
+ end;
+ 8 {Append}: begin
+ Res := DoOperation(AFileRec, NewFilePath, ErrorKind, True);
+ end;
+ end;
+ end;
+
+ // Remove destination file if exists and should be overwritten
+ if (Response in [1, 2]) or ((Response = 5) and (Item^.ModifyTime < AFileRec^.ModifyTime)) then begin
+ r := DestEngine.Remove(NewFilePath);
+ while r <> 0 do begin
+ Res := ShowDirDeleteDialog(1, LANGTheFile, ANSIToUTF8(String(NewFilePath)),
+ Format(LANGCouldNotBeDeletedS, [ANSIToUTF8(GetErrorString(r))]), LANGCopyError);
+ case Res of
+ 1: begin
+ Result := True;
+ Exit;
+ end;
+ 2: r := DestEngine.Remove(NewFilePath);
+ 0, 124, 255: begin
+ Result := False;
+ Exit;
+ end;
+ end;
+ end;
+ Res := DoOperation(AFileRec, NewFilePath, ErrorKind, False);
+ end;
+ end else Res := DoOperation(AFileRec, NewFilePath, ErrorKind, False);
+ end;
+
+ // Error handling
+ if (Res <> 0) and (not SkipAll) then begin
+ if ParamBool3 then cap := LANGCopy
+ else cap := LANGMove;
+ case Res of
+ ERRCreateLink: begin
+ s1 := LANGTheSymbolicLink;
+ if ErrorKind = 0 then s3 := LANGCouldNotBeCreated else
+ s3 := Format(LANGCouldNotBeCreatedS, [ANSIToUTF8(GetErrorString(ErrorKind))]);
+ end;
+ ERRMkDir: begin
+ s1 := LANGTheDirectory;
+ if ErrorKind = 0 then s3 := LANGCouldNotBeCreated else
+ s3 := Format(LANGCouldNotBeCreatedS, [ANSIToUTF8(GetErrorString(ErrorKind))]);
+ end;
+ ERRRemove: begin
+ if AFileRec^.IsDir then s1 := LANGTheDirectory else
+ if AFileRec^.IsLnk then s1 := LANGTheSymbolicLink else
+ s1 := LANGTheFile;
+ if ErrorKind = 0 then s3 := LANGCouldNotBeDeleted else
+ s3 := Format(LANGCouldNotBeDeletedS, [ANSIToUTF8(GetErrorString(ErrorKind))]);
+ end;
+ ERRCopyMove: begin
+ if ParamBool3 then s1 := LANGCannotCopyFile else
+ s1 := LANGCannotMoveFile;
+ if ErrorKind = 0 then s3 := '' else
+ s3 := ANSIToUTF8(GetErrorString(ErrorKind));
+ end;
+ end;
+ Response := ShowDirDeleteDialog(1, s1, ANSIToUTF8(String(NewFilePath)), s3, cap);
+ case Response of
+ 1 : Result := True; // Skip
+ 2 : Result := HandleCopy(AFileRec, NewFilePath); // Retry
+ 3 : begin // Skip All
+ SkipAll := True;
+ Result := True;
+ end;
+ 0, 124, 255 : Result := False; // Cancel
+ end;
+ end;
+ end;
+// DebugMsg(['(II) CopyFilesWorker.HandleCopy: finished']);
+ except
+ on E: Exception do DebugMsg(['*** Exception raised in HandleCopy(AFileRec=', QWord(AFileRec), ', NewFilePath=', NewFilePath, '): (', E.ClassName, '): ', E.Message]);
+ end;
+ end;
+
+ procedure HandleProcessPattern(AList: TList; CurrPath, FullPath, ParamFileName: string; ParamDir, Ren: boolean);
+ var s, s2: string;
+ b, CaseInsensitiveRename: boolean;
+ Info: PDataItemSL;
+ begin
+ with SenderThread do
+ if not Ren then begin
+ if ParamDir then SrcEngine.FillDirFiles(FullPath, AList, 1)
+ else begin
+ Info := SrcEngine.GetFileInfoSL(FullPath);
+ if Info = nil then DebugMsg(['$$$ Copy: Something went wrong while building the filelist...'])
+ else AList.Add(Info);
+ end;
+ end else begin
+ s := ProcessPattern(DestEngine, ParamString1, CurrPath, ParamFileName, ParamDir);
+ CaseInsensitiveRename := (AnsiCompareStr(ParamString1, ParamFileName) <> 0) and (AnsiCompareText(ParamString1, ParamFileName) = 0) and
+ ParamDir and DestEngine.TwoSameFiles(IncludeTrailingPathDelimiter(CurrPath) + ParamString1, IncludeTrailingPathDelimiter(CurrPath) + ParamFileName);
+// DebugMsg(['HandleProcessPattern: s = ', s]);
+ b := False;
+ if ParamDir then begin
+ b := DestEngine.DirectoryExists(ExcludeTrailingPathDelimiter(s)) and (not CaseInsensitiveRename);
+ if (not b) and (s <> '/') then begin
+ s2 := ExcludeTrailingPathDelimiter(s);
+ s2 := ExcludeTrailingPathDelimiter(Copy(s2, 1, LastDelimiter('/', s2)));
+ b := DestEngine.DirectoryExists(ExcludeTrailingPathDelimiter(s2));
+ end;
+ end;
+ if (not ParamDir) or (ParamDir and b and IsOnSameFS(ExcludeTrailingPathDelimiter(FullPath), s2))
+ then begin
+ Info := SrcEngine.GetFileInfoSL(FullPath);
+ if Info = nil then DebugMsg(['$$$ Copy: Something went wrong while building the filelist...'])
+ else begin
+ Info^.ADestination := strdup(PChar(s));
+ Info^.ForceMove := True;
+ AList.Add(Info);
+ end;
+ end else SrcEngine.FillDirFiles(FullPath, AList, 1);
+ end;
+ end;
+
+var i: longint;
+ List: TList;
+ CurrPath, SaveDestPath, SaveSrcPath, s: string;
+ MaxSize: Int64;
+begin
+ List := TList.Create;
+ List.Clear;
+ with SenderThread do begin
+ ErrorHappened := False;
+ FCancelled := False;
+ SaveSrcPath := '';
+ CurrPath := IncludeTrailingPathDelimiter(SrcEngine.Path);
+ SaveDestPath := DestEngine.Path;
+ ParamString1 := ExcludeTrailingPathDelimiter(ParamString1);
+ if ParamString1 = '' then ParamString1 := PathDelim;
+
+ if ParamBool5 then begin // HandleVFSFromArchive
+ if not ExtractFromVFSAll then HandleProcessPattern(List, CurrPath, ParamString2, ExtractFileName(ParamString2), False, False)
+ else begin
+ SaveSrcPath := IncludeTrailingPathDelimiter(SrcEngine.Path);
+ SrcEngine.SetPath('/');
+ CurrPath := '/';
+ HandleProcessPattern(List, '/', '/', '', True, False);
+ end;
+ end else
+ if ParamBool4 then begin // Quick-Rename
+ with ParamDataItem1^ do
+ HandleProcessPattern(List, CurrPath, CurrPath + String(AName), String(AName), IsDir and (not IsLnk), True);
+ end else begin // Not Quick-Rename
+ if not ExtractFromVFSMode then begin
+ if DataList.Count > 0 then
+ for i := 0 to DataList.Count - 1 do
+ with PDataItem(DataList[i])^ do
+ if (not UpDir) and Selected
+ then HandleProcessPattern(List, CurrPath, CurrPath + String(AName), String(AName), IsDir and (not IsLnk), not ParamBool3);
+ if (List.Count = 0) and Assigned(SelectedItem) and (not SelectedItem^.UpDir) then
+ with SelectedItem^ do
+ HandleProcessPattern(List, CurrPath, CurrPath + String(AName), String(AName), IsDir and (not IsLnk), not ParamBool3);
+ end else begin // Extract from VFS mode
+ DebugMsg(['CopyFilesWorker: Should not be reached']);
+ if (not ExtractFromVFSAll) and Assigned(SelectedItem)
+ then HandleProcessPattern(List, CurrPath, CurrPath + String(SelectedItem^.AName), String(SelectedItem^.AName), SelectedItem^.IsDir and (not SelectedItem^.IsLnk), not ParamBool3)
+ else begin
+ SaveSrcPath := IncludeTrailingPathDelimiter(SrcEngine.Path);
+ SrcEngine.SetPath('/');
+ CurrPath := '/';
+ HandleProcessPattern(List, '/', '/', '', True, False);
+ end;
+ end;
+ end;
+
+{ if DestEngine.ChangeDir(CurrPath, False) <> 0 then DebugMsg(['*** WARNING: Cannot change to the origin location, strange behaviour may occur.']);
+ if SrcEngine.ChangeDir(CurrPath, False) <> 0 then DebugMsg(['*** WARNING: Cannot change to the origin location, strange behaviour may occur.']); }
+// DebugWriteListSL(List);
+
+ __chdir('/');
+ // Compute total size of files to copy
+ MaxSize := 0; ParamInt64 := 0;
+ if List.Count > 0 then
+ for i := 0 to List.Count - 1 do
+ if PDataItemSL(List[i])^.Stage1 and (PDataItemSL(List[i])^.Size > 0) and (not PDataItemSL(List[i])^.IsDir) and (not PDataItemSL(List[i])^.IsLnk)
+ then Inc(MaxSize, PDataItemSL(List[i])^.Size);
+ SrcEngine.BlockSize := ComputeBlockSize(MaxSize);
+ DestEngine.BlockSize := ComputeBlockSize(MaxSize);
+
+ // Prepare the Progress window
+ SetProgress2Params(MaxSize + Ord(MaxSize = 0));
+ UpdateProgress1(0, '0%');
+ UpdateProgress2(0, '0%');
+ CommitGUIUpdate;
+
+ DefResponse := 0;
+ ParamBool1 := ParamBool3;
+ SkipAll := False;
+ ParamBool2 := False;
+
+ if MaxSize < 2 then ParamFloat1 := 1 else ParamFloat1 := 100 / (MaxSize - 1);
+ if List.Count > 0 then
+ for i := 0 to List.Count - 1 do begin
+ if Assigned(PDataItemSL(List[i])^.ADestination)
+ then s := string(PDataItemSL(List[i])^.ADestination)
+ else
+ begin
+ s := ProcessPattern(DestEngine, ParamString1, CurrPath, Copy(PDataItemSL(List[i])^.AName, Length(CurrPath) + 1, Length(PDataItemSL(List[i])^.AName) - Length(CurrPath)),
+ PDataItemSL(List[i])^.IsDir and (not PDataItemSL(List[i])^.IsLnk));
+// DebugMsg(['s2 = ', Copy(PDataItemSL(List[i])^.AName, Length(CurrPath) + 1, Length(PDataItemSL(List[i])^.AName) - Length(CurrPath)), ', s = ', s]);
+ end;
+ UpdateCaption1(Format(LANGFromS, [ANSIToUTF8(string(PDataItemSL(List[i])^.AName))]));
+ UpdateCaption2(Format(LANGToS, [ANSIToUTF8(s)]));
+ CommitGUIUpdate;
+ if TwoSameFiles(s, string(PDataItemSL(List[i])^.AName), ParamBool3) and (not PDataItemSL(List[i])^.IsDir) then begin
+ FCancelMessage := LANGCannotCopyFileToItself;
+ FShowCancelMessage := True;
+ ErrorHappened := True;
+ Break;
+ end;
+ if s <> string(PDataItemSL(List[i])^.AName) then
+ if not HandleCopy(List[i], s) then begin
+ ErrorHappened := True;
+ Break;
+ end;
+ if (not PDataItemSL(List[i])^.IsDir) and (not PDataItemSL(List[i])^.IsLnk)
+ then Inc(ParamInt64, PDataItemSL(List[i])^.Size);
+ if Cancelled then begin
+ FCancelMessage := LANGUserCancelled;
+ FShowCancelMessage := True;
+ ErrorHappened := True;
+ Break;
+ end;
+ end;
+
+ // Free the objects
+ if List.Count > 0 then
+ for i := List.Count - 1 downto 0 do FreeDataItem(PDataItemSL(List[i]));
+ List.Clear;
+ List.Free;
+ if DestEngine.ChangeDir(SaveDestPath, False) <> 0 then DebugMsg(['*** WARNING: Cannot change to the origin location, strange behaviour might occur.']);
+ if SaveSrcPath <> '' then CurrPath := SaveSrcPath;
+ if SrcEngine.ChangeDir(CurrPath, False) <> 0 then DebugMsg(['*** WARNING: Cannot change to the origin location, strange behaviour might occur.']);
+ end;
+ SenderThread.FDoneThread := True;
+ DebugMsg(['(II) CopyFilesWorker: finished']);
+end;
+
+
+(********************************************************************************************************************************)
+function ComputeBlockSize(TotalSize: Int64): longint;
+begin
+ if TotalSize < 512*1024 then Result := 32*1024 else
+ if TotalSize < 1024*1024 then Result := 64*1024 else
+ if TotalSize < 2048*1024 then Result := 96*1024 else
+ if TotalSize < 4096*1024 then Result := 128*1024 else
+ if TotalSize < 8192*1024 then Result := 256*1024 else
+{ if TotalSize < 256*1024*1024 then Result := 512*1024 else
+ if TotalSize < 768*1024*1024 then Result := 2048*1024 else }
+ Result := 4096*1024;
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure DebugWriteListSL(List: TList);
+var i: integer;
+ Item: PDataItemSL;
+begin
+ if not ParamDebug then Exit;
+ if not Assigned(List) then begin
+ WriteLn('List not assigned');
+ Exit;
+ end;
+ WriteLn('********************************************************');
+ WriteLn('** List.Count = ', List.Count, ' base @ ', integer(pointer(List)));
+ if List.Count > 0 then
+ for i := 0 to List.Count - 1 do
+ if not Assigned(List[i]) then WriteLn('**** List Item idx ', i, '; base @ nil') else
+ try
+ WriteLn('**** List Item idx ', i, '; base @ ', integer(List[i]), '; sizeof = ', SizeOf(List[i]));
+ Item := List[i];
+ WriteLn(' Stage1: ', Item^.Stage1, ', Level: ', Item^.Level, ', IsDir: ', Item^.IsDir, ', IsLnk: ', Item^.IsLnk, ', ForceMove: ', Item^.ForceMove{, ', Size: ', Item^.Size});
+ WriteLn(' AName: ', Item^.AName);
+ WriteLn(' LnkPointTo: ', Item^.LnkPointTo);
+ WriteLn(' ADestination: ', Item^.ADestination);
+ except
+ on E: Exception do
+ WriteLn('(EE): Exception ', E.ClassName, ' raised: ', E.Message);
+ end;
+ WriteLn('** End of listing');
+ WriteLn('********************************************************');
+end;
+
+procedure DebugWriteList(List: TList);
+var i: integer;
+ Item: PDataItem;
+begin
+ if not ParamDebug then Exit;
+ if not Assigned(List) then begin
+ WriteLn('List not assigned');
+ Exit;
+ end;
+ WriteLn('********************************************************');
+ WriteLn('** List.Count = ', List.Count, ' base @ ', integer(pointer(List)));
+ if List.Count > 0 then
+ for i := 0 to List.Count - 1 do
+ if not Assigned(List[i]) then WriteLn('**** List Item idx ', i, '; base @ nil') else
+ try
+ WriteLn('**** List Item idx ', i, '; base @ ', integer(List[i]), '; sizeof = ', SizeOf(List[i]));
+ Item := List[i];
+ WriteLn(' IsDir: ', Item^.IsDir, ', IsLnk: ', Item^.IsLnk, ', Size: ', Item^.Size);
+ WriteLn(' AName: ', Item^.AName);
+ WriteLn(' LnkPointTo: ', Item^.LnkPointTo);
+ except
+ on E: Exception do
+ WriteLn('(EE): Exception ', E.ClassName, ' raised: ', E.Message);
+ end;
+ WriteLn('** End of listing');
+ WriteLn('********************************************************');
+end;
+
+(********************************************************************************************************************************)
+procedure FindNextSelected(ListView: TGTKListView; DataList: TList; var Item1, Item2: string);
+var i: integer;
+ SelCount: longint;
+begin
+ SelCount := 0;
+ Item1 := ''; Item2 := '';
+ if (not Assigned(ListView.Selected)) or PDataItem(ListView.Selected.Data)^.UpDir then Exit;
+ if DataList.Count > 0 then
+ for i := 0 to DataList.Count - 1 do
+ with PDataItem(DataList[i])^ do
+ if Selected and (not UpDir) then Inc(SelCount);
+ Item1 := string(PDataItem(ListView.Selected.Data)^.AName);
+ if (PDataItem(ListView.Selected.Data)^.Selected and (SelCount > 0)) or (SelCount = 0) then begin
+ if ListView.ConvertToSorted(ListView.Selected.Index) < ListView.Items.Count then
+ for i := ListView.ConvertToSorted(ListView.Selected.Index) + 1 to DataList.Count - 1 do
+ if not PDataItem(DataList[ListView.ConvertFromSorted(i)])^.Selected then begin
+ Item2 := string(PDataItem(DataList[ListView.ConvertFromSorted(i)])^.AName);
+ Break;
+ end;
+ if (Item2 = '') and (ListView.ConvertToSorted(ListView.Selected.Index) > 0) then
+ for i := ListView.ConvertToSorted(ListView.Selected.Index) - 1 downto 0 do
+ if (not PDataItem(DataList[ListView.ConvertFromSorted(i)])^.Selected) and
+ (not PDataItem(DataList[ListView.ConvertFromSorted(i)])^.UpDir) then
+ begin
+ Item2 := string(PDataItem(DataList[ListView.ConvertFromSorted(i)])^.AName);
+ Break;
+ end;
+ end;
+end;
+
+(********************************************************************************************************************************)
+procedure UnselectAll(ListView: TGTKListView; DataList: TList);
+var i: integer;
+begin
+ if DataList.Count > 0 then
+ for i := 0 to DataList.Count - 1 do
+ with PDataItem(DataList[i])^ do
+ if Selected then begin
+ Selected := False;
+ ListView.Items[i].RedrawRow;
+ end;
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+function CRCGetInfo(FileName: string; Engine: TPanelEngine; var TargetName: string; var TargetCRC: LongWord; var Size: Int64): boolean;
+
+ procedure ProcessLine(Str: string);
+ var UPS: string;
+ begin
+ try
+ TrimCRLFESC(Str);
+ if Length(Str) < 1 then Exit;
+ UPS := AnsiUpperCase(Str);
+ if Pos('FILENAME', UPS) = 1 then TargetName := Trim(Copy(Str, Pos('=', Str) + 1, Length(Str) - Pos('=', Str))) else
+ if Pos('SIZE', UPS) = 1 then Size := StrToInt64Def(Trim(Copy(Str, Pos('=', Str) + 1, Length(Str) - Pos('=', Str))), 0) else
+ if Pos('CRC32', UPS) = 1 then TargetCRC := StrToInt64Def('$' + Trim(Copy(Str, Pos('=', Str) + 1, Length(Str) - Pos('=', Str))), 0);
+ except end;
+ end;
+
+const CRCBlockSize = 32768;
+var i, Error, Count, Start: integer;
+ FD: TEngineFileDes;
+ Buffer: Pointer;
+ s: string;
+begin
+ Result := False;
+ if Pos('.', FileName) > 1 then FileName := ChangeFileExt(FileName, '.crc')
+ else FileName := FileName + '.crc';
+ try
+ Buffer := Libc.malloc(CRCBlockSize);
+ Libc.memset(Buffer, 0, CRCBlockSize);
+ except
+ Application.MessageBox(LANGAnErrorOccuredWhileInitializingMemoryBlock, [mbOK], mbError, mbNone, mbOK);
+ Exit;
+ end;
+ FD := Engine.OpenFile(FileName, omRead, Error);
+ if Error <> 0 then Exit;
+
+ s := '';
+ repeat
+ Count := Engine.ReadFile(FD, Buffer, CRCBlockSize, Error);
+ if Error <> 0 then begin
+ Libc.free(Buffer);
+ Engine.CloseFile(FD);
+ Exit;
+ end;
+ // processing begins
+ Start := 1;
+ if Count > 0 then
+ for i := 0 to Count - 1 do
+ if (PByteArray(Buffer)^[i] in [13, 10]) or (i = Count - 1) then begin
+ s := s + Copy(PChar(Buffer), Start, i - Start + 1 + Ord(i = Count - 1));
+ Start := i + 2;
+ if PByteArray(Buffer)^[i] in [13, 10] then begin
+ ProcessLine(s);
+ s := '';
+ end;
+ end;
+ // processing ends
+ until Count < CRCBlockSize;
+ if Length(s) > 0 then ProcessLine(s);
+
+ Engine.CloseFile(FD);
+ Libc.free(Buffer);
+ Result := True;
+end;
+
+(********************************************************************************************************************************)
+procedure MergeFilesWorker(SenderThread: TWorkerThread);
+// ParamBool1 = HasInitialCRC
+// ParamString1 = NewPath
+// ParamString2 = FileName
+// ParamString3 = TargetName
+// ParamLongWord1 = TargetCRC
+// ParamInt64 = TargetSize
+
+var FD: TEngineFileDes;
+ Error, Count, MergeBlockSize: integer;
+ Buffer: Pointer;
+ CurrentCRC: LongWord;
+ PrivateCancel: boolean;
+ SizeDone: Int64;
+ TargetName: string;
+
+
+ function PasteFile(FName: string): boolean;
+ var FDR: TEngineFileDes;
+ wCount: integer;
+ Stat: PDataItemSL;
+ begin
+ Result := False;
+ with SenderThread do begin
+ if ParamBool1 then UpdateCaption2(Format(LANGToS, [ANSIToUTF8(FName)]))
+ else UpdateCaption1(Format(LANGFromS, [ANSIToUTF8(FName)]));
+ UpdateProgress1(0, '0 %');
+ CommitGUIUpdate;
+ Stat := Engine.GetFileInfoSL(FName);
+ if not Assigned(Stat) then Exit;
+ SetProgress1Params(Stat^.Size);
+ FDR := Engine.OpenFile(FName, omRead, Error);
+ if Error <> 0 then Exit;
+ repeat
+ Count := Engine.ReadFile(FDR, Buffer, MergeBlockSize, Error);
+ if Error <> 0 then begin
+ Engine.CloseFile(FD);
+ Exit;
+ end;
+ wCount := Engine.WriteFile(FD, Buffer, Count, Error);
+ if (Error <> 0) or (Count <> wCount) then begin
+ FCancelMessage := Format(LANGAnErrorOccuredWhileWritingFileSS, [ANSIToUTF8(ExtractFileName(TargetName)), ANSIToUTF8(GetErrorString(Error))]);
+ FShowCancelMessage := True;
+ PrivateCancel := True;
+ Result := True; // Fake this to don't show next disc dialog
+ Exit;
+ end;
+ CurrentCRC := CRC32(CurrentCRC, Buffer, Count);
+ UpdateProgress1(FProgress1Pos + Count, Format('%d %%', [Trunc((FProgress1Pos + Count) / FProgress1Max * 100)]));
+ Inc(SizeDone, Count);
+ if ParamBool1 then UpdateProgress2(SizeDone, Format('%d %%', [Trunc(SizeDone / FProgress2Max * 100)]));
+ CommitGUIUpdate;
+ until (Count < MergeBlockSize) or Cancelled;
+ Engine.CloseFile(FDR);
+ end;
+ Result := True;
+ end;
+
+
+var CurrFile, SourcePath, TargetFinalName: string;
+ HasFinalCRC, b: boolean;
+ Stat: PDataItemSL;
+begin
+ with SenderThread do begin
+ HasFinalCRC := ParamBool1;
+ TargetFinalName := ParamString3;
+ if (Length(ParamString2) > 4) and (ANSIUpperCase(RightStr(ParamString2, 4)) = '.CRC')
+ then CurrFile := ChangeFileExt(ExtractFileName(ParamString2), '.001')
+ else CurrFile := ExtractFileName(ParamString2);
+ SourcePath := ExtractFilePath(ParamString2);
+ if ParamString3 = '' then ParamString3 := ChangeFileExt(ExtractFileName(ParamString2), '.out');
+ TargetName := ProcessPattern(Engine, ParamString1, Engine.Path, ParamString3, False);
+ if Engine.FileExists(TargetName, True) then
+ if ShowMessageBox(Format(LANGTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt, [ANSIToUTF8(TargetName)]), [mbYes, mbNo], mbQuestion, mbNone, mbNo) = mbYes then
+ begin
+ Error := Engine.Remove(TargetName);
+ if Error <> 0 then begin
+ FCancelMessage := Format(LANGTheTargetFileSCannotBeRemovedS, [ANSIToUTF8(ExtractFileName(TargetName)), ANSIToUTF8(GetErrorString(Error))]);
+ FShowCancelMessage := True;
+ Exit;
+ end;
+ end else Exit;
+
+ Stat := Engine.GetFileInfoSL(ParamString2);
+ if Assigned(Stat) then MergeBlockSize := ComputeBlockSize(Stat^.Size)
+ else MergeBlockSize := 65536*4;
+ try
+ Buffer := Libc.malloc(MergeBlockSize);
+ Libc.memset(Buffer, 0, MergeBlockSize);
+ except
+ FCancelMessage := LANGAnErrorOccuredWhileInitializingMemoryBlock;
+ FShowCancelMessage := True;
+ Exit;
+ end;
+ FD := Engine.OpenFile(TargetName, omWrite, Error);
+ if Error <> 0 then begin
+ FCancelMessage := Format(LANGAnErrorOccuredWhileOpeningFileSS, [ANSIToUTF8(TargetName), ANSIToUTF8(GetErrorString(Error))]);
+ FShowCancelMessage := True;
+ Libc.free(Buffer);
+ Exit;
+ end;
+
+ CurrentCRC := $FFFFFFFF;
+ SizeDone := 0;
+ PrivateCancel := False;
+ if ParamBool1 then begin
+ SetProgress2Params(ParamInt64);
+ UpdateProgress2(0, '0 %');
+ UpdateCaption2(Format(LANGFromS, [ANSIToUTF8(TargetName)]));
+ CommitGUIUpdate;
+ end; { else begin
+ Label2.XAlign := 0;
+ Label2.XPadding := 20;
+ end; }
+
+ repeat
+ b := PasteFile(IncludeTrailingPathDelimiter(SourcePath) + CurrFile);
+ if not b then begin
+ PrivateCancel := ShowNewDirDialog(LANGMergeCaption, LANGPleaseInsertNextDiskOrGiveDifferentLocation, ANSIToUTF8(SourcePath)) <> integer(mbOK);
+ if not PrivateCancel then begin
+ SourcePath := UTF8ToANSI(FNewDirEdit);
+ if not HasFinalCRC then
+ HasFinalCRC := CRCGetInfo(IncludeTrailingPathDelimiter(SourcePath) + CurrFile, Engine, TargetFinalName, ParamLongWord1, ParamInt64);
+ Continue;
+ end;
+ end;
+ try
+ CurrFile := Copy(CurrFile, 1, LastDelimiter('.', CurrFile)) + Format('%.3d', [StrToInt(
+ Copy(CurrFile, LastDelimiter('.', CurrFile) + 1, Length(CurrFile) - LastDelimiter('.', CurrFile))) + 1]);
+ except
+ CurrFile := '';
+ end;
+ until (SizeDone = ParamInt64) or Cancelled or PrivateCancel {or ((not b) and (not HasInitialCRC))} or (CurrFile = '');
+ if (not ParamBool1) and HasFinalCRC then Engine.RenameFile(TargetName, IncludeTrailingPathDelimiter(ExtractFilePath(TargetName)) + TargetFinalName);
+ if Cancelled and (not PrivateCancel) then begin
+ FCancelMessage := LANGUserCancelled;
+ FShowCancelMessage := True;
+ end;
+ if not (Cancelled or PrivateCancel) then
+ if HasFinalCRC then begin
+ if not CurrentCRC = ParamLongWord1
+ then ShowMessageBox(Format(LANGMergeOfSSucceeded, [ANSIToUTF8(ExtractFileName(TargetFinalName))]), [mbOK], mbInfo, mbNone, mbOK)
+ else ShowMessageBox(LANGWarningCreatedFileFailsCRCCheck, [mbOK], mbWarning, mbNone, mbOK);
+ end else ShowMessageBox(Format(LANGMergeOfSSucceeded_NoCRCFileAvailable, [ANSIToUTF8(ExtractFileName(TargetFinalName))]), [mbOK], mbInfo, mbNone, mbOK);
+ Engine.CloseFile(FD);
+ end;
+ Libc.free(Buffer);
+ SenderThread.FDoneThread := True;
+end;
+
+(********************************************************************************************************************************)
+function WriteCRCFile(Engine: TPanelEngine; TargetFile, SplitFileName: string; const FileSize: Int64; const FileCRC: Longword): boolean;
+var FD: TEngineFileDes;
+ Error, Count: integer;
+ s: string;
+begin
+ Result := False;
+ if Pos('.', TargetFile) > 1 then TargetFile := ChangeFileExt(TargetFile, '.crc')
+ else TargetFile := TargetFile + '.crc';
+ FD := Engine.OpenFile(TargetFile, omWrite, Error);
+ if Error <> 0 then begin
+ Application.MessageBox(Format(LANGAnErrorOccuredWhileOpeningFileSS, [ANSIToUTF8(TargetFile), ANSIToUTF8(GetErrorString(Error))]), [mbOK], mbError, mbNone, mbOK);
+ Exit;
+ end;
+ s := Format('filename=%s'#13#10'size=%d'#13#10'crc32=%s'#13#10, [SplitFileName, FileSize, ANSIUpperCase(IntToHex(FileCRC, 8))]);
+ Count := Engine.WriteFile(FD, @s[1], Length(s), Error);
+ if (Error <> 0) or (Count <> Length(s)) then begin
+ Application.MessageBox(Format(LANGAnErrorOccuredWhileWritingFileSS, [ANSIToUTF8(TargetFile), ANSIToUTF8(GetErrorString(Error))]), [mbOK], mbError, mbNone, mbOK);
+ Exit;
+ end;
+ Engine.CloseFile(FD);
+ Result := True;
+end;
+
+(********************************************************************************************************************************)
+procedure SplitFilesWorker(SenderThread: TWorkerThread);
+// ParamInt64 = SplitSize
+// ParamString1 = FileName
+// ParamString2 = NewPath
+// ParamBool1 = DeleteTarget
+
+const SplitBlockSize = 65536*4;
+var FD: TEngineFileDes;
+ Error: integer;
+ FileCRC: LongWord;
+ Buffer: Pointer;
+ PrivateCancel: boolean;
+ FilePath: string;
+ SizeDone, TDF, FileSize, CurrSize: Int64;
+
+
+ function WriteSplitPart(TargetFile: string; PartSize: Int64; var Written: Int64): boolean;
+ var FDW: TEngineFileDes;
+ Count, wCount, bl: integer;
+ begin
+ Result := False;
+ Written := 0;
+ with SenderThread do begin
+ FDW := Engine.OpenFile(TargetFile, omWrite, Error);
+ DebugMsg(['-- Opening file ', ExtractFileName(TargetFile), ', PartSize = ', PartSize]);
+ if Error <> 0 then Exit;
+ if ParamInt64 > 0 then begin
+ UpdateCaption2(Format(LANGToS, [ANSIToUTF8(TargetFile)]));
+ SetProgress1Params(PartSize);
+ UpdateProgress1(0, '0 %');
+ end else UpdateCaption1(Format(LANGToS, [ANSIToUTF8(TargetFile)]));
+ CommitGUIUpdate;
+ repeat
+ DebugMsg(['Seek to ', Engine.FileSeek(FD, SizeDone + Written, Error), ', Written = ', Written]);
+ if Written + SplitBlockSize > PartSize then bl := PartSize - Written
+ else bl := SplitBlockSize;
+ Count := Engine.ReadFile(FD, Buffer, bl, Error);
+ if (Error <> 0) or (Count <> bl) then begin
+ Engine.CloseFile(FDW);
+ DebugMsg(['Read Error: ', GetErrorString(Error), ', Count = ', Count, ', bl = ', bl]);
+ if (Count <> bl) and (Error = 0) then Error := EIO;
+ Exit;
+ end;
+ wCount := Engine.WriteFile(FDW, Buffer, Count, Error);
+ Inc(Written, wCount);
+ FileCRC := CRC32(FileCRC, Buffer, wCount);
+ if (Error <> 0) or (Count <> wCount) then begin
+ Engine.CloseFile(FDW);
+ DebugMsg(['Write Error: ', GetErrorString(Error), ', Count = ', Count, ', wCount = ', wCount]);
+ if (wCount <> Count) and (Error = 0) then Error := ENOSPC;
+ Exit;
+ end;
+ UpdateProgress1(FProgress1Pos + wCount, Format('%d %%', [Trunc((FProgress1Pos + wCount) / FProgress1Max * 100)]));
+ if ParamInt64 > 0 then UpdateProgress2(FProgress2Pos + wCount, Format('%d %%', [Trunc((FProgress2Pos + wCount) / FProgress2Max * 100)]));
+ CommitGUIUpdate;
+ until (Written = PartSize) or Cancelled or PrivateCancel;
+ Engine.CloseFile(FDW);
+ end;
+ DebugMsg(['-- Closing file ', ExtractFileName(TargetFile), ', PartSize = ', PartSize, ', Written = ', Written]);
+ Result := True;
+ end;
+
+ // Returns True if it should break the process
+ function NewDiskQuestion: boolean;
+ begin
+ Result := False;
+ with SenderThread do begin
+ TDF := Engine.GetFileSystemFree(FilePath);
+ // Calculate part size
+ if ParamInt64 = 0 then begin
+ if FileSize - SizeDone > TDF then CurrSize := TDF
+ else CurrSize := FileSize - SizeDone;
+ end else
+ if SizeDone + ParamInt64 > FileSize then CurrSize := FileSize - SizeDone
+ else CurrSize := ParamInt64;
+ if (TDF < 512) {or (CurrSize < 512)} or (TDF < CurrSize) then begin
+ DebugMsg(['-- New disk question']);
+ Engine.ExplicitChDir('/');
+ PrivateCancel := ShowNewDirDialog(LANGSplitCaption, LANGPleaseInsertNextDiskOrGiveDifferentLocation,
+ ANSIToUTF8(FilePath)) <> integer(mbOK);
+ if not PrivateCancel then FilePath := UTF8ToANSI(FNewDirEdit);
+ Result := PrivateCancel;
+ end;
+ end;
+ end;
+
+
+var i: integer;
+ OriginalFName, st, FileName: string;
+ ws: Int64;
+ Stat: PDataItemSL;
+ b: boolean;
+ List: TList;
+begin
+ with SenderThread do begin
+ Stat := Engine.GetFileInfoSL(ParamString1);
+ if not Assigned(Stat) then begin
+ FCancelMessage := Format(LANGCannotOpenFileS, [ANSIToUTF8(ParamString1)]);
+ FShowCancelMessage := True;
+ Exit;
+ end;
+ if (ParamInt64 > 0) and (Stat^.Size > ParamInt64 * 999) then begin
+ FCancelMessage := LANGCannotSplitTheFileToMoreThan999Parts;
+ FShowCancelMessage := True;
+ Exit;
+ end;
+ FileSize := Stat^.Size;
+ SizeDone := 0;
+ FileCRC := $FFFFFFFF;
+ List := TList.Create;
+
+ try
+ Buffer := Libc.malloc(SplitBlockSize);
+ Libc.memset(Buffer, 0, SplitBlockSize);
+ except
+ FCancelMessage := LANGAnErrorOccuredWhileInitializingMemoryBlock;
+ FShowCancelMessage := True;
+ Exit;
+ end;
+ FD := Engine.OpenFile(ParamString1, omRead, Error);
+ if Error <> 0 then begin
+ FCancelMessage := Format(LANGAnErrorOccuredWhileOpeningFileSS, [ANSIToUTF8(ParamString1), ANSIToUTF8(GetErrorString(Error))]);
+ Libc.free(Buffer);
+ Exit;
+ end;
+ FilePath := IncludeTrailingPathDelimiter(ProcessPattern(Engine, ParamString2, Engine.Path, '', True));
+ FileName := ExtractFileName(ParamString1);
+ OriginalFName := FileName;
+ if Pos('.', FileName) > 1 then FileName := ChangeFileExt(FileName, '.001')
+ else FileName := FileName + '.001';
+ PrivateCancel := False;
+
+ if ParamInt64 > 0 then begin
+ SetProgress2Params(FileSize);
+ UpdateProgress2(0, '0 %');
+ end else begin
+ SetProgress1Params(FileSize);
+ UpdateProgress1(0, '0 %');
+ end;
+ UpdateCaption1(Format(LANGFromS, [ANSIToUTF8(IncludeTrailingPathDelimiter(FilePath) + OriginalFName)]));
+ CommitGUIUpdate;
+
+ repeat
+ TDF := Engine.GetFileSystemFree(FilePath);
+ // Delete target files if necessary
+ if ParamBool1 and ((TDF < 512) or (TDF < FileSize) or (TDF < ParamInt64)) then try
+ if List.Count > 0 then
+ for i := List.Count - 1 downto 0 do
+ FreeDataItem(PDataItem(List[i]));
+ List.Clear;
+ Error := Engine.GetListing(List, ConfShowDotFiles, FilePath);
+ if (Error = 0) and (List.Count > 0) then begin
+ st := '';
+ if List.Count < 6 then begin
+ for i := 0 to List.Count - 1 do
+ st := st + ' ' + AnsiToUTF8(string(PDataItem(List[i])^.AName)) + #10;
+ b := ShowMessageBox(Format(LANGThereAreSomeFilesInTheTargetDirectorySDoYouWantToDeleteThem, [st]), [mbYes, mbNo], mbQuestion, mbNone, mbNo) = mbYes;
+ end else b := ShowMessageBox(Format(LANGThereAreDFilesInTheTargetDirectoryDoYouWantToDeleteThem, [List.Count]), [mbYes, mbNo], mbQuestion, mbNone, mbNo) = mbYes;
+ if b then
+ for i := 0 to List.Count - 1 do begin
+ Error := Engine.Remove(IncludeTrailingPathDelimiter(FilePath) + string(PDataItem(List[i])^.AName));
+ if Error <> 0 then ShowMessageBox(Format(LANGTheTargetFileSCannotBeRemovedS, [ANSIToUTF8(IncludeTrailingPathDelimiter(FilePath) + string(PDataItem(List[i])^.AName)), ANSIToUTF8(GetErrorString(Error))]), [mbOK], mbError, mbNone, mbOK);
+ end;
+ end;
+ except end;
+ // Test for target file existence
+ if Engine.FileExists(IncludeTrailingPathDelimiter(FilePath) + FileName) then begin
+ b := ShowMessageBox(Format(LANGTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt, [ANSIToUTF8(IncludeTrailingPathDelimiter(FilePath) + FileName)]), [mbYes, mbNo], mbQuestion, mbNone, mbNo) = mbYes;
+ if b then begin
+ Error := Engine.Remove(IncludeTrailingPathDelimiter(FilePath) + FileName);
+ if Error <> 0 then begin
+ FCancelMessage := Format(LANGTheTargetFileSCannotBeRemovedS, [ANSIToUTF8(IncludeTrailingPathDelimiter(FilePath) + FileName), ANSIToUTF8(GetErrorString(Error))]);
+ FShowCancelMessage := True;
+ PrivateCancel := True;
+ Break;
+ end;
+ end else begin
+ PrivateCancel := True;
+ Break;
+ end;
+ end;
+ // Free space check
+ if NewDiskQuestion then Break;
+ // Writing
+ ws := 0;
+ if (CurrSize >= 512) and (TDF >= CurrSize) then begin
+ b := WriteSplitPart(IncludeTrailingPathDelimiter(FilePath) + FileName, CurrSize, ws);
+ if (not b) and (ParamInt64 > 0) then begin
+ FCancelMessage := Format(LANGAnErrorOccuredWhileOperationS, [ANSIToUTF8(GetErrorString(Error))]);
+ FShowCancelMessage := True;
+ PrivateCancel := True;
+ Break;
+ end;
+ Inc(SizeDone, ws);
+ if ParamInt64 > 0 then UpdateProgress2(SizeDone, Format('%d %%', [Trunc(SizeDone / FileSize * 100)]))
+ else UpdateProgress1(SizeDone, Format('%d %%', [Trunc(SizeDone / FileSize * 100)]));
+ CommitGUIUpdate;
+ end;
+ // Free space check - New disk question after operation
+ if NewDiskQuestion then Break;
+ // Change filename
+ if ws > 0 then
+ try FileName := Copy(FileName, 1, LastDelimiter('.', FileName)) +
+ Format('%.3d', [StrToInt(Copy(FileName, LastDelimiter('.', FileName) + 1,
+ Length(FileName) - LastDelimiter('.', FileName))) + 1]);
+ except
+ FileName := '';
+ end;
+ until (SizeDone = FileSize) or Cancelled or PrivateCancel or (FileName = '');
+ if Cancelled and (not PrivateCancel) then begin
+ FCancelMessage := LANGUserCancelled;
+ FShowCancelMessage := True;
+ end;
+ if not (Cancelled or PrivateCancel) then begin
+ repeat
+ TDF := Engine.GetFileSystemFree(FilePath);
+ if (TDF < 512) and (not NewDiskQuestion) then Break;
+ until (TDF >= 512) or PrivateCancel or Cancelled;
+ if WriteCRCFile(Engine, IncludeTrailingPathDelimiter(FilePath) + FileName, OriginalFName, SizeDone, not FileCRC)
+ then ShowMessageBox(Format(LANGSplitOfSSucceeded, [ANSIToUTF8(OriginalFName)]), [mbOK], mbInfo, mbNone, mbOK)
+ else begin
+ FCancelMessage := Format(LANGSplitOfSFailed, [ANSIToUTF8(OriginalFName)]);
+ FShowCancelMessage := True;
+ end;
+ end;
+ Engine.CloseFile(FD);
+ end;
+ List.Free;
+ SenderThread.FDoneThread := True;
+end;
+
+(********************************************************************************************************************************)
+procedure ChmodFilesWorker(SenderThread: TWorkerThread);
+// ParamBool1 = Recursive
+// ParamInt1 = All/Dir/Files
+// ParamCardinal1 = Mode
+
+var SkipAll: boolean;
+
+ function HandleChmod(AFileRec: PDataItemSL): boolean;
+ var Res, Response: integer;
+ begin
+ Result := True;
+ with SenderThread do begin
+// DebugMsg(['Chmod Debug: IsDir: ', AFileRec^.IsDir, ', Stage1: ', AFileRec^.Stage1, ', IsLnk: ', AFileRec^.IsLnk, '; Result = ', AFileRec^.IsDir and AFileRec^.Stage1 and (not AFileRec^.IsLnk)]);
+ if AFileRec^.IsDir and ParamBool1 and AFileRec^.Stage1 and (not AFileRec^.IsLnk) then Exit;
+ if (not AFileRec^.IsDir) and ParamBool1 and (ParamInt1 = 1) then Exit; // Directories only
+ if AFileRec^.IsDir and ParamBool1 and (ParamInt1 = 2) then Exit; // Files only
+ Res := Engine.Chmod(String(AFileRec^.AName), ParamCardinal1);
+// DebugMsg(['Result : ', Res]);
+ if Res <> 0 then
+ if SkipAll then Result := True else
+ begin
+ Response := ShowDirDeleteDialog(1, LANGTheFileDirectory, ANSIToUTF8(String(AFileRec^.AName)), Format(LANGCouldNotBeChmoddedS,
+ [ANSIToUTF8(GetErrorString(Res))]), LANGDialogChangePermissions);
+ case Response of
+ 1 : Result := True;
+ 3 : begin
+ SkipAll := True;
+ Result := True;
+ end;
+ 2 : Result := HandleChmod(AFileRec);
+ else Result := False;
+ end;
+ end;
+ end;
+ end;
+
+var i: longint;
+ AList: TList;
+ CurrPath: string;
+ Fr: Single;
+begin
+ SkipAll := False;
+ with SenderThread do begin
+ AList := TList.Create;
+ AList.Clear;
+ CurrPath := IncludeTrailingPathDelimiter(Engine.Path);
+ if DataList.Count > 0 then
+ for i := 0 to DataList.Count - 1 do
+ with PDataItem(DataList[i])^ do
+ if (not UpDir) and Selected then
+ if IsDir and (not IsLnk) and ParamBool1
+ then Engine.FillDirFiles(CurrPath + String(AName), AList, 1)
+ else AList.Add(Engine.GetFileInfoSL(CurrPath + String(AName)));
+ if (AList.Count = 0) and Assigned(SelectedItem) and (not SelectedItem^.UpDir) then
+ with SelectedItem^ do
+ if IsDir and (not IsLnk) and ParamBool1
+ then Engine.FillDirFiles(CurrPath + String(AName), AList, 1)
+ else AList.Add(Engine.GetFileInfoSL(CurrPath + String(AName)));
+ Engine.ExplicitChDir('/');
+ SetProgress1Params(AList.Count);
+ UpdateProgress1(0, '0 %');
+ CommitGUIUpdate;
+
+// DebugWriteListSL(AList);
+
+ if AList.Count = 1 then Fr := 1 else Fr := 100 / (AList.Count - 1);
+ if AList.Count > 0 then
+ for i := 0 to AList.Count - 1 do begin
+ if Cancelled then begin
+ FCancelMessage := LANGUserCancelled;
+ FShowCancelMessage := True;
+ Break;
+ end;
+ // Process chmod
+ if not HandleChmod(AList[i]) then Break;
+ UpdateProgress1(i, Format('%d%%', [Round(Fr * i)]));
+ UpdateCaption1(ANSIToUTF8(PDataItemSL(AList[i])^.AName));
+ CommitGUIUpdate;
+ end;
+
+ // Free the objects
+ if AList.Count > 0 then
+ for i := AList.Count - 1 downto 0 do FreeDataItem(PDataItemSL(AList[i]));
+ AList.Clear;
+ AList.Free;
+ end;
+ SenderThread.FDoneThread := True;
+end;
+
+
+(********************************************************************************************************************************)
+procedure ChownFilesWorker(SenderThread: TWorkerThread);
+// ParamBool1 = Recursive
+// ParamCardinal1 = UID
+// ParamCardinal2 = GID
+var SkipAll: boolean;
+
+ function HandleChown(AFileRec: PDataItemSL): boolean;
+ var Res, Response: integer;
+ begin
+ Result := True;
+ with SenderThread do begin
+// DebugMsg(['Chown Debug: IsDir: ', AFileRec^.IsDir, ', Stage1: ', AFileRec^.Stage1, ', IsLnk: ', AFileRec^.IsLnk, '; Result = ', AFileRec^.IsDir and AFileRec^.Stage1 and (not AFileRec^.IsLnk)]);
+ if (AFileRec^.IsDir and ParamBool1 and AFileRec^.Stage1 and (not AFileRec^.IsLnk)) or
+ ((not AFileRec^.IsDir) and ParamBool1) then Exit;
+ Res := Engine.Chown(String(AFileRec^.AName), ParamCardinal1, ParamCardinal2);
+// DebugMsg(['Result : ', Res]);
+ if Res <> 0 then
+ if SkipAll then Result := True else
+ begin
+ Response := ShowDirDeleteDialog(1, LANGTheFileDirectory, ANSIToUTF8(String(AFileRec^.AName)), Format(LANGCouldNotBeChownedS,
+ [ANSIToUTF8(GetErrorString(Res))]), LANGDialogChangeOwner);
+ case Response of
+ 1 : Result := True;
+ 3 : begin
+ SkipAll := True;
+ Result := True;
+ end;
+ 2 : Result := HandleChown(AFileRec);
+ else Result := False;
+ end;
+ end;
+ end;
+ end;
+
+var i: longint;
+ AList: TList;
+ CurrPath: string;
+ Fr: Single;
+begin
+ SkipAll := False;
+ with SenderThread do begin
+ AList := TList.Create;
+ AList.Clear;
+ CurrPath := IncludeTrailingPathDelimiter(Engine.Path);
+ if DataList.Count > 0 then
+ for i := 0 to DataList.Count - 1 do
+ with PDataItem(DataList[i])^ do
+ if (not UpDir) and Selected then
+ if IsDir and (not IsLnk) and ParamBool1
+ then Engine.FillDirFiles(CurrPath + String(AName), AList, 1)
+ else AList.Add(Engine.GetFileInfoSL(CurrPath + String(AName)));
+ if (AList.Count = 0) and Assigned(SelectedItem) and (not SelectedItem^.UpDir) then
+ with SelectedItem^ do
+ if IsDir and (not IsLnk) and ParamBool1
+ then Engine.FillDirFiles(CurrPath + String(AName), AList, 1)
+ else AList.Add(Engine.GetFileInfoSL(CurrPath + String(AName)));
+ Engine.ExplicitChDir('/');
+ SetProgress1Params(AList.Count);
+ UpdateProgress1(0, '0 %');
+ CommitGUIUpdate;
+
+// DebugWriteListSL(AList);
+
+ if AList.Count = 1 then Fr := 1 else Fr := 100 / (AList.Count - 1);
+ if AList.Count > 0 then
+ for i := 0 to AList.Count - 1 do begin
+ if Cancelled then begin
+ FCancelMessage := LANGUserCancelled;
+ FShowCancelMessage := True;
+ Break;
+ end;
+ // Process chmod
+ if not HandleChown(AList[i]) then Break;
+ UpdateProgress1(i, Format('%d%%', [Round(Fr * i)]));
+ UpdateCaption1(ANSIToUTF8(PDataItemSL(AList[i])^.AName));
+ CommitGUIUpdate;
+ end;
+
+ // Free the objects
+ if AList.Count > 0 then
+ for i := AList.Count - 1 downto 0 do FreeDataItem(PDataItemSL(AList[i]));
+ AList.Clear;
+ AList.Free;
+ end;
+ SenderThread.FDoneThread := True;
+end;
+
+
+(********************************************************************************************************************************)
+procedure DummyThreadWorker(SenderThread: TWorkerThread);
+var i: integer;
+begin
+ DebugMsg(['(II) DummyThreadWorker: begin']);
+ with SenderThread do begin
+ SetProgress1Params(100);
+ SetProgress2Params(100);
+ UpdateProgress1(0, '0 %');
+ UpdateProgress2(100, '100 %');
+ CommitGUIUpdate;
+ for i := 1 to 100 do begin
+ Sleep(100);
+ DebugMsg([' (II) DummyThreadWorker: done ', i, ' / 100']);
+ UpdateProgress1(i, Format('%d%%', [i]));
+ UpdateCaption1(Format('Test %d test', [i]));
+ UpdateProgress2(101-i, Format('%d%%', [101-i]));
+ UpdateCaption2(Format('Test %d test', [101-i]));
+ CommitGUIUpdate;
+ if Cancelled then Break;
+ end;
+ end;
+ DebugMsg(['(II) DummyThreadWorker: finish']);
+ SenderThread.FDoneThread := True;
+end;
+
+(********************************************************************************************************************************)
+function CreateSymlink(const FileName, PossibleNewName: string; Engine: TPanelEngine) : boolean;
+var AFSymLink: TFSymlink;
+
+ function HandleCreateSymlink(const OldName, NewName: string): boolean;
+ var Res, Response: integer;
+ begin
+ Res := Engine.MakeSymLink(NewName, OldName);
+ Result := Res = 0;
+ if not Result then begin
+ try
+ FDirDelete := TFDirDelete.Create(AFSymlink);
+ FDirDelete.Caption := LANGDialogMakeSymlink;
+ FDirDelete.AddButtons(2);
+ FDirDelete.Label1.Caption := LANGTheSymbolicLink;
+ FDirDelete.Label2.Caption := ANSIToUTF8(NewName);
+ FDirDelete.Label3.Caption := Format(LANGCouldNotBeCreatedS, [ANSIToUTF8(GetErrorString(Res))]);
+ FDirDelete.Label3.Visible := True;
+ Response := Integer(FDirDelete.Run);
+ finally
+ FDirDelete.Free;
+ end;
+ case Response of
+ 1 : Result := HandleCreateSymlink(OldName, NewName);
+ else Result := False;
+ end;
+ end;
+ end;
+
+
+begin
+ Result := False;
+ try
+ AFSymlink := TFSymlink.Create(Application.MainForm);
+ AFSymlink.FromEntry.Text := ANSIToUTF8(FileName);
+ AFSymlink.ToEntry.Text := ANSIToUTF8(PossibleNewName);
+ AFSymlink.ToEntry.SetFocus;
+ AFSymlink.ToEntry.SelectAll;
+ if AFSymlink.Run = mbOK then Result := HandleCreateSymlink(UTF8ToANSI(AFSymlink.FromEntry.Text),
+ ProcessPattern(Engine, UTF8ToANSI(AFSymlink.ToEntry.Text), Engine.Path, '', False));
+ finally
+ AFSymlink.Free;
+ end;
+end;
+
+(********************************************************************************************************************************)
+function EditSymlink(const FileName: string; Engine: TPanelEngine) : boolean;
+var Data: PDataItemSL;
+ AFSymLink: TFSymlink;
+
+ function HandleEditSymlink(const ExistingName, PointTo: string): boolean;
+ var Res, Response: integer;
+ begin
+ Res := Engine.Remove(ExistingName);
+ Result := Res = 0;
+ if not Result then begin
+ try
+ FDirDelete := TFDirDelete.Create(AFSymlink);
+ FDirDelete.Caption := LANGDialogEditSymlink;
+ FDirDelete.AddButtons(2);
+ FDirDelete.Label1.Caption := LANGTheSymbolicLink;
+ FDirDelete.Label2.Caption := ANSIToUTF8(ExistingName);
+ FDirDelete.Label3.Caption := Format(LANGCouldNotBeDeletedS, [ANSIToUTF8(GetErrorString(Res))]);
+ FDirDelete.Label3.Visible := True;
+ Response := Integer(FDirDelete.Run);
+ finally
+ FDirDelete.Free;
+ end;
+ case Response of
+ 1 : HandleEditSymlink(ExistingName, PointTo);
+ end;
+ Exit;
+ end;
+ Res := Engine.MakeSymLink(ExistingName, PointTo);
+ Result := Res = 0;
+ if not Result then begin
+ try
+ FDirDelete := TFDirDelete.Create(AFSymlink);
+ FDirDelete.Caption := LANGDialogMakeSymlink;
+ FDirDelete.AddButtons(2);
+ FDirDelete.Label1.Caption := LANGTheSymbolicLink;
+ FDirDelete.Label2.Caption := ANSIToUTF8(ExistingName);
+ FDirDelete.Label3.Caption := Format(LANGCouldNotBeCreatedS, [ANSIToUTF8(GetErrorString(Res))]);
+ FDirDelete.Label3.Visible := True;
+ Response := Integer(FDirDelete.Run);
+ finally
+ FDirDelete.Free;
+ end;
+ case Response of
+ 1 : Result := HandleEditSymlink(ExistingName, PointTo);
+ else Result := False;
+ end;
+ end;
+ end;
+
+begin
+ Result := False;
+ Data := Engine.GetFileInfoSL(FileName);
+ try
+ AFSymlink := TFSymlink.Create(Application);
+ AFSymlink.Caption := LANGFEditSymlink_Caption;
+ AFSymlink.FromEntry.Text := ANSIToUTF8(FileName);
+ AFSymlink.Label1.Caption := LANGFEditSymlink_SymbolicLinkFilename;
+ AFSymlink.Label1.UseUnderline := True;
+ AFSymlink.Label2.Caption := LANGFEditSymlink_SymbolicLinkPointsTo;
+ AFSymlink.Label2.UseUnderline := True;
+ AFSymlink.FromEntry.Enabled := False;
+ AFSymlink.ToEntry.Text := ANSIToUTF8(Data^.LnkPointTo);
+ AFSymlink.ToEntry.SelectAll;
+ if AFSymlink.Run = mbOK then Result := HandleEditSymlink(UTF8ToANSI(AFSymlink.FromEntry.Text), UTF8ToANSI(AFSymlink.ToEntry.Text));
+ finally
+ AFSymlink.Free;
+ end;
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure ProcessProgressThread(SenderThread: TWorkerThread; ProgressForm: TFProgress);
+var AFDirDelete: TFDirDelete;
+ AFOverwrite: TFOverwrite;
+ AFNewDir: TFNewDir;
+begin
+ DebugMsg([' ** ProcessProgressThread --begin']);
+ try
+ while not SenderThread.FDoneThread do begin
+// Write('.');
+ Sleep(ConstInternalProgressTimer);
+// DebugMsg([' ** ProcessProgressThread: updating UI (FProgress1Pos = ', SenderThread.FProgress1Pos, ', FProgress2Pos = ', SenderThread.FProgress2Pos]);
+
+
+// DebugMsg(['ProcessProgressThread - before mutex']);
+ SenderThread.GUIMutex.Acquire;
+// WriteLn('ProcessProgressThread - ted mam lock ja! -- enter');
+
+ try
+ if SenderThread.FGUIChanged then begin
+ if SenderThread.FGUIProgress1Max > 1
+ then ProgressForm.ProgressBar.Fraction := SenderThread.FGUIProgress1Pos / SenderThread.FGUIProgress1Max
+ else ProgressForm.ProgressBar.Fraction := 0;
+// ProgressForm.ProgressBar.Value := SenderThread.FGUIProgress1Pos;
+ ProgressForm.ProgressBar.Text := SenderThread.FGUIProgress1Text;
+ ProgressForm.Label2.Caption := SenderThread.FGUILabel1Text;
+ if ProgressForm.FTwoBars then begin
+ if SenderThread.FGUIProgress2Max > 1
+ then ProgressForm.ProgressBar2.Fraction := SenderThread.FGUIProgress2Pos / SenderThread.FGUIProgress2Max
+ else ProgressForm.ProgressBar2.Fraction := 0;
+// ProgressForm.ProgressBar2.Value := SenderThread.FGUIProgress2Pos;
+ ProgressForm.ProgressBar2.Text := SenderThread.FGUIProgress2Text;
+ ProgressForm.Label3.Caption := SenderThread.FGUILabel2Text;
+ end;
+ ProgressForm.ProgressBar.Max := SenderThread.FGUIProgress1Max;
+ ProgressForm.ProgressBar2.Max := SenderThread.FGUIProgress2Max;
+ SenderThread.FGUIChanged := False;
+ end;
+ except
+ on E: Exception do DebugMsg(['*** Exception raised in UCore.ProcessProgressThread::updating progress bars block (', E.ClassName, '): ', E.Message]);
+ end;
+
+
+// Sleep(1000);
+// WriteLn('ProcessProgressThread - ted mam lock ja! -- leave');
+ SenderThread.GUIMutex.Release;
+
+
+// DebugMsg(['Before refresh']);
+ Application.ProcessMessages;
+// DebugMsg(['After refresh']);
+
+ try
+ if SenderThread.FDialogShowDirDelete then begin
+ AFDirDelete := nil;
+ try
+ AFDirDelete := TFDirDelete.Create(SenderThread.ProgressForm as TComponent);
+ AFDirDelete.Caption := SenderThread.FDirDeleteCaption;
+ AFDirDelete.AddButtons(SenderThread.FDirDeleteButtonsType);
+ AFDirDelete.Label1.Caption := SenderThread.FDirDeleteLabel1Text;
+ AFDirDelete.Label2.Caption := SenderThread.FDirDeleteLabel2Text;
+ AFDirDelete.Label3.Caption := SenderThread.FDirDeleteLabel3Text;
+ AFDirDelete.Label2.Visible := SenderThread.FDirDeleteLabel2Visible;
+ AFDirDelete.Label3.Visible := SenderThread.FDirDeleteLabel3Visible;
+ SenderThread.FDialogResultDirDelete := Integer(AFDirDelete.Run);
+ if (SenderThread.FDirDeleteButtonsType = 3) and (SenderThread.FDialogResultDirDelete = 2) and (not SenderThread.ParamBool3)
+ then case Application.MessageBox(LANGIgnoreError, [mbYes, mbNo{, mbCancel}], mbWarning, mbYes, mbNo) of
+ mbNo: SenderThread.FDialogResultDirDelete := 1;
+ mbCancel: SenderThread.FDialogResultDirDelete := 0;
+ end;
+ finally
+ AFDirDelete.Free;
+ end;
+ SenderThread.FDialogShowDirDelete := False;
+ SenderThread.FSigDialogDirDelete := True;
+ end;
+
+ if SenderThread.FDialogShowOverwrite then begin
+ AFOverwrite := nil;
+ try
+ AFOverwrite := TFOverwrite.Create(SenderThread.ProgressForm as TComponent);
+ AFOverwrite.AddButtons(SenderThread.FOverwriteButtonsType);
+ AFOverwrite.FromLabel.Caption := SenderThread.FOverwriteFromLabel;
+ AFOverwrite.FromInfoLabel.Caption := SenderThread.FOverwriteFromInfoLabel;
+ AFOverwrite.ToLabel.Caption := SenderThread.FOverwriteToLabel;
+ AFOverwrite.ToInfoLabel.Caption := SenderThread.FOverwriteToInfoLabel;
+ AFOverwrite.RenameStr := SenderThread.FOverwriteRenameStr;
+ AFOverwrite.SourceFile := SenderThread.FOverwriteSourceFile;
+ AFOverwrite.DestFile := SenderThread.FOverwriteDestFile;
+ SenderThread.FDialogResultOverwrite := Integer(AFOverwrite.Run);
+ SenderThread.FOverwriteRenameStr := UTF8ToANSI(AFOverwrite.RenameStr);
+ finally
+ AFOverwrite.Free;
+ end;
+ SenderThread.FDialogShowOverwrite := False;
+ SenderThread.FSigDialogOverwrite := True;
+ end;
+
+ if SenderThread.FDialogShowNewDir then begin
+ AFNewDir := nil;
+ try
+ AFNewDir := TFNewDir.Create(SenderThread.ProgressForm as TComponent);
+ AFNewDir.Caption := SenderThread.FNewDirCaption;
+ AFNewDir.Label1.Caption := SenderThread.FNewDirLabel;
+ AFNewDir.Entry.Text := SenderThread.FNewDirEdit;
+ AFNewDir.Entry.SelectAll;
+ SenderThread.FDialogResultNewDir := Integer(AFNewDir.Run);
+ SenderThread.FNewDirEdit := AFNewDir.Entry.Text;
+ finally
+ AFNewDir.Free;
+ end;
+ SenderThread.FDialogShowNewDir := False;
+ SenderThread.FSigDialogNewDir := True;
+ end;
+
+ if SenderThread.FDialogShowMsgBox then begin
+ SenderThread.FDialogResultMsgBox := Application.MessageBox(SenderThread.FMsgBoxText, SenderThread.FMsgBoxButtons,
+ SenderThread.FMsgBoxStyle, SenderThread.FMsgBoxDefault,
+ SenderThread.FMsgBoxEscape);
+ SenderThread.FDialogShowMsgBox := False;
+ SenderThread.FSigDialogMsgBox := True;
+ end;
+ finally end;
+ end;
+ if SenderThread.FShowCancelMessage then
+ if SenderThread.FCancelMessage = LANGUserCancelled
+ then Application.MessageBox(SenderThread.FCancelMessage, [mbOK], mbWarning, mbNone, mbOK)
+ else Application.MessageBox(SenderThread.FCancelMessage, [mbOK], mbError, mbNone, mbOK);
+ except
+ on E: Exception do DebugMsg(['*** Exception raised in UCore.ProcessProgressThread (', E.ClassName, '): ', E.Message]);
+ end;
+ DebugMsg([' ** ProcessProgressThread --end']);
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure TWorkerThread.Execute;
+begin
+ if Assigned(WorkerProcedure) then WorkerProcedure(Self);
+end;
+
+constructor TWorkerThread.Create;
+begin
+ inherited Create(True);
+ FreeOnTerminate := False;
+ GUIMutex := TCriticalSection.Create;
+ FCancelled := False;
+ ProgressForm := nil;
+ Engine := nil;
+ DataList := nil;
+ ParamPointer1 := nil;
+ WorkerProcedure := nil;
+ SelectedItem := nil;
+ FDoneThread := False;
+ FShowCancelMessage := False;
+ FDialogShowDirDelete := False;
+ FDialogShowOverwrite := False;
+ FSigDialogDirDelete := False;
+ FSigDialogOverwrite := False;
+ FDialogShowNewDir := False;
+ FSigDialogNewDir := False;
+ FDialogShowMsgBox := False;
+ FSigDialogMsgBox := False;
+ ExtractFromVFSMode := False;
+ ErrorHappened := False;
+ ParamBool1 := False;
+ ParamBool2 := False;
+ ParamBool3 := False;
+ ParamBool4 := False;
+ ParamBool5 := False;
+ FGUIChanged := False;
+end;
+
+destructor TWorkerThread.Destroy;
+begin
+ GUIMutex.Free;
+ inherited Destroy;
+end;
+
+procedure TWorkerThread.CancelIt;
+begin
+ FCancelled := True;
+end;
+
+function TWorkerThread.Cancelled: boolean;
+begin
+ Result := FCancelled or ProgressForm.Cancelled;
+end;
+
+procedure TWorkerThread.UpdateProgress1(const Progress: Int64; const ProgressText: string);
+begin
+// DebugMsg([' ** TWorkerThread.UpdateProgress1(Progress = ', Progress, ', ProgressText = ', ProgressText]);
+ FProgress1Pos := Progress;
+ FProgress1Text := ProgressText;
+end;
+
+procedure TWorkerThread.UpdateProgress2(const Progress: Int64; const ProgressText: string);
+begin
+// DebugMsg([' ** TWorkerThread.UpdateProgress2(Progress = ', Progress, ', ProgressText = ', ProgressText]);
+ FProgress2Pos := Progress;
+ FProgress2Text := ProgressText;
+end;
+
+procedure TWorkerThread.SetProgress1Params(const ProgressMax: Int64);
+begin
+ FProgress1Max := ProgressMax;
+end;
+
+procedure TWorkerThread.SetProgress2Params(const ProgressMax: Int64);
+begin
+ FProgress2Max := ProgressMax;
+end;
+
+procedure TWorkerThread.UpdateCaption1(const CaptionText: string);
+begin
+ FLabel1Text := CaptionText;
+end;
+
+procedure TWorkerThread.UpdateCaption2(const CaptionText: string);
+begin
+ FLabel2Text := CaptionText;
+end;
+
+procedure TWorkerThread.CommitGUIUpdate;
+begin
+ GUIMutex.Acquire;
+// WriteLn('TWorkerThread.CommitGUIUpdate, ted mam lock ja! -- enter');
+ FGUIProgress1Pos := FProgress1Pos;
+ FGUIProgress2Pos := FProgress2Pos;
+ FGUIProgress1Max := FProgress1Max;
+ FGUIProgress2Max := FProgress2Max;
+ FGUIProgress1Text := FProgress1Text;
+ FGUIProgress2Text := FProgress2Text;
+ FGUILabel1Text := FLabel1Text;
+ FGUILabel2Text := FLabel2Text;
+ FGUIChanged := True;
+// Sleep(1000);
+// WriteLn('TWorkerThread.CommitGUIUpdate, ted mam lock ja! -- leave');
+ GUIMutex.Release;
+end;
+
+function TWorkerThread.ShowDirDeleteDialog(ButtonsType: integer; const Label1Text: string; const Label2Text: string = ''; const Label3Text: string = ''; const DirDeleteCaption: string = ''): integer;
+begin
+ FDialogResultDirDelete := integer(mbCancel);
+ FDirDeleteLabel1Text := Label1Text;
+ FDirDeleteLabel2Text := Label2Text;
+ FDirDeleteLabel3Text := Label3Text;
+ FDirDeleteLabel2Visible := Label2Text <> '';
+ FDirDeleteLabel3Visible := Label3Text <> '';
+ FDirDeleteButtonsType := ButtonsType;
+ if DirDeleteCaption = '' then FDirDeleteCaption := LANGRemoveDirectory
+ else FDirDeleteCaption := DirDeleteCaption;
+ FDialogShowDirDelete := True;
+ repeat
+ Sleep(ConstInternalProgressTimer);
+ until FSigDialogDirDelete;
+ FSigDialogDirDelete := False;
+ Result := FDialogResultDirDelete;
+end;
+
+function TWorkerThread.ShowOverwriteDialog(ButtonsType: integer; const FromLabel, FromInfoLabel, ToLabel, ToInfoLabel, RenameStr, SourceFile, DestFile: string): integer;
+begin
+ FDialogResultOverwrite := integer(mbCancel);
+ FOverwriteButtonsType := ButtonsType;
+ FOverwriteFromLabel := FromLabel;
+ FOverwriteFromInfoLabel := FromInfoLabel;
+ FOverwriteToLabel := ToLabel;
+ FOverwriteToInfoLabel := ToInfoLabel;
+ FOverwriteRenameStr := RenameStr;
+ FOverwriteSourceFile := SourceFile;
+ FOverwriteDestFile := DestFile;
+ FDialogShowOverwrite := True;
+ repeat
+ Sleep(ConstInternalProgressTimer);
+ until FSigDialogOverwrite;
+ FSigDialogOverwrite := False;
+ Result := FDialogResultOverwrite;
+end;
+
+function TWorkerThread.ShowNewDirDialog(Caption, LabelCaption, Edit: string): integer;
+begin
+ FNewDirCaption := Caption;
+ FNewDirLabel := LabelCaption;
+ FNewDirEdit := Edit;
+ FDialogShowNewDir := True;
+ repeat
+ Sleep(ConstInternalProgressTimer);
+ until FSigDialogNewDir;
+ FSigDialogNewDir := False;
+ Result := FDialogResultNewDir;
+end;
+
+function TWorkerThread.ShowMessageBox(const Text: string; Buttons: TMessageButtons; Style: TMessageStyle; Default, Escape: TMessageButton): TMessageButton;
+begin
+ FMsgBoxText := Text;
+ FMsgBoxButtons := Buttons;
+ FMsgBoxStyle := Style;
+ FMsgBoxDefault := Default;
+ FMsgBoxEscape := Escape;
+ FDialogShowMsgBox := True;
+ repeat
+ Sleep(ConstInternalProgressTimer);
+ until FSigDialogMsgBox;
+ FSigDialogMsgBox := False;
+ Result := FDialogResultMsgBox;
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure FillDefaultFstabMounterItems;
+var fd: PGlibc_IOFile;
+ mntent: PGlibc_mntent;
+ MounterItem: TMounterItem;
+begin
+ while MounterList.Count > 0 do begin
+ TMounterItem(MounterList[MounterList.Count - 1]).Free;
+ MounterList.Delete(MounterList.Count - 1);
+ end;
+ MounterList.Clear;
+
+ fd := glibc_setmntent(_PATH_MNTTAB, 'r');
+ if fd = nil then Exit;
+ // Get mount name
+ mntent := glibc_getmntent(fd);
+ while mntent <> nil do begin
+ if (mntent^.mnt_dir <> '/') and (mntent^.mnt_dir <> '/boot') and (Pos('/proc', mntent^.mnt_dir) <> 1) and
+ (Pos('/dev', mntent^.mnt_dir) <> 1) and (mntent^.mnt_dir <> 'swap') and (mntent^.mnt_dir <> '') then
+ begin
+ MounterItem := TMounterItem.Create;
+ MounterItem.DisplayText := '';
+ MounterItem.MountPath := mntent^.mnt_dir;
+ MounterItem.Device := mntent^.mnt_fsname;
+ if (Pos('ISO9660', UpperCase(mntent^.mnt_type)) > 0) or (Pos('CDROM', UpperCase(mntent^.mnt_dir)) > 0) or
+ (Pos('CDRW', UpperCase(mntent^.mnt_dir)) > 0) or (Pos('DVD', UpperCase(mntent^.mnt_dir)) > 0)
+ then MounterItem.DeviceType := 2 else
+ if (Pos('FLOPPY', UpperCase(mntent^.mnt_dir)) > 0) then MounterItem.DeviceType := 3 else
+ if (Pos('ZIP', UpperCase(mntent^.mnt_type)) > 0) or (Pos('USB', UpperCase(mntent^.mnt_dir)) > 0) or
+ (Pos('CAMERA', UpperCase(mntent^.mnt_dir)) > 0) then MounterItem.DeviceType := 1 else
+ if (Pos('NFS', UpperCase(mntent^.mnt_type)) > 0) or (Pos('SMB', UpperCase(mntent^.mnt_type)) > 0) or
+ (Pos('NETW', UpperCase(mntent^.mnt_dir)) > 0) then MounterItem.DeviceType := 4 else
+ MounterItem.DeviceType := 0;
+ MounterList.Add(MounterItem);
+ end;
+ mntent := glibc_getmntent(fd);
+ end;
+ glibc_endmntent(fd);
+end;
+
+function TMounterItem.Mounted: boolean;
+var fd: PGlibc_IOFile;
+ mntent: PGlibc_mntent;
+begin
+ Result := False;
+ fd := glibc_setmntent(_PATH_MOUNTED, 'r');
+ if fd = nil then Exit;
+ // Get mount name
+ mntent := glibc_getmntent(fd);
+ while mntent <> nil do begin
+// DebugMsg(['mntent^.mnt_dir = ', Int64(mntent^.mnt_dir)]);
+// DebugMsg(['mntent^.mnt_dir = ', mntent^.mnt_dir]);
+// DebugMsg(['sizeof(mntent^.mnt_dir) = ', sizeof(mntent^.mnt_dir)]);
+// DebugMsg(['sizeof(TGlibc_mntent) = ', sizeof(TGlibc_mntent)]);
+// DebugMsg(['string(mntent^.mnt_dir) = ', string(mntent^.mnt_dir)]);
+// DebugMsg(['MountPath = ', MountPath]);
+ if mntent^.mnt_dir = MountPath then begin
+ Result := True;
+ Break;
+ end;
+ mntent := glibc_getmntent(fd);
+ end;
+ glibc_endmntent(fd);
+end;
+
+function TMounterItem.IsInFSTab: boolean;
+var fd: PGlibc_IOFile;
+ mntent: PGlibc_mntent;
+begin
+ Result := False;
+ fd := glibc_setmntent(_PATH_MNTTAB, 'r');
+ if fd = nil then Exit;
+ // Get mount name
+ mntent := glibc_getmntent(fd);
+ while mntent <> nil do begin
+ if (mntent^.mnt_dir = MountPath) and (mntent^.mnt_fsname = Device) then begin
+ Result := True;
+ Break;
+ end;
+ mntent := glibc_getmntent(fd);
+ end;
+ glibc_endmntent(fd);
+end;
+
+function TMounterItem.Mount: boolean;
+var s: string;
+begin
+ if Length(MountCommand) = 0 then begin
+ if IsInFSTab then s := Format('mount "%s"', [MountPath])
+ else s := Format('mount "%s" "%s"', [Device, MountPath]);
+ end else begin
+ s := ReplaceStr(MountCommand, '%dev', Device);
+ s := ReplaceStr(s, '%dir', MountPath);
+ end;
+ Result := HandleSystemCommand(s, Format(LANGErrorMount, [ANSIToUTF8(MountPath)]));
+end;
+
+function TMounterItem.Umount: boolean;
+var s: string;
+begin
+ if Length(UmountCommand) = 0 then begin
+ if IsInFSTab then s := Format('umount "%s"', [MountPath])
+ else s := Format('umount "%s" "%s"', [Device, MountPath]);
+ end else begin
+ s := ReplaceStr(UmountCommand, '%dev', Device);
+ s := ReplaceStr(s, '%dir', MountPath);
+ end;
+ Result := HandleSystemCommand(s, Format(LANGErrorUmount, [ANSIToUTF8(MountPath)]));
+end;
+
+function TMounterItem.Eject: boolean;
+var s: string;
+begin
+ if Length(UmountCommand) = 0 then begin
+ if IsInFSTab then s := Format('eject "%s"', [MountPath])
+ else s := Format('eject "%s" "%s"', [Device, MountPath]);
+ end else begin
+ s := ReplaceStr(UmountCommand, '%dev', Device);
+ s := ReplaceStr(s, '%dir', MountPath);
+ end;
+ Result := HandleSystemCommand(s, Format(LANGErrorEject, [ANSIToUTF8(MountPath)]));
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+function HandleLogin(Parent: TComponent; Engine: TPanelEngine; UserName, Password: string): boolean;
+var b: boolean;
+begin
+ Result := False;
+ b := Engine.Login(UserName, Password) = cVFS_OK;
+ if not b then
+ repeat
+ try
+ FLogin := TFLogin.Create(Parent);
+ b := FLogin.Run = mbOK;
+ UserName := FLogin.UserEntry.Text;
+ Password := FLogin.PasswordEntry.Text;
+ finally
+ FLogin.Free;
+ end;
+ if not b then Exit;
+ if b then b := Engine.Login(UserName, Password) = cVFS_OK;
+ until b;
+ Result := True;
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure TGetDirSizeThread.Execute;
+begin
+ Result := Engine.GetDirSize(Path);
+ Finished := True;
+end;
+
+constructor TGetDirSizeThread.Create;
+begin
+ inherited Create(True);
+ FreeOnTerminate := False;
+ FCancelled := False;
+ Finished := False;
+ Result := -1;
+end;
+
+procedure TGetDirSizeThread.CancelIt;
+begin
+ FCancelled := True;
+ Engine.BreakProcessing(1);
+end;
+
+procedure GetDirSize(AListView: TGTKListView; Engine: TPanelEngine; DataList: TList; AllItems: boolean);
+var t: __time_t;
+ b: boolean;
+ FRemoteWait: TFRemoteWait;
+
+ function DoGetDirSizeItem(Index: integer): boolean;
+ var Item: TGTKListItem;
+ Data: PDataItem;
+ APath, s: string;
+ ASize: Int64;
+// List: TList;
+ Thread: TGetDirSizeThread;
+ begin
+ Result := True;
+ try
+ Item := AListView.Items[Index];
+ if not Assigned(Item) then Exit;
+ Data := Item.Data;
+ if (not Assigned(Data)) or (not Data^.IsDir) then Exit;
+ APath := IncludeTrailingPathDelimiter(Engine.Path) + string(Data^.AName);
+
+{ List := TList.Create;
+ Engine.FillDirFiles(APath, List, 1);
+ DebugWriteListSL(List); }
+
+ Thread := TGetDirSizeThread.Create;
+ try
+ Thread.Path := APath;
+ Thread.Engine := Engine;
+ Thread.Resume;
+// Thread.Execute;
+ while not Thread.Finished do begin
+ Sleep(ConstInternalProgressTimer);
+ if not b and (__time(nil) >= t + 2) then begin
+ FRemoteWait := TFRemoteWait.Create(Application);
+// FRemoteWait.Label2.Visible := False;
+ FRemoteWait.ParentForm := FMain;
+ FRemoteWait.ShowModal;
+ b := True;
+ end;
+ Application.ProcessMessages;
+ if FMainEscPressed or (Assigned(FRemoteWait) and FRemoteWait.Cancelled) then Thread.CancelIt;
+ end;
+ ASize := Thread.Result;
+ finally
+ Thread.Free;
+ end;
+
+ if (ASize < 0) or FMainEscPressed or (Assigned(FRemoteWait) and FRemoteWait.Cancelled) then Exit;
+ Data^.Size := ASize;
+ s := ANSIToUTF8(FormatSize(ASize, 0));
+ Libc.free(Data^.ColumnData[3]);
+// Data^.ColumnData[3] := Libc.malloc(Length(s) + 1);
+// Libc.memset(Data^.ColumnData[3], 0, Length(s) + 1);
+ Data^.ColumnData[3] := strdup(PChar(s));
+ except end;
+ end;
+
+
+var i, j: integer;
+ Data: PDataItem;
+begin
+ t := __time(nil);
+ b := False;
+ FRemoteWait := nil;
+
+ if not AllItems then DoGetDirSizeItem(AListView.Selected.Index) else
+ if DataList.Count > 0 then
+ for i := 0 to DataList.Count - 1 do begin
+ j := AListView.ConvertFromSorted(i);
+ Data := DataList[j];
+ if Data^.IsDir and (not Data^.UpDir) then begin
+ if not DoGetDirSizeItem(j) then Break;
+ if FMainEscPressed then Break;
+ AListView.Items[j].RedrawRow;
+ end;
+ end;
+ if FRemoteWait <> nil then FRemoteWait.Free;
+ ChDir('/');
+end;
+
+
+
+(********************************************************************************************************************************)
+constructor TOpenDirThread.Create;
+begin
+ inherited Create(True);
+ FreeOnTerminate := False;
+ Finished := False;
+ CancelIt := False;
+ ChDirResult := 0;
+ ListingResult := 0;
+ VFSOpenResult := 0;
+ RunningTime := 0;
+ APlugin := nil;
+ xEngine := nil;
+ Password := '';
+end;
+
+procedure TOpenDirThread.Execute;
+var tt: TDateTime;
+begin
+ try
+// Writeln('execute.');
+ tt := Now;
+ try
+// WriteLn('x1');
+ if APlugin <> nil then begin
+ xEngine := TVFSEngine.Create(APlugin);
+ xEngine.ParentEngine := AEngine;
+ xEngine.ArchiveMode := True;
+ AEngine.LastHighlightItem := AHighlightItem;
+ xEngine.SavePath := AEngine.Path;
+ AEngine := xEngine;
+ if Length(Password) > 0 then (xEngine as TVFSEngine).Password := Password;
+ VFSOpenResult := (xEngine as TVFSEngine).VFSOpenEx(AFullPath);
+ end else VFSOpenResult := 0;
+// WriteLn('x2');
+
+ if (VFSOpenResult = 0) and (not CancelIt) then begin
+// WriteLn('x3');
+ ChDirResult := ChangeDir(AEngine, APath, ASelItem, AAutoFallBack);
+// WriteLn('x4');
+
+ if (ChDirResult = 0) and (not CancelIt) then begin
+// WriteLn('x5');
+ ListingResult := AEngine.GetListing(ADirList, ConfShowDotFiles);
+// WriteLn('x6');
+ end;
+// WriteLn('x7');
+ end;
+ except
+ on E: Exception do DebugMsg(['*** TOpenDirThread.Execute -Exception: ', E.Message]);
+ end;
+ RunningTime := MilliSecondsBetween(tt, Now);
+// WriteLn('x8');
+ finally
+ Finished := True;
+ end;
+{ except
+ on E: Exception do DebugMsg(['*** Exception raised in TOpenDirThread.Execute (', E.ClassName, '): ', E.Message]);
+ end; }
+end;
+
+{ destructor TOpenDirThread.Destroy;
+begin
+ if (APlugin <> nil) and (xEngine <> nil) then
+ try
+ xEngine.Free;
+ except
+ on E: Exception do DebugMsg(['*** TOpenDirThread.Destroy -Exception: ', E.Message]);
+ end;
+ inherited Destroy;
+end; }
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+function PurgeDirectory(APath: string): boolean;
+var Handle : PDirectoryStream;
+ DirEnt : PDirent64;
+ StatBuf : PGlibc_stat64;
+ Buf : PChar;
+begin
+ try
+ Result := True;
+ APath := IncludeTrailingPathDelimiter(APath);
+ Handle := Libc.opendir(PChar(APath));
+ if not Assigned(Handle) then begin
+ Result := False;
+ Exit;
+ end;
+ repeat
+ DirEnt := readdir64(Handle);
+ if Assigned(DirEnt) and Assigned(PChar(@DirEnt^.d_name[0])) then begin
+ Buf := Pchar(@DirEnt^.d_name[0]);
+ if (Buf <> '.') and (Buf <> '..') and (DirEnt^.d_name[0] <> #0) then begin
+ StatBuf := Libc.malloc(sizeof(TGlibc_stat64));
+ Libc.memset(StatBuf, 0, sizeof(TGlibc_stat64));
+ if glibc_lstat64(PChar(APath + string(Buf)), StatBuf) = 0 then
+ if __S_ISTYPE(StatBuf.st_mode, __S_IFDIR)
+ then PurgeDirectory(APath + string(Buf))
+ else begin
+// DebugMsg(['Removing ', APath + string(Buf)]);
+ Result := Result and (Libc.remove(PChar(APath + string(Buf))) = 0);
+ end;
+ Libc.free(StatBuf);
+ end;
+ end;
+ until DirEnt = nil;
+ closedir(Handle);
+// DebugMsg(['Removing ', ExcludeTrailingPathDelimiter(APath)]);
+ Result := Result and (Libc.remove(PChar(ExcludeTrailingPathDelimiter(APath))) = 0);
+ except
+ on E: Exception do DebugMsg(['*** Exception raised in UCore.PurgeDirectory(APath = ', APath, '): ', E.ClassName, ': ', E.Message]);
+ end;
+end;
+
+procedure CleanTempDirs;
+var i: integer;
+begin
+ try
+ if Assigned(UsedTempPaths) and (UsedTempPaths.Count > 0) then
+ for i := 0 to UsedTempPaths.Count - 1 do
+ DebugMsg(['(II) PurgeDirectory: Cleaning directory "', UsedTempPaths[i], '", Successfull = ', PurgeDirectory(UsedTempPaths[i])]);
+ UsedTempPaths.Clear;
+ except
+ on E: Exception do DebugMsg(['*** Exception raised in UCore.CleanTempDirs (', E.ClassName, '): ', E.Message]);
+ end;
+end;
+
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+
+
+
+initialization
+ LeftPanelData := TList.Create;
+ RightPanelData := TList.Create;
+ LeftLocalEngine := TLocalTreeEngine.Create;
+ RightLocalEngine := TLocalTreeEngine.Create;
+ FMainEscPressed := False;
+ LeftPanelTabs := TStringList.Create;
+ RightPanelTabs := TStringList.Create;
+ LeftTabSortIDs := TList.Create;
+ RightTabSortIDs := TList.Create;
+ LeftTabSortTypes := TList.Create;
+ RightTabSortTypes := TList.Create;
+ MounterList := nil;
+ ConnectionMgrList := nil;
+ ConnectionMgrList := TList.Create;
+ UsedTempPaths := TStringList.Create;
+ SelectHistory := TStringList.Create;
+ SearchHistory := TStringList.Create;
+finalization
+ ClearListData(LeftPanelData);
+ ClearListData(RightPanelData);
+ LeftPanelTabs.Free;
+ RightPanelTabs.Free;
+ LeftTabSortIDs.Free;
+ RightTabSortIDs.Free;
+ LeftTabSortTypes.Free;
+ RightTabSortTypes.Free;
+ MounterList.Free;
+ LeftPanelData.Free;
+ RightPanelData.Free;
+ AssocList.Free;
+ ConnectionMgrList.Free;
+ CleanTempDirs;
+ UsedTempPaths.Free;
+ SelectHistory.Free;
+ SearchHistory.Free;
+end.
diff --git a/UCoreClasses.pas b/UCoreClasses.pas
new file mode 100644
index 0000000..c53289f
--- /dev/null
+++ b/UCoreClasses.pas
@@ -0,0 +1,349 @@
+(*
+ Tux Commander - UCoreClasses - Some useful core classes
+ Copyright (C) 2007 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit UCoreClasses;
+
+interface
+
+uses gdk2pixbuf, gtk2, gdk2, glib2, SysUtils, Classes, Libc, IniFiles, GTKClasses, GTKStdCtrls, GTKDialogs, GTKPixbuf, UGnome,
+ UEngines;
+
+type TUser = class
+ public
+ UserName, FullName, HomeDir, LoginShell: string;
+ UID, GID: Cardinal;
+ end;
+
+ TGroup = class
+ public
+ GroupName: string;
+ GID: Cardinal;
+ Users: TStrings;
+ end;
+
+ TUserManager = class
+ private
+ public
+ UserList, GroupList: TList;
+ constructor Create;
+ destructor Destroy; override;
+ function GetUserName(UID: Cardinal; const ShowNA: boolean = True): string;
+ function GetGroupName(GID: Cardinal; const ShowNA: boolean = True): string;
+ end;
+
+
+ TMyIniFile = class(TIniFile)
+ private
+ FReadOnly: boolean;
+ public
+ constructor Create(const FileName: string; const ReadOnly: boolean);
+ procedure UpdateFile; override;
+ end;
+
+ TGTKImageButton = class(TGTKButton)
+ private
+ FHBox: PGtkWidget;
+ FLabel: PGtkWidget;
+ FImage: PGtkWidget;
+ FEventBoxLeft, FEventBoxRight: PGtkWidget;
+ function GetCaption: string;
+ procedure SetCaption(Value: string);
+ procedure SetIcon(Value: TGDKPixbuf);
+ procedure SetSpacing(Value: integer);
+ public
+ procedure SetFromStock(Stock_ID: string; IconSize: TGTKIconSize);
+ published
+ constructor Create(AOwner: TComponent); override;
+ constructor CreateWithoutLabel(AOwner: TComponent);
+ property Caption: string read GetCaption write SetCaption;
+ property Icon: TGDKPixbuf write SetIcon;
+ property Spacing: integer write SetSpacing;
+ end;
+
+ TGTKImageToggleButton = class(TGTKToggleButton)
+ private
+ FHBox: PGtkWidget;
+ FLabel: PGtkWidget;
+ FImage: PGtkWidget;
+ function GetCaption: string;
+ procedure SetCaption(Value: string);
+ procedure SetIcon(Value: TGDKPixbuf);
+ public
+ procedure SetFromStock(Stock_ID: string; IconSize: TGTKIconSize);
+ published
+ constructor Create(AOwner: TComponent); override;
+ constructor CreateWithoutLabel(AOwner: TComponent);
+ property Caption: string read GetCaption write SetCaption;
+ property Icon: TGDKPixbuf write SetIcon;
+ end;
+
+
+implementation
+
+uses GTKForms, GTKUtils, ULocale, UConfig, UCore, UCoreUtils;
+
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TUserManager.Create;
+var pwd: PPasswordRecord;
+ User: TUser;
+ grp: PGroup;
+ Group: TGroup;
+ i: integer;
+begin
+ inherited Create;
+ UserList := TList.Create;
+ GroupList := TList.Create;
+ // Load and process /etc/passwd
+ try
+ setpwent;
+ pwd := getpwent;
+ while pwd <> nil do begin
+ User := TUser.Create;
+ User.UserName := PgcharToString(pwd^.pw_name);
+ User.FullName := PgcharToString(pwd^.pw_gecos);
+ User.HomeDir := PgcharToString(pwd^.pw_dir);
+ User.LoginShell := PgcharToString(pwd^.pw_shell);
+ User.UID := pwd^.pw_uid;
+ User.GID := pwd^.pw_gid;
+ UserList.Add(User);
+ pwd := getpwent;
+ end;
+ endpwent;
+ except end;
+ // Load and process /etc/group
+ try
+ setgrent;
+ grp := getgrent;
+ while grp <> nil do begin
+ Group := TGroup.Create;
+ Group.GroupName := PgcharToString(grp^.gr_name);
+ Group.GID := grp^.gr_gid;
+ Group.Users := TStringList.Create;
+ {$R-}
+ if grp^.gr_mem^ <> nil then begin
+ i := 0;
+ repeat
+ Group.Users.Add(PgcharToString(PCharArray(grp^.gr_mem^)[i]));
+ Inc(i);
+ until PCharArray(grp^.gr_mem^)[i] = nil;
+ end;
+ {$R+}
+ GroupList.Add(Group);
+ grp := getgrent;
+ end;
+ endgrent;
+ except end;
+end;
+
+destructor TUserManager.Destroy;
+var i: integer;
+begin
+ if UserList.Count > 0 then
+ for i := UserList.Count - 1 downto 0 do begin
+ TUser(UserList[i]).Free;
+ UserList.Delete(i);
+ end;
+ UserList.Clear;
+ UserList.Free;
+ if GroupList.Count > 0 then
+ for i := GroupList.Count - 1 downto 0 do begin
+ TGroup(GroupList[i]).Users.Clear;
+ TGroup(GroupList[i]).Users.Free;
+ TGroup(GroupList[i]).Free;
+ GroupList.Delete(i);
+ end;
+ GroupList.Clear;
+ GroupList.Free;
+ inherited Destroy;
+end;
+
+function TUserManager.GetUserName(UID: Cardinal; const ShowNA: boolean = True): string;
+var i: integer;
+begin
+ if ShowNA then Result := 'N/A'
+ else Result := IntToStr(UID);
+ if UserList.Count > 0 then
+ for i := 0 to UserList.Count - 1 do
+ if TUser(UserList[i]).UID = UID then begin
+ Result := TUser(UserList[i]).UserName;
+ Break;
+ end;
+end;
+
+function TUserManager.GetGroupName(GID: Cardinal; const ShowNA: boolean = True): string;
+var i: integer;
+begin
+ if ShowNA then Result := 'N/A'
+ else Result := IntToStr(GID);
+ if GroupList.Count > 0 then
+ for i := 0 to GroupList.Count - 1 do
+ if TGroup(GroupList[i]).GID = GID then begin
+ Result := TGroup(GroupList[i]).GroupName;
+ Break;
+ end;
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TMyIniFile.Create(const FileName: string; const ReadOnly: boolean);
+begin
+ FReadOnly := ReadOnly;
+ inherited Create(FileName);
+end;
+
+procedure TMyIniFile.UpdateFile;
+begin
+ if not FReadOnly then inherited UpdateFile;
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKImageButton.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FWidget := gtk_button_new;
+ FLabel := gtk_label_new('');
+ FImage := gtk_image_new;
+ FHBox := gtk_hbox_new(False, 2);
+ FEventBoxLeft := gtk_vbox_new(false, 0);
+ FEventBoxRight := gtk_vbox_new(false, 0);
+ gtk_box_pack_start(PGtkBox(FHBox), FEventBoxLeft, False, False, 0);
+ gtk_box_pack_start(PGtkBox(FHBox), FImage, False, False, 0);
+ gtk_box_pack_start(PGtkBox(FHBox), FLabel, True, True, 0);
+ gtk_box_pack_start(PGtkBox(FHBox), FEventBoxRight, False, False, 0);
+ gtk_container_add(PGtkContainer(FWidget), FHBox);
+ g_signal_connect(PGtkObject(FWidget), 'clicked', G_CALLBACK(@TGTKButton_OnClick), Self);
+ gtk_widget_show(FLabel);
+ gtk_widget_show(FImage);
+ gtk_widget_show(FHBox);
+ gtk_widget_show(FEventBoxLeft);
+ gtk_widget_show(FEventBoxRight);
+ Show;
+end;
+
+constructor TGTKImageButton.CreateWithoutLabel(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FWidget := gtk_button_new;
+ FLabel := gtk_label_new('');
+ FImage := gtk_image_new;
+ FHBox := gtk_hbox_new(False, 2);
+ FEventBoxLeft := gtk_vbox_new(false, 0);
+ FEventBoxRight := gtk_vbox_new(false, 0);
+ gtk_box_pack_start(PGtkBox(FHBox), FEventBoxLeft, False, False, 0);
+ gtk_box_pack_start(PGtkBox(FHBox), FImage, False, False, 0);
+ gtk_box_pack_start(PGtkBox(FHBox), FEventBoxRight, False, False, 0);
+ gtk_container_add(PGtkContainer(FWidget), FHBox);
+ g_signal_connect(PGtkObject(FWidget), 'clicked', G_CALLBACK(@TGTKButton_OnClick), Self);
+ gtk_widget_show(FLabel);
+ gtk_widget_show(FImage);
+ gtk_widget_show(FHBox);
+ gtk_widget_show(FEventBoxLeft);
+ gtk_widget_show(FEventBoxRight);
+ Show;
+end;
+
+function TGTKImageButton.GetCaption: string;
+begin
+ Result := gtk_label_get_text(PGtkLabel(FLabel));
+end;
+
+procedure TGTKImageButton.SetCaption(Value: string);
+begin
+ gtk_label_set_text_with_mnemonic(PGtkLabel(FLabel), PChar(Value));
+end;
+
+procedure TGTKImageButton.SetIcon(Value: TGDKPixbuf);
+begin
+ if Assigned(Value) and Assigned(Value.FPixbuf) then
+ gtk_image_set_from_pixbuf(PGtkImage(FImage), Value.FPixbuf);
+end;
+
+procedure TGTKImageButton.SetFromStock(Stock_ID: string; IconSize: TGTKIconSize);
+begin
+ gtk_image_set_from_stock(PGtkImage(FImage), PChar(Stock_ID), Ord(IconSize));
+end;
+
+procedure TGTKImageButton.SetSpacing(Value: integer);
+begin
+ gtk_widget_set_size_request(FEventBoxLeft, Value, -1);
+ gtk_widget_set_size_request(FEventBoxRight, Value, -1);
+end;
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKImageToggleButton.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FWidget := gtk_toggle_button_new;
+ FLabel := gtk_label_new('');
+ FImage := gtk_image_new;
+ FHBox := gtk_hbox_new(False, 2);
+ gtk_box_pack_start(PGtkBox(FHBox), FImage, False, False, 0);
+ gtk_box_pack_start(PGtkBox(FHBox), FLabel, True, True, 0);
+ gtk_container_add(PGtkContainer(FWidget), FHBox);
+ g_signal_connect(PGtkObject(FWidget), 'clicked', G_CALLBACK(@TGTKButton_OnClick), Self);
+ gtk_widget_show(FLabel);
+ gtk_widget_show(FImage);
+ gtk_widget_show(FHBox);
+ Show;
+end;
+
+constructor TGTKImageToggleButton.CreateWithoutLabel(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FWidget := gtk_button_new;
+ FLabel := gtk_label_new('');
+ FImage := gtk_image_new;
+ gtk_container_add(PGtkContainer(FWidget), FImage);
+ g_signal_connect(PGtkObject(FWidget), 'clicked', G_CALLBACK(@TGTKButton_OnClick), Self);
+ gtk_widget_show(FLabel);
+ gtk_widget_show(FImage);
+ Show;
+end;
+
+function TGTKImageToggleButton.GetCaption: string;
+begin
+ Result := gtk_label_get_text(PGtkLabel(FLabel));
+end;
+
+procedure TGTKImageToggleButton.SetCaption(Value: string);
+begin
+ gtk_label_set_text(PGtkLabel(FLabel), PChar(Value));
+end;
+
+procedure TGTKImageToggleButton.SetIcon(Value: TGDKPixbuf);
+begin
+ if Assigned(Value) and Assigned(Value.FPixbuf) then
+ gtk_image_set_from_pixbuf(PGtkImage(FImage), Value.FPixbuf);
+end;
+
+procedure TGTKImageToggleButton.SetFromStock(Stock_ID: string; IconSize: TGTKIconSize);
+begin
+ gtk_image_set_from_stock(PGtkImage(FImage), PChar(Stock_ID), Ord(IconSize));
+end;
+
+(********************************************************************************************************************************)
+
+
+end.
diff --git a/UCoreUtils.pas b/UCoreUtils.pas
new file mode 100644
index 0000000..0e12550
--- /dev/null
+++ b/UCoreUtils.pas
@@ -0,0 +1,1821 @@
+(*
+ Tux Commander - UCoreUtils - Some other useful core functions
+ Copyright (C) 2008 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ Portions of this unit (CRC32, THash_MD5) are part of the Delphi Encryption Compendium
+ Copyright: Hagen Reddmann mailto:HaReddmann@AOL.COM
+
+ 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
+*)
+unit UCoreUtils;
+
+interface
+
+uses gdk2pixbuf, gtk2, gdk2, glib2, SysUtils, Classes, Libc, GTKControls, GTKStdCtrls, GTKClasses, UEngines;
+
+type
+ PIntArray = ^TIntArray;
+ TIntArray = array[0..1023] of LongWord;
+
+ TOpenStringArray = array of string;
+
+ THash_MD5 = class
+ private
+ FCount: Int64;
+ FBuffer: array[0..63] of Byte;
+ FDigest: array[0..9] of LongWord;
+ protected
+ function TestVector: Pointer;
+ procedure Transform(Buffer: PIntArray);
+ public
+ constructor Create;
+ procedure Init;
+ procedure Done;
+ procedure Calc(const Data; DataSize: Integer);
+ function DigestKey: string;
+ function GetKeyStrH: string;
+ end;
+
+
+const ConstERRSpawn = 26;
+ ConstQuotationCharacters = [' ', '"', '''', '(', ')', ':', '&'];
+
+function GetErrorString(ErrorNo: integer): string;
+function GetSignalString(SignalNo: integer): string;
+
+function UnixTimeToTDateTime(UnixTime: Int64): TDateTime;
+function FormatSize(Value: Int64; Base: integer): string;
+
+function AttrToStr(const Mode: Cardinal; IncludeFileType: boolean = True): string;
+function AttrToOctal(const Mode: Cardinal): integer;
+function OctalToAttr(Octal: Cardinal): Cardinal;
+{ Convert an octal specified number to decimal }
+{ Copied from linux.pp (Free Pascal run time library) - Copyright (c) 1999-2000 by Michael Van Canneyt, BSD parts (c) 2000 by Marco van de Voort, members of the Free Pascal development team }
+
+function PosEnd(Substr: string; S: string): Integer;
+function GetHomePath: string;
+function GetUserName: string;
+function GetHostName: string;
+procedure SeparateExt(const Original: string; var Name, Ext: string);
+procedure SeparateNameDir(Original: string; var Path, FileName: string);
+function PadRightStr(const Str: string; Len: byte): string;
+
+function IsWild(InputStr, Wilds: string; IgnoreCase: Boolean): Boolean;
+{ IsWild compares InputString with WildCard string and returns True if corresponds. }
+{ Copied from Delphi VCL Extensions (RX) - Copyright (c) 1995, 1996 AO ROSNO, Copyright (c) 1997, 1998 Master-Bank }
+function ReplaceStr(const S, Srch, Replace: string): string;
+{ Returns string with every occurrence of Srch string replaced with Replace string. }
+{ Copied from Delphi VCL Extensions (RX) - Copyright (c) 1995, 1996 AO ROSNO, Copyright (c) 1997, 1998 Master-Bank }
+function NumCountChars(const Char: char; const S: string): integer;
+
+procedure ParseString(const Str, Separator: string; var SubStrings: TOpenStringArray);
+
+
+function ProcessPattern(Engine: TPanelEngine; Pattern, APath, FileName: string; const Directory: boolean): string;
+// Processess pattern with FileName located in APath and return destination path+filename
+procedure ShowAbout;
+
+procedure TrimCRLFESC(var s: string);
+procedure TrimQuotes(var s: string);
+function QuoteStr(const Str: string): string;
+function QuoteMarkupStr(const Str: string): string;
+function QuotePercentStr(const Str: string): string;
+function RemoveQuotation(const Str: string): string;
+function GetStrSize(s: string): Int64;
+procedure DebugMsg(Params: array of const);
+function SpawnProcess(const AppPath: string; var Running: boolean; const Parameters: array of string): Cardinal;
+function ExecuteProgram(const AppCMDLine, CWD: string; const AutodetectGUI, RunInTerminal: boolean; var ErrorSignal: integer): boolean;
+function IsItX11App(const Application: string): boolean;
+function HandleSystemCommand(const Command, ErrorText: string): boolean;
+
+function CompareTextsEx(S1, S2: PChar): integer;
+function LVCompareItems(Data1, Data2: PDataItem; const Ascending: boolean; const SortColumnID: integer): integer;
+procedure SortDataList(var List: TList; const Ascending: boolean; const SortColumnID: integer);
+procedure GetFirstLastPanelColumn(var FirstColumn, LastColumn: integer);
+
+procedure SetupColors;
+
+function ConstructURI(HidePasswd: boolean; Protocol, Server, Username, Password, Dir: string): string;
+function URIHidePassword(const SrcURI: string): string;
+
+{$IFDEF __FPC__}
+function StrToDateDef(const S: string; const Default: TDateTime): TDateTime;
+function UnixToDateTime(const AValue: Int64): TDateTime;
+{$ENDIF}
+
+procedure SaveItemToHistory(s: string; History: TStringList);
+
+
+
+
+// Calculate CRC32 Checksum, CRC is default $FFFFFFFF,
+// After calc you must inverse Result with NOT
+function CRC32(CRC: LongWord; Data: Pointer; DataSize: LongWord): LongWord;
+
+procedure ReportGTKVersion;
+
+// Internal locking
+procedure InternalLock;
+procedure InternalUnLock;
+function InternalLockUnlocked: boolean;
+procedure InternalLockInit(Locked: boolean);
+
+var ChildExitStatus: sig_atomic_t;
+
+ AppPath, IconPath: string; // Used in UFileTypeSettings
+
+ NormalItemGDKColor, ActiveItemGDKColor, InactiveItemGDKColor, SelectedItemGDKColor, DotFileItemGDKColor, LinkItemGDKColor,
+ NormalItemGDKBackground, ActiveItemGDKBackground, InactiveItemGDKBackground: PGdkColor;
+ InactiveItemBGColorNum: LongWord;
+
+
+implementation
+
+uses DateUtils, GTKForms, GTKUtils, GTKView, ULocale, UConfig, UCore, UGnome, UMain;
+
+(********************************************************************************************************************************)
+function GetErrorString(ErrorNo: integer): string;
+begin
+ if ErrorNo >= 0 then Result := String(strerror(ErrorNo))
+ else
+ case ErrorNo of
+ ERRException : Result := LANGUnknownException;
+ ERRNoAccess : Result := LANGNoAccess;
+ else Result := LANGUnknownError;
+ end;
+end;
+
+(********************************************************************************************************************************)
+function GetSignalString(SignalNo: integer): string;
+begin
+ Result := strsignal(SignalNo);
+end;
+
+(********************************************************************************************************************************)
+function UnixTimeToTDateTime(UnixTime: Int64): TDateTime;
+//var tm : PUnixTime;
+begin
+ Result := UnixToDateTime(UnixTime);
+{ tm := localtime(@UnixTime);
+ Result := EncodeDate(tm^.tm_year + 1900, tm^.tm_mon + 1, tm^.tm_mday) +
+ EncodeTime(tm^.tm_hour, tm^.tm_min, tm^.tm_sec, 0); }
+end;
+
+(********************************************************************************************************************************)
+function FormatFloat64(Value: Int64; Sep: string): string;
+var i : integer;
+ Orig : string;
+begin
+ Result := IntToStr(Value);
+ Orig := Result;
+ if (Sep <> '') and (Length(Result) > 2) then
+ for i := Length(Result) downto 2 do
+ if (Length(Orig) - i + 1) mod 3 = 0 then
+ Insert(Sep, Result, i);
+end;
+
+function FormatSize(Value: Int64; Base: integer): string;
+var s: string;
+ i: integer;
+begin
+ if Base < 1 then Base := 1;
+ case ConfSizeFormat of
+ 0 : begin // System default formatting
+ Result := FormatFloat('###,###,##0', Value div Base);
+ end;
+ 1 : begin // 123456
+ Result := IntToStr(Value div Base);
+ end;
+ 2 : begin // 123,456
+ Result := FormatFloat64(Value div Base, ',');
+ end;
+ 3 : begin // 123 456
+ Result := FormatFloat64(Value div Base, ' ');
+ end;
+ 4 : begin // 123'456
+ Result := FormatFloat64(Value div Base, '''');
+ end;
+ 5 : begin // 123kB - Grouped
+ s := '###,###,##0';
+ if ConfSizeGroupPrecision > 0 then begin
+ s := s + '.';
+ for i := 1 to ConfSizeGroupPrecision do
+ if ConfSizeGroupRequestZeroDigits then s := s + '0'
+ else s := s + '#';
+ end;
+ if (Value >= 1024*1024*1024) or (Base = 1024*1024*1024) then Result := FormatFloat(s + ' GB', Value / (1024*1024*1024)) else
+ if (Value >= 1024*1024) or (Base = 1024*1024) then Result := FormatFloat(s + ' MB', Value / (1024*1024)) else
+ if (Value >= 1024) or (Base = 1024) then Result := FormatFloat(s + ' kB', Value / (1024)) else
+ Result := IntToStr(Value);
+ end;
+ end;
+ if ConfSizeFormat in [0..4] then begin
+ if Result = '' then Result := '0';
+ if Base = 1024 then Result := Result + ' kB' else
+ if Base = 1024*1024 then Result := Result + ' MB' else
+ if Base = 1024*1024*1024 then Result := Result + ' GB';
+ end;
+ if Result = '' then Result := '0';
+end;
+
+(********************************************************************************************************************************)
+function AttrToStr(const Mode: Cardinal; IncludeFileType: boolean = True): string;
+begin
+ if IncludeFileType then begin
+ if __S_ISTYPE(Mode, __S_IFLNK) then Result := 'l' else
+ if __S_ISTYPE(Mode, __S_IFDIR) then Result := 'd' else
+ if __S_ISTYPE(Mode, __S_IFBLK) then Result := 'b' else
+ if __S_ISTYPE(Mode, __S_IFCHR) then Result := 'c' else
+ if __S_ISTYPE(Mode, __S_IFIFO) then Result := 'f' else
+ if __S_ISTYPE(Mode, __S_IFSOCK) then Result := 's' else Result := '-';
+ end else Result := '';
+ if Mode and S_IRUSR = S_IRUSR then Result := Result + 'r' else Result := Result + '-';
+ if Mode and S_IWUSR = S_IWUSR then Result := Result + 'w' else Result := Result + '-';
+ if Mode and __S_ISUID = __S_ISUID then if Mode and S_IXUSR = S_IXUSR then Result := Result + 's' else Result := Result + 'S' else
+ if Mode and S_IXUSR = S_IXUSR then Result := Result + 'x' else Result := Result + '-';
+ if Mode and S_IRGRP = S_IRGRP then Result := Result + 'r' else Result := Result + '-';
+ if Mode and S_IWGRP = S_IWGRP then Result := Result + 'w' else Result := Result + '-';
+ if Mode and __S_ISGID = __S_ISGID then if Mode and S_IXGRP = S_IXGRP then Result := Result + 's' else Result := Result + 'S' else
+ if Mode and S_IXGRP = S_IXGRP then Result := Result + 'x' else Result := Result + '-';
+ if Mode and S_IROTH = S_IROTH then Result := Result + 'r' else Result := Result + '-';
+ if Mode and S_IWOTH = S_IWOTH then Result := Result + 'w' else Result := Result + '-';
+ if Mode and __S_ISVTX = __S_ISVTX then if Mode and S_IXOTH = S_IXOTH then Result := Result + 't' else Result := Result + 'T' else
+ if Mode and S_IXOTH = S_IXOTH then Result := Result + 'x' else Result := Result + '-';
+end;
+
+(********************************************************************************************************************************)
+function AttrToOctal(const Mode: Cardinal): integer;
+var x, Mult: Cardinal;
+begin
+ Result := 0;
+ Mult := 1;
+ x := Mode;
+ while x > 0 do begin
+ Result := Result + Integer((x mod 8) * Mult);
+ x := x div 8;
+ Mult := Mult * 10;
+ end;
+end;
+
+(********************************************************************************************************************************)
+function OctalToAttr(Octal: Cardinal): Cardinal;
+var octnr, oct : Cardinal;
+begin
+ octnr := 0;
+ oct := 0;
+ while (Octal > 0) do begin
+ oct := oct or ((Octal mod 10) shl octnr);
+ Octal := Octal div 10;
+ inc(octnr, 3);
+ end;
+ Result := oct;
+end;
+
+(********************************************************************************************************************************)
+function PosEnd(Substr: string; S: string): Integer;
+var i : integer;
+begin
+ Result := 0;
+ if (Length(Trim(S)) < 1) or (Length(Trim(Substr)) < 1) or (Length(Trim(Substr)) > Length(Trim(S))) then Exit;
+ for i := Length(S) - Length(SubStr) downto 1 do
+ if Copy(s, i, Length(Substr)) = SubStr then begin
+ Result := i;
+ Break;
+ end;
+end;
+
+(********************************************************************************************************************************)
+function GetHomePath: string;
+begin
+ Result := PgcharToString(g_get_home_dir);
+end;
+
+(********************************************************************************************************************************)
+function GetUserName: string;
+begin
+ Result := PgcharToString(g_get_user_name);
+end;
+
+(********************************************************************************************************************************)
+function GetHostName: string;
+var s: PChar;
+begin
+ s := Libc.malloc(65536);
+ Libc.memset(s, 0, 65536);
+ Libc.gethostname(s, 65536);
+ Result := PgcharToString(strdup(s));
+ Libc.free(s);
+end;
+
+(********************************************************************************************************************************)
+procedure SeparateExt(const Original: string; var Name, Ext: string);
+var j: integer;
+begin
+ Ext := '';
+ Name := Original;
+ if {(Pos('.', Original) > 1) and } (Length(Original) > 2) then begin
+ j := LastDelimiter('.', Original);
+ if (j > 1) and (j < Length(Original)) then begin
+ Ext := Copy(Original, j + 1, Length(Original) - j);
+ Delete(Name, j, Length(Name) - j + 1);
+ end;
+ end;
+end;
+
+(********************************************************************************************************************************)
+procedure SeparateNameDir(Original: string; var Path, FileName: string);
+var j: integer;
+begin
+ Original := ExcludeTrailingPathDelimiter(Original);
+ Path := Original;
+ FileName := '';
+ if (Pos('/', Original) > 0) and (Length(Original) > 2) then begin
+ j := LastDelimiter('/', Original);
+ if j > 0 then begin
+ FileName := Copy(Original, j + 1, Length(Original) - j);
+ Delete(Path, j, Length(Original) - j + 1);
+ end;
+ end;
+end;
+
+(********************************************************************************************************************************)
+function PadRightStr(const Str: string; Len: byte): string;
+var i: integer;
+begin
+ Result := Str;
+ for i := 1 to Len - Length(Str) do Insert(' ', Result, 1);
+end;
+
+(********************************************************************************************************************************)
+function SearchNext(var Wilds: string): Integer;
+
+{ looking for next *, returns position and string until position }
+begin
+ Result := Pos('*', Wilds);
+ if Result > 0 then Wilds := Copy(Wilds, 1, Result - 1);
+end;
+
+
+function FindPart(const HelpWilds, InputStr: string): Integer;
+
+{ FindPart compares a string with '?' and another, returns the position of HelpWilds in InputStr. }
+var
+ I, J: Integer;
+ Diff: Integer;
+begin
+ I := Pos('?', HelpWilds);
+ if I = 0 then begin
+ { if no '?' in HelpWilds }
+ Result := Pos(HelpWilds, InputStr);
+ Exit;
+ end;
+ { '?' in HelpWilds }
+ Diff := Length(InputStr) - Length(HelpWilds);
+ if Diff < 0 then begin
+ Result := 0;
+ Exit;
+ end;
+ { now move HelpWilds over InputStr }
+ for I := 0 to Diff do begin
+ for J := 1 to Length(HelpWilds) do begin
+ if (InputStr[I + J] = HelpWilds[J]) or
+ (HelpWilds[J] = '?') then
+ begin
+ if J = Length(HelpWilds) then begin
+ Result := I + 1;
+ Exit;
+ end;
+ end
+ else Break;
+ end;
+ end;
+ Result := 0;
+end;
+
+
+function IsWild(InputStr, Wilds: string; IgnoreCase: Boolean): Boolean;
+
+var
+ CWild, CInputWord: Integer; { counter for positions }
+ I, LenHelpWilds: Integer;
+ MaxInputWord, MaxWilds: Integer; { Length of InputStr and Wilds }
+ HelpWilds: string;
+begin
+ if Wilds = InputStr then begin
+ Result := True;
+ Exit;
+ end;
+ repeat { delete '**', because '**' = '*' }
+ I := Pos('**', Wilds);
+ if I > 0 then
+ Wilds := Copy(Wilds, 1, I - 1) + '*' + Copy(Wilds, I + 2, MaxInt);
+ until I = 0;
+ if (Wilds = '*') or (Wilds = '*.*') then begin { for fast end, if Wilds only '*' }
+ Result := True;
+ Exit;
+ end;
+ MaxInputWord := Length(InputStr);
+ MaxWilds := Length(Wilds);
+ if IgnoreCase then begin { upcase all letters }
+ InputStr := AnsiUpperCase(InputStr);
+ Wilds := AnsiUpperCase(Wilds);
+ end;
+ if (MaxWilds = 0) or (MaxInputWord = 0) then begin
+ Result := False;
+ Exit;
+ end;
+ CInputWord := 1;
+ CWild := 1;
+ Result := True;
+ repeat
+ if InputStr[CInputWord] = Wilds[CWild] then begin { equal letters }
+ { goto next letter }
+ Inc(CWild);
+ Inc(CInputWord);
+ Continue;
+ end;
+ if Wilds[CWild] = '?' then begin { equal to '?' }
+ { goto next letter }
+ Inc(CWild);
+ Inc(CInputWord);
+ Continue;
+ end;
+ if Wilds[CWild] = '*' then begin { handling of '*' }
+ HelpWilds := Copy(Wilds, CWild + 1, MaxWilds);
+ I := SearchNext(HelpWilds);
+ LenHelpWilds := Length(HelpWilds);
+ if I = 0 then begin
+ { no '*' in the rest, compare the ends }
+ if HelpWilds = '' then Exit; { '*' is the last letter }
+ { check the rest for equal Length and no '?' }
+ {$R-}
+ for I := 0 to LenHelpWilds - 1 do begin
+ if (HelpWilds[LenHelpWilds - I] <> InputStr[MaxInputWord - I]) and
+ (HelpWilds[LenHelpWilds - I]<> '?') then
+ begin
+ Result := False;
+ Exit;
+ end;
+ end;
+ {$R+}
+ Exit;
+ end;
+ { handle all to the next '*' }
+ Inc(CWild, 1 + LenHelpWilds);
+ I := FindPart(HelpWilds, Copy(InputStr, CInputWord, MaxInt));
+ if I = 0 then begin
+ Result := False;
+ Exit;
+ end;
+ CInputWord := I + LenHelpWilds;
+ Continue;
+ end;
+ Result := False;
+ Exit;
+ until (CInputWord > MaxInputWord) or (CWild > MaxWilds);
+ { no completed evaluation }
+ if CInputWord <= MaxInputWord then Result := False;
+ if (CWild <= MaxWilds) and (Wilds[MaxWilds] <> '*') then Result := False;
+end;
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+
+
+(********************************************************************************************************************************)
+type TPatternCacheItem = record
+ Pattern, APath, FileName: string;
+ DirDidNotExist: boolean;
+ end;
+
+var PatternCache : array of TPatternCacheItem;
+
+function ProcessPattern(Engine: TPanelEngine; Pattern, APath, FileName: string; const Directory: boolean): string;
+var Path : string;
+
+ procedure ProcessParam(const Part: string);
+ begin
+ // Check for upper directory
+ if (Length(Part) >= 2) and (Copy(Part, 1, 2) = '..') then begin
+ if (Path <> '/') and (LastDelimiter('/', Path) > 1) then begin
+ Path := ExcludeTrailingPathDelimiter(Path);
+ Delete(Path, LastDelimiter('/', Path), Length(Path) - LastDelimiter('/', Path) + 1);
+ Path := IncludeTrailingPathDelimiter(Path);
+ end;
+ end else
+ if Part = '.' then begin end else // On current dir ('.') do nothing
+ // Add directory
+ Path := IncludeTrailingPathDelimiter(IncludeTrailingPathDelimiter(Path) + Part);
+ end;
+
+ function ProcessPart(WildPart, FilePart: string): string;
+ var i, j, CWild, CInputWord, MaxInputWord, MaxWilds, LenHelpWilds: integer;
+ HelpWilds, s: string;
+ begin
+ Result := '';
+ if (WildPart = '*') or (Length(WildPart) = 0) then Result := FilePart else
+ if LastDelimiter('*?', WildPart) = 0 then Result := WildPart else
+ begin
+ repeat { delete '**', because '**' = '*' }
+ I := Pos('**', WildPart);
+ if I > 0 then WildPart := Copy(WildPart, 1, I - 1) + '*' + Copy(WildPart, I + 2, MaxInt);
+ until I = 0;
+ MaxInputWord := Length(FilePart);
+ MaxWilds := Length(WildPart);
+ CInputWord := 1;
+ CWild := 1;
+ repeat
+ if not (WildPart[CWild] in ['?', '*']) then begin
+ Result := Result + WildPart[CWild];
+ if WildPart[CWild] = FilePart[CInputWord] then Inc(CInputWord);
+ Inc(CWild);
+ Continue;
+ end;
+ if WildPart[CWild] = '?' then begin
+ if Length(FilePart) <= CWild then Result := Result + FilePart[CWild];
+ Inc(CWild);
+ if Length(FilePart) < CWild then Inc(CInputWord);
+ Continue;
+ end;
+ if WildPart[CWild] = '*' then begin { handling of '*' }
+ HelpWilds := Copy(WildPart, CWild + 1, MaxWilds);
+ I := SearchNext(HelpWilds);
+ LenHelpWilds := Length(HelpWilds);
+ if (I = 0) and (HelpWilds = '') then begin
+ { no '*' in the rest, compare the ends }
+ Result := Result + Copy(FilePart, CInputWord, MaxInputWord - CInputWord + 1);
+ Break; { '*' is the last letter }
+ end;
+ if (I = 0) and (Pos('?', HelpWilds) = 0) then begin
+ Result := Result + Copy(FilePart, CInputWord, MaxInputWord - CInputWord + 1) + HelpWilds;
+ Break;
+ end;
+ s := Copy(FilePart, CInputWord, MaxInputWord - CInputWord + 1);
+ i := FindPart(HelpWilds, s);
+ if i = 0 then Result := Result + HelpWilds else
+ begin
+ for j := 1 to Length(HelpWilds) do
+ if HelpWilds[j] = '?' then HelpWilds[j] := s[j - 1 + i];
+ Result := Result + Copy(s, 1, i + Length(HelpWilds) - 1);
+ Inc(CInputWord, i + LenHelpWilds - 1);
+ end;
+ Inc(CWild, 1 + LenHelpWilds);
+ Continue;
+ end;
+ Break;
+ until (CInputWord > MaxInputWord) or (CWild > MaxWilds);
+ end;
+ end;
+
+ function ProcessWilds(WildStr, AFile: string): string;
+ var i, j, WPC, FPC: integer;
+ DotFile: boolean;
+ begin
+ if (WildStr = '*.*') or (WildStr = '') then Result := AFile else
+ if WildStr = '*' then begin
+ if (Pos('.', AFile) = 0) or (Copy(AFile, 1, 1) = '.') then Result := AFile else
+ Result := Copy(AFile, 1, LastDelimiter('.', AFile) - 1);
+ end else begin
+ Result := '';
+ DotFile := False;
+ if (Length(AFile) > 0) and (AFile[1] = '.') then begin
+ DotFile := True;
+ Delete(AFile, 1, 1);
+ end;
+ // Trim redundant parameters
+ WPC := 0;
+ for i := 1 to Length(WildStr) do if WildStr[i] = '.' then Inc(WPC);
+ FPC := 0;
+ for i := 1 to Length(AFile) do if AFile[i] = '.' then Inc(FPC);
+ if WPC > FPC then
+ for j := 1 to WPC - FPC do begin
+ Result := '.' + Copy(WildStr, LastDelimiter('.', WildStr) + 1, Length(WildStr) - LastDelimiter('.', WildStr)) + Result;
+ Delete(WildStr, LastDelimiter('.', WildStr), Length(WildStr) - LastDelimiter('.', WildStr) + 1);
+ end;
+ // Going processing
+ while (LastDelimiter('.', WildStr) > 0) and (LastDelimiter('.', AFile) > 0) do begin
+ Result := '.' + ProcessPart(Copy(WildStr, LastDelimiter('.', WildStr) + 1, Length(WildStr) - LastDelimiter('.', WildStr)),
+ Copy(AFile, LastDelimiter('.', AFile) + 1, Length(AFile) - LastDelimiter('.', AFile))) + Result;
+ Delete(WildStr, LastDelimiter('.', WildStr), Length(WildStr) - LastDelimiter('.', WildStr) + 1);
+ Delete(AFile, LastDelimiter('.', AFile), Length(AFile) - LastDelimiter('.', AFile) + 1);
+ end;
+ if WildStr <> '' then Result := ProcessPart(WildStr, AFile) + Result;
+ if DotFile then Result := '.' + Result;
+ end;
+ // Trim unwanted characters
+ if Length(Result) > 0 then
+ for i := 1 to Length(Result) do
+ if Result[i] in ['*', '?', '/'] then Result[i] := '_';
+ end;
+
+ function FindInCache: integer;
+ var i: integer;
+ begin
+ Result := -1;
+ if LengtH(PatternCache) > 0 then
+ for i := 0 to Length(PatternCache) - 1 do
+ if (PatternCache[i].Pattern = Pattern) and (PatternCache[i].APath = APath) and (Pos(PatternCache[i].FileName, FileName) = 1) then
+ begin
+ Result := i;
+ Break;
+ end;
+ end;
+
+ function CaseDirExists(DPath, DFileName: string): boolean;
+ begin
+ if (AnsiCompareStr(Pattern, FileName) <> 0) and (AnsiCompareText(Pattern, FileName) = 0) and Directory and
+ Engine.TwoSameFiles(DPath + Pattern, DPath + FileName)
+ then Result := False
+ else Result := Engine.DirectoryExists(DPath + DFileName);
+ end;
+
+
+
+
+var s: string;
+ x: integer;
+begin
+ Result := '';
+ if Pattern = '' then Exit;
+ // Select basic directory
+ case Pattern[1] of
+ '/' : begin
+ Path := '/';
+ if Length(Pattern) > 1 then Delete(Pattern, 1, 1);
+ end;
+ '~' : begin
+ Path := IncludeTrailingPathDelimiter(GetHomePath);
+ Delete(Pattern, 1, 1);
+ end;
+ else Path := IncludeTrailingPathDelimiter(APath);
+ end;
+ // Process directories in pattern
+ while Pos('/', Pattern) > 0 do begin
+ s := Copy(Pattern, 1, Pos('/', Pattern) - 1);
+ Delete(Pattern, 1, Pos('/', Pattern));
+ ProcessParam(s);
+ end;
+ // Add rest of pattern parts
+ if (Pos('?', Pattern) = 0) and (Pos('*', Pattern) = 0) then begin
+ if (Pattern <> '.') and (Pattern <> '..') and (not CaseDirExists(IncludeTrailingPathDelimiter(Path), Pattern)) then begin
+ if Directory then Path := IncludeTrailingPathDelimiter(IncludeTrailingPathDelimiter(Path) + Pattern)
+ else Path := ExcludeTrailingPathDelimiter(IncludeTrailingPathDelimiter(Path) + Pattern);
+ SetLength(PatternCache, Length(PatternCache) + 1);
+ PatternCache[Length(PatternCache) - 1].Pattern := Pattern;
+ PatternCache[Length(PatternCache) - 1].APath := APath;
+ PatternCache[Length(PatternCache) - 1].FileName := FileName;
+ end else begin
+ if Length(Pattern) > 0 then ProcessParam(Pattern);
+ x := FindInCache;
+ if x < 0 then begin
+ Path := IncludeTrailingPathDelimiter(Path) + FileName;
+ end else begin
+ Delete(FileName, 1, Length(IncludeTrailingPathDelimiter(PatternCache[x].FileName)));
+ Path := IncludeTrailingPathDelimiter(Path) + FileName;
+ end;
+ if Directory then Path := IncludeTrailingPathDelimiter(Path)
+ else Path := ExcludeTrailingPathDelimiter(Path);
+ end;
+ end else Path := Path + ProcessWilds(Pattern, FileName);
+
+ Result := Path;
+end;
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure ShowAbout;
+const Authors : array[0..1] of PChar = ('Tomáš Bžatek <tbzatek@users.sourceforge.net>', nil);
+ Translations : PChar = 'Tomáš Bžatek <tbzatek@users.sourceforge.net> - English, Czech'#10 +
+ 'Maxim Baranov <maxbaranov@hotbox.ru> - Russian'#10 +
+ 'Sven Laufersweiler <laufersweiler@bettercad.de> - German'#10 +
+ 'Johan Åkesson <johan@badanka.com> - Swedish'#10 +
+ 'Marie-Agnès Pauchet-Le Héricy <marie@kerplh.com> - French'#10 +
+ 'Daniel Areiza <nnoseman@hotmail.com> - Spanish'#10 +
+ 'Dominik Zabłotny <dominz@wp.pl> - Polish'#10 +
+ 'Serhij Dubyk <dubyk@ukr.net> - Ukrainian'#10 +
+ 'Bojan Božović <bojanb@sbb.co.yu> - Serbian'#10 +
+ 'Marián Képesi <m_kepesi@yahoo.com> - Hungarian'#10 +
+ 'Francesco Turco <fctk86@gmail.com> - Italian';
+var AboutBox: PGtkWidget;
+begin
+ if (libGnomeUI2Handle = nil) or (@gnome_about_new = nil)
+ then Application.MessageBox(Format(LANGAboutString, [ConstAboutVersion, ConstAboutBuildDate]))
+ else begin
+ AboutBox := gnome_about_new('Tux Commander', nil, 'Copyright © 2008 Tomáš Bžatek',
+ PChar(Format(LANGAboutStringGnome, [ConstAboutVersion, ConstAboutBuildDate])),
+ @Authors, nil, Translations, nil);
+ gtk_window_set_transient_for(GTK_WINDOW(AboutBox), GTK_WINDOW(FMain.FWidget));
+ gtk_dialog_run(GTK_DIALOG(AboutBox));
+ end;
+end;
+
+(********************************************************************************************************************************)
+procedure TrimCRLFESC(var s: string);
+begin
+ while (Length(s) > 0) and (s[1] in [#13, #10, #27]) do Delete(s, 1, 1);
+ while (Length(s) > 0) and (s[Length(s)] in [#13, #10, #27]) do Delete(s, Length(s), 1);
+end;
+
+(********************************************************************************************************************************)
+procedure TrimQuotes(var s: string);
+begin
+ while (Length(s) > 0) and (s[1] in ['"', '''']) do Delete(s, 1, 1);
+ while (Length(s) > 0) and (s[Length(s)] in ['"', '''']) do Delete(s, Length(s), 1);
+end;
+
+(********************************************************************************************************************************)
+function QuoteStr(const Str: string): string;
+var i: integer;
+begin
+ Result := '';
+ if Length(Str) > 0 then
+ for i := 1 to Length(Str) do begin
+ if Str[i] in ConstQuotationCharacters then Result := Result + '\';
+ Result := Result + Str[i];
+ end;
+end;
+
+(********************************************************************************************************************************)
+function QuotePercentStr(const Str: string): string;
+var i: integer;
+begin
+ Result := '';
+ if Length(Str) > 0 then
+ for i := 1 to Length(Str) do begin
+ if Str[i] = '%' then Result := Result + '%';
+ Result := Result + Str[i];
+ end;
+end;
+
+(********************************************************************************************************************************)
+function QuoteMarkupStr(const Str: string): string;
+var i: integer;
+begin
+ Result := '';
+ if Length(Str) > 0 then
+ for i := 1 to Length(Str) do begin
+ if Str[i] = '<' then Result := Result + '&#60;' else
+ if Str[i] = '>' then Result := Result + '&#62;' else
+ if Str[i] = '&' then Result := Result + '&amp;' else
+// if Str[i] = '_' then Result := Result + '__' else
+ Result := Result + Str[i];
+ end;
+end;
+
+(********************************************************************************************************************************)
+function RemoveQuotation(const Str: string): string;
+var b: boolean;
+ i: integer;
+begin
+ Result := Str;
+ if Length(Result) < 2 then Exit;
+ b := True;
+ for i := 2 to Length(Result) do
+ if (Result[i] in ConstQuotationCharacters) and (Result[i - 1] <> '\') then b := False;
+ if b then for i := Length(Result) downto 2 do
+ if (Result[i] in ConstQuotationCharacters) and (Result[i - 1] = '\') then Delete(Result, i - 1, 1);
+end;
+
+(********************************************************************************************************************************)
+function ReplaceStr(const S, Srch, Replace: string): string;
+var
+ I: Integer;
+ Source: string;
+begin
+ Source := S;
+ Result := '';
+ repeat
+ I := Pos(Srch, Source);
+ if I > 0 then begin
+ Result := Result + Copy(Source, 1, I - 1) + Replace;
+ Source := Copy(Source, I + Length(Srch), MaxInt);
+ end
+ else Result := Result + Source;
+ until I <= 0;
+end;
+
+(********************************************************************************************************************************)
+function NumCountChars(const Char: char; const S: string): integer;
+var i: integer;
+begin
+ Result := 0;
+ if Length(S) > 0 then
+ for i := 1 to Length(S) do
+ if S[i] = Char then Inc(Result);
+end;
+
+(********************************************************************************************************************************)
+procedure ParseString(const Str, Separator: string; var SubStrings: TOpenStringArray);
+var s: string;
+ i: integer;
+begin
+ s := Str;
+ while Pos(Separator, s) > 0 do begin
+ i := Pos(Separator, s);
+ SetLength(SubStrings, Length(SubStrings) + 1);
+ SubStrings[Length(SubStrings) - 1] := Copy(s, 1, i - 1);
+ Delete(s, 1, i);
+ end;
+ if Length(s) > 0 then begin // Add the last element
+ SetLength(SubStrings, Length(SubStrings) + 1);
+ SubStrings[Length(SubStrings) - 1] := s;
+ end;
+end;
+
+(********************************************************************************************************************************)
+function GetStrSize(s: string): Int64;
+var i: integer;
+ x: Double;
+ b: boolean;
+begin
+ Result := 0;
+ x := 0;
+ s := AnsiUpperCase(Trim(s));
+ if Length(s) = 0 then Exit;
+ for i := Length(s) downto 1 do
+ if s[i] in [#32, ThousandSeparator] then Delete(s, i, 1);
+ b := False;
+ for i := 2 to Length(s) do
+ if not (s[i] in ['0', '1'..'9', DecimalSeparator]) then
+ begin
+ x := StrToFloatDef(Copy(s, 1, i - 1), 0);
+ case s[i] of
+ 'G': x := x * 1000 * 1000 * 1000;
+ 'M': x := x * 1000 * 1000;
+ 'K': x := x * 1024;
+ end;
+ b := True;
+ Break;
+ end;
+ if not b then x := StrToInt64Def(s, Trunc(x));
+ Result := Trunc(x);
+end;
+
+(********************************************************************************************************************************)
+function ConstructURI(HidePasswd: boolean; Protocol, Server, Username, Password, Dir: string): string;
+begin
+ Result := Protocol + '://';
+ if Length(Username) > 0 then begin
+ Result := Result + Username;
+ if Length(Password) > 0 then
+ if HidePasswd then Result := Result + ':' + StringOfChar('*', Length(Password))
+ else Result := Result + ':' + Password;
+ Result := Result + '@';
+ end;
+ Result := Result + Server;
+ if Length(Dir) > 0 then begin
+ if Dir[1] <> '/' then Result := Result + '/';
+ Result := Result + Dir;
+ end;
+end;
+
+(********************************************************************************************************************************)
+function URIHidePassword(const SrcURI: string): string;
+var i: integer;
+ InPasswd, BeforeServer: boolean;
+begin
+ Result := SrcURI;
+ InPasswd := False;
+ BeforeServer := True;
+ if Length(SrcURI) > 0 then
+ if Pos('://', SrcURI) > 0 then
+ for i := Pos('://', SrcURI) + 2 to Length(SrcURI) do begin
+ if SrcURI[i] = '@' then begin
+ InPasswd := False;
+ BeforeServer := False;
+ end;
+ if (not InPasswd) or (not BeforeServer)
+ then InPasswd := BeforeServer and (SrcURI[i] = ':')
+ else Result[i] := '*';
+ end;
+end;
+
+(********************************************************************************************************************************)
+procedure DebugMsg(Params: array of const);
+var
+ I: Integer;
+begin
+ if ParamDebug then begin
+ for I := 0 to High(Params) do
+ with Params[I] do
+ case VType of
+ vtInteger: Write(ErrOutput, IntToStr(VInteger));
+ vtBoolean: Write(ErrOutput, VBoolean);
+ vtChar: Write(ErrOutput, VChar);
+ vtExtended: Write(ErrOutput, FloatToStr(VExtended^));
+ vtString: Write(ErrOutput, VString^);
+ vtPChar: Write(ErrOutput, VPChar);
+ vtObject: Write(ErrOutput, VObject.ClassName);
+ vtClass: Write(ErrOutput, VClass.ClassName);
+ vtAnsiString: Write(ErrOutput, string(VAnsiString));
+ vtCurrency: Write(ErrOutput, CurrToStr(VCurrency^));
+ vtVariant: Write(ErrOutput, string(VVariant^));
+ vtInt64: Write(ErrOutput, IntToStr(VInt64^));
+ end;
+ WriteLn(ErrOutput);
+ end;
+end;
+
+(********************************************************************************************************************************)
+function SpawnProcess(const AppPath: string; var Running: boolean; const Parameters: array of string): Cardinal;
+var child_pid: __pid_t;
+ args_list: System.PPChar;
+ i: integer;
+ Temp: string;
+ sv: sigval_t;
+begin
+ Result := 0;
+ Running := False;
+ ChildExitStatus := -1;
+
+ // Make the args_list array
+ args_list := nil;
+ if Length(Parameters) > 0 then begin
+ args_list := Libc.malloc((Length(Parameters) + 1) * SizeOf(PChar));
+ Libc.memset(args_list, 0, (Length(Parameters) + 1) * SizeOf(PChar));
+ for I := 0 to Length(Parameters) - 1 do
+ begin
+ Temp := Parameters[i];
+ {$R-}
+// PCharArray(args_list^)[I] := Libc.malloc(Length(Temp)+1);
+// Libc.memset(PCharArray(args_list^)[I], 0, Length(Temp)+1);
+// StrCopy(PCharArray(args_list^)[I], PChar(Temp));
+ PCharArray(args_list^)[I] := strdup(PChar(Temp));
+ {$R+}
+ end;
+ {$R-}
+ PCharArray(args_list^)[Length(Parameters)] := nil;
+ {$R+}
+ end;
+
+ // Duplicate this process
+ child_pid := fork;
+ if child_pid <> 0 then begin
+ Result := child_pid;
+ Sleep(100);
+ Application.ProcessMessages;
+ Running := ChildExitStatus < 0;
+ if not Running then Result := 0;
+ if not WIFEXITED(ChildExitStatus) then Result := WTERMSIG(ChildExitStatus);
+ end else begin
+ // Now execute AppPath, searching for it in the path
+ execvp(PChar(AppPath), args_list);
+ // The execvp function returns only if an error occurs
+ sigqueue(getppid, SIGUSR1, sv);
+ Halt(ConstERRSpawn);
+ end;
+ ChildExitStatus := -1;
+end;
+
+(********************************************************************************************************************************)
+procedure SplitArgs(var Args: TOpenStringArray; CMDLine: string);
+var InQuotes: boolean;
+ i, Start: integer;
+ QuoteChar: char;
+ s: string;
+begin
+ SetLength(Args, 0);
+ InQuotes := False;
+ CMDLine := Trim(CMDLine);
+ if Length(CMDLine) = 0 then Exit;
+ Start := 1;
+ QuoteChar := #0;
+ for i := 1 to Length(CMDLine) do
+ case CMDLine[i] of
+ ' ': if (not InQuotes) and ((i = 1) or (CMDLine[i - 1] <> '\')) then begin
+ s := Trim(Copy(CMDLine, Start, i - Start));
+ TrimQuotes(s);
+ Start := i;
+ if s = '' then Continue;
+ SetLength(Args, Length(Args) + 1);
+ Args[Length(Args) - 1] := s;
+ end;
+ '"', '''': if (i = 1) or (CMDLine[i - 1] <> '\') then
+ if not InQuotes then begin
+ InQuotes := True;
+ QuoteChar := CMDLine[i];
+// Start := i;
+ end else
+ if CMDLine[i] = QuoteChar then begin
+ InQuotes := False;
+ s := Trim(Copy(CMDLine, Start, i + 1 - Start));
+ TrimQuotes(s);
+ Start := i;
+ if s = '' then Continue;
+ if (Pos('"', s) > 1) and (Pos('"', s) < Length(s)) and (NumCountChars('"', s) mod 2 = 1) then s := s + '"';
+// if (Pos('''', s) > 1) and (Pos('''', s) < Length(s)) and (NumCountChars('''', s) mod 2 = 1) then s := s + '''';
+ SetLength(Args, Length(Args) + 1);
+ Args[Length(Args) - 1] := s;
+ end;
+ end;
+ if (Start <> Length(CMDLine)) or (Start = 1) then begin
+ SetLength(Args, Length(Args) + 1);
+ Args[Length(Args) - 1] := Trim(Copy(CMDLine, Start, Length(CMDLine) + 1 - Start));
+ TrimQuotes(Args[Length(Args) - 1]);
+ end;
+end;
+
+function ExecuteProgram(const AppCMDLine, CWD: string; const AutodetectGUI, RunInTerminal: boolean; var ErrorSignal: integer): boolean;
+var Args: TOpenStringArray;
+ s, s2: string;
+ Running, Term: boolean;
+ x: integer;
+begin
+ Result := False;
+ try
+ DebugMsg(['*** Running ExecuteProgram begin']);
+ s := Trim(AppCMDLine);
+ ErrorSignal := 0;
+ Term := RunInTerminal;
+ SplitArgs(Args, s);
+
+ if AutodetectGUI then
+ if Length(Trim(Args[0])) > 0 then Term := not IsItX11App(Trim(Args[0]));
+
+ if Term then begin
+ x := 1;
+ while x <= Length(s) do begin
+ if (s[x] in [{'"',} '''']) and ((x = 1) or (s[x - 1] <> '\')) then
+ Insert('\', s, x);
+ Inc(x);
+ end;
+ s2 := ReplaceStr(ConfTerminalCommand, '%cwd', QuoteStr(CWD));
+ s := Format(s2, [s]);
+ SplitArgs(Args, s);
+ end;
+
+ if ConfUseLibcSystem then begin
+ s := s + ' &';
+ DebugMsg([s]);
+ DebugMsg(['**** Running libc.system']);
+ x := Libc.system(PChar(s));
+ Result := x <> -1; // -1 means fork failed
+ DebugMsg(['**** Running libc.system = ', x, ' --- done']);
+ end else begin
+ if Length(Args) = 0 then Exit;
+ for x := 0 to Length(Args) - 1 do Args[x] := RemoveQuotation(Args[x]);
+ DebugMsg(['**** Running spawn']);
+ x := SpawnProcess(Args[0], Running, Args);
+ DebugMsg(['**** Running spawn -- done']);
+ Result := Running;
+ if not Running then ErrorSignal := x;
+ end;
+
+ except
+ end;
+ DebugMsg(['*** Running ExecuteProgram end']);
+end;
+
+(********************************************************************************************************************************)
+function IsItX11App(const Application: string): boolean;
+const BSize = 32768;
+ What = 'libX11.so';
+var stream: PIOFile;
+ Buffer: Pointer;
+ i: integer;
+ str: string;
+begin
+ Result := False;
+ DebugMsg(['***** function IsItX11App(''', Application, ''') begin --']);
+
+ try
+// setenv('LD_TRACE_LOADED_OBJECTS', '1', True);
+ stream := popen(PChar('LD_TRACE_LOADED_OBJECTS=1 ' + Application), 'r');
+// stream := popen(PChar(Application), 'r');
+ DebugMsg(['***** IsItX11App: popen OK']);
+ if Assigned(stream) then begin
+ Buffer := Libc.malloc(BSize);
+ if buffer = nil then Writeln('buffer nil: ', integer(errno));
+ if stream = nil then Writeln('stream nil');
+ Libc.memset(Buffer, 0, BSize);
+ DebugMsg(['***** IsItX11App: malloc() OK']);
+
+ while feof(stream) = 0 do begin
+ i := Libc.fread(Buffer, 1, BSize, stream);
+ if i > 0 then begin
+ SetLength(str, i);
+ memcpy(@str[1], Buffer, i);
+ Result := Result or (Pos(What, str) > 0);
+ end;
+ end;
+ pclose(stream);
+ end;
+// unsetenv('LD_TRACE_LOADED_OBJECTS');
+
+ except
+ on E: Exception do DebugMsg(['*** IsItX11App(''', Application, '''):Exception: ', E.Message]);
+ end;
+ DebugMsg(['***** function IsItX11App(''', Application, ''') = ', Result]);
+end;
+
+function HandleSystemCommand(const Command, ErrorText: string): boolean;
+const BSize = 32768;
+var stream: PIOFile;
+ Buffer: Pointer;
+ i, NumRead: integer;
+ child_pid: __pid_t;
+ fds: array[0..1] of integer;
+ Parameters: TOpenStringArray;
+ args_list: System.PPChar;
+ Temp, s: string;
+begin
+ Result := False;
+ DebugMsg(['***** function HandleSystemCommand(''', Command, ''') begin --']);
+
+ try
+ DebugMsg(['***** HandleSystemCommand: before fork']);
+ pipe(@fds);
+ child_pid := fork;
+ DebugMsg(['***** HandleSystemCommand: fork, child_pid = ', child_pid]);
+
+
+ // Main application
+ if child_pid <> 0 then begin
+ __close(fds[1]);
+ stream := fdopen(fds[0], 'r');
+ Buffer := Libc.malloc(BSize);
+ DebugMsg(['x0']);
+ Libc.memset(Buffer, 0, BSize);
+ DebugMsg(['x1']);
+ if buffer = nil then Writeln('buffer nil: ', integer(errno));
+ if stream = nil then Writeln('stream nil');
+
+ SetLength(s, 0);
+ while feof(stream) = 0 do begin
+ NumRead := fread(Buffer, 1, BSize, stream);
+ DebugMsg(['***** HandleSystemCommand: NumRead = ', NumRead]);
+ if NumRead > 0 then begin
+ SetLength(s, Length(s) + NumRead);
+ memcpy(@s[Length(s) - NumRead + 1], Buffer, NumRead);
+ end;
+ end;
+ __close(fds[0]);
+ DebugMsg(['x2']);
+ TrimCRLFESC(s);
+ DebugMsg(['x3']);
+
+ Libc.free(Buffer);
+ DebugMsg(['x4']);
+ end
+
+ // forked PID
+ else begin
+ try
+ SplitArgs(Parameters, Command);
+ // Fill the args_list array
+ args_list := nil;
+ if Length(Parameters) > 0 then begin
+ args_list := Libc.malloc((Length(Parameters) + 1) * SizeOf(PChar));
+ Libc.memset(args_list, 0, (Length(Parameters) + 1) * SizeOf(PChar));
+ for I := 0 to Length(Parameters) - 1 do
+ begin
+ Temp := Parameters[i];
+ {$R-}
+// PCharArray(args_list^)[I] := Libc.malloc(Length(Temp)+1);
+// Libc.memset(PCharArray(args_list^)[I], 0, Length(Temp)+1);
+// StrCopy(PCharArray(args_list^)[I], PChar(Temp));
+ PCharArray(args_list^)[I] := strdup(PChar(Temp));
+ {$R+}
+ end;
+ {$R-}
+ PCharArray(args_list^)[Length(Parameters)] := nil;
+ {$R+}
+ end;
+ except
+ on E: Exception do DebugMsg(['*** forked ** function HandleSystemCommand(''', Command, '''):Exception: ', E.Message]);
+ end;
+
+ __close(fds[0]); // Close copy of reader file descriptor
+ dup2(fds[1], STDERR_FILENO);
+ execvp(PChar(Parameters[0]), args_list);
+ DebugMsg(['***** HandleSystemCommand: failed execvp: something went wrong...']);
+ WriteLn(erroutput, 'Error executing command');
+ Halt(ConstERRSpawn);
+ end;
+
+ Result := Length(s) = 0;
+ if not Result then Application.MessageBox(Format('%s%s', [ErrorText, ANSIToUTF8(s)]), [mbOK], mbError, mbOK, mbOK);
+ except
+ on E: Exception do DebugMsg(['***** function HandleSystemCommand(''', Command, '''):Exception: ', E.Message]);
+ end;
+ DebugMsg(['***** finished function HandleSystemCommand(''', Command, ''') = ', Result]);
+end;
+
+
+(********************************************************************************************************************************)
+function CompareTextsEx(S1, S2: PChar): integer;
+const PriorityChars = '.[]_0123456789';
+var i, j, k, l1, l2 : integer;
+ Str1, Str2: string;
+begin
+ Result := -2;
+ Str1 := UpperCase(String(S1));
+ Str2 := UpperCase(String(S2));
+ l1 := Length(Str1);
+ l2 := Length(Str2);
+ if (l1 > 0) and (l2 > 0) then begin
+ if (Str1[1] = '.') and (Str2[1] <> '.') then Result := -1 else // Priority for dot files
+ if (Str2[1] = '.') and (Str1[1] <> '.') then Result := 1 else
+ for i := 1 to l1 do
+ if l2 >= i then
+ if Str1[i] <> Str2[i] then begin
+ j := Pos(Str1[i], PriorityChars);
+ k := Pos(Str2[i], PriorityChars);
+ if (j > 0) and (k > 0) then begin
+ if j < k then Result := -1 else
+ if j > k then Result := 1;
+ end else
+ if j > 0 then Result := -1 else
+ if k > 0 then Result := 1;
+ Break;
+ end;
+ if Result = -2 then Result := CompareText(Str1, Str2);
+ end else Result := CompareText(Str1, Str2);
+end;
+
+(********************************************************************************************************************************)
+function LVCompareItems(Data1, Data2: PDataItem; const Ascending: boolean; const SortColumnID: integer): integer;
+var mp: integer;
+ s1, s2, s3, s4: string;
+begin
+ if Ascending then mp := 1 else mp := -1;
+ if Data1^.UpDir then Result := -1*mp else
+ if Data2^.UpDir then Result := 1*mp else
+ if Data1^.IsDir and (not Data2^.IsDir) then Result := -1*mp else
+ if Data2^.IsDir and (not Data1^.IsDir) then Result := 1*mp else
+ case SortColumnID of
+ 1, 2 : begin
+ Result := CompareTextsEx(Data1^.AName, Data2^.AName);
+ if Data1^.IsDir and Data2^.IsDir then Result := Result * mp;
+ end;
+ 3 : if Data1^.IsDir and Data2^.IsDir then Result := CompareTextsEx(Data1^.AName, Data2^.AName)*mp else begin
+ SeparateExt(String(Data1^.AName), s1, s2);
+ SeparateExt(String(Data2^.AName), s3, s4);
+ if ANSIUpperCase(s2) <> ANSIUpperCase(s4)
+ then Result := CompareTextsEx(PChar(s2), PChar(s4))
+ else Result := CompareTextsEx(PChar(s1), PChar(s3));
+ end;
+ 4 : if Data1^.IsDir and Data2^.IsDir then Result := CompareTextsEx(Data1^.AName, Data2^.AName)*mp else
+ if Data1^.Size > Data2^.Size then Result := -1 else
+ if Data1^.Size < Data2^.Size then Result := 1 else
+ Result := CompareTextsEx(Data1^.AName, Data2^.AName);
+ 5, 6 : if Data1^.IsDir and Data2^.IsDir then Result := CompareTextsEx(Data1^.AName, Data2^.AName)*mp else
+ if Data1^.ModifyTime > Data2^.ModifyTime then Result := -1 else
+ if Data1^.ModifyTime < Data2^.ModifyTime then Result := 1 else
+ Result := CompareTextsEx(Data1^.AName, Data2^.AName);
+ 7 : if Data1^.IsDir and Data2^.IsDir then Result := CompareTextsEx(Data1^.AName, Data2^.AName)*mp else
+ if Frac(Data1^.ModifyTime) > Frac(Data2^.ModifyTime) then Result := -1 else
+ if Frac(Data1^.ModifyTime) < Frac(Data2^.ModifyTime) then Result := 1 else
+ Result := CompareTextsEx(Data1^.AName, Data2^.AName);
+ 8 : if Data1^.IsDir and Data2^.IsDir then Result := CompareTextsEx(Data1^.AName, Data2^.AName)*mp else
+ if Data1^.UID > Data2^.UID then Result := -1 else
+ if Data1^.UID < Data2^.UID then Result := 1 else
+ Result := CompareTextsEx(Data1^.AName, Data2^.AName);
+ 9 : if Data1^.IsDir and Data2^.IsDir then Result := CompareTextsEx(Data1^.AName, Data2^.AName)*mp else
+ if Data1^.GID > Data2^.GID then Result := -1 else
+ if Data1^.GID < Data2^.GID then Result := 1 else
+ Result := CompareTextsEx(Data1^.AName, Data2^.AName);
+ 10 : if Data1^.IsDir and Data2^.IsDir then Result := CompareTextsEx(Data1^.AName, Data2^.AName)*mp else
+ if Data1^.Mode > Data2^.Mode then Result := -1 else
+ if Data1^.Mode < Data2^.Mode then Result := 1 else
+ Result := CompareTextsEx(Data1^.AName, Data2^.AName);
+ else Result := 0;
+ end;
+end;
+
+(********************************************************************************************************************************)
+procedure SortDataList(var List: TList; const Ascending: boolean; const SortColumnID: integer);
+var AscCorr: integer;
+
+ procedure QuickSort(iLo, iHi: Integer);
+ var Lo, Hi : Integer;
+ Mid, x: Pointer;
+ begin
+ Lo := iLo;
+ Hi := iHi;
+ Mid := List[(Lo + Hi) div 2];
+ repeat
+ while LVCompareItems(List[Lo], Mid, Ascending, SortColumnID)*AscCorr < 0 do Inc(Lo);
+ while LVCompareItems(List[Hi], Mid, Ascending, SortColumnID)*AscCorr > 0 do Dec(Hi);
+ if Lo <= Hi then begin
+ x := List[Lo];
+ List[Lo] := List[Hi];
+ List[Hi] := x;
+ Inc(Lo);
+ Dec(Hi);
+ end;
+ until Lo > Hi;
+ if Hi > iLo then QuickSort(iLo, Hi);
+ if Lo < iHi then QuickSort(Lo, iHi);
+ end;
+
+begin
+ AscCorr := 2*Ord(Ascending) - 1;
+ QuickSort(0, List.Count - 1);
+end;
+
+(********************************************************************************************************************************)
+{$IFDEF CPU64}
+function CRC32(CRC: LongWord; Data: Pointer; DataSize: LongWord): LongWord;
+begin
+ Result := 0;
+end;
+{$ELSE}
+function CRC32(CRC: LongWord; Data: Pointer; DataSize: LongWord): LongWord; assembler;
+asm
+ AND EDX,EDX
+ JZ @Exit
+ AND ECX,ECX
+ JLE @Exit
+ PUSH EBX
+ PUSH EDI
+ XOR EBX,EBX
+ LEA EDI,CS:[OFFSET @CRC32]
+@Start: MOV BL,AL
+ SHR EAX,8
+ XOR BL,[EDX]
+ XOR EAX,[EDI + EBX * 4]
+ INC EDX
+ DEC ECX
+ JNZ @Start
+ POP EDI
+ POP EBX
+@Exit: RET
+ DB 0, 0, 0, 0, 0 // Align Table
+@CRC32: DD 000000000h, 077073096h, 0EE0E612Ch, 0990951BAh
+ DD 0076DC419h, 0706AF48Fh, 0E963A535h, 09E6495A3h
+ DD 00EDB8832h, 079DCB8A4h, 0E0D5E91Eh, 097D2D988h
+ DD 009B64C2Bh, 07EB17CBDh, 0E7B82D07h, 090BF1D91h
+ DD 01DB71064h, 06AB020F2h, 0F3B97148h, 084BE41DEh
+ DD 01ADAD47Dh, 06DDDE4EBh, 0F4D4B551h, 083D385C7h
+ DD 0136C9856h, 0646BA8C0h, 0FD62F97Ah, 08A65C9ECh
+ DD 014015C4Fh, 063066CD9h, 0FA0F3D63h, 08D080DF5h
+ DD 03B6E20C8h, 04C69105Eh, 0D56041E4h, 0A2677172h
+ DD 03C03E4D1h, 04B04D447h, 0D20D85FDh, 0A50AB56Bh
+ DD 035B5A8FAh, 042B2986Ch, 0DBBBC9D6h, 0ACBCF940h
+ DD 032D86CE3h, 045DF5C75h, 0DCD60DCFh, 0ABD13D59h
+ DD 026D930ACh, 051DE003Ah, 0C8D75180h, 0BFD06116h
+ DD 021B4F4B5h, 056B3C423h, 0CFBA9599h, 0B8BDA50Fh
+ DD 02802B89Eh, 05F058808h, 0C60CD9B2h, 0B10BE924h
+ DD 02F6F7C87h, 058684C11h, 0C1611DABh, 0B6662D3Dh
+ DD 076DC4190h, 001DB7106h, 098D220BCh, 0EFD5102Ah
+ DD 071B18589h, 006B6B51Fh, 09FBFE4A5h, 0E8B8D433h
+ DD 07807C9A2h, 00F00F934h, 09609A88Eh, 0E10E9818h
+ DD 07F6A0DBBh, 0086D3D2Dh, 091646C97h, 0E6635C01h
+ DD 06B6B51F4h, 01C6C6162h, 0856530D8h, 0F262004Eh
+ DD 06C0695EDh, 01B01A57Bh, 08208F4C1h, 0F50FC457h
+ DD 065B0D9C6h, 012B7E950h, 08BBEB8EAh, 0FCB9887Ch
+ DD 062DD1DDFh, 015DA2D49h, 08CD37CF3h, 0FBD44C65h
+ DD 04DB26158h, 03AB551CEh, 0A3BC0074h, 0D4BB30E2h
+ DD 04ADFA541h, 03DD895D7h, 0A4D1C46Dh, 0D3D6F4FBh
+ DD 04369E96Ah, 0346ED9FCh, 0AD678846h, 0DA60B8D0h
+ DD 044042D73h, 033031DE5h, 0AA0A4C5Fh, 0DD0D7CC9h
+ DD 05005713Ch, 0270241AAh, 0BE0B1010h, 0C90C2086h
+ DD 05768B525h, 0206F85B3h, 0B966D409h, 0CE61E49Fh
+ DD 05EDEF90Eh, 029D9C998h, 0B0D09822h, 0C7D7A8B4h
+ DD 059B33D17h, 02EB40D81h, 0B7BD5C3Bh, 0C0BA6CADh
+ DD 0EDB88320h, 09ABFB3B6h, 003B6E20Ch, 074B1D29Ah
+ DD 0EAD54739h, 09DD277AFh, 004DB2615h, 073DC1683h
+ DD 0E3630B12h, 094643B84h, 00D6D6A3Eh, 07A6A5AA8h
+ DD 0E40ECF0Bh, 09309FF9Dh, 00A00AE27h, 07D079EB1h
+ DD 0F00F9344h, 08708A3D2h, 01E01F268h, 06906C2FEh
+ DD 0F762575Dh, 0806567CBh, 0196C3671h, 06E6B06E7h
+ DD 0FED41B76h, 089D32BE0h, 010DA7A5Ah, 067DD4ACCh
+ DD 0F9B9DF6Fh, 08EBEEFF9h, 017B7BE43h, 060B08ED5h
+ DD 0D6D6A3E8h, 0A1D1937Eh, 038D8C2C4h, 04FDFF252h
+ DD 0D1BB67F1h, 0A6BC5767h, 03FB506DDh, 048B2364Bh
+ DD 0D80D2BDAh, 0AF0A1B4Ch, 036034AF6h, 041047A60h
+ DD 0DF60EFC3h, 0A867DF55h, 0316E8EEFh, 04669BE79h
+ DD 0CB61B38Ch, 0BC66831Ah, 0256FD2A0h, 05268E236h
+ DD 0CC0C7795h, 0BB0B4703h, 0220216B9h, 05505262Fh
+ DD 0C5BA3BBEh, 0B2BD0B28h, 02BB45A92h, 05CB36A04h
+ DD 0C2D7FFA7h, 0B5D0CF31h, 02CD99E8Bh, 05BDEAE1Dh
+ DD 09B64C2B0h, 0EC63F226h, 0756AA39Ch, 0026D930Ah
+ DD 09C0906A9h, 0EB0E363Fh, 072076785h, 005005713h
+ DD 095BF4A82h, 0E2B87A14h, 07BB12BAEh, 00CB61B38h
+ DD 092D28E9Bh, 0E5D5BE0Dh, 07CDCEFB7h, 00BDBDF21h
+ DD 086D3D2D4h, 0F1D4E242h, 068DDB3F8h, 01FDA836Eh
+ DD 081BE16CDh, 0F6B9265Bh, 06FB077E1h, 018B74777h
+ DD 088085AE6h, 0FF0F6A70h, 066063BCAh, 011010B5Ch
+ DD 08F659EFFh, 0F862AE69h, 0616BFFD3h, 0166CCF45h
+ DD 0A00AE278h, 0D70DD2EEh, 04E048354h, 03903B3C2h
+ DD 0A7672661h, 0D06016F7h, 04969474Dh, 03E6E77DBh
+ DD 0AED16A4Ah, 0D9D65ADCh, 040DF0B66h, 037D83BF0h
+ DD 0A9BCAE53h, 0DEBB9EC5h, 047B2CF7Fh, 030B5FFE9h
+ DD 0BDBDF21Ch, 0CABAC28Ah, 053B39330h, 024B4A3A6h
+ DD 0BAD03605h, 0CDD70693h, 054DE5729h, 023D967BFh
+ DD 0B3667A2Eh, 0C4614AB8h, 05D681B02h, 02A6F2B94h
+ DD 0B40BBE37h, 0C30C8EA1h, 05A05DF1Bh, 02D02EF8Dh
+ DD 074726F50h, 0736E6F69h, 0706F4320h, 067697279h
+ DD 028207468h, 031202963h, 020393939h, 048207962h
+ DD 06E656761h, 064655220h, 06E616D64h, 06FBBA36Eh
+end;
+{$ENDIF}
+(********************************************************************************************************************************)
+constructor THash_MD5.Create;
+begin
+ Init;
+end;
+
+function THash_MD5.DigestKey: string;
+type TCharArray = array[1..40] of char;
+ PCharArray = ^TCharArray;
+begin
+ Result := Copy(PCharArray(@FDigest)^, 1, 16);
+end;
+
+procedure THash_MD5.Init;
+begin
+ FillChar(FBuffer, SizeOf(FBuffer), 0);
+ FDigest[0] := $67452301;
+ FDigest[1] := $EFCDAB89;
+ FDigest[2] := $98BADCFE;
+ FDigest[3] := $10325476;
+ FDigest[4] := $C3D2E1F0;
+ FCount := 0;
+end;
+
+{$R-}
+procedure THash_MD5.Done;
+var
+ I: Integer;
+ S: Int64;
+begin
+ try
+ I := FCount and $3F;
+ FBuffer[I] := $80;
+ Inc(I);
+ if I > 64 - 8 then
+ begin
+ FillChar(FBuffer[I], 64 - I, 0);
+ Transform(@FBuffer);
+ I := 0;
+ end;
+ FillChar(FBuffer[I], 64 - I, 0);
+ S := Int64(FCount) * 8;
+ Move(S, FBuffer[64 - 8], SizeOf(S));
+ Transform(@FBuffer);
+ FillChar(FBuffer, SizeOf(FBuffer), 0);
+ except
+ end;
+end;
+
+procedure THash_MD5.Calc(const Data; DataSize: Integer);
+var
+ Index: Integer;
+ P: PChar;
+begin
+ if DataSize <= 0 then Exit;
+ Index := FCount and $3F;
+ Inc(FCount, DataSize);
+ if Index > 0 then
+ begin
+ if DataSize < 64 - Index then
+ begin
+ Move(Data, FBuffer[Index], DataSize);
+ Exit;
+ end;
+ Move(Data, FBuffer[Index], 64 - Index);
+ Transform(@FBuffer);
+ Index := 64 - Index;
+ Dec(DataSize, Index);
+ end;
+ P := @TByteArray(Data)[Index];
+ Inc(Index, DataSize and not $3F);
+ while DataSize >= 64 do
+ begin
+ Transform(Pointer(P));
+ Inc(P, 64);
+ Dec(DataSize, 64);
+ end;
+ Move(TByteArray(Data)[Index], FBuffer, DataSize);
+end;
+{$R+}
+
+function THash_MD5.GetKeyStrH: string;
+const HexTable = '0123456789ABCDEF';
+var i: integer;
+ Value: string;
+begin
+ Result := '';
+ Value := DigestKey;
+ if Value = '' then Exit;
+ for i := 1 to Length(Value) do
+ Result := Result + HexTable[Byte(Value[i]) shr 4 + 1] + HexTable[Byte(Value[i]) and $F + 1];
+end;
+
+{$IFDEF CPU64}
+function THash_MD5.TestVector: Pointer;
+begin
+ Result := nil;
+end;
+{$ELSE}
+function THash_MD5.TestVector: Pointer;
+asm
+ MOV EAX,OFFSET @Vector
+ RET
+@Vector: DB 03Eh,0D8h,034h,08Ch,0D2h,0A4h,045h,0D6h
+ DB 075h,05Dh,04Bh,0C9h,0FEh,0DCh,0C2h,0C6h
+end;
+{$ENDIF}
+
+{$Q-}
+procedure THash_MD5.Transform(Buffer: PIntArray);
+var
+ A, B, C, D: LongWord;
+begin
+ A := FDigest[0];
+ B := FDigest[1];
+ C := FDigest[2];
+ D := FDigest[3];
+
+ Inc(A, Buffer[ 0] + $D76AA478 + (D xor (B and (C xor D)))); A := A shl 7 or A shr 25 + B;
+ Inc(D, Buffer[ 1] + $E8C7B756 + (C xor (A and (B xor C)))); D := D shl 12 or D shr 20 + A;
+ Inc(C, Buffer[ 2] + $242070DB + (B xor (D and (A xor B)))); C := C shl 17 or C shr 15 + D;
+ Inc(B, Buffer[ 3] + $C1BDCEEE + (A xor (C and (D xor A)))); B := B shl 22 or B shr 10 + C;
+ Inc(A, Buffer[ 4] + $F57C0FAF + (D xor (B and (C xor D)))); A := A shl 7 or A shr 25 + B;
+ Inc(D, Buffer[ 5] + $4787C62A + (C xor (A and (B xor C)))); D := D shl 12 or D shr 20 + A;
+ Inc(C, Buffer[ 6] + $A8304613 + (B xor (D and (A xor B)))); C := C shl 17 or C shr 15 + D;
+ Inc(B, Buffer[ 7] + $FD469501 + (A xor (C and (D xor A)))); B := B shl 22 or B shr 10 + C;
+ Inc(A, Buffer[ 8] + $698098D8 + (D xor (B and (C xor D)))); A := A shl 7 or A shr 25 + B;
+ Inc(D, Buffer[ 9] + $8B44F7AF + (C xor (A and (B xor C)))); D := D shl 12 or D shr 20 + A;
+ Inc(C, Buffer[10] + $FFFF5BB1 + (B xor (D and (A xor B)))); C := C shl 17 or C shr 15 + D;
+ Inc(B, Buffer[11] + $895CD7BE + (A xor (C and (D xor A)))); B := B shl 22 or B shr 10 + C;
+ Inc(A, Buffer[12] + $6B901122 + (D xor (B and (C xor D)))); A := A shl 7 or A shr 25 + B;
+ Inc(D, Buffer[13] + $FD987193 + (C xor (A and (B xor C)))); D := D shl 12 or D shr 20 + A;
+ Inc(C, Buffer[14] + $A679438E + (B xor (D and (A xor B)))); C := C shl 17 or C shr 15 + D;
+ Inc(B, Buffer[15] + $49B40821 + (A xor (C and (D xor A)))); B := B shl 22 or B shr 10 + C;
+
+ Inc(A, Buffer[ 1] + $F61E2562 + (C xor (D and (B xor C)))); A := A shl 5 or A shr 27 + B;
+ Inc(D, Buffer[ 6] + $C040B340 + (B xor (C and (A xor B)))); D := D shl 9 or D shr 23 + A;
+ Inc(C, Buffer[11] + $265E5A51 + (A xor (B and (D xor A)))); C := C shl 14 or C shr 18 + D;
+ Inc(B, Buffer[ 0] + $E9B6C7AA + (D xor (A and (C xor D)))); B := B shl 20 or B shr 12 + C;
+ Inc(A, Buffer[ 5] + $D62F105D + (C xor (D and (B xor C)))); A := A shl 5 or A shr 27 + B;
+ Inc(D, Buffer[10] + $02441453 + (B xor (C and (A xor B)))); D := D shl 9 or D shr 23 + A;
+ Inc(C, Buffer[15] + $D8A1E681 + (A xor (B and (D xor A)))); C := C shl 14 or C shr 18 + D;
+ Inc(B, Buffer[ 4] + $E7D3FBC8 + (D xor (A and (C xor D)))); B := B shl 20 or B shr 12 + C;
+ Inc(A, Buffer[ 9] + $21E1CDE6 + (C xor (D and (B xor C)))); A := A shl 5 or A shr 27 + B;
+ Inc(D, Buffer[14] + $C33707D6 + (B xor (C and (A xor B)))); D := D shl 9 or D shr 23 + A;
+ Inc(C, Buffer[ 3] + $F4D50D87 + (A xor (B and (D xor A)))); C := C shl 14 or C shr 18 + D;
+ Inc(B, Buffer[ 8] + $455A14ED + (D xor (A and (C xor D)))); B := B shl 20 or B shr 12 + C;
+ Inc(A, Buffer[13] + $A9E3E905 + (C xor (D and (B xor C)))); A := A shl 5 or A shr 27 + B;
+ Inc(D, Buffer[ 2] + $FCEFA3F8 + (B xor (C and (A xor B)))); D := D shl 9 or D shr 23 + A;
+ Inc(C, Buffer[ 7] + $676F02D9 + (A xor (B and (D xor A)))); C := C shl 14 or C shr 18 + D;
+ Inc(B, Buffer[12] + $8D2A4C8A + (D xor (A and (C xor D)))); B := B shl 20 or B shr 12 + C;
+
+ Inc(A, Buffer[ 5] + $FFFA3942 + (B xor C xor D)); A := A shl 4 or A shr 28 + B;
+ Inc(D, Buffer[ 8] + $8771F681 + (A xor B xor C)); D := D shl 11 or D shr 21 + A;
+ Inc(C, Buffer[11] + $6D9D6122 + (D xor A xor B)); C := C shl 16 or C shr 16 + D;
+ Inc(B, Buffer[14] + $FDE5380C + (C xor D xor A)); B := B shl 23 or B shr 9 + C;
+ Inc(A, Buffer[ 1] + $A4BEEA44 + (B xor C xor D)); A := A shl 4 or A shr 28 + B;
+ Inc(D, Buffer[ 4] + $4BDECFA9 + (A xor B xor C)); D := D shl 11 or D shr 21 + A;
+ Inc(C, Buffer[ 7] + $F6BB4B60 + (D xor A xor B)); C := C shl 16 or C shr 16 + D;
+ Inc(B, Buffer[10] + $BEBFBC70 + (C xor D xor A)); B := B shl 23 or B shr 9 + C;
+ Inc(A, Buffer[13] + $289B7EC6 + (B xor C xor D)); A := A shl 4 or A shr 28 + B;
+ Inc(D, Buffer[ 0] + $EAA127FA + (A xor B xor C)); D := D shl 11 or D shr 21 + A;
+ Inc(C, Buffer[ 3] + $D4EF3085 + (D xor A xor B)); C := C shl 16 or C shr 16 + D;
+ Inc(B, Buffer[ 6] + $04881D05 + (C xor D xor A)); B := B shl 23 or B shr 9 + C;
+ Inc(A, Buffer[ 9] + $D9D4D039 + (B xor C xor D)); A := A shl 4 or A shr 28 + B;
+ Inc(D, Buffer[12] + $E6DB99E5 + (A xor B xor C)); D := D shl 11 or D shr 21 + A;
+ Inc(C, Buffer[15] + $1FA27CF8 + (D xor A xor B)); C := C shl 16 or C shr 16 + D;
+ Inc(B, Buffer[ 2] + $C4AC5665 + (C xor D xor A)); B := B shl 23 or B shr 9 + C;
+
+ Inc(A, Buffer[ 0] + $F4292244 + (C xor (B or not D))); A := A shl 6 or A shr 26 + B;
+ Inc(D, Buffer[ 7] + $432AFF97 + (B xor (A or not C))); D := D shl 10 or D shr 22 + A;
+ Inc(C, Buffer[14] + $AB9423A7 + (A xor (D or not B))); C := C shl 15 or C shr 17 + D;
+ Inc(B, Buffer[ 5] + $FC93A039 + (D xor (C or not A))); B := B shl 21 or B shr 11 + C;
+ Inc(A, Buffer[12] + $655B59C3 + (C xor (B or not D))); A := A shl 6 or A shr 26 + B;
+ Inc(D, Buffer[ 3] + $8F0CCC92 + (B xor (A or not C))); D := D shl 10 or D shr 22 + A;
+ Inc(C, Buffer[10] + $FFEFF47D + (A xor (D or not B))); C := C shl 15 or C shr 17 + D;
+ Inc(B, Buffer[ 1] + $85845DD1 + (D xor (C or not A))); B := B shl 21 or B shr 11 + C;
+ Inc(A, Buffer[ 8] + $6FA87E4F + (C xor (B or not D))); A := A shl 6 or A shr 26 + B;
+ Inc(D, Buffer[15] + $FE2CE6E0 + (B xor (A or not C))); D := D shl 10 or D shr 22 + A;
+ Inc(C, Buffer[ 6] + $A3014314 + (A xor (D or not B))); C := C shl 15 or C shr 17 + D;
+ Inc(B, Buffer[13] + $4E0811A1 + (D xor (C or not A))); B := B shl 21 or B shr 11 + C;
+ Inc(A, Buffer[ 4] + $F7537E82 + (C xor (B or not D))); A := A shl 6 or A shr 26 + B;
+ Inc(D, Buffer[11] + $BD3AF235 + (B xor (A or not C))); D := D shl 10 or D shr 22 + A;
+ Inc(C, Buffer[ 2] + $2AD7D2BB + (A xor (D or not B))); C := C shl 15 or C shr 17 + D;
+ Inc(B, Buffer[ 9] + $EB86D391 + (D xor (C or not A))); B := B shl 21 or B shr 11 + C;
+
+ Inc(FDigest[0], A);
+ Inc(FDigest[1], B);
+ Inc(FDigest[2], C);
+ Inc(FDigest[3], D);
+end;
+{$Q+}
+(********************************************************************************************************************************)
+
+procedure signal_proc(signal_number: integer); cdecl;
+var pid, status: integer;
+begin
+// !!!!!!!!!! Warning
+// There should be no debug outputs in this function because it probably cause program freezes after fork
+// I mean REALLY NO outputs to console
+
+// DebugMsg(['SIGCHLD signal received']);
+// DebugMsg(['Signal received: ', signal_number]);
+// DebugMsg(['*** Signal received: ', signal_number, ' = ', GetSignalString(signal_number)]);
+ case signal_number of
+{ SIGUSR1: begin
+ DebugMsg(['begin wait']);
+ wait(@status);
+ DebugMsg(['end wait']);
+ ChildExitStatus := status;
+ end;}
+ SIGCHLD, SIGUSR1: begin
+// DebugMsg(['begin wait']);
+// wait(@status);
+ pid := waitpid(-1, @status, WNOHANG);
+// DebugMsg(['**** waitpid result: pid = ', pid, ', status = ', status]);
+// DebugMsg(['end wait']);
+ if signal_number = SIGUSR1 then ChildExitStatus := status;
+ end;
+ end;
+end;
+
+procedure SetupSignals;
+var sigchld_action: __sigaction;
+begin
+ Libc.memset(@sigchld_action, 0, SizeOf(__sigaction));
+ sigchld_action.__sigaction_handler := @signal_proc;
+ sigaction(SIGUSR1, @sigchld_action, nil);
+ sigaction(SIGCHLD, @sigchld_action, nil);
+end;
+
+procedure SetupColors;
+var Color: TGDKColor;
+ LocalListView: TGTKListView;
+begin
+ LocalListView := TGTKListView.Create(Application);
+ try
+ if ConfNormalItemDefaultColors then begin
+ NormalItemGDKColor := GetDefaultTextColor(LocalListView, GTK_STATE_NORMAL);
+ NormalItemGDKBackground := GetDefaultBaseColor(LocalListView, GTK_STATE_NORMAL);
+ end else begin
+ StringToGDKColor(ConfNormalItemFGColor, Color);
+ NormalItemGDKColor := GDKColorToPGdkColor(Color);
+ StringToGDKColor(ConfNormalItemBGColor, Color);
+ NormalItemGDKBackground := GDKColorToPGdkColor(Color);
+ end;
+ if ConfCursorDefaultColors then begin
+ ActiveItemGDKColor := GetDefaultTextColor(LocalListView, GTK_STATE_SELECTED);
+ ActiveItemGDKBackground := GetDefaultBaseColor(LocalListView, GTK_STATE_SELECTED);
+ end else begin
+ StringToGDKColor(ConfActiveItemFGColor, Color);
+ ActiveItemGDKColor := GDKColorToPGdkColor(Color);
+ StringToGDKColor(ConfActiveItemBGColor, Color);
+ ActiveItemGDKBackground := GDKColorToPGdkColor(Color);
+ end;
+ if ConfInactiveItemDefaultColors then begin
+ InactiveItemGDKColor := GetDefaultTextColor(LocalListView, GTK_STATE_ACTIVE);
+ InactiveItemGDKBackground := GetDefaultBaseColor(LocalListView, GTK_STATE_ACTIVE);
+ end else begin
+ StringToGDKColor(ConfInactiveItemFGColor, Color);
+ InactiveItemGDKColor := GDKColorToPGdkColor(Color);
+ StringToGDKColor(ConfInactiveItemBGColor, Color);
+ InactiveItemGDKBackground := GDKColorToPGdkColor(Color);
+ end;
+ StringToGDKColor(ConfSelectedItemFGColor, Color);
+ SelectedItemGDKColor := GDKColorToPGdkColor(Color);
+ StringToGDKColor(ConfDotFileItemFGColor, Color);
+ DotFileItemGDKColor := GDKColorToPGdkColor(Color);
+ StringToGDKColor(ConfLinkItemFGColor, Color);
+ LinkItemGDKColor := GDKColorToPGdkColor(Color);
+ try
+ InactiveItemBGColorNum := $FF + (InactiveItemGDKBackground^.red div 256) shl 24
+ + (InactiveItemGDKBackground^.green div 256) shl 16
+ + (InactiveItemGDKBackground^.blue div 256) shl 8;
+ except InactiveItemBGColorNum := $D0D0D0FF; end;
+ finally
+ LocalListView.Free;
+ end;
+end;
+
+procedure ReportGTKVersion;
+begin
+ if Application.GTKVersion_2_8_0_Up then DebugMsg(['Using GTK+ version >= 2.8.0']) else
+ if Application.GTKVersion_2_6_0_Up then DebugMsg(['Using GTK+ version >= 2.6.0']) else
+ if Application.GTKVersion_2_4_0_Up then DebugMsg(['Using GTK+ version >= 2.4.0']) else
+ if Application.GTKVersion_2_2_0_Up then DebugMsg(['Using GTK+ version >= 2.2.0']) else
+ if Application.GTKVersion_2_0_5_Up then DebugMsg(['Using GTK+ version >= 2.0.5']) else
+ DebugMsg(['Using GTK+ version < 2.0.5']);
+end;
+
+
+(********************************************************************************************************************************)
+var InternalLockVar: integer;
+procedure InternalLock;
+begin
+ Inc(InternalLockVar);
+ DebugMsg(['Lock']);
+end;
+
+procedure InternalUnLock;
+begin
+ Dec(InternalLockVar);
+ if InternalLockVar < 0 then InternalLockVar := 0;
+ DebugMsg(['Unlock']);
+end;
+
+function InternalLockUnlocked: boolean;
+begin
+ Result := InternalLockVar = 0;
+end;
+
+procedure InternalLockInit(Locked: boolean);
+begin
+ InternalLockVar := Ord(Locked);
+end;
+
+
+(********************************************************************************************************************************)
+procedure GetFirstLastPanelColumn(var FirstColumn, LastColumn: integer);
+var i: integer;
+begin
+ FirstColumn := 1;
+ LastColumn := ConstNumPanelColumns;
+ for i := 1 to ConstNumPanelColumns do
+ if ConfColumnVisible[i] then begin
+ FirstColumn := i;
+ Break;
+ end;
+ for i := ConstNumPanelColumns downto 1 do
+ if ConfColumnVisible[i] then begin
+ LastColumn := i;
+ Break;
+ end;
+end;
+
+(********************************************************************************************************************************)
+
+
+
+
+(********************************************************************************************************************************)
+{$IFDEF __FPC__}
+function StrToDateDef(const S: string; const Default: TDateTime): TDateTime;
+begin
+ try
+ Result := StrToDate(S);
+ except
+ Result := Default;
+ end;
+end;
+
+
+function UnixToDateTime(const AValue: Int64): TDateTime;
+begin
+ Result := AValue / SecsPerDay + UnixDateDelta;
+end;
+{$ENDIF}
+
+(********************************************************************************************************************************)
+procedure SaveItemToHistory(s: string; History: TStringList);
+var i: integer;
+begin
+ s:= Trim(s);
+ if Length(s) > 0 then begin
+ if History.IndexOf(s) > -1 then
+ History.Delete(History.IndexOf(s));
+ History.Insert(0, s);
+ if History.Count > ConfNumHistoryItems then
+ for i := History.Count downto ConfNumHistoryItems do
+ History.Delete(i - 1);
+ end;
+end;
+
+
+(********************************************************************************************************************************)
+
+
+
+
+
+
+
+
+
+
+initialization
+ InternalLockInit(True);
+ SetupSignals;
+ AppPath := IncludeTrailingPathDelimiter(GetHomePath);
+ IconPath := IncludeTrailingPathDelimiter(GetHomePath);
+end.
diff --git a/UDirDelete.pas b/UDirDelete.pas
new file mode 100644
index 0000000..0b9bf0a
--- /dev/null
+++ b/UDirDelete.pas
@@ -0,0 +1,100 @@
+(*
+ Tux Commander - UDirDelete - Question dialog and related funcions
+ Copyright (C) 2004 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit UDirDelete;
+
+interface
+
+uses
+ SysUtils, Types, Classes, Variants, GTKControls, GTKForms, GTKStdCtrls, GTKExtCtrls, GTKConsts;
+
+type
+ TFDirDelete = class(TGTKDialog)
+ Label1, Label2, Label3: TGTKLabel;
+ procedure FormCreate(Sender: TObject); override;
+ procedure FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+ public
+ procedure AddButtons(Sel: integer);
+ end;
+
+var
+ FDirDelete: TFDirDelete;
+
+implementation
+
+uses ULocale;
+
+
+procedure TFDirDelete.FormCreate(Sender: TObject);
+begin
+ WindowPosition := wpCenter;
+ Caption := LANGRemoveDirectory;
+ Label1 := TGTKLabel.Create(Self);
+ Label1.Caption := 'The directory /tmp is not empty!';
+ Label2 := TGTKLabel.Create(Self);
+ Label2.Caption := LANGDoYouWantToDeleteItWithAllItsFilesAndSubdirectories;
+ Label3 := TGTKLabel.Create(Self);
+ Label3.Visible := False;
+ ClientArea.AddControlEx(Label1, True, True, 0);
+ ClientArea.AddControlEx(Label2, True, True, 0);
+ ClientArea.AddControlEx(Label3, True, True, 0);
+ OnKeyDown := FormKeyDown;
+end;
+
+procedure TFDirDelete.AddButtons(Sel: integer);
+begin
+ case Sel of
+ 1 : begin
+ AddButton(LANGSkipButton_Caption, 1);
+ AddButton(LANGSkipAllButton_Caption, 3);
+ AddButton(LANGRetry, 2);
+ AddButton(LANGCancel, 0);
+ end;
+ 2 : begin
+ AddButton(LANGRetry, 1);
+ AddButton(LANGCancel, 0);
+ end;
+ 3 : begin
+ AddButton(LANGSkipButton_Caption, 1);
+ AddButton(LANGSkipAllButton_Caption, 3);
+ AddButton(LANGIgnoreButton_Caption, 2);
+ AddButton(LANGCancel, 0);
+ end;
+ 4 : begin
+ AddButton(LANGDeleteButton_Caption, 1);
+ AddButton(LANGAll, 2);
+ AddButton(LANGSkipButton_Caption, 3);
+ AddButton(LANGCancel, 0);
+ end;
+ end;
+end;
+
+procedure TFDirDelete.FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+begin
+ case Key of
+ GDK_ESCAPE: ModalResult := TMessageButton(255);
+ end;
+end;
+
+
+
+
+end.
+
+
diff --git a/UEngines.pas b/UEngines.pas
new file mode 100644
index 0000000..0541316
--- /dev/null
+++ b/UEngines.pas
@@ -0,0 +1,1140 @@
+(*
+ Tux Commander - UEngines - Basic engines (abstract, local)
+ Copyright (C) 2007 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit UEngines;
+
+interface
+
+uses glib2, gdk2, Classes, Libc;
+
+
+const ERRException = -1;
+ ERRNoAccess = -2;
+ ERRCreateLink = -3;
+ ERRCopyMove = -4;
+ ERRRemove = -5;
+ ERRMkDIr = -6;
+
+ omRead = 0;
+ omWrite = 1;
+ omAppend = 2;
+
+ ConfDefaultDirCreationMask = 755;
+
+type
+ PDataItem = ^TDataItem;
+ TDataItem = record
+ AName, LnkPointTo: PChar;
+ ColumnData: array[0..9] of PChar;
+ Size: Int64;
+ UpDir: boolean;
+ Mode, UID, GID: Cardinal;
+ IsDir, IsLnk, IsBlk, IsChr, IsFIFO, IsSock, Selected, IsDotFile: boolean;
+ ModifyTime: TDateTime;
+ Icon: Pointer;
+ ItemColor: PGdkColor;
+ end;
+
+ PDataItemSL = ^TDataItemSL;
+ TDataItemSL = record
+ Stage1: boolean;
+ AName, LnkPointTo, ADestination: PChar;
+ Size: Int64;
+ Mode, UID, GID: Cardinal;
+ IsDir, IsLnk, ForceMove, IsOnRO, IsExecutable: boolean;
+ ModifyTime: TDateTime;
+ Level: word;
+ atime, mtime: Int64;
+ end;
+
+ TEngineProgressFunc = function (Sender: Pointer; BytesDone: Int64): boolean; cdecl; // Return False to break the copy process
+ TEngineErrorFunc = function (Sender: Pointer; ErrorType, ErrorNum: integer; FileName: string): boolean; cdecl; // Return
+ TEngineFileDes = pointer;
+
+ TPanelEngine = class
+ private
+ BreakProcessingType: integer;
+ public
+ ParentEngine: TPanelEngine;
+ LastHighlightItem, SavePath: string;
+ constructor Create;
+ destructor Destroy; override;
+// function GetListing(var List: PGSList): integer; virtual; abstract; // Returns errorcode
+ function GetListing(var List: TList; const AddDotFiles: boolean): integer; overload; virtual; abstract; // Returns errorcode
+ function GetListing(var List: TList; const AddDotFiles: boolean; APath: string): integer; overload; virtual; abstract; // Returns errorcode
+ function ChangeDir(const NewPath: string; const ShowProgress: boolean = True): integer; virtual; abstract; // Returns errorcode
+ function ExplicitChDir(const NewPath: string): integer; virtual; abstract; // Returns errorcode
+ function GetFileSystemSize: Int64; overload; virtual; abstract;
+ function GetFileSystemSize(const APath: string): Int64; overload; virtual; abstract;
+ function GetFileSystemFree: Int64; overload; virtual; abstract;
+ function GetFileSystemFree(const APath: string): Int64; overload; virtual; abstract;
+ function MakeDir(const NewDir: string): integer; virtual; abstract; // Returns errorcode
+ function GetDirSize(APath: string): Int64; virtual; abstract; // Returns size or 0 if fails
+ function Remove(APath: string): integer; virtual; abstract; // Returns errorcode
+ procedure FillDirFiles(APath: string; List: TList; ALevel: word); virtual; abstract;
+ function GetFileInfoSL(APath: string): PDataItemSL; virtual; abstract;
+ function FileExists(const FileName: string; const Use_lstat: boolean = False): Boolean; virtual; abstract;
+ function DirectoryExists(const FileName: string; const Use_lstat: boolean = False): Boolean; virtual; abstract;
+ function MakeSymLink(const NewFileName, PointTo: string): integer; virtual; abstract; // Returns errorcode
+ function Chmod(const FileName: string; const Mode: integer): integer; virtual; abstract; // Returns errorcode
+ function Chown(const FileName: string; const UID, GID: integer): integer; virtual; abstract; // Returns errorcode
+ procedure BreakProcessing(ProcessingKind: integer); virtual; abstract; // 1 = GetDirSize, 2 = GetListing
+ function RenameFile(SourceFile, DestFile: string): integer; virtual; abstract; // Returns errorcode
+ function ChangeTimes(APath: string; mtime, atime: Int64): integer; virtual; abstract; // Returns errorcode
+ procedure GetFileSystemInfo(const APath: string; var FSSize, FSFree: Int64; var FSName: string); virtual; abstract;
+ function OpenFile(const APath: string; Mode: integer; var Error: integer): TEngineFileDes; virtual; abstract; // Returns filedescriptor
+ function ReadFile(const FileDescriptor: TEngineFileDes; Buffer: Pointer; ABlockSize: integer; var Error: integer): integer; virtual; abstract; // Returns number of bytes read
+ function WriteFile(const FileDescriptor: TEngineFileDes; Buffer: Pointer; BytesCount: integer; var Error: integer): integer; virtual; abstract; // Returns number of bytes written
+ function CloseFile(const FileDescriptor: TEngineFileDes): integer; virtual; abstract; // Returns errorcode
+ function FileSeek(const FileDescriptor: TEngineFileDes; const AbsoluteOffset: Int64; var Error: integer): Int64; virtual; abstract; // Returns errorcode
+ function IsOnROMedium(const FileName: string): boolean; virtual; abstract;
+ function FileCanRun(const FileName: string): boolean; virtual; abstract;
+ function GetPath: string; virtual; abstract;
+ procedure SetPath(Value: string); virtual; abstract;
+ function GetPrefix: string; virtual; abstract;
+ function Login(Username, Password: string): integer; virtual; abstract;
+
+ // Copy-related routines
+ function GetBlockSize: guint32; virtual; abstract;
+ procedure SetBlockSize(Value: guint32); virtual; abstract;
+ function CopyFileIn(Sender: Pointer; SourceFile, DestFile: string; ProgressFunc: TEngineProgressFunc; ErrorFunc: TEngineErrorFunc; Append: boolean): boolean; virtual; abstract; // returns True if file is successfully copied
+ function CopyFileOut(Sender: Pointer; SourceFile, DestFile: string; ProgressFunc: TEngineProgressFunc; ErrorFunc: TEngineErrorFunc; Append: boolean): boolean; virtual; abstract; // returns True if file is successfully copied
+ function IsOnSameFS(const Path1, Path2: string): boolean; virtual; abstract;
+ function TwoSameFiles(const Path1, Path2: string): boolean; virtual; abstract;
+ published
+ property Path: string read GetPath write SetPath;
+ property BlockSize: guint32 read GetBlockSize write SetBlockSize;
+ end;
+
+ TLocalTreeEngine = class(TPanelEngine)
+ private
+ FPath: string;
+ FBlockSize: guint32;
+ public
+ constructor Create;
+ destructor Destroy; override;
+// function GetListing(var List: PGSList): integer; override;
+ function GetListing(var List: TList; const AddDotFiles: boolean): integer; override;
+ function GetListing(var List: TList; const AddDotFiles: boolean; APath: string): integer; override;
+ function ChangeDir(const NewPath: string; const ShowProgress: boolean = True): integer; override;
+ function ExplicitChDir(const NewPath: string): integer; override;
+ function GetFileSystemSize: Int64; override;
+ function GetFileSystemSize(const APath: string): Int64; override;
+ function GetFileSystemFree: Int64; override;
+ function GetFileSystemFree(const APath: string): Int64; override;
+ function MakeDir(const NewDir: string): integer; override;
+ function GetDirSize(APath: string): Int64; override;
+ function Remove(APath: string): integer; override;
+ procedure FillDirFiles(APath: string; List: TList; ALevel: word); override;
+ function GetFileInfoSL(APath: string): PDataItemSL; override;
+ function FileExists(const FileName: string; const Use_lstat: boolean = False): Boolean; override;
+ function DirectoryExists(const FileName: string; const Use_lstat: boolean = False): Boolean; override;
+ function MakeSymLink(const NewFileName, PointTo: string): integer; override;
+ function Chmod(const FileName: string; const Mode: integer): integer; override;
+ function Chown(const FileName: string; const UID, GID: integer): integer; override;
+ procedure BreakProcessing(ProcessingKind: integer); override;
+ function RenameFile(SourceFile, DestFile: string): integer; override;
+ function ChangeTimes(APath: string; mtime, atime: Int64): integer; override;
+ procedure GetFileSystemInfo(const APath: string; var FSSize, FSFree: Int64; var FSName: string); override;
+ function OpenFile(const APath: string; Mode: integer; var Error: integer): TEngineFileDes; override;
+ function ReadFile(const FileDescriptor: TEngineFileDes; Buffer: Pointer; ABlockSize: integer; var Error: integer): integer; override;
+ function WriteFile(const FileDescriptor: TEngineFileDes; Buffer: Pointer; BytesCount: integer; var Error: integer): integer; override;
+ function CloseFile(const FileDescriptor: TEngineFileDes): integer; override;
+ function FileSeek(const FileDescriptor: TEngineFileDes; const AbsoluteOffset: Int64; var Error: integer): Int64; override;
+ function IsOnROMedium(const FileName: string): boolean; override;
+ function FileCanRun(const FileName: string): boolean; override;
+ function GetPath: string; override;
+ procedure SetPath(Value: string); override;
+ function GetPrefix: string; override;
+ function Login(Username, Password: string): integer; override;
+
+ function GetBlockSize: guint32; override;
+ procedure SetBlockSize(Value: guint32); override;
+ function CopyFileIn(Sender: Pointer; SourceFile, DestFile: string; ProgressFunc: TEngineProgressFunc; ErrorFunc: TEngineErrorFunc; Append: boolean): boolean; override;
+ function CopyFileOut(Sender: Pointer; SourceFile, DestFile: string; ProgressFunc: TEngineProgressFunc; ErrorFunc: TEngineErrorFunc; Append: boolean): boolean; override;
+ function CopyFile(Sender: Pointer; SourceFile, DestFile: string; ProgressFunc: TEngineProgressFunc; ErrorFunc: TEngineErrorFunc; Append: boolean): boolean;
+ function IsOnSameFS(const Path1, Path2: string): boolean; override;
+ function TwoSameFiles(const Path1, Path2: string): boolean; override;
+ published
+ property Path;
+ property BlockSize;
+ end;
+
+
+procedure FreeDataItem(DataItem: PDataItemSL); overload;
+procedure FreeDataItem(DataItem: PDataItem); overload;
+
+
+implementation
+
+uses SysUtils, UCoreUtils, UConfig, UGlibC_compat;
+
+(********************************************************************************************************************************)
+constructor TPanelEngine.Create;
+begin
+ inherited Create;
+ BreakProcessingType := 0;
+ ParentEngine := nil; // By default it is a top-level engine (local)
+ LastHighlightItem := '';
+end;
+
+destructor TPanelEngine.Destroy;
+begin
+ inherited Destroy;
+end;
+
+(********************************************************************************************************************************)
+constructor TLocalTreeEngine.Create;
+begin
+ inherited Create;
+ FPath := '/';
+ FBlockSize := 65536;
+end;
+
+destructor TLocalTreeEngine.Destroy;
+begin
+ inherited Destroy;
+end;
+
+function TLocalTreeEngine.GetPath: string;
+begin
+ Result := FPath;
+end;
+
+procedure TLocalTreeEngine.SetPath(Value: string);
+begin
+ if Value <> FPath then begin
+ FPath := Value;
+ end;
+end;
+
+function TLocalTreeEngine.GetBlockSize: guint32;
+begin
+ Result := FBlockSize;
+end;
+
+procedure TLocalTreeEngine.SetBlockSize(Value: guint32);
+begin
+ if Value <> FBlockSize then begin
+ FBlockSize := Value;
+ end;
+end;
+
+function TLocalTreeEngine.GetListing(var List: TList; const AddDotFiles: boolean; APath: string): integer;
+var Item : PDataItem;
+ Handle : PDirectoryStream;
+ DirEnt : PDirent64;
+ Buf : PChar;
+// StatBuf : TStatBuf64;
+ StatBuf : PGlibc_stat64;
+ i: integer;
+ LnkBuf : array[0..1000] of char;
+begin
+ Result := 0;
+ try
+ APath := IncludeTrailingPathDelimiter(APath);
+ if Libc.__chdir(PChar(APath)) <> 0 then begin
+ Result := errno;
+ DebugMsg(['*** TLocalTreeEngine.GetListing(APath=', APath, '): chdir error: ', strerror(Result)]);
+ Exit;
+ end;
+ Handle := Libc.opendir(PChar(APath));
+ if not Assigned(Handle) then begin
+ DebugMsg(['*** TLocalTreeEngine.GetListing(APath=', APath, '): opendir() handle == NULL: ', strerror(errno)]);
+ Result := ERRNoAccess;
+ Exit;
+ end;
+ repeat
+// DebugMsg(['x1']);
+ DirEnt := readdir64(Handle);
+// DebugMsg(['x2']);
+ if Assigned(DirEnt) and Assigned(PChar(@DirEnt^.d_name[0])) then begin
+// DebugMsg(['x3']);
+ Buf := Pchar(@DirEnt^.d_name[0]);
+// DebugMsg(['x4']);
+ if (Buf <> '.') and (Buf <> '..') and (DirEnt^.d_name[0] <> #0) and
+ (AddDotFiles or (Length(Buf) = 1) or ((Length(Buf) > 1) and (not ((Buf[0] = '.') and (Buf[1] <> '.'))))) then
+ begin
+ Item := nil;
+// DebugMsg(['x5']);
+ Item := Libc.malloc(SizeOf(TDataItem));
+// DebugMsg(['x6']);
+ Libc.memset(Item, 0, SizeOf(TDataItem));
+// DebugMsg(['x7']);
+ with Item^ do begin
+// DebugMsg(['x8']);
+ AName := nil;
+ LnkPointTo := nil;
+ for i := 0 to Length(ColumnData) - 1 do ColumnData[i] := nil;
+ AName := strdup(Buf);
+// DebugMsg(['x']);
+ StatBuf := Libc.malloc(sizeof(TGlibc_stat64));
+ Libc.memset(StatBuf, 0, sizeof(TGlibc_stat64));
+// DebugMsg(['(II) TLocalTreeEngine.GetListing(APath=', APath, '): lstat(Buf = ', Buf, ')']);
+ if glibc_lstat64(Buf, StatBuf) <> 0 then begin
+ DebugMsg(['*** TLocalTreeEngine.GetListing(APath=', APath, '): Error reading file via lstat64: ', strerror(errno)]);
+ Continue;
+ end;
+ Mode := StatBuf^.st_mode;
+ IsDotFile := (Length(Buf) > 1) and (Buf[0] = '.') and (Buf[1] <> '.');
+ IsDir := __S_ISTYPE(StatBuf^.st_mode, __S_IFDIR);
+ IsLnk := __S_ISTYPE(StatBuf^.st_mode, __S_IFLNK);
+ IsBlk := __S_ISTYPE(StatBuf^.st_mode, __S_IFBLK);
+ IsChr := __S_ISTYPE(StatBuf^.st_mode, __S_IFCHR);
+ IsFIFO := __S_ISTYPE(StatBuf^.st_mode, __S_IFIFO);
+ IsSock := __S_ISTYPE(StatBuf^.st_mode, __S_IFSOCK);
+{$IFDEF KYLIX}
+ ModifyTime := UnixTimeToTDateTime(StatBuf^.st_mtime);
+{$ELSE}
+ ModifyTime := UnixTimeToTDateTime(StatBuf^.st_mtim.tv_sec);
+{$ENDIF}
+ if StatBuf^.st_uid = 4294967295 then UID := getuid
+ else UID := StatBuf^.st_uid;
+ if StatBuf^.st_gid = 4294967295 then GID := getgid
+ else GID := StatBuf^.st_gid;
+ UpDir := False;
+ Selected := False;
+// DebugMsg(['(II) TLocalTreeEngine.GetListing(APath=', APath, '): freeing StatBuf...']);
+ Libc.free(StatBuf);
+// DebugMsg([' done.']);
+ if IsLnk then begin
+// DebugMsg(['aaaax']);
+ i := readlink(PChar(APath + String(Buf)), LnkBuf, SizeOf(LnkBuf));
+ if i > 0 then begin
+ LnkBuf[i] := #0;
+ LnkPointTo := Libc.malloc(i + 1);
+ Libc.memset(LnkPointTo, 0, i + 1);
+ LnkPointTo := Libc.strncpy(LnkPointTo, @LnkBuf[0], i);
+ end;
+
+ StatBuf := Libc.malloc(sizeof(TGlibc_stat64));
+ Libc.memset(StatBuf, 0, sizeof(TGlibc_stat64));
+ if glibc_stat64(Buf, StatBuf) = 0 then begin
+ IsDir := __S_ISTYPE(StatBuf^.st_mode, __S_IFDIR);
+ Mode := StatBuf^.st_mode;
+ end;
+// DebugMsg(['(II) TLocalTreeEngine.GetListing(APath=', APath, '): freeing StatBuf...']);
+ Libc.free(StatBuf);
+// DebugMsg([' done.']);
+ end;
+// DebugMsg(['xdffffffff']);
+ if not IsDir then Size := StatBuf^.st_size
+ else Size := -1;
+// DebugMsg(['xxsdfsf']);
+ List.Add(Item);
+// DebugMsg(['x1123']);
+ end;
+ end;
+ end;
+ until DirEnt = nil;
+ closedir(Handle);
+ except
+ on E: Exception do begin
+ Result := ERRException;
+ DebugMsg(['*** TLocalTreeEngine.GetListing(APath=', APath, ') -Exception: ', E.Message]);
+ Exit;
+ end;
+ end;
+end;
+
+function TLocalTreeEngine.GetListing(var List: TList; const AddDotFiles: boolean): integer;
+begin
+ Result := GetListing(List, AddDotFiles, FPath);
+end;
+
+function TLocalTreeEngine.ChangeDir(const NewPath: string; const ShowProgress: boolean = True): integer;
+var APath: string;
+ Handle : PDirectoryStream;
+begin
+ try
+ APath := IncludeTrailingPathDelimiter(NewPath);
+ if __chdir(PChar(APath)) <> 0 then begin
+ Result := errno;
+ Exit;
+ end;
+ Handle := opendir(PChar(APath));
+ if not Assigned(Handle) then begin
+ Result := ERRNoAccess;
+ Exit;
+ end;
+{ if not Assigned(readdir(Handle)) then begin
+ Result := ERRNoAccess;
+ Exit;
+ end; }
+ if closedir(Handle) <> 0 then begin
+ Result := ERRNoAccess;
+ Exit;
+ end;
+ Result := 0;
+ except
+ on E: Exception do begin
+ Result := ERRException;
+ DebugMsg(['*** TLocalTreeEngine.ChangeDir(APath=', APath, ') -Exception: ', E.Message]);
+ Exit;
+ end;
+ end;
+end;
+
+(********************************************************************************************************************************)
+function TLocalTreeEngine.ExplicitChDir(const NewPath: string): integer;
+begin
+ Result := __chdir(PChar(NewPath));
+ if Result <> 0 then Result := errno;
+end;
+
+(********************************************************************************************************************************)
+function TLocalTreeEngine.GetFileSystemSize(const APath: string): Int64;
+var Stat: PGlibc_statfs64;
+begin
+ Result := 0;
+ try
+ Stat := Libc.malloc(sizeof(TGlibc_statfs64));
+ Libc.memset(Stat, 0, sizeof(TGlibc_statfs64));
+ if glibc_statfs64(PChar(APath), Stat) <> 0 then Exit;
+ Result := Stat^.f_bsize * Stat^.f_blocks;
+ Libc.free(Stat);
+ except
+ on E: Exception do DebugMsg(['*** TLocalTreeEngine.GetFileSystemSize(APath=', APath, ') -Exception: ', E.Message]);
+ end;
+end;
+
+function TLocalTreeEngine.GetFileSystemSize: Int64;
+begin
+ Result := GetFileSystemSize(FPath);
+end;
+
+(********************************************************************************************************************************)
+function TLocalTreeEngine.GetFileSystemFree(const APath: string): Int64;
+var Stat: PGlibc_statfs64;
+begin
+ Result := 0;
+ try
+ Stat := Libc.malloc(sizeof(TGlibc_statfs64));
+ Libc.memset(Stat, 0, sizeof(TGlibc_statfs64));
+ if glibc_statfs64(PChar(APath), Stat) <> 0 then Exit;
+ Result := Stat^.f_bsize * Stat^.f_bavail;
+ Libc.free(Stat);
+ except
+ on E: Exception do DebugMsg(['*** TLocalTreeEngine.GetFileSystemFree(APath=', APath, ') -Exception: ', E.Message]);
+ end;
+end;
+
+function TLocalTreeEngine.GetFileSystemFree: Int64;
+begin
+ Result := GetFileSystemFree(FPath);
+end;
+
+(********************************************************************************************************************************)
+function TLocalTreeEngine.MakeDir(const NewDir: string): integer;
+begin
+ DebugMsg(['(II) TLocalTreeEngine.MakeDir: begin']);
+ Result := __mkdir(PChar(NewDir), OctalToAttr(ConfDefaultDirCreationMask));
+ DebugMsg(['(II) TLocalTreeEngine.MakeDir: Result = ', Result]);
+ if Result <> 0 then Result := errno;
+(*
+ if Result <> 0 then try
+ if Self.DirectoryExists(NewDir) { or (not g_mkdir_with_parents(dd))} {ForceDirectories(NewDir))} then Result := errno;
+ except
+ Result := -1;
+ DebugMsg(['(II) TLocalTreeEngine.MakeDir: Exception']);
+ end;
+*)
+ DebugMsg(['(II) TLocalTreeEngine.MakeDir: end']);
+end;
+
+(********************************************************************************************************************************)
+
+function TLocalTreeEngine.GetDirSize(APath: string): Int64;
+
+ function InternalGetDirSize(APath: string): Int64;
+ var Handle : PDirectoryStream;
+ DirEnt : PDirent64;
+ StatBuf : PGlibc_stat64;
+ begin
+ Result := 0;
+ try
+ if BreakProcessingType = 1 then Exit;
+ APath := IncludeTrailingPathDelimiter(APath);
+ if __chdir(PChar(APath)) <> 0 then begin
+ Result := 0;
+ Exit;
+ end;
+ Handle := OpenDir(PChar(APath));
+ if not Assigned(Handle) then begin
+ Result := 0;
+ Exit;
+ end;
+ repeat
+ DirEnt := readdir64(Handle);
+ if Assigned(DirEnt) and Assigned(PChar(@DirEnt^.d_name[0])) and (PChar(@DirEnt^.d_name[0]) <> '.') and
+ (PChar(@DirEnt^.d_name[0]) <> '..') and (DirEnt^.d_name[0] <> #0) then
+ begin
+ StatBuf := Libc.malloc(sizeof(TGlibc_stat64));
+ Libc.memset(StatBuf, 0, sizeof(TGlibc_stat64));
+ if glibc_lstat64(PChar(@DirEnt^.d_name[0]), StatBuf) <> 0 then Continue;
+ if __S_ISTYPE(StatBuf^.st_mode, __S_IFDIR) then begin
+ Inc(Result, InternalGetDirSize(APath + String(PChar(@DirEnt^.d_name[0]))));
+ __chdir(PChar(APath));
+ end else Inc(Result, StatBuf^.st_size);
+ Libc.free(StatBuf);
+ end;
+ until DirEnt = nil;
+ closedir(Handle);
+ except
+ on E: Exception do begin
+ Result := 0;
+ DebugMsg(['*** TLocalTreeEngine.GetDirSize(APath=', APath, ') -Exception: ', E.Message]);
+ end;
+ end;
+ end;
+
+begin
+ try
+ BreakProcessingType := 0;
+ Result := InternalGetDirSize(APath);
+ finally
+ BreakProcessingType := 0;
+ end;
+end;
+
+(********************************************************************************************************************************)
+function TLocalTreeEngine.Remove(APath: string): integer;
+begin
+ APath := ExcludeTrailingPathDelimiter(APath);
+ Result := Libc.remove(PChar(APath));
+ if Result <> 0 then Result := errno;
+end;
+
+(********************************************************************************************************************************)
+procedure TLocalTreeEngine.FillDirFiles(APath: string; List: TList; ALevel: word);
+var Handle : PDirectoryStream;
+ DirEnt : PDirent64;
+ StatBuf_global : PGlibc_stat64;
+ Item: PDataItemSL;
+ i: integer;
+ LnkBuf : array[0..1000] of char;
+ FilesList: TList;
+
+
+ procedure AddEntry(FPath: string; AddCurrDirStage, AStage1: boolean);
+ var StatBuf_local : PGlibc_stat64;
+ begin
+ FPath := ExcludeTrailingPathDelimiter(FPath);
+ StatBuf_local := Libc.malloc(sizeof(TGlibc_stat64));
+ Libc.memset(StatBuf_local, 0, sizeof(TGlibc_stat64));
+ if glibc_lstat64(PChar(FPath), StatBuf_local) <> 0 then begin
+ DebugMsg(['*** Error reading file stat AddEntry(lstat): ', strerror(errno)]);
+ Exit;
+ end;
+ Item := Libc.malloc(SizeOf(TDataItemSL));
+ Libc.memset(Item, 0, SizeOf(TDataItemSL));
+ with Item^ do begin
+ AName := nil;
+ LnkPointTo := nil;
+ ADestination := nil;
+ Stage1 := AStage1;
+ AName := strdup(PChar(FPath));
+ Size := StatBuf_local^.st_size;
+ Mode := StatBuf_local^.st_mode;
+ IsDir := __S_ISTYPE(StatBuf_local^.st_mode, __S_IFDIR);
+ IsLnk := __S_ISTYPE(StatBuf_local^.st_mode, __S_IFLNK);
+ IsExecutable := AddCurrDirStage or (StatBuf_local^.st_mode and S_IXUSR = S_IXUSR);
+ IsOnRO := IsOnROMedium(FPath);
+ ForceMove := False;
+ if StatBuf_local^.st_uid = 4294967295 then UID := getuid
+ else UID := StatBuf_local^.st_uid;
+ if StatBuf_local^.st_gid = 4294967295 then GID := getgid
+ else GID := StatBuf_local^.st_gid;
+{$IFDEF KYLIX}
+ atime := StatBuf_local^.st_atime;
+ mtime := StatBuf_local^.st_mtime;
+{$ELSE}
+ atime := StatBuf_local^.st_atim.tv_sec;
+ mtime := StatBuf_local^.st_mtim.tv_sec;
+{$ENDIF}
+ if IsLnk and AddCurrDirStage then DebugMsg(['*** Assertion failed AddEntry: Item^.IsLnk = True']);
+ if IsLnk and (not AddCurrDirStage) then begin
+ i := readlink(PChar(APath + String(PChar(@DirEnt^.d_name[0]))), LnkBuf, SizeOf(LnkBuf));
+ if i > 0 then begin
+ LnkBuf[i] := #0;
+ LnkPointTo := Libc.malloc(i + 1);
+ Libc.memset(LnkPointTo, 0, i + 1);
+ LnkPointTo := Libc.strncpy(LnkPointTo, @LnkBuf[0], i);
+// StrLCopy(LnkPointTo, @LnkBuf[0], i);
+ end;
+ end;
+{$IFDEF KYLIX}
+ ModifyTime := UnixTimeToTDateTime(StatBuf_local^.st_mtime);
+{$ELSE}
+ ModifyTime := UnixTimeToTDateTime(StatBuf_local^.st_mtim.tv_sec);
+{$ENDIF}
+// DebugMsg([FormatDateTime('c', ModifyTime)]);
+ Level := ALevel + Ord(not AddCurrDirStage);
+ Libc.free(StatBuf_local);
+ end;
+ if AddCurrDirStage then List.Add(Item)
+ else FilesList.Add(Item);
+ end;
+
+begin
+ if not Assigned(List) then Exit;
+ try
+ AddEntry(APath, True, True);
+ FilesList := TList.Create;
+ APath := IncludeTrailingPathDelimiter(APath);
+ if __chdir(PChar(APath)) <> 0 then Exit;
+ Handle := OpenDir(PChar(APath));
+ if Assigned(Handle) then
+ repeat
+ DirEnt := readdir64(Handle);
+ if Assigned(DirEnt) and Assigned(PChar(@DirEnt^.d_name[0])) and (PChar(@DirEnt^.d_name[0]) <> '.') and (PChar(@DirEnt^.d_name[0]) <> '..') then begin
+ StatBuf_global := Libc.malloc(sizeof(TGlibc_stat64));
+ Libc.memset(StatBuf_global, 0, sizeof(TGlibc_stat64));
+ if glibc_stat64(PChar(@DirEnt^.d_name[0]), StatBuf_global) <> 0 then Continue;
+ if __S_ISTYPE(StatBuf_global^.st_mode, __S_IFDIR) then begin
+ FillDirFiles(APath + String(PChar(@DirEnt^.d_name[0])), List, ALevel + 1);
+ __chdir(PChar(APath));
+ end else AddEntry(APath + String(PChar(@DirEnt^.d_name[0])), False, True);
+ Libc.free(StatBuf_global);
+ end;
+ until DirEnt = nil;
+ CloseDir(Handle);
+ if FilesList.Count > 0 then
+ for i := 0 to FilesList.Count - 1 do
+ List.Add(FilesList[i]);
+ FilesList.Free;
+ AddEntry(APath, True, False);
+ except
+ on E: Exception do DebugMsg(['*** TLocalTreeEngine.FillDirFiles(APath=', APath, ', Level=', ALevel, ') -Exception: ', E.Message]);
+ end;
+end;
+
+(********************************************************************************************************************************)
+function TLocalTreeEngine.GetFileInfoSL(APath: string): PDataItemSL;
+var StatBuf : PGlibc_stat64;
+ i : integer;
+ LnkBuf : array[0..1000] of char;
+begin
+ Result := nil;
+ try
+ StatBuf := Libc.malloc(sizeof(TGlibc_stat64));
+ Libc.memset(StatBuf, 0, sizeof(TGlibc_stat64));
+ if glibc_lstat64(PChar(APath), StatBuf) <> 0 then begin
+ DebugMsg(['*** Error reading file stat GetFileInfoSL(lstat): ', strerror(errno)]);
+ Exit;
+ end;
+// DebugMsg(['x1']);
+ Result := Libc.malloc(SizeOf(TDataItemSL));
+ Libc.memset(Result, 0, SizeOf(TDataItemSL));
+// DebugMsg(['x1']);
+ with Result^ do begin
+ AName := nil;
+ LnkPointTo := nil;
+ ADestination := nil;
+ Stage1 := True;
+// DebugMsg(['x1']);
+ AName := strdup(PChar(APath));
+ Size := StatBuf^.st_size;
+ Mode := StatBuf^.st_mode;
+ IsDir := __S_ISTYPE(StatBuf^.st_mode, __S_IFDIR);
+ IsLnk := __S_ISTYPE(StatBuf^.st_mode, __S_IFLNK);
+// DebugMsg(['x1']);
+ IsExecutable := StatBuf^.st_mode and S_IXUSR = S_IXUSR;
+// DebugMsg(['x2']);
+ IsOnRO := IsOnROMedium(APath);
+// DebugMsg(['x2']);
+ ForceMove := False;
+// DebugMsg(['x2']);
+{$IFDEF KYLIX}
+ ModifyTime := UnixTimeToTDateTime(StatBuf^.st_mtime);
+{$ELSE}
+ ModifyTime := UnixTimeToTDateTime(StatBuf^.st_mtim.tv_sec);
+{$ENDIF}
+// DebugMsg(['x2']);
+ if StatBuf^.st_uid = 4294967295 then UID := getuid
+ else UID := StatBuf^.st_uid;
+ if StatBuf^.st_gid = 4294967295 then GID := getgid
+ else GID := StatBuf^.st_gid;
+{$IFDEF KYLIX}
+ atime := StatBuf^.st_atime;
+ mtime := StatBuf^.st_mtime;
+{$ELSE}
+ atime := StatBuf^.st_atim.tv_sec;
+ mtime := StatBuf^.st_mtim.tv_sec;
+{$ENDIF}
+// DebugMsg(['x1']);
+ Libc.free(StatBuf);
+// DebugMsg(['x1']);
+ Level := 1;
+// DebugMsg(['x1']);
+ if IsLnk then begin
+ i := readlink(PChar(APath), LnkBuf, SizeOf(LnkBuf));
+ if i > 0 then begin
+ LnkBuf[i] := #0;
+ LnkPointTo := Libc.malloc(i + 1);
+ Libc.memset(LnkPointTo, 0, i + 1);
+// StrLCopy(LnkPointTo, @LnkBuf[0], i);
+ LnkPointTo := Libc.strncpy(LnkPointTo, @LnkBuf[0], i);
+ end;
+ StatBuf := Libc.malloc(sizeof(TGlibc_stat64));
+ Libc.memset(StatBuf, 0, sizeof(TGlibc_stat64));
+ if glibc_stat64(PChar(APath), StatBuf) = 0 then begin
+ IsDir := __S_ISTYPE(StatBuf^.st_mode, __S_IFDIR);
+ Mode := StatBuf^.st_mode;
+ end;
+ Libc.free(StatBuf);
+ end;
+ end;
+// DebugMsg(['x1']);
+ except
+ on E: Exception do DebugMsg(['*** TLocalTreeEngine.GetFileInfoSL(APath=', APath, ') -Exception: ', E.Message]);
+ end;
+end;
+
+(********************************************************************************************************************************)
+function TLocalTreeEngine.CopyFileIn(Sender: Pointer; SourceFile, DestFile: string; ProgressFunc: TEngineProgressFunc; ErrorFunc: TEngineErrorFunc; Append: boolean): boolean;
+begin
+ Result := CopyFile(Sender, SourceFile, DestFile, ProgressFunc, ErrorFunc, Append);
+end;
+
+function TLocalTreeEngine.CopyFileOut(Sender: Pointer; SourceFile, DestFile: string; ProgressFunc: TEngineProgressFunc; ErrorFunc: TEngineErrorFunc; Append: boolean): boolean;
+begin
+ Result := CopyFile(Sender, SourceFile, DestFile, ProgressFunc, ErrorFunc, Append);
+end;
+
+function TLocalTreeEngine.CopyFile(Sender: Pointer; SourceFile, DestFile: string; ProgressFunc: TEngineProgressFunc; ErrorFunc: TEngineErrorFunc; Append: boolean): boolean;
+var fsrc, fdest: PIOFile;
+ BytesDone, BytesRead: Int64;
+ offset: off_t;
+
+
+ // Used due to sendfile bug while copying from NTFS and some 2.6.x kernels
+ function OldCopyRoutine: boolean;
+ var Buffer: Pointer;
+ BytesWritten: Int64;
+ Res: boolean;
+ begin
+ try
+ Result := False;
+ Res := True;
+ DebugMsg(['*** Using old copy function due to bug in sendfile']);
+// WriteLn('x1');
+ Buffer := Libc.malloc(FBlockSize);
+// WriteLn('x2');
+ if Buffer = nil then begin
+ ErrorFunc(Sender, 1, errno, SourceFile); // Memory allocation failed
+// Libc.free(Buffer);
+ Exit;
+ end;
+ Libc.memset(Buffer, 0, FBlockSize);
+
+// WriteLn('x3');
+ while feof(fsrc) = 0 do begin
+// WriteLn('x4');
+ BytesRead := fread(Buffer, 1, FBlockSize, fsrc);
+ if (BytesRead < FBlockSize) and (feof(fsrc) = 0) then begin
+ Res := ErrorFunc(Sender, 6, errno, SourceFile); // Cannot read from source file
+ Break;
+ end;
+// WriteLn('x5');
+ BytesWritten := fwrite(Buffer, 1, BytesRead, fdest);
+ if BytesWritten < BytesRead then begin
+ Res := ErrorFunc(Sender, 7, ferror(fdest), DestFile); // Cannot write to source file
+ Break;
+ end;
+ Inc(BytesDone, BytesRead);
+// WriteLn('x6');
+ try
+ if Assigned(ProgressFunc) and (not ProgressFunc(Sender, BytesDone)) then begin
+ Res := False;
+ Break;
+ end;
+ except
+ on E: Exception do DebugMsg(['*** ProgressFunc ! Exception raised in TLocalTreeEngine.CopyFile.OldCopyRoutine(Sender=', DWord(Sender), ', SourceFile=', SourceFile, ', DestFile=', DestFile, '): (', E.ClassName, '): ', E.Message]);
+ end;
+// WriteLn('x7');
+ end;
+// WriteLn('x8');
+ Libc.free(Buffer);
+// WriteLn('x9');
+ Result := Res;
+ except
+ on E: Exception do DebugMsg(['*** Exception raised in TLocalTreeEngine.CopyFile.OldCopyRoutine(Sender=', DWord(Sender), ', SourceFile=', SourceFile, ', DestFile=', DestFile, '): (', E.ClassName, '): ', E.Message]);
+ end;
+ end;
+
+ function NewCopyRoutine: boolean;
+ var Res: boolean;
+ StatBuf: PGlibc_stat64;
+ begin
+ try
+ Res := True;
+ repeat
+ DebugMsg(['Copy(sendfile): offset = ', offset, ', BytesDone = ', BytesDone, ', ftell(fsrc) = ', ftell(fsrc)]);
+ BytesRead := Libc.sendfile(glibc_fileno(fdest), glibc_fileno(fsrc), offset, FBlockSize);
+ if BytesRead = -1 then begin
+ if errno = EINVAL then begin
+ Result := OldCopyRoutine;
+ Exit;
+ end else Res := ErrorFunc(Sender, 6, errno, SourceFile); // Cannot read from source file
+ Break;
+ end;
+ Inc(BytesDone, BytesRead);
+ if Assigned(ProgressFunc) and (not ProgressFunc(Sender, BytesDone)) then begin
+ Res := False;
+ Break;
+ end;
+ until BytesRead < FBlockSize;
+
+ StatBuf := Libc.malloc(sizeof(TGlibc_stat64));
+ Libc.memset(StatBuf, 0, sizeof(TGlibc_stat64));
+ if glibc_lstat64(PChar(SourceFile), StatBuf) <> 0 then begin
+ DebugMsg(['*** TLocalTreeEngine.CopyFile.NewCopyRoutine(Sender=', DWord(Sender), ', SourceFile=', SourceFile, ', DestFile=', DestFile, '): Error reading file via lstat64: ', strerror(errno)]);
+ Res := ErrorFunc(Sender, 6, errno, SourceFile);
+ end else
+ if (BytesDone < StatBuf^.st_size) and Res then
+ Res := ErrorFunc(Sender, 6, errno, SourceFile);
+ Libc.free(StatBuf);
+ Result := Res;
+ except
+ on E: Exception do DebugMsg(['*** Exception raised in TLocalTreeEngine.CopyFile.NewCopyRoutine(Sender=', DWord(Sender), ', SourceFile=', SourceFile, ', DestFile=', DestFile, '): (', E.ClassName, '): ', E.Message]);
+ end;
+ end;
+
+begin
+ Result := False;
+ try
+ fsrc := fopen64(PChar(SourceFile), 'r');
+ if fsrc = nil then begin
+ ErrorFunc(Sender, 2, errno, SourceFile); // Cannot open source file
+ Exit;
+ end;
+ if Append then fdest := fopen64(PChar(DestFile), 'a')
+ else fdest := fopen64(PChar(DestFile), 'w');
+ if fdest = nil then begin
+ fclose(fsrc);
+ ErrorFunc(Sender, 3, errno, DestFile); // Cannot open target file
+ Exit;
+ end;
+
+ BytesDone := 0;
+ offset := 0;
+
+ Result := NewCopyRoutine;
+
+ if fclose(fdest) <> 0 then begin
+ fclose(fsrc);
+ ErrorFunc(Sender, 4, errno, DestFile); // Cannot close target file
+ Exit;
+ end;
+ if fclose(fsrc) <> 0 then begin
+ ErrorFunc(Sender, 5, errno, SourceFile); // Cannot close source file
+ Exit;
+ end;
+ except
+ on E: Exception do DebugMsg(['*** Exception raised in TLocalTreeEngine.CopyFile(Sender=', DWord(Sender), ', SourceFile=', SourceFile, ', DestFile=', DestFile, '): (', E.ClassName, '): ', E.Message]);
+ end;
+ DebugMsg(['(II) TLocalTreeEngine.CopyFile: finished']);
+end;
+
+(********************************************************************************************************************************)
+function TLocalTreeEngine.FileExists(const FileName: string; const Use_lstat: boolean = False): Boolean;
+var st: PGlibc_stat64;
+begin
+ st := Libc.malloc(sizeof(TGlibc_stat64));
+ Libc.memset(st, 0, sizeof(TGlibc_stat64));
+ if Use_lstat then Result := glibc_lstat64(PChar(FileName), st) = 0
+ else Result := glibc_stat64(PChar(FileName), st) = 0;
+ Libc.free(st);
+end;
+
+(********************************************************************************************************************************)
+function TLocalTreeEngine.DirectoryExists(const FileName: string; const Use_lstat: boolean = False): Boolean;
+var st: PGlibc_stat64;
+begin
+ st := Libc.malloc(sizeof(TGlibc_stat64));
+ Libc.memset(st, 0, sizeof(TGlibc_stat64));
+ if Use_lstat then Result := glibc_lstat64(PChar(FileName), st) = 0 else
+ if glibc_stat64(PChar(FileName), st) = 0
+ then Result := S_ISDIR(st^.st_mode)
+ else Result := False;
+ Libc.free(st);
+end;
+
+(********************************************************************************************************************************)
+function TLocalTreeEngine.MakeSymLink(const NewFileName, PointTo: string): integer;
+begin
+ Result := Libc.symlink(PChar(PointTo), PChar(NewFileName));
+ if Result <> 0 then Result := errno;
+end;
+
+(********************************************************************************************************************************)
+function TLocalTreeEngine.Chmod(const FileName: string; const Mode: integer): integer;
+begin
+ Result := Libc.chmod(PChar(FileName), Mode);
+ if Result <> 0 then Result := errno;
+end;
+
+(********************************************************************************************************************************)
+function TLocalTreeEngine.Chown(const FileName: string; const UID, GID: integer): integer;
+begin
+ Result := Libc.chown(PChar(FileName), UID, GID);
+ if Result <> 0 then Result := errno;
+end;
+
+(********************************************************************************************************************************)
+procedure TLocalTreeEngine.BreakProcessing(ProcessingKind: integer);
+begin
+ BreakProcessingType := ProcessingKind;
+end;
+
+(********************************************************************************************************************************)
+function TLocalTreeEngine.IsOnSameFS(const Path1, Path2: string): boolean;
+var FStat1, FStat2: PGlibc_stat64;
+begin
+ DebugMsg(['** TLocalTreeEngine.IsOnSameFS("', Path1, '", "', Path2, '")']);
+ Result := False; // Default fallback result (forces copy + delete)
+ FStat1 := Libc.malloc(sizeof(TGlibc_stat64));
+ FStat2 := Libc.malloc(sizeof(TGlibc_stat64));
+ Libc.memset(FStat1, 0, sizeof(TGlibc_stat64));
+ Libc.memset(FStat2, 0, sizeof(TGlibc_stat64));
+ if glibc_lstat64(PChar(Path1), FStat1) <> 0 then begin
+ DebugMsg(['** TLocalTreeEngine.IsOnSameFS: Libc.stat(', Path1, ') error: ', strerror(errno)]);
+ Exit;
+ end;
+ if glibc_lstat64(PChar(Path2), FStat2) <> 0 then begin
+ DebugMsg(['** TLocalTreeEngine.IsOnSameFS: Libc.stat(', Path2, ') error: ', strerror(errno)]);
+ Exit;
+ end;
+ Result := FStat1^.st_dev = FStat2^.st_dev;
+ Libc.free(FStat1);
+ Libc.free(FStat2);
+ DebugMsg(['** TLocalTreeEngine.IsOnSameFS("', Path1, '", "', Path2, '") Result = ', Result]);
+end;
+
+(********************************************************************************************************************************)
+function TLocalTreeEngine.RenameFile(SourceFile, DestFile: string): integer;
+begin
+ Result := Libc.__rename(PChar(SourceFile), PChar(DestFile));
+ if Result <> 0 then Result := errno;
+end;
+
+(********************************************************************************************************************************)
+function TLocalTreeEngine.ChangeTimes(APath: string; mtime, atime: Int64): integer;
+var timebuf: PGlibc_utimbuf;
+begin
+ Result := errno;
+ try
+ timebuf := Libc.malloc(sizeof(TGlibc_utimbuf));
+ Libc.memset(timebuf, 0, sizeof(TGlibc_utimbuf));
+ timebuf^.actime := atime;
+ timebuf^.modtime := mtime;
+ Result := glibc_utime(PChar(APath), timebuf);
+ if Result <> 0 then Result := errno;
+ Libc.free(timebuf);
+ except
+ on E: Exception do DebugMsg(['*** Exception raised in TLocalTreeEngine.ChangeTimes(APath=', APath, '): (', E.ClassName, '): ', E.Message]);
+ end;
+end;
+
+(********************************************************************************************************************************)
+procedure TLocalTreeEngine.GetFileSystemInfo(const APath: string; var FSSize, FSFree: Int64; var FSName: string);
+var Stat: PGlibc_statfs64;
+ fd: PIOFile;
+ mntent: PMountEntry;
+ mntdev: PChar;
+ FoundLength: integer;
+ Buffer: array[0..31] of char;
+begin
+ FSSize := 0;
+ FSFree := 0;
+ FSName := '';
+ try
+ Stat := Libc.malloc(sizeof(TGlibc_statfs64));
+ Libc.memset(Stat, 0, sizeof(TGlibc_statfs64));
+ if glibc_statfs64(PChar(APath), Stat) <> 0 then Exit;
+ FSSize := Stat^.f_bsize * Stat^.f_blocks;
+ FSFree := Stat^.f_bsize * Stat^.f_bavail;
+ fd := setmntent(_PATH_MOUNTED, 'r');
+ if fd = nil then Exit;
+ // Get mount name
+ FoundLength := 0;
+ mntdev := nil;
+ mntent := getmntent(fd);
+ while mntent <> nil do begin
+ if (Pos(mntent^.mnt_dir, APath) = 1) and (Length(String(mntent^.mnt_dir)) > FoundLength) then begin
+ FoundLength := Length(String(mntent^.mnt_dir));
+ FSName := String(mntent^.mnt_dir);
+ mntdev := mntent^.mnt_fsname;
+ end;
+ mntent := getmntent(fd);
+ end;
+ endmntent(fd);
+ // if it is CD-ROM, read ISO9660 label
+ if Stat^.f_type = $9660 then begin { ISOFS_SUPER_MAGIC }
+ if Assigned(mntdev) and (mntdev <> '') then begin
+ fd := fopen(mntdev, 'r');
+ if fd = nil then Exit;
+ if fseek(fd, 32808, SEEK_SET) <> 0 then Exit;
+ if fread(@Buffer[0], 1, 32, fd) <> 0 then FSName := Trim(String(Buffer));
+ fclose(fd);
+ end;
+ end;
+ Libc.free(Stat);
+ except
+ on E: Exception do DebugMsg(['*** Exception raised in TLocalTreeEngine.GetFileSystemInfo(APath=', APath, '): (', E.ClassName, '): ', E.Message]);
+ end;
+end;
+
+(********************************************************************************************************************************)
+function TLocalTreeEngine.OpenFile(const APath: string; Mode: integer; var Error: integer): TEngineFileDes;
+var m: PChar;
+begin
+ Error := 0;
+ case Mode of
+ omRead: m := 'r';
+ omWrite: m := 'w';
+ omAppend: m := 'a';
+ else m := 'r';
+ end;
+ Result := Libc.fopen64(PChar(APath), m);
+ if Result = nil then Error := errno;
+end;
+
+(********************************************************************************************************************************)
+function TLocalTreeEngine.ReadFile(const FileDescriptor: TEngineFileDes; Buffer: Pointer; ABlockSize: integer; var Error: integer): integer;
+begin
+ Error := 0;
+ Result := Libc.fread(Buffer, 1, ABlockSize, FileDescriptor);
+ if (Result = 0) and (feof(FileDescriptor) = 0) then Error := errno;
+end;
+
+(********************************************************************************************************************************)
+function TLocalTreeEngine.WriteFile(const FileDescriptor: TEngineFileDes; Buffer: Pointer; BytesCount: integer; var Error: integer): integer;
+begin
+ Error := 0;
+{ Result := Libc.__write(fileno(FileDescriptor), Buffer^, BytesCount);
+ if Result < BytesCount then Error := errno; }
+ Result := Libc.fwrite(Buffer, 1, BytesCount, FileDescriptor);
+ if Result < BytesCount then Error := ferror(FileDescriptor);
+end;
+
+(********************************************************************************************************************************)
+function TLocalTreeEngine.CloseFile(const FileDescriptor: TEngineFileDes): integer;
+begin
+ Result := Libc.fclose(FileDescriptor);
+ if Result <> 0 then Result := errno;
+end;
+
+(********************************************************************************************************************************)
+function TLocalTreeEngine.FileSeek(const FileDescriptor: TEngineFileDes; const AbsoluteOffset: Int64; var Error: integer): Int64;
+begin
+ Error := 0;
+ Result := Libc.fseeko64(FileDescriptor, AbsoluteOffset, SEEK_SET);
+ if Result = -1 then Error := errno;
+end;
+
+(********************************************************************************************************************************)
+function TLocalTreeEngine.IsOnROMedium(const FileName: string): boolean;
+var Stat: PGlibc_statfs64;
+begin
+ Result := False;
+ try
+ Stat := Libc.malloc(sizeof(TGlibc_statfs64));
+ Libc.memset(Stat, 0, sizeof(TGlibc_statfs64));
+ if glibc_statfs64(PChar(FileName), Stat) <> 0 then Exit;
+ Result := (Stat^.f_type = $9660); { ISOFS_SUPER_MAGIC }
+ Libc.free(Stat);
+ except
+ on E: Exception do DebugMsg(['*** TLocalTreeEngine.IsOnROMedium(FileName=', FileName, ') -Exception: ', E.Message]);
+ end;
+end;
+
+(********************************************************************************************************************************)
+function TLocalTreeEngine.FileCanRun(const FileName: string): boolean;
+begin
+ Result := Libc.access(PChar(FileName), R_OK or X_OK) = 0;
+end;
+
+(********************************************************************************************************************************)
+function TLocalTreeEngine.GetPrefix: string;
+begin
+ Result := '';
+end;
+
+(********************************************************************************************************************************)
+function TLocalTreeEngine.Login(Username, Password: string): integer;
+begin
+ Result := 0;
+end;
+
+(********************************************************************************************************************************)
+function TLocalTreeEngine.TwoSameFiles(const Path1, Path2: string): boolean;
+var st1, st2: PGlibc_stat64;
+begin
+ Result := False;
+ st1 := Libc.malloc(sizeof(TGlibc_stat64));
+ st2 := Libc.malloc(sizeof(TGlibc_stat64));
+ Libc.memset(st1, 0, sizeof(TGlibc_stat64));
+ Libc.memset(st2, 0, sizeof(TGlibc_stat64));
+ if glibc_lstat64(PChar(Path1), st1) <> 0 then Exit;
+ if glibc_lstat64(PChar(Path2), st2) <> 0 then Exit;
+ DebugMsg(['*** TLocalTreeEngine.TwoSameFiles: ', st1^.st_ino, ' ', st2^.st_ino]);
+ Result := st1^.st_ino = st2^.st_ino;
+ Libc.free(st1);
+ Libc.free(st2);
+end;
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure FreeDataItem(DataItem: PDataItemSL);
+begin
+ try
+ if Assigned(DataItem) then begin
+ with DataItem^ do begin
+ if AName <> nil then Libc.free(AName);
+// if Assigned(ADestination) then Dispose(ADestination);
+ if LnkPointTo <> nil then Libc.free(LnkPointTo);
+ end;
+ Libc.free(DataItem);
+ end;
+ except
+ end;
+end;
+
+procedure FreeDataItem(DataItem: PDataItem);
+var i : integer;
+begin
+ try
+ if Assigned(DataItem) then begin
+ with DataItem^ do begin
+ if AName <> nil then Libc.free(AName);
+ if LnkPointTo <> nil then Libc.free(LnkPointTo);
+ for i := 0 to Length(ColumnData) - 1 do
+ if ColumnData[i] <> nil then Libc.free(ColumnData[i]);
+ end;
+ Libc.free(DataItem);
+ end;
+ except
+ end;
+end;
+
+end.
+
diff --git a/UFileAssoc.pas b/UFileAssoc.pas
new file mode 100644
index 0000000..2764df8
--- /dev/null
+++ b/UFileAssoc.pas
@@ -0,0 +1,358 @@
+(*
+ Tux Commander - UFileAssoc - File Association system objects and functions
+ Copyright (C) 2007 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit UFileAssoc;
+
+interface
+
+uses Classes, SysUtils, GTKPixbuf, GTKClasses, GTKUtils, UEngines;
+
+type TAssocAction = class
+ ActionName, ActionCommand: string;
+ AutodetectGUI, RunInTerminal: boolean;
+ constructor Create;
+ end;
+
+ TFileAssoc = class
+ Extensions, FileTypeName, FileTypeIcon, ColorString: string;
+ DefaultAction: integer;
+ ActionList: TList;
+ Pixmap, LnkPixmap: TGDKPixbuf;
+ constructor Create;
+ destructor Destroy; override;
+ end;
+
+const ConstFTAMetaDirectory = '<directory>';
+ ConstFTAMetaFile = '<file>';
+
+{$I 'pixmaps/emblem_symbolic_link_png.inc'}
+{$I 'pixmaps/gnome_dev_cdrom_16_png.inc'}
+{$I 'pixmaps/gnome_dev_floppy_16_png.inc'}
+{$I 'pixmaps/gnome_dev_harddisk_16_png.inc'}
+{$I 'pixmaps/gnome_dev_removable_usb_16_png.inc'}
+{$I 'pixmaps/gnome_mime_application_zip_16_png.inc'}
+{$I 'pixmaps/gnome_mime_x_directory_smb_share_16_png.inc'}
+{$I 'pixmaps/stock_folder_16_png.inc'}
+{$I 'pixmaps/stock_lock_16_png.inc'}
+{$I 'pixmaps/stock_lock_48_png.inc'}
+{$I 'pixmaps/stock_new_16_png.inc'}
+{$I 'pixmaps/stock_up_one_dir_16_png.inc'}
+
+
+
+
+
+var FolderIcon, FileIcon, UpDirIcon, SymLinkEmblem, FolderIconLnk, FileIconLnk,
+ FolderIconCached, FileIconCached, FolderIconLnkCached, FileIconLnkCached: TGDKPixbuf;
+ MounterHDD, MounterRemovable, MounterFloppy, MounterCD, MounterNetwork: TGDKPixbuf;
+ StockLock16, StockLock48: TGDKPixbuf;
+ ArchiveIcon, ArchiveIconLnk: TGDKPixbuf;
+
+
+procedure LoadIcons;
+procedure AddFileTypeIcon(Item: PDataItem);
+procedure RecreateIcons(List: TList; const FreePixmaps: boolean = True);
+procedure RemoveIconRefs(List: TList; FreeIt: boolean);
+procedure AddDefaultItems(List: TList);
+
+implementation
+
+uses GTKForms, UConfig, UCore, UCoreUtils, UVFSCore;
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TFileAssoc.Create;
+begin
+ ActionList := TList.Create;
+ DefaultAction := 0;
+ FileTypeIcon := '';
+ Extensions := '';
+ FileTypeName := '';
+ ColorString := '';
+ Pixmap := TGDKPixbuf.Create(nil);
+end;
+
+destructor TFileAssoc.Destroy;
+var i: integer;
+begin
+ try
+ if Assigned(ActionList) and (ActionList.Count > 0) then
+ for i := ActionList.Count - 1 downto 0 do
+ TAssocAction(ActionList[i]).Free;
+ ActionList.Clear;
+ ActionList.Free;
+// Pixmap.Free;
+ except
+ end;
+end;
+
+(********************************************************************************************************************************)
+constructor TAssocAction.Create;
+begin
+ RunInTerminal := False;
+ AutodetectGUI := True;
+end;
+
+(********************************************************************************************************************************)
+procedure LoadIcons;
+begin
+ FolderIcon := TGDKPixbuf.Create(Application);
+ FolderIcon.LoadFromInline(@stock_folder_16_png[1]);
+ FolderIcon.ScaleSimple(ConfRowHeightReal, ConfRowHeightReal);
+ FileIcon := TGDKPixbuf.Create(Application);
+ FileIcon.LoadFromInline(@stock_new_16_png[1]);
+ FileIcon.ScaleSimple(ConfRowHeightReal, ConfRowHeightReal);
+ UpDirIcon := TGDKPixbuf.Create(Application);
+ UpDirIcon.LoadFromInline(@stock_up_one_dir_16_png[1]);
+ UpDirIcon.ScaleSimple(ConfRowHeightReal, ConfRowHeightReal);
+ SymLinkEmblem := TGDKPixbuf.Create(Application);
+ SymLinkEmblem.LoadFromInline(@emblem_symbolic_link_png[1]);
+ FolderIconLnk := TGDKPixbuf.Create(Application);
+ FolderIconLnk.FPixbuf := FolderIcon.Copy;
+ FolderIconLnk.CopyArea(SymLinkEmblem, 0, 0, SymLinkEmblem.Width, SymLinkEmblem.Height, FolderIconLnk.Width - SymLinkEmblem.Width, FolderIconLnk.Height - SymLinkEmblem.Height);
+ FileIconLnk := TGDKPixbuf.Create(Application);
+ FileIconLnk.FPixbuf := FileIcon.Copy;
+ FileIconLnk.CopyArea(SymLinkEmblem, 0, 0, SymLinkEmblem.Width, SymLinkEmblem.Height, FileIconLnk.Width - SymLinkEmblem.Width, FileIconLnk.Height - SymLinkEmblem.Height);
+ FolderIconCached := FolderIcon;
+ FileIconCached := FileIcon;
+ FolderIconLnkCached := FolderIconLnk;
+ FileIconLnkCached := FileIconLnk;
+ MounterHDD := TGDKPixbuf.Create(Application);
+ MounterHDD.LoadFromInline(@gnome_dev_harddisk_16_png[1]);
+ MounterRemovable := TGDKPixbuf.Create(Application);
+ MounterRemovable.LoadFromInline(@gnome_dev_removable_usb_16_png[1]);
+ MounterFloppy := TGDKPixbuf.Create(Application);
+ MounterFloppy.LoadFromInline(@gnome_dev_floppy_16_png[1]);
+ MounterCD := TGDKPixbuf.Create(Application);
+ MounterCD.LoadFromInline(@gnome_dev_cdrom_16_png[1]);
+ MounterNetwork := TGDKPixbuf.Create(Application);
+ MounterNetwork.LoadFromInline(@gnome_mime_x_directory_smb_share_16_png[1]);
+ StockLock16 := TGDKPixbuf.Create(Application);
+ StockLock16.LoadFromInline(@stock_lock_16_png[1]);
+ StockLock48 := TGDKPixbuf.Create(Application);
+ StockLock48.LoadFromInline(@stock_lock_48_png[1]);
+ ArchiveIcon := TGDKPixbuf.Create(Application);
+ ArchiveIcon.LoadFromInline(@gnome_mime_application_zip_16_png[1]);
+ ArchiveIcon.ScaleSimple(ConfRowHeightReal, ConfRowHeightReal);
+ ArchiveIconLnk := TGDKPixbuf.Create(Application);
+ ArchiveIconLnk.FPixbuf := ArchiveIcon.Copy;
+ ArchiveIconLnk.CopyArea(SymLinkEmblem, 0, 0, SymLinkEmblem.Width, SymLinkEmblem.Height, FolderIconLnk.Width - SymLinkEmblem.Width, FolderIconLnk.Height - SymLinkEmblem.Height);
+end;
+
+(********************************************************************************************************************************)
+procedure AddFileTypeIcon(Item: PDataItem);
+var Ext: string;
+ b: boolean;
+ i, j, Last: integer;
+ AColor: TGDKColor;
+ Plugin: TVFSPlugin;
+begin
+ with Item^ do begin
+ ItemColor := nil;
+ if IsLnk and (not ConfLinkItemDefaultColors) then ItemColor := LinkItemGDKColor else
+ if IsDotFile and (not ConfDotFileItemDefaultColors) then ItemColor := DotFileItemGDKColor;
+ if IsDir then begin
+ if IsLnk then Icon := FolderIconLnkCached.FPixbuf
+ else Icon := FolderIconCached.FPixbuf;
+ end else
+ begin
+ if not IsLnk then Icon := FileIconCached.FPixbuf
+ else Icon := FileIconLnkCached.FPixbuf;
+ if (Pos('.', AName) > 1) and (LastDelimiter('.', AName) < Length(AName)) then begin
+ Ext := ANSIUpperCase(Trim(Copy(AName, LastDelimiter('.', AName) + 1, Length(AName) - LastDelimiter('.', AName))));
+
+ // Try to find a plugin which can handle this archive type
+ b := False;
+ Plugin := nil;
+ if PluginList.Count > 0 then
+ for i := 0 to PluginList.Count - 1 do begin
+ Plugin := TVFSPlugin(PluginList[i]);
+ if Length(Plugin.Extensions) > 0 then
+ for j := 0 to Length(Plugin.Extensions) - 1 do begin
+ if AnsiCompareText(Plugin.Extensions[j], Ext) = 0 then begin
+ b := True;
+ if IsLnk then Icon := ArchiveIconLnk.FPixbuf
+ else Icon := ArchiveIcon.FPixbuf;
+ Break;
+ end;
+ end;
+ if b then Break;
+ end;
+
+ // Try to find an association
+ if (not b) and (AssocList.Count > 0) then
+ for i := 0 to AssocList.Count - 1 do
+ with TFileAssoc(AssocList[i]) do
+ if Length(Trim(Extensions)) > 0 then begin
+ b := False;
+ if Pos(';', Extensions) = 0 then b := ANSIUpperCase(Trim(Extensions)) = Ext else begin
+ Last := 0;
+ for j := 1 to Length(Extensions) do
+ if Extensions[j] = ';' then begin
+ if ANSIUpperCase(Trim(Copy(Extensions, Last + 1, j - Last - 1))) = Ext then begin
+ b := True;
+ Break;
+ end;
+ Last := j;
+ end;
+ if not b then b := ANSIUpperCase(Trim(Copy(Extensions, LastDelimiter(';', Extensions) + 1, Length(Extensions) - LastDelimiter(';', Extensions)))) = Ext;
+ end;
+ if b then begin
+ if Assigned(Pixmap) then
+ if IsLnk and Assigned(LnkPixmap) and Assigned(LnkPixmap.FPixbuf)
+ then Icon := LnkPixmap.FPixbuf
+ else Icon := Pixmap.FPixbuf;
+ if ItemColor = nil then
+ if (ColorString = '') or (not StringToGDKColor(ColorString, AColor))
+ then ItemColor := NormalItemGDKColor
+ else ItemColor := GDKColorToPGdkColor(AColor);
+ end;
+ end;
+
+ end;
+ end;
+ end;
+end;
+
+(********************************************************************************************************************************)
+procedure RecreateIcons(List: TList; const FreePixmaps: boolean = True);
+var i: integer;
+ b: boolean;
+begin
+ if Assigned(List) and (List.Count > 0) then
+ for i := 0 to List.Count - 1 do
+ if Assigned(List[i]) and (TObject(List[i]) is TFileAssoc) then
+ with TFileAssoc(List[i]) do begin
+ // Destroy old objects
+ if (Pixmap <> FileIcon) and (Pixmap <> FileIconLnk) and (Pixmap <> UpDirIcon) and (Pixmap <> FolderIcon) and
+ (Pixmap <> FileIconCached) and (Pixmap <> FileIconLnkCached) and (Pixmap <> FolderIconCached) and (Pixmap <> FolderIconLnkCached) and
+ (Pixmap <> FolderIconLnk) and Assigned(Pixmap) and Assigned(Pixmap.FPixbuf) then
+ begin
+ if FreePixmaps then Pixmap.Free;
+ Pixmap := nil;
+ end;
+ if (LnkPixmap <> FileIcon) and (LnkPixmap <> FileIconLnk) and (LnkPixmap <> UpDirIcon) and (LnkPixmap <> FolderIcon) and
+ (Pixmap <> FileIconCached) and (Pixmap <> FileIconLnkCached) and (Pixmap <> FolderIconCached) and (Pixmap <> FolderIconLnkCached) and
+ (LnkPixmap <> FolderIconLnk) and Assigned(LnkPixmap) and Assigned(LnkPixmap.FPixbuf) then
+ begin
+ if FreePixmaps then LnkPixmap.Free;
+ LnkPixmap := nil;
+ end;
+ // Load / Assign icon
+ b := FileExists(FileTypeIcon);
+ if b then begin
+ if not Assigned(Pixmap) then Pixmap := TGDKPixbuf.Create(nil);
+ b := Pixmap.LoadFromFile(FileTypeIcon);
+ if b then Pixmap.ScaleSimple(ConfRowHeightReal, ConfRowHeightReal);
+ end;
+ if not b then
+ if FileTypeName = ConstFTAMetaDirectory then Pixmap := FolderIcon else
+ if FileTypeName = ConstFTAMetaFile then Pixmap := FileIcon
+ else Pixmap := FileIconCached;
+ // Create Link overelay
+ if Assigned(Pixmap) and Assigned(Pixmap.FPixbuf) and Assigned(SymLinkEmblem) then begin
+ LnkPixmap := TGDKPixbuf.Create(nil);
+ LnkPixmap.FPixbuf := Pixmap.Copy;
+ LnkPixmap.CopyArea(SymLinkEmblem, 0, 0, SymLinkEmblem.Width, SymLinkEmblem.Height, LnkPixmap.Width - SymLinkEmblem.Width, LnkPixmap.Height - SymLinkEmblem.Height);
+ end else LnkPixmap := Pixmap;
+
+ if FileTypeName = ConstFTAMetaDirectory then begin
+ FolderIconCached := Pixmap;
+ FolderIconLnkCached := LnkPixmap;
+ end;
+ if FileTypeName = ConstFTAMetaFile then begin
+ FileIconCached := Pixmap;
+ FileIconLnkCached := LnkPixmap;
+ end;
+ end;
+end;
+
+(********************************************************************************************************************************)
+procedure RemoveIconRefs(List: TList; FreeIt: boolean);
+var i: integer;
+begin
+ if Assigned(List) and (List.Count > 0) then
+ for i := 0 to List.Count - 1 do
+ if Assigned(List[i]) and (TObject(List[i]) is TFileAssoc) then
+ with TFileAssoc(List[i]) do begin
+ if FreeIt and Assigned(Pixmap) then Pixmap.Free;
+ Pixmap := nil;
+ if FreeIt and Assigned(LnkPixmap) then LnkPixmap.Free;
+ LnkPixmap := nil;
+ end;
+end;
+
+(********************************************************************************************************************************)
+procedure AddDefaultItems(List: TList);
+var Item: TFileAssoc;
+ i: integer;
+ Found: boolean;
+begin
+ // Add default directory item
+ try
+ Found := False;
+ if List.Count > 0 then
+ for i := 0 to List.Count - 1 do
+ if TFileAssoc(List[i]).FileTypeName = ConstFTAMetaDirectory then begin
+ Found := True;
+ Break;
+ end;
+ if not Found then begin
+ Item := TFileAssoc.Create;
+ Item.FileTypeName := ConstFTAMetaDirectory;
+ Item.Extensions := '';
+ Item.FileTypeIcon := '';
+ Item.ColorString := '';
+ Item.DefaultAction := 0;
+ Item.ActionList := TList.Create;
+ Item.Pixmap := nil;
+ Item.LnkPixmap := nil;
+ List.Insert(0, Item);
+ end;
+ except end;
+
+ // Add default file item
+ try
+ Found := False;
+ if List.Count > 0 then
+ for i := 0 to List.Count - 1 do
+ if TFileAssoc(List[i]).FileTypeName = ConstFTAMetaFile then begin
+ Found := True;
+ Break;
+ end;
+ if not Found then begin
+ Item := TFileAssoc.Create;
+ Item.FileTypeName := ConstFTAMetaFile;
+ Item.Extensions := '';
+ Item.FileTypeIcon := '';
+ Item.ColorString := '';
+ Item.DefaultAction := 0;
+ Item.ActionList := TList.Create;
+ Item.Pixmap := nil;
+ Item.LnkPixmap := nil;
+ List.Insert(0, Item);
+ end;
+ except end;
+end;
+
+(********************************************************************************************************************************)
+
+end.
diff --git a/UFileTypeSettings.pas b/UFileTypeSettings.pas
new file mode 100644
index 0000000..3917e43
--- /dev/null
+++ b/UFileTypeSettings.pas
@@ -0,0 +1,901 @@
+(*
+ Tux Commander - UFileTypeSettings - The filetype settings dialog
+ Copyright (C) 2007 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit UFileTypeSettings;
+
+interface
+
+uses
+ gtk2, SysUtils, Types, Classes, Variants, GTKControls, GTKForms, GTKStdCtrls, GTKExtCtrls, GTKConsts, GTKView, GTKUtils, GTKDialogs,
+ GTKPixbuf, GTKClasses,
+ UCoreClasses, UGnome;
+
+type
+ TFFileTypeSettings = class(TGTKDialog)
+ TitleFrame: TGTKFrame;
+ TitleLabel: TGTKLabel;
+ TitleEventBox: TGTKEventBox;
+ TitleIcon: TGTKImage;
+ TitleHBox: TGTKHBox;
+ ListView, FNameExtListView, ActionsListView: TGTKListView;
+ ListViewScrolledWindow, FNameExtListViewScrolledWindow, ActionsListViewScrolledWindow: TGTKScrolledWindow;
+ AssocListFrame, IconFrame: TGTKFrame;
+ FNameExtLabel, CommandLabel, DescriptionLabel, AssocDescriptionLabel, IconLabel, ColorLabel: TGTKLabel;
+ AssocListButtonBox, FNameExtButtonBox, ActionsButtonBox, ActionsButtonBox2: TGTKHButtonBox;
+ AssocListVBox, FNameExtVBox, FNameExtVBox2, FNameExtVBox3, ActionsVBox: TGTKVBox;
+ AssocListHBox, FNameExtHBox, FNameExtHBox2, ActionsHBox, ActionsHBox2, AssocDescriptionHBox, ColorHBox: TGTKHBox;
+ AddFiletypeButton, RemoveFiletypeButton, AddExtButton, RemoveExtButton, AddActionButton, RemoveActionButton,
+ SetDefaultActionButton, BrowseButton, BrowseIconButton: TGTKButton;
+ ColorButton: TGnomeColorButton;
+ FNameExtEntry, CommandEntry, DescriptionEntry, AssocDescriptionEntry, IconEntry: TGTKEntry;
+ RunInTerminalCheckBox, AutodetectCheckBox, DefaultColorCheckBox: TGTKCheckButton;
+ Notebook: TGTKNotebook;
+ Table, Table2: TGTKTable;
+ Icon: TGTKImage;
+ GnomeIconButton: TGnomeIconEntry;
+ procedure FormCreate(Sender: TObject); override;
+ procedure FormDestroy(Sender: TObject);
+ procedure FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+ procedure AddFiletypeButtonClick(Sender: TObject);
+ procedure RemoveFiletypeButtonClick(Sender: TObject);
+ procedure ListViewSelectionChanged(Sender: TObject);
+ procedure AddExtButtonClick(Sender: TObject);
+ procedure RemoveExtButtonClick(Sender: TObject);
+ procedure FNameExtEntryKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+ procedure FNameExtListViewSelectionChanged(Sender: TObject);
+ procedure AssocDescriptionEntryChanged(Sender: TObject);
+ procedure ActionsListViewSelectionChanged(Sender: TObject);
+ procedure AddActionButtonClick(Sender: TObject);
+ procedure RemoveActionButtonClick(Sender: TObject);
+ procedure DescriptionEntryChanged(Sender: TObject);
+ procedure CommandEntryChanged(Sender: TObject);
+ procedure RunInTerminalCheckBoxToggled(Sender: TObject);
+ procedure AutodetectCheckBoxToggled(Sender: TObject);
+ procedure SetDefaultActionButtonClick(Sender: TObject);
+ procedure BrowseButtonClick(Sender: TObject);
+ procedure IconEntryChanged(Sender: TObject);
+ procedure BrowseIconButtonClick(Sender: TObject);
+ procedure ColorButtonColorChanged(Sender: TObject);
+ procedure DefaultColorCheckBoxToggled(Sender: TObject);
+ procedure ListViewCellDataFunc(Sender: TObject; tree_view: PGtkTreeView; tree_column : PGtkTreeViewColumn; cell : PGtkCellRenderer; tree_model : PGtkTreeModel; iter : PGtkTreeIter);
+ procedure ActionsListViewCellDataFunc(Sender: TObject; tree_view: PGtkTreeView; tree_column : PGtkTreeViewColumn; cell : PGtkCellRenderer; tree_model : PGtkTreeModel; iter : PGtkTreeIter);
+ procedure GnomeIconButtonIconChanged(Sender: TObject);
+ public
+ IntAssocList: TList;
+ procedure AssignAssocList(List: TList);
+ procedure FillList;
+ procedure CleanItems;
+ private
+ FUseGnomeIconEntry: boolean;
+ end;
+
+var
+ FFileTypeSettings: TFFileTypeSettings;
+
+implementation
+
+uses glib2, ULocale, UFileAssoc, UCoreUtils, UConfig;
+
+
+procedure TFFileTypeSettings.FormCreate(Sender: TObject);
+var Column: TGTKTreeViewColumn;
+ l: TGTKLabel;
+begin
+ FUseGnomeIconEntry := Assigned(gnome_icon_entry_new) and Assigned(gnome_icon_entry_get_filename) and Assigned(gnome_icon_entry_set_filename);
+ SetDefaultSize(450, 620);
+ Caption := LANGEditFileTypesCaption;
+ Buttons := [mbOK, mbCancel];
+ ShowSeparator := False;
+ TitleEventBox := TGTKEventBox.Create(Self);
+ TitleLabel := TGTKLabel.Create(Self);
+ TitleLabel.Caption := LANGTitleLabel_Caption;
+ TitleLabel.UseMarkup := True;
+ TitleLabel.XAlign := 0;
+ TitleLabel.XPadding := 0;
+ TitleLabel.YPadding := 3;
+ TitleEventBox.ControlState := csPrelight;
+ TitleFrame := TGTKFrame.CreateWithoutLabel(Self);
+ TitleFrame.ShadowType := stShadowOut;
+ TitleIcon := TGTKImage.Create(Self);
+ TitleIcon.SetFromStock('gtk-copy', isLargeToolbar);
+ TitleHBox := TGTKHBox.Create(Self);
+ TitleHBox.Homogeneous := False;
+ TitleHBox.AddControlEx(TGTKEventBox.Create(Self), False, False, 5);
+ TitleHBox.AddControlEx(TitleIcon, False, False, 0);
+ TitleHBox.AddControlEx(TitleLabel, True, True, 10);
+ TitleEventBox.AddControl(TitleHBox);
+ TitleFrame.AddControl(TitleEventBox);
+ ClientArea.AddControlEx(TitleFrame, False, True, 0);
+
+ ListView := TGTKListView.CreateTyped(Self, Application.GTKVersion_2_0_5_Up, [lcText, lcText, lcPointer, lcPixbuf]);
+ ListView.RulesHint := True;
+ Column := ListView.Columns.AddTyped(ctImageText);;
+ Column.Caption := LANGExtensionsColumn;
+ Column.AddImageAttribute('pixbuf', 3);
+ Column.AddAttribute('text', 0);
+ if Application.GTKVersion_2_0_5_Up then Column.SortID := 0;
+ Column.Resizable := True;
+ g_object_set(G_OBJECT(Column.FColumn), 'sizing', 2, 'fixed-width', 150, nil);
+{ Column.FixedWidth := 300;
+ Column.SizingMode := smFixed; }
+ if Application.GTKVersion_2_6_0_Up then Column.SetProperty('ellipsize', 3);
+ Column := ListView.Columns.Add;
+ Column.Caption := LANGDescriptionColumn;
+ Column.AddAttribute('text', 1);
+ if Application.GTKVersion_2_0_5_Up then Column.SortID := 1;
+ Column.Resizable := True;
+ ListViewScrolledWindow := TGTKScrolledWindow.Create(Self);
+ ListViewScrolledWindow.AddControl(ListView);
+ ListViewScrolledWindow.HorizScrollBarPolicy := sbAutomatic;
+ ListViewScrolledWindow.VertScrollBarPolicy := sbAutomatic;
+ ListViewScrolledWindow.ShadowType := stShadowIn;
+ AssocListHBox := TGTKHBox.Create(Self);
+ AssocListVBox := TGTKVBox.Create(Self);
+ AssocListVBox.AddControlEx(ListViewScrolledWindow, True, True, 4);
+ AssocListButtonBox := TGTKHButtonBox.Create(Self);
+ AssocListButtonBox.Layout := blEnd;
+ AssocListButtonBox.Spacing := 2;
+ AddFiletypeButton := TGTKButton.CreateFromStock(Self, 'gtk-add');
+ RemoveFiletypeButton := TGTKButton.CreateFromStock(Self, 'gtk-remove');
+ AssocListButtonBox.AddControlEx(AddFiletypeButton, False, False, 0);
+ AssocListButtonBox.AddControlEx(RemoveFiletypeButton, False, False, 0);
+ AssocListVBox.AddControlEx(AssocListButtonBox, False, False, 5);
+ AssocListFrame := TGTKFrame.Create(Self);
+ AssocListFrame.Caption := LANGFileTypesList;
+ AssocListHBox.AddControlEx(AssocListVBox, True, True, 10);
+ AssocListFrame.AddControl(AssocListHBox);
+ AssocListFrame.BorderWidth := 7;
+ ClientArea.AddControlEx(AssocListFrame, True, True, 0);
+
+ Notebook := TGTKNotebook.Create(Self);
+ Notebook.BorderWidth := 8;
+ ClientArea.AddControlEx(Notebook, False, False, 0);
+
+ ActionsListViewScrolledWindow := TGTKScrolledWindow.Create(Self);
+ ActionsListView := TGTKListView.CreateTyped(Self, Application.GTKVersion_2_0_5_Up, [lcText, lcText, lcPointer]);
+ ActionsListView.RulesHint := True;
+ Column := ActionsListView.Columns.Add;
+ Column.Caption := LANGActionName;
+ Column.AddAttribute('text', 0);
+ if Application.GTKVersion_2_0_5_Up then Column.SortID := 0;
+ Column.Resizable := True;
+ Column.FixedWidth := 180;
+ Column.SizingMode := smFixed;
+ Column := ActionsListView.Columns.Add;
+ Column.Caption := LANGCommand;
+ Column.AddAttribute('text', 1);
+ if Application.GTKVersion_2_0_5_Up then Column.SortID := 1;
+ Column.Resizable := True;
+ ActionsListViewScrolledWindow.AddControl(ActionsListView);
+ ActionsListViewScrolledWindow.VertScrollBarPolicy := sbAutomatic;
+ ActionsListViewScrolledWindow.HorizScrollBarPolicy := sbAutomatic;
+ ActionsListViewScrolledWindow.ShadowType := stShadowIn;
+ ActionsListViewScrolledWindow.SetSizeRequest(-1, 95);
+ ActionsVBox := TGTKVBox.Create(Self);
+ ActionsButtonBox := TGTKHButtonBox.Create(Self);
+ ActionsButtonBox.Spacing := 2;
+ ActionsButtonBox.Layout := blEnd;
+ ActionsButtonBox2 := TGTKHButtonBox.Create(Self);
+ ActionsButtonBox2.Layout := blStart;
+ ActionsHBox := TGTKHBox.Create(Self);
+ ActionsHBox2 := TGTKHBox.Create(Self);
+ AddActionButton := TGTKButton.CreateFromStock(Self, 'gtk-add');
+ RemoveActionButton := TGTKButton.CreateFromStock(Self, 'gtk-remove');
+ SetDefaultActionButton := TGTKButton.Create(Self);
+ SetDefaultActionButton.Caption := LANGSetDefaultActionButton_Caption;
+ RunInTerminalCheckBox := TGTKCheckButton.CreateWithLabel(Self, LANGRunInTerminalCheckBox_Caption);
+ RunInTerminalCheckBox.Enabled := False;
+ AutodetectCheckBox := TGTKCheckButton.CreateWithLabel(Self, LANGAutodetectCheckBox_Caption);
+ AutodetectCheckBox.Checked := True;
+ ActionsButtonBox.AddControl(AddActionButton);
+ ActionsButtonBox.AddControl(RemoveActionButton);
+ ActionsButtonBox2.AddControl(SetDefaultActionButton);
+ ActionsHBox.AddControlEx(ActionsButtonBox2, True, True, 5);
+ ActionsHBox.AddControlEx(ActionsButtonBox, True, True, 0);
+ ActionsVBox.AddControlEx(ActionsListViewScrolledWindow, True, True, 3);
+ CommandEntry := TGTKEntry.Create(Self);
+ CommandEntry.Tooltip := LANGCommandEntry_Tooltip;
+ DescriptionEntry := TGTKEntry.Create(Self);
+ BrowseButton := TGTKButton.Create(Self);
+ BrowseButton.Caption := LANGBrowseButton_Caption;
+ CommandLabel := TGTKLabel.Create(Self);
+ CommandLabel.Caption := LANGCommandLabel_Caption;
+ CommandLabel.XAlign := 0;
+ CommandLabel.FocusControl := CommandEntry;
+ CommandLabel.UseUnderline := True;
+ DescriptionLabel := TGTKLabel.Create(Self);
+ DescriptionLabel.Caption := LANGDescriptionLabel_Caption;
+ DescriptionLabel.XAlign := 0;
+ DescriptionLabel.FocusControl := DescriptionEntry;
+ DescriptionLabel.UseUnderline := True;
+ Table := TGTKTable.Create(Self);
+ Table.SetRowColCount(4, 2);
+ Table.Homogeneous := False;
+ Table.RowSpacing := 1;
+ Table.AddControl(0, 0, 1, 1, DescriptionLabel, 0, 0);
+ Table.AddControl(1, 0, 3, 1, DescriptionEntry, 0, 0);
+ Table.AddControl(0, 1, 1, 1, CommandLabel, 0, 0);
+ Table.AddControl(1, 1, 3, 1, CommandEntry, 0, 0);
+ ActionsHBox2.Homogeneous := False;
+ ActionsHBox2.AddControlEx(AutodetectCheckBox, True, True, 5);
+ ActionsHBox2.AddControlEx(RunInTerminalCheckBox, True, True, 5);
+ ActionsHBox2.AddControlEx(BrowseButton, False, False, 0);
+ ActionsVBox.AddControlEx(Table, False, False, 1);
+ ActionsVBox.AddControlEx(ActionsHBox2, False, False, 0);
+ l := TGTKLabel.Create(Self);
+ l.SetSizeRequest(0, 4);
+ ActionsVBox.AddControlEx(l, False, False, 0);
+ ActionsVBox.AddControlEx(ActionsHBox, False, False, 0);
+ ActionsVBox.BorderWidth := 8;
+
+ AssocDescriptionLabel := TGTKLabel.Create(Self);
+ AssocDescriptionLabel.Caption := LANGDescriptionLabel_Caption;
+ AssocDescriptionEntry := TGTKEntry.Create(Self);
+ AssocDescriptionLabel.FocusControl := AssocDescriptionEntry;
+ AssocDescriptionLabel.UseUnderline := True;
+ AssocDescriptionHBox := TGTKHBox.Create(Self);
+ AssocDescriptionHBox.Homogeneous := False;
+ AssocDescriptionHBox.AddControlEx(AssocDescriptionLabel, False, False, 10);
+ AssocDescriptionHBox.AddControlEx(AssocDescriptionEntry, True, True, 10);
+ FNameExtListViewScrolledWindow := TGTKScrolledWindow.Create(Self);
+ FNameExtListViewScrolledWindow.HorizScrollBarPolicy := sbAutomatic;
+ FNameExtListViewScrolledWindow.VertScrollBarPolicy := sbAutomatic;
+ FNameExtListViewScrolledWindow.ShadowType := stShadowIn;
+ FNameExtListView := TGTKListView.CreateTyped(Self, False, [lcText]);
+ FNameExtListView.ShowHeaders := False;
+ Column := FNameExtListView.Columns.Add;
+ Column.AddAttribute('text', 0);
+ FNameExtListViewScrolledWindow.AddControl(FNameExtListView);
+ FNameExtVBox2 := TGTKVBox.Create(Self);
+ FNameExtVBox2.AddControlEx(FNameExtListViewScrolledWindow, True, True, 4);
+ FNameExtHBox := TGTKHBox.Create(Self);
+ FNameExtVBox := TGTKVBox.Create(Self);
+ FNameExtLabel := TGTKLabel.Create(Self);
+ FNameExtLabel.Caption := LANGFNameExtLabel_Caption;
+ AddExtButton := TGTKButton.CreateFromStock(Self, 'gtk-add');
+ RemoveExtButton := TGTKButton.CreateFromStock(Self, 'gtk-remove');
+ FNameExtEntry := TGTKEntry.Create(Self);
+ FNameExtEntry.SetSizeRequest(0, -1);
+ FNameExtLabel.FocusControl := FNameExtEntry;
+ FNameExtLabel.UseUnderline := True;
+ FNameExtHBox.AddControlEx(FNameExtVBox, True, True, 5);
+ FNameExtHBox.AddControlEx(FNameExtVBox2, True, True, 10);
+ FNameExtHBox2 := TGTKHBox.Create(Self);
+ FNameExtHBox2.Homogeneous := False;
+ FNameExtHBox2.AddControlEx(FNameExtLabel, False, False, 4);
+ FNameExtHBox2.AddControlEx(FNameExtEntry, True, True, 1);
+ FNameExtHBox2.BorderWidth := 2;
+ FNameExtButtonBox := TGTKHButtonBox.Create(Self);
+ FNameExtButtonBox.Layout := blEnd;
+ FNameExtButtonBox.AddControl(AddExtButton);
+ FNameExtButtonBox.AddControl(RemoveExtButton);
+ FNameExtButtonBox.BorderWidth := 3;
+ FNameExtVBox.AddControlEx(FNameExtHBox2, False, False, 2);
+ FNameExtVBox.AddControlEx(FNameExtButtonBox, False, False, 2);
+ FNameExtVBox.AddControlEx(TGTKHSeparator.Create(Self), False, False, 2);
+ ColorHBox := TGTKHBox.Create(Self);
+ ColorHBox.Homogeneous := False;
+ ColorHBox.BorderWidth := 2;
+ ColorLabel := TGTKLabel.Create(Self);
+ ColorLabel.Caption := LANGColor;
+ ColorLabel.UseUnderline := True;
+ ColorButton := TGnomeColorButton.Create(Self);
+ ColorButton.SetSizeRequest(40, -1);
+ ColorButton.OnColorChanged := ColorButtonColorChanged;
+ ColorLabel.FocusControl := ColorButton;
+ DefaultColorCheckBox := TGTKCheckButton.CreateWithLabel(Self, LANGDefaultColor);
+ DefaultColorCheckBox.OnToggled := DefaultColorCheckBoxToggled;
+ ColorHBox.AddControlEx(ColorLabel, False, False, 4);
+ ColorHBox.AddControlEx(ColorButton, False, False, 5);
+ ColorHBox.AddControlEx(DefaultColorCheckBox, False, False, 5);
+ FNameExtVBox.AddControlEx(ColorHBox, False, False, 2);
+ FNameExtVBox.AddControlEx(TGTKLabel.Create(Self), True, True, 0);
+ IconLabel := TGTKLabel.Create(Self);
+ IconLabel.Caption := LANGIcon;
+ IconLabel.UseUnderline := True;
+ IconEntry := TGTKEntry.Create(Self);
+ IconEntry.OnChanged := IconEntryChanged;
+ IconLabel.FocusControl := IconEntry;
+ BrowseIconButton := TGTKButton.Create(Self);
+ BrowseIconButton.Caption := LANGBrowseButton_Caption;
+ BrowseIconButton.OnClick := BrowseIconButtonClick;
+ Icon := TGTKImage.Create(Self);
+ Icon.SetSizeRequest(24, 24);
+ IconFrame := TGTKFrame.CreateWithoutLabel(Self);
+ IconFrame.ShadowType := stEtchedIn;
+ IconFrame.AddControl(Icon);
+ if FUseGnomeIconEntry then begin
+ GnomeIconButton := TGnomeIconEntry.Create(Self);
+ GnomeIconButton.OnIconChanged := GnomeIconButtonIconChanged;
+ end;
+
+ Table2 := TGTKTable.Create(Self);
+ Table2.SetRowColCount(8, 3);
+ Table2.AddControl(0, 1, 1, 1, IconLabel, 10, 0);
+ if FUseGnomeIconEntry then Table2.AddControl(1, 0, 1, 3, GnomeIconButton, 0, 0);
+ Table2.AddControl(2, 1, 1, 1, IconFrame, 10, 0);
+ Table2.AddControl(3, 1, 4, 1, IconEntry, 0, 0);
+ Table2.AddControl(7, 1, 1, 1, BrowseIconButton, 10, 0);
+ if FUseGnomeIconEntry then begin
+ Table2.AddControl(2, 0, 6, 1, TGTKLabel.Create(Self), 0, 0);
+ Table2.AddControl(2, 2, 6, 1, TGTKLabel.Create(Self), 0, 0);
+ end;
+ FNameExtVBox3 := TGTKVBox.Create(Self);
+ FNameExtVBox3.BorderWidth := 10;
+ FNameExtVBox3.AddControlEx(AssocDescriptionHBox, False, False, 5);
+ FNameExtVBox3.AddControlEx(TGTKHSeparator.Create(Self), False, False, 3);
+ FNameExtVBox3.AddControlEx(Table2, False, False, 1);
+ FNameExtVBox3.AddControlEx(TGTKHSeparator.Create(Self), False, False, 3);
+ FNameExtVBox3.AddControlEx(FNameExtHBox, True, True, 5);
+ Notebook.AppendPage(FNameExtVBox3, LANGNotebookPageExtensions);
+ Notebook.AppendPage(ActionsVBox, LANGNotebookPageActions);
+
+ OnKeyDown := FormKeyDown;
+ OnDestroy := FormDestroy;
+ AddFiletypeButton.OnClick := AddFiletypeButtonClick;
+ RemoveFiletypeButton.OnClick := RemoveFiletypeButtonClick;
+ ListView.OnSelectionChanged := ListViewSelectionChanged;
+ AddExtButton.OnClick := AddExtButtonClick;
+ RemoveExtButton.OnClick := RemoveExtButtonClick;
+ FNameExtEntry.OnKeyDown := FNameExtEntryKeyDown;
+ FNameExtListView.OnSelectionChanged := FNameExtListViewSelectionChanged;
+ AssocDescriptionEntry.OnChanged := AssocDescriptionEntryChanged;
+ ActionsListView.OnSelectionChanged := ActionsListViewSelectionChanged;
+ AddActionButton.OnClick := AddActionButtonClick;
+ RemoveActionButton.OnClick := RemoveActionButtonClick;
+ DescriptionEntry.OnChanged := DescriptionEntryChanged;
+ CommandEntry.OnChanged := CommandEntryChanged;
+ RunInTerminalCheckBox.OnToggled := RunInTerminalCheckBoxToggled;
+ AutodetectCheckBox.OnToggled := AutodetectCheckBoxToggled;
+ SetDefaultActionButton.OnClick := SetDefaultActionButtonClick;
+ BrowseButton.OnClick := BrowseButtonClick;
+
+ ListView.CellDataFunc := ListViewCellDataFunc;
+ ActionsListView.CellDataFunc := ActionsListViewCellDataFunc;
+ ListViewSelectionChanged(Self);
+ ListView.SetFocus;
+end;
+
+procedure TFFileTypeSettings.FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+begin
+// if Key = GDK_ESCAPE then ModalResult := mbCancel;
+end;
+
+procedure TFFileTypeSettings.FormDestroy(Sender: TObject);
+var i: integer;
+begin
+ if Assigned(IntAssocList) then begin
+ if IntAssocList.Count > 0 then
+ for i := 0 to IntAssocList.Count - 1 do
+ if Assigned(IntAssocList[i]) then TFileAssoc(IntAssocList[i]).Free;
+ IntAssocList.Clear;
+ IntAssocList.Free;
+ end;
+end;
+
+(********************************************************************************************************************************)
+procedure TFFileTypeSettings.AssignAssocList(List: TList);
+var i, j: integer;
+ Item: TFileAssoc;
+ Action: TAssocAction;
+begin
+ IntAssocList := TList.Create;
+ if List.Count > 0 then
+ for i := 0 to List.Count - 1 do begin
+ Item := TFileAssoc.Create;
+ with Item do begin
+ Extensions := TFileAssoc(List[i]).Extensions;
+ FileTypeName := TFileAssoc(List[i]).FileTypeName;
+ DefaultAction := TFileAssoc(List[i]).DefaultAction;
+ FileTypeIcon := TFileAssoc(List[i]).FileTypeIcon;
+ ColorString := TFileAssoc(List[i]).ColorString;
+ Pixmap := TGDKPixbuf.Create(Self);
+ Pixmap.FPixbuf := TFileAssoc(List[i]).Pixmap.Copy;
+ if TFileAssoc(List[i]).ActionList.Count > 0 then
+ for j := 0 to TFileAssoc(List[i]).ActionList.Count - 1 do begin
+ Action := TAssocAction.Create;
+ with Action do begin
+ ActionName := TAssocAction(TFileAssoc(List[i]).ActionList[j]).ActionName;
+ ActionCommand := TAssocAction(TFileAssoc(List[i]).ActionList[j]).ActionCommand;
+ RunInTerminal := TAssocAction(TFileAssoc(List[i]).ActionList[j]).RunInTerminal;
+ AutodetectGUI := TAssocAction(TFileAssoc(List[i]).ActionList[j]).AutodetectGUI;
+ end;
+ Item.ActionList.Add(Action)
+ end;
+ end;
+ IntAssocList.Add(Item);
+ end;
+end;
+
+procedure TFFileTypeSettings.FillList;
+
+ procedure InternalAddItem(index: integer);
+ var ListItem: TGTKListItem;
+ begin
+ with TFileAssoc(IntAssocList[index]) do begin
+ ListItem := ListView.Items.Add;
+ if FileTypeName = ConstFTAMetaDirectory then ListItem.SetValue(0, LANGFileTypeDirectory) else
+ if FileTypeName = ConstFTAMetaFile then ListItem.SetValue(0, LANGFileTypeFile) else
+ ListItem.SetValue(0, Extensions);
+ if (FileTypeName = ConstFTAMetaDirectory) or (FileTypeName = ConstFTAMetaFile)
+ then ListItem.SetValue(1, LANGFileTypeMetafile)
+ else ListItem.SetValue(1, FileTypeName);
+ ListItem.SetValue(2, IntAssocList[index]);
+ ListItem.SetValue(3, Pixmap.FPixbuf);
+ end;
+ end;
+
+var i: integer;
+begin
+ if Assigned(IntAssocList) and (IntAssocList.Count > 0) then begin
+ // Directory metaitem first
+ for i := 0 to IntAssocList.Count - 1 do
+ if TFileAssoc(IntAssocList[i]).FileTypeName = ConstFTAMetaDirectory then begin
+ InternalAddItem(i);
+ Break;
+ end;
+ // Then the file metaitem
+ for i := 0 to IntAssocList.Count - 1 do
+ if TFileAssoc(IntAssocList[i]).FileTypeName = ConstFTAMetaFile then begin
+ InternalAddItem(i);
+ Break;
+ end;
+ // ... and the rest
+ for i := 0 to IntAssocList.Count - 1 do
+ if (TFileAssoc(IntAssocList[i]).FileTypeName <> ConstFTAMetaDirectory) and
+ (TFileAssoc(IntAssocList[i]).FileTypeName <> ConstFTAMetaFile)
+ then InternalAddItem(i);
+ end;
+end;
+
+procedure TFFileTypeSettings.CleanItems;
+var i: integer;
+begin
+ try
+ if IntAssocList.Count > 0 then
+ for i := IntAssocList.Count - 1 downto 0 do
+ with TFileAssoc(IntAssocList[i]) do begin
+{ if Length(Trim(Extensions)) = 0 then begin
+ TFileAssoc(IntAssocList[i]).Free;
+ IntAssocList.Delete(i);
+ Continue;
+ end;
+ if ActionList.Count > 0 then
+ for j := ActionList.Count - 1 downto 0 do
+ if Length(Trim(TAssocAction(ActionList[j]).ActionCommand)) = 0 then begin
+ TAssocAction(ActionList[j]).Free;
+ ActionList.Delete(j);
+ if DefaultAction = j then DefaultAction := 0;
+ if DefaultAction > j then Dec(DefaultAction);
+ end; }
+ if DefaultAction > ActionList.Count - 1 then DefaultAction := 0;
+ end;
+ except end;
+end;
+
+(********************************************************************************************************************************)
+procedure TFFileTypeSettings.AddFiletypeButtonClick(Sender: TObject);
+var Item: TFileAssoc;
+ ListItem: TGTKListItem;
+begin
+ Notebook.PageIndex := 0;
+ Item := TFileAssoc.Create;
+ IntAssocList.Add(Item);
+ ListItem := ListView.Items.Add;
+ ListItem.SetValue(2, Item);
+ ListItem.Selected := True;
+ ListItem.SetCursor(0, False, not Application.GTKVersion_2_2_0_Up, 0.5, 0);
+ ListViewSelectionChanged(Self);
+ AssocDescriptionEntry.SetFocus;
+end;
+
+procedure TFFileTypeSettings.RemoveFiletypeButtonClick(Sender: TObject);
+var Item: TFileAssoc;
+begin
+ if Assigned(ListView.Selected) and Assigned(ListView.Selected.AsPointer(2)) then begin
+ Item := ListView.Selected.AsPointer(2);
+ Item.Free;
+ IntAssocList.Remove(Item);
+ ListView.Items.Delete(ListView.Selected.Index);
+ end;
+end;
+
+procedure TFFileTypeSettings.ListViewSelectionChanged(Sender: TObject);
+var b: boolean;
+ Item: TFileAssoc;
+ s: string;
+ i: integer;
+ ListItem: TGTKListItem;
+ Color: TGDKColor;
+begin
+ b := Assigned(ListView.Selected) and Assigned(ListView.Selected.AsPointer(2));
+ RemoveFiletypeButton.Enabled := b and (TFileAssoc(ListView.Selected.AsPointer(2)).FileTypeName <> ConstFTAMetaDirectory) and
+ (TFileAssoc(ListView.Selected.AsPointer(2)).FileTypeName <> ConstFTAMetaFile);
+ AssocDescriptionEntry.Enabled := RemoveFiletypeButton.Enabled;
+ FNameExtEntry.Enabled := RemoveFiletypeButton.Enabled;
+ FNameExtListView.Enabled := RemoveFiletypeButton.Enabled;
+ AddExtButton.Enabled := RemoveFiletypeButton.Enabled;
+ RemoveExtButton.Enabled := RemoveFiletypeButton.Enabled;
+ FNameExtLabel.Enabled := RemoveFiletypeButton.Enabled;
+ ColorButton.Enabled := RemoveFiletypeButton.Enabled;
+ DefaultColorCheckBox.Enabled := RemoveFiletypeButton.Enabled;
+ ColorLabel.Enabled := RemoveFiletypeButton.Enabled;
+ FNameExtVBox3.Enabled := b;
+ ActionsVBox.Enabled := b;
+ if not b then begin
+ // Visually clean all the fields
+ DescriptionEntry.Text := '';
+ CommandEntry.Text := '';
+ AssocDescriptionEntry.Text := '';
+ FNameExtListView.Items.Clear;
+ FNameExtEntry.Text := '';
+ IconEntry.Text := '';
+ ActionsListView.Items.Clear;
+ ColorButton.SetDefaultColor;
+ ColorButton.Color := PGdkColorToGDKColor(GetDefaultBackgroundColor(0));
+ DefaultColorCheckBox.Checked := True;
+ Exit;
+ end;
+ Item := ListView.Selected.AsPointer(2);
+ FNameExtListView.Items.Clear;
+ if Length(Item.Extensions) > 0 then begin
+ s := Item.Extensions;
+ while Pos(';', s) > 0 do begin
+ FNameExtListView.Items.Add.SetValue(0, Trim(Copy(s, 1, Pos(';', s) - 1)));
+ Delete(s, 1, Pos(';', s));
+ end;
+ if Length(Trim(s)) > 0 then FNameExtListView.Items.Add.SetValue(0, Trim(s));
+ end;
+ IconEntry.Text := Item.FileTypeIcon;
+ IconEntryChanged(Self);
+ if (TFileAssoc(ListView.Selected.AsPointer(2)).FileTypeName = ConstFTAMetaDirectory) or
+ (TFileAssoc(ListView.Selected.AsPointer(2)).FileTypeName = ConstFTAMetaFile)
+ then AssocDescriptionEntry.Text := ListView.Selected.AsString(0)
+ else AssocDescriptionEntry.Text := ListView.Selected.AsString(1);
+ DefaultColorCheckBox.Checked := not StringToGDKColor(Item.ColorString, Color);
+ if DefaultColorCheckBox.Checked then ColorButton.SetDefaultColor
+ else begin
+ ColorButton.UnsetDefaultColor;
+ ColorButton.Color := Color;
+ end;
+ // Actions
+ ActionsListView.Items.Clear;
+ if Item.ActionList.Count > 0 then
+ for i := 0 to Item.ActionList.Count - 1 do
+ with TAssocAction(Item.ActionList[i]) do begin
+ ListItem := ActionsListView.Items.Add;
+ if Item.DefaultAction = i
+ then begin
+ ListItem.SetValue(0, ActionName + LANGDefault);
+ ListItem.SetValue(1, ActionCommand);
+ end else begin
+ ListItem.SetValue(0, ActionName);
+ ListItem.SetValue(1, ActionCommand);
+ end;
+ ListItem.SetValue(2, Item.ActionList[i]);
+ end;
+ if ActionsListView.Items.Count > 0 then ActionsListView.Items[0].Selected := True;
+ ActionsListViewSelectionChanged(Sender);
+end;
+
+procedure TFFileTypeSettings.AddExtButtonClick(Sender: TObject);
+var i: integer;
+ s, sx: string;
+begin
+ if Length(Trim(FNameExtEntry.Text)) = 0 then Exit;
+ if FNameExtListView.Items.Count > 0 then
+ for i := 0 to FNameExtListView.Items.Count - 1 do
+ if ANSIUpperCase(FNameExtListView.Items[i].AsString(0)) = ANSIUpperCase(Trim(FNameExtEntry.Text)) then Exit;
+ sx := ANSILowerCase(Trim(FNameExtEntry.Text));
+ if sx[1] = '.' then Delete(sx, 1, 1);
+ FNameExtListView.Items.Add.SetValue(0, sx);
+ s := TFileAssoc(ListView.Selected.AsPointer(2)).Extensions;
+ if Length(s) > 0 then s := s + ';';
+ s := s + sx;
+ ListView.Selected.SetValue(0, s);
+ TFileAssoc(ListView.Selected.AsPointer(2)).Extensions := s;
+ FNameExtEntry.Text := '';
+end;
+
+procedure TFFileTypeSettings.RemoveExtButtonClick(Sender: TObject);
+var s: string;
+ i: integer;
+begin
+ try
+ if (FNameExtListView.Items.Count = 0) or (not Assigned(FNameExtListView.Selected)) or
+ (not Assigned(ListView.Selected)) or (not Assigned(ListView.Selected.AsPointer(2))) then Exit;
+ s := TFileAssoc(ListView.Selected.AsPointer(2)).Extensions;
+ i := Pos(FNameExtListView.Selected.AsString(0), s);
+ if i = 0 then Exit;
+ Delete(s, i, Length(FNameExtListView.Selected.AsString(0)));
+ if s = ';' then s := '' else
+ if (Length(s) >= i) and (s[i] = ';') then Delete(s, i, 1) else
+ if (Length(s) >= i - 1) and (i > 1) and (s[i - 1] = ';') then Delete(s, i - 1, 1);
+ ListView.Selected.SetValue(0, s);
+ TFileAssoc(ListView.Selected.AsPointer(2)).Extensions := s;
+ FNameExtListView.Items.Delete(FNameExtListView.Selected.Index);
+ except end;
+end;
+
+procedure TFFileTypeSettings.FNameExtEntryKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+begin
+ if (Key = GDK_RETURN) or (Key = GDK_KP_ENTER) then AddExtButtonClick(Sender);
+end;
+
+procedure TFFileTypeSettings.FNameExtListViewSelectionChanged(Sender: TObject);
+begin
+ RemoveExtButton.Enabled := (FNameExtListView.Items.Count > 0) and Assigned(FNameExtListView.Selected);
+end;
+
+procedure TFFileTypeSettings.AssocDescriptionEntryChanged(Sender: TObject);
+begin
+ if Assigned(ListView.Selected) and Assigned(ListView.Selected.AsPointer(2)) and
+ (TFileAssoc(ListView.Selected.AsPointer(2)).FileTypeName <> ConstFTAMetaDirectory) and
+ (TFileAssoc(ListView.Selected.AsPointer(2)).FileTypeName <> ConstFTAMetaFile) then
+ begin
+ TFileAssoc(ListView.Selected.AsPointer(2)).FileTypeName := AssocDescriptionEntry.Text;
+ ListView.Selected.SetValue(1, AssocDescriptionEntry.Text);
+ end;
+end;
+
+procedure TFFileTypeSettings.ActionsListViewSelectionChanged(Sender: TObject);
+var b: boolean;
+ Action: TAssocAction;
+begin
+ b := (ActionsListView.Items.Count > 0) and Assigned(ActionsListView.Selected) and Assigned(ActionsListView.Selected.AsPointer(2));
+ RemoveActionButton.Enabled := b;
+ SetDefaultActionButton.Enabled := b;
+ Table.Enabled := b;
+ BrowseButton.Enabled := b;
+ RunInTerminalCheckBox.Enabled := b;
+ AutodetectCheckBox.Enabled := b;
+ if not b then begin
+ // Visually clean all the fields
+ DescriptionEntry.Text := '';
+ CommandEntry.Text := '';
+ Exit;
+ end;
+ Action := ActionsListView.Selected.AsPointer(2);
+ DescriptionEntry.Text := Action.ActionName;
+ CommandEntry.Text := Action.ActionCommand;
+ RunInTerminalCheckBox.Checked := Action.RunInTerminal;
+ AutodetectCheckBox.Checked := Action.AutodetectGUI;
+ RunInTerminalCheckBox.Enabled := not AutodetectCheckBox.Checked;
+end;
+
+procedure TFFileTypeSettings.AddActionButtonClick(Sender: TObject);
+var Action: TAssocAction;
+ ListItem: TGTKListItem;
+begin
+ if (not Assigned(ListView.Selected)) or (not Assigned(ListView.Selected.AsPointer(2))) then Exit;
+ Action := TAssocAction.Create;
+ TFileAssoc(ListView.Selected.AsPointer(2)).ActionList.Add(Action);
+ ListItem := ActionsListView.Items.Add;
+ ListItem.SetValue(2, Action);
+ ListItem.Selected := True;
+ ActionsListViewSelectionChanged(Self);
+ DescriptionEntry.SetFocus;
+end;
+
+procedure TFFileTypeSettings.RemoveActionButtonClick(Sender: TObject);
+var Action: TAssocAction;
+ Item: TFileAssoc;
+begin
+ try
+ if (ActionsListView.Items.Count = 0) or (not Assigned(ActionsListView.Selected)) or
+ (not Assigned(ListView.Selected)) or (not Assigned(ListView.Selected.AsPointer(2))) then Exit;
+ Item := ListView.Selected.AsPointer(2);
+ Action := ActionsListView.Selected.AsPointer(2);
+ if (Item.DefaultAction > Item.ActionList.Count - 1) or (Item.ActionList[Item.DefaultAction] = Action)
+ then Item.DefaultAction := 0;
+ if Item.DefaultAction > ActionsListView.Selected.Index then Dec(Item.DefaultAction);
+ Action.Free;
+ Item.ActionList.Remove(Action);
+ ActionsListView.Items.Delete(ActionsListView.Selected.Index);
+ ListViewSelectionChanged(Sender);
+ except end;
+end;
+
+procedure TFFileTypeSettings.DescriptionEntryChanged(Sender: TObject);
+var Item: TFileAssoc;
+begin
+ if Assigned(ListView.Selected) and Assigned(ListView.Selected.AsPointer(2)) and
+ Assigned(ActionsListView.Selected) and Assigned(ActionsListView.Selected.AsPointer(2)) then
+ begin
+ TAssocAction(ActionsListView.Selected.AsPointer(2)).ActionName := DescriptionEntry.Text;
+ Item := ListView.Selected.AsPointer(2);
+ if (Item.ActionList.Count - 1 >= Item.DefaultAction) and (ActionsListView.Selected.AsPointer(2) = Item.ActionList[Item.DefaultAction])
+ then ActionsListView.Selected.SetValue(0, DescriptionEntry.Text + LANGDefault)
+ else ActionsListView.Selected.SetValue(0, DescriptionEntry.Text);
+ end;
+end;
+
+procedure TFFileTypeSettings.CommandEntryChanged(Sender: TObject);
+begin
+ if Assigned(ListView.Selected) and Assigned(ListView.Selected.AsPointer(2)) and
+ Assigned(ActionsListView.Selected) and Assigned(ActionsListView.Selected.AsPointer(2)) then
+ begin
+ TAssocAction(ActionsListView.Selected.AsPointer(2)).ActionCommand := CommandEntry.Text;
+ ActionsListView.Selected.SetValue(1, CommandEntry.Text);
+ end;
+end;
+
+procedure TFFileTypeSettings.RunInTerminalCheckBoxToggled(Sender: TObject);
+begin
+ if Assigned(ListView.Selected) and Assigned(ListView.Selected.AsPointer(2)) and
+ Assigned(ActionsListView.Selected) and Assigned(ActionsListView.Selected.AsPointer(2))
+ then TAssocAction(ActionsListView.Selected.AsPointer(2)).RunInTerminal := RunInTerminalCheckBox.Checked;
+end;
+
+procedure TFFileTypeSettings.AutodetectCheckBoxToggled(Sender: TObject);
+begin
+ if Assigned(ListView.Selected) and Assigned(ListView.Selected.AsPointer(2)) and
+ Assigned(ActionsListView.Selected) and Assigned(ActionsListView.Selected.AsPointer(2)) then
+ begin
+ TAssocAction(ActionsListView.Selected.AsPointer(2)).AutodetectGUI := AutodetectCheckBox.Checked;
+ RunInTerminalCheckBox.Enabled := not AutodetectCheckBox.Checked;
+ end;
+end;
+
+procedure TFFileTypeSettings.SetDefaultActionButtonClick(Sender: TObject);
+var SelIdx: integer;
+begin
+ if (ActionsListView.Items.Count = 0) or (not Assigned(ActionsListView.Selected)) or
+ (not Assigned(ListView.Selected)) or (not Assigned(ListView.Selected.AsPointer(2))) then Exit;
+ SelIdx := ActionsListView.Selected.Index;
+ TFileAssoc(ListView.Selected.AsPointer(2)).DefaultAction := SelIdx;
+ ListViewSelectionChanged(Sender);
+ ActionsListView.Items[SelIdx].Selected := True;
+end;
+
+procedure TFFileTypeSettings.BrowseButtonClick(Sender: TObject);
+var Dialog: TGTKFileSelectionDialog;
+begin
+ if (ActionsListView.Items.Count = 0) or (not Assigned(ActionsListView.Selected)) or
+ (not Assigned(ListView.Selected)) or (not Assigned(ListView.Selected.AsPointer(2))) then Exit;
+ Dialog := TGTKFileSelectionDialog.Create(Self);
+ try
+ Dialog.ShowFileOpButtons := False;
+ Dialog.FileName := AppPath;
+ if Byte(Dialog.Run) = 251 then CommandEntry.Text := Dialog.FileName;
+ AppPath := IncludeTrailingPathDelimiter(ExtractFilePath(Dialog.FileName));
+ finally
+ Dialog.Free;
+ end;
+end;
+
+(********************************************************************************************************************************)
+procedure TFFileTypeSettings.IconEntryChanged(Sender: TObject);
+var Pixmap, DefIcon: TGDKPixbuf;
+begin
+ if Assigned(ListView.Selected) and Assigned(ListView.Selected.AsPointer(2)) then begin
+ if TFileAssoc(ListView.Selected.AsPointer(2)).FileTypeName = ConstFTAMetaDirectory
+ then DefIcon := FolderIconCached
+ else DefIcon := FileIconCached;
+ TFileAssoc(ListView.Selected.AsPointer(2)).FileTypeIcon := IconEntry.Text;
+ if not FileExists(UTF8ToANSI(IconEntry.Text)) then Icon.CopyFromPixbuf(DefIcon) else
+ begin
+ Pixmap := TGDKPixbuf.Create(Self);
+ Pixmap.LoadFromFile(UTF8ToANSI(IconEntry.Text));
+ if Pixmap.FPixbuf <> nil then begin
+ Pixmap.ScaleSimple(ConfRowHeightReal, ConfRowHeightReal);
+ Icon.SetFromPixbuf(Pixmap);
+ end else Icon.CopyFromPixbuf(DefIcon);
+ Pixmap.FPixbuf := nil;
+ Pixmap.Free;
+ end;
+ ListView.Selected.SetValue(3, Icon.GetPixbuf);
+ if FUseGnomeIconEntry then
+ if FileExists(UTF8ToANSI(IconEntry.Text)) then GnomeIconButton.Filename := UTF8ToANSI(IconEntry.Text)
+ else GnomeIconButton.Filename := '';
+ end;
+end;
+
+procedure TFFileTypeSettings.BrowseIconButtonClick(Sender: TObject);
+var Dialog: TGTKFileSelectionDialog;
+begin
+ if (not Assigned(ListView.Selected)) or (not Assigned(ListView.Selected.AsPointer(2))) then Exit;
+ Dialog := TGTKFileSelectionDialog.CreateWithTitle(Self, LANGBrowseForIcon);
+ try
+ Dialog.ShowFileOpButtons := False;
+ if FileExists(UTF8ToANSI(IconEntry.Text)) then Dialog.FileName := IconEntry.Text
+ else Dialog.FileName := IconPath;
+ if Byte(Dialog.Run) = 251 then IconEntry.Text := Dialog.FileName;
+ IconPath := IncludeTrailingPathDelimiter(ExtractFilePath(Dialog.FileName));
+ finally
+ Dialog.Free;
+ end;
+end;
+
+procedure TFFileTypeSettings.ColorButtonColorChanged(Sender: TObject);
+begin
+ if Assigned(ListView.Selected) and Assigned(ListView.Selected.AsPointer(2)) then
+ TFileAssoc(ListView.Selected.AsPointer(2)).ColorString := GDKColorToString(ColorButton.Color);
+end;
+
+procedure TFFileTypeSettings.DefaultColorCheckBoxToggled(Sender: TObject);
+begin
+ if DefaultColorCheckBox.Checked then ColorButton.SetDefaultColor
+ else ColorButton.UnsetDefaultColor;
+ if DefaultColorCheckBox.Checked and Assigned(ListView.Selected) and Assigned(ListView.Selected.AsPointer(2))
+ then TFileAssoc(ListView.Selected.AsPointer(2)).ColorString := '';
+end;
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure TFFileTypeSettings.ListViewCellDataFunc(Sender: TObject; tree_view: PGtkTreeView; tree_column : PGtkTreeViewColumn; cell : PGtkCellRenderer; tree_model : PGtkTreeModel; iter : PGtkTreeIter);
+var ColumnID: integer;
+ ImageCol: boolean;
+ Data: TFileAssoc;
+ s: Pointer;
+begin
+ if not Application.GTKVersion_2_0_5_Up then Exit;
+ ColumnID := gtk_tree_view_column_get_sort_column_id(tree_column);
+ ImageCol := False;
+ if ColumnID = 0 then ImageCol := GTK_IS_CELL_RENDERER_PIXBUF(cell);
+ if ImageCol then Exit;
+ Data := nil;
+ gtk_tree_model_get(tree_model, iter, 2, @Data, -1);
+ gtk_tree_model_get(tree_model, iter, ColumnID, @s, -1);
+
+ if Assigned(Data) and (Data is TFileAssoc) and ((Data.FileTypeName = ConstFTAMetaDirectory) or (Data.FileTypeName = ConstFTAMetaFile))
+ then
+ case ColumnID of
+ 0: g_object_set(cell, 'markup', g_strconcat('<span weight="bold" underline="single">', s, '</span>', nil), nil);
+ 1: g_object_set(cell, 'markup', g_strconcat('<span style="italic">', s, '</span>', nil), nil);
+ end
+ else g_object_set(cell, 'markup', s, nil);
+end;
+
+
+procedure TFFileTypeSettings.ActionsListViewCellDataFunc(Sender: TObject; tree_view: PGtkTreeView; tree_column : PGtkTreeViewColumn; cell : PGtkCellRenderer; tree_model : PGtkTreeModel; iter : PGtkTreeIter);
+var ColumnID: integer;
+ ImageCol: boolean;
+ Data: TAssocAction;
+ s: Pointer;
+ Item: TFileAssoc;
+begin
+ if not Application.GTKVersion_2_0_5_Up then Exit;
+ ColumnID := gtk_tree_view_column_get_sort_column_id(tree_column);
+ ImageCol := False;
+ if ColumnID = 0 then ImageCol := GTK_IS_CELL_RENDERER_PIXBUF(cell);
+ if ImageCol then Exit;
+ Item := ListView.Selected.AsPointer(2);
+ if Item = nil then Exit;
+ Data := nil;
+ gtk_tree_model_get(tree_model, iter, 2, @Data, -1);
+ gtk_tree_model_get(tree_model, iter, ColumnID, @s, -1);
+
+ if Assigned(Data) and (Data is TAssocAction) and (Item.ActionList.IndexOf(Data) = Item.DefaultAction)
+ then g_object_set(cell, 'markup', g_strconcat('<span weight="bold">', s, '</span>', nil), nil)
+ else g_object_set(cell, 'markup', s, nil);
+end;
+
+(********************************************************************************************************************************)
+procedure TFFileTypeSettings.GnomeIconButtonIconChanged(Sender: TObject);
+begin
+ IconEntry.Text := GnomeIconButton.Filename;
+end;
+
+
+
+
+end.
+
diff --git a/UGTKLoader.pas b/UGTKLoader.pas
new file mode 100644
index 0000000..b135f6b
--- /dev/null
+++ b/UGTKLoader.pas
@@ -0,0 +1,62 @@
+(*
+ UGTKLoader - Special unit, which has to be loaded before gtk_init in GTKForms
+ Copyright (C) 2004 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+
+unit UGTKLoader;
+
+interface
+
+implementation
+
+uses glib2, gtk2, Classes, SysUtils;
+
+const ConfDefaultSettingsDir = '.tuxcmd';
+
+
+procedure WriteGTKRCTreeViewFix;
+var s, s2: string;
+ StringList: TStringList;
+begin
+ s := IncludeTrailingPathDelimiter(g_get_home_dir) + ConfDefaultSettingsDir;
+ s2 := IncludeTrailingPathDelimiter(s) + 'gtkrc';
+ if not FileExists(s2) then begin
+ StringList := TStringList.Create;
+ StringList.Add('style "treeview-style" {');
+ StringList.Add(' GtkTreeView::horizontal_separator = 0');
+ StringList.Add(' GtkTreeView::vertical_separator = 0');
+ StringList.Add('}');
+ StringList.Add('class "GtkTreeView" style "treeview-style"');
+ try
+ if not DirectoryExists(s) then
+ if not ForceDirectories(s) then begin
+ WriteLn('*** Error: Cannot make homedir');
+ Exit;
+ end;
+ StringList.SaveToFile(s2);
+ StringList.Free;
+ except
+ on E: Exception do WriteLn('*** Error: Cannot save .gtkrc in your home (', E.ClassName, '): ', E.Message);
+ end;
+ end;
+ if gtk_check_version(2, 4, 0) = nil then gtk_rc_add_default_file(PChar(s2));
+end;
+
+initialization
+ WriteGTKRCTreeViewFix;
+end.
diff --git a/UGlibC_compat.pas b/UGlibC_compat.pas
new file mode 100644
index 0000000..342ab2d
--- /dev/null
+++ b/UGlibC_compat.pas
@@ -0,0 +1,256 @@
+(*
+ Tux Commander - UGlibC_compat - glibc compatibility for 32- and 64-bit platforms
+ Copyright (C) 2008 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit UGlibC_compat;
+
+interface
+uses Classes, SysUtils {$IFNDEF CPU64}, Libc{$ENDIF};
+
+
+const GLIBC_LIB = 'libc.so.6';
+
+type
+ PGlibc_IOFile = pointer;
+
+ TGlibc_timespec = packed record
+{$IFNDEF CPU64} // 32-bit platform
+ tv_sec: longint; // Seconds.
+ tv_nsec: longint; // Nanoseconds.
+{$ELSE} // 64-bit platform
+ tv_sec: Int64; // Seconds.
+ tv_nsec: Int64; // Nanoseconds.
+{$ENDIF}
+ end;
+
+ PGlibc_stat = ^TGlibc_stat;
+{$IFDEF KYLIX}
+ TGlibc_stat = TStatBuf;
+{$ELSE}
+{$IFNDEF CPU64} // 32-bit platform
+ TGlibc_stat = packed record
+ st_dev : __dev_t;
+ __pad1 : word;
+ __align_pad1 : word;
+ st_ino : __ino_t;
+ st_mode : __mode_t;
+ st_nlink : __nlink_t;
+ st_uid : __uid_t;
+ st_gid : __gid_t;
+ st_rdev : __dev_t;
+ __pad2 : word;
+ __align_pad2 : word;
+ st_size : __off_t;
+ st_blksize : __blksize_t;
+ st_blocks : __blkcnt_t;
+
+ st_atim : TGlibc_timespec;
+ st_mtim : TGlibc_timespec;
+ st_ctim : TGlibc_timespec;
+
+{ st_atime : __time_t;
+ __unused1 : dword;
+ st_mtime : __time_t;
+ __unused2 : dword;
+ st_ctime : __time_t;
+ __unused3 : dword; }
+
+ __unused4 : dword;
+ __unused5 : dword;
+ end;
+{$ELSE} // 64-bit platform
+ TGlibc_stat = packed record
+ st_dev : QWORD;
+ st_ino : Int64;
+ st_nlink : QWORD;
+ st_mode : DWORD;
+ st_uid : DWORD;
+ st_gid : DWORD;
+ pad0 : DWORD;
+ st_rdev : QWORD;
+ st_size : Int64;
+ st_blksize : Int64;
+ st_blocks : Int64;
+ st_atim : TGlibc_timespec;
+ st_mtim : TGlibc_timespec;
+ st_ctim : TGlibc_timespec;
+ __unused : array[1..3] of QWORD;
+ end;
+{$ENDIF}
+{$ENDIF}
+
+ PGlibc_stat64 = ^TGlibc_stat64;
+{$IFDEF KYLIX}
+ TGlibc_stat64 = TStatBuf64;
+{$ELSE}
+ TGlibc_stat64 = packed record
+{$IFNDEF CPU64} // 32-bit platform
+ st_dev : __dev_t;
+ __pad1 : dword;
+ __st_ino : __ino_t;
+ st_mode : __mode_t;
+ st_nlink : __nlink_t;
+ st_uid : __uid_t;
+ st_gid : __gid_t;
+ st_rdev : __dev_t;
+ __pad2 : dword;
+ st_size : __off64_t;
+ st_blksize : __blksize_t;
+ st_blocks : __blkcnt64_t;
+
+ st_atim : TGlibc_timespec;
+ st_mtim : TGlibc_timespec;
+ st_ctim : TGlibc_timespec;
+
+{ st_atime : __time_t;
+ __unused1 : dword;
+ st_mtime : __time_t;
+ __unused2 : dword;
+ st_ctime : __time_t;
+ __unused3 : dword; }
+
+ st_ino : __ino64_t;
+{$ELSE} // 64-bit platform
+ st_dev : QWORD;
+ st_ino : Int64;
+ st_nlink : QWORD;
+ st_mode : DWORD;
+ st_uid : DWORD;
+ st_gid : DWORD;
+ pad0 : DWORD;
+ st_rdev : QWORD;
+ st_size : Int64;
+ st_blksize : Int64;
+ st_blocks : Int64;
+ st_atim : TGlibc_timespec;
+ st_mtim : TGlibc_timespec;
+ st_ctim : TGlibc_timespec;
+ __unused : array[1..3] of QWORD;
+{$ENDIF}
+ end;
+{$ENDIF}
+
+
+ TGlibc_fsid_t = packed record
+ __val : array[0..1] of longint;
+ end;
+
+ PGlibc_statfs64 = ^TGlibc_statfs64;
+ TGlibc_statfs64 = packed record
+{$IFNDEF CPU64} // 32-bit platform
+ f_type : longint;
+ f_bsize : longint;
+ f_blocks : __fsblkcnt64_t;
+ f_bfree : __fsblkcnt64_t;
+ f_bavail : __fsblkcnt64_t;
+ f_files : __fsfilcnt64_t;
+ f_ffree : __fsfilcnt64_t;
+ f_fsid : __fsid_t;
+ f_namelen : longint;
+ f_spare : array[0..5] of longint;
+{$ELSE} // 64-bit platform
+ f_type : Int64;
+ f_bsize : Int64;
+ f_blocks : QWORD;
+ f_bfree : QWORD;
+ f_bavail : QWORD;
+ f_files : QWORD;
+ f_ffree : QWORD;
+ f_fsid : TGlibc_fsid_t;
+ f_namelen : Int64;
+ f_spare : array[0..5] of Int64;
+{$ENDIF}
+ end;
+
+ PGlibc_utimbuf = ^TGlibc_utimbuf;
+ TGlibc_utimbuf = packed record
+{$IFNDEF CPU64} // 32-bit platform
+ actime : __time_t;
+ modtime : __time_t;
+{$ELSE} // 64-bit platform
+ actime : Int64;
+ modtime : Int64;
+{$ENDIF}
+ end;
+
+ PGlibc_mntent = ^TGlibc_mntent;
+ TGlibc_mntent = packed record
+{$IFNDEF CPU64} // 32-bit platform
+ mnt_fsname : Pchar;
+ mnt_dir : Pchar;
+ mnt_type : Pchar;
+ mnt_opts : Pchar;
+ mnt_freq : longint;
+ mnt_passno : longint;
+{$ELSE} // 64-bit platform
+ mnt_fsname : Pchar;
+ mnt_dir : Pchar;
+ mnt_type : Pchar;
+ mnt_opts : Pchar;
+ mnt_freq : Longint;
+ mnt_passno : Longint;
+{$ENDIF}
+ end;
+
+{$IFDEF KYLIX}
+ QWORD = Int64;
+{$ENDIF}
+
+
+
+
+{$IFNDEF KYLIX}
+function glibc_stat64(const afile: PChar; buf: PGlibc_stat64): longint; cdecl; external GLIBC_LIB name 'stat64';
+function glibc_lstat64(const path: PChar; buf: PGlibc_stat64): longint; cdecl; external GLIBC_LIB name 'lstat64';
+{$ELSE}
+function glibc_stat64(const afile: PChar; buf: PGlibc_stat64): longint;
+function glibc_lstat64(const path: PChar; buf: PGlibc_stat64): longint;
+{$ENDIF}
+
+
+function glibc_statfs64(const path: PChar; buf: PGlibc_statfs64): longint; cdecl; external GLIBC_LIB name 'statfs64';
+
+function glibc_fileno(stream: PGlibc_IOFile): integer; cdecl; external GLIBC_LIB name 'fileno';
+
+function glibc_utime(const afile: Pchar; buf: PGlibc_utimbuf): Longint; cdecl; external GLIBC_LIB name 'utime';
+
+
+function glibc_setmntent(const afile: Pchar; mode: Pchar): PGlibc_IOFile; cdecl; external GLIBC_LIB name 'setmntent';
+function glibc_getmntent(stream: PGlibc_IOFile): PGlibc_mntent; cdecl; external GLIBC_LIB name 'getmntent';
+function glibc_endmntent(stream: PGlibc_IOFile): Longint; cdecl; external GLIBC_LIB name 'endmntent';
+
+
+implementation
+
+{$IFDEF KYLIX}
+function glibc__xstat64(ver: integer; const afile: PChar; buf: PGlibc_stat64): longint; cdecl; external GLIBC_LIB name '__xstat64';
+function glibc__lxstat64(ver: integer; const path: PChar; buf: PGlibc_stat64): longint; cdecl; external GLIBC_LIB name '__lxstat64';
+
+function glibc_stat64(const afile: PChar; buf: PGlibc_stat64): longint;
+begin
+ Result := glibc__xstat64(_STAT_VER, afile, buf);
+end;
+
+function glibc_lstat64(const path: PChar; buf: PGlibc_stat64): longint;
+begin
+ Result := glibc__lxstat64(_STAT_VER, path, buf);
+end;
+{$ENDIF}
+
+end.
+
diff --git a/UGlibThreads.pas b/UGlibThreads.pas
new file mode 100644
index 0000000..3d24afd
--- /dev/null
+++ b/UGlibThreads.pas
@@ -0,0 +1,111 @@
+(*
+ Tux Commander - UGlibThreads - Threading support through the GLIB library
+ Copyright (C) 2007 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit UGlibThreads;
+
+interface
+
+uses glib2;
+
+// function xg_thread_supported(): gboolean; cdecl; external 'libgthread-2.0.so' name 'g_thread_supported';
+// function xg_thread_create(func: TGThreadFunc; data: gpointer; joinable: gboolean; error: PPGError): PGThread; external 'libgthread-2.0.so' name 'g_thread_create';
+
+
+type
+ TGlibThreadMethod = procedure of object;
+
+ TGlibThread = class
+ private
+ FHandle: PGThread;
+ FCreateSuspended: Boolean;
+ FTerminated: Boolean;
+ FSuspended: Boolean;
+// FFreeOnTerminate: Boolean;
+// FFinished: Boolean;
+// procedure SetSuspended(Value: Boolean);
+ protected
+// procedure DoTerminate; virtual;
+ procedure Execute; virtual; abstract;
+ property Terminated: Boolean read FTerminated;
+ public
+ constructor Create(CreateSuspended: Boolean);
+ destructor Destroy; override;
+// procedure AfterConstruction; override;
+ procedure Resume;
+{ procedure Suspend;
+ procedure Terminate;
+ function WaitFor: LongWord;
+ property FreeOnTerminate: Boolean read FFreeOnTerminate write FFreeOnTerminate;
+ property Suspended: Boolean read FSuspended write SetSuspended; }
+ end;
+
+
+implementation
+
+uses Classes, SysUtils, UCoreUtils;
+
+function xg_thread_func(data: gpointer): gpointer; cdecl;
+begin
+ DebugMsg(['(II) TGlibThread.g_thread_func']);
+ try
+{ if Assigned(data) and (TObject(data) is TGlibThread)
+ then TGlibThread(data).Execute
+ else DebugMsg(['(EE) TGlibThread.g_thread_func: wrong data argument']); }
+ except
+ on E: Exception do
+ DebugMsg(['(EE) TGlibThread.g_thread_func: Exception ', E.ClassName, ': ', E.Message]);
+ end;
+ Result := data;
+end;
+
+constructor TGlibThread.Create(CreateSuspended: Boolean);
+begin
+ DebugMsg(['(II) TGlibThread.Create']);
+ inherited Create;
+ FSuspended := CreateSuspended;
+ FCreateSuspended := CreateSuspended;
+ FHandle := nil;
+end;
+
+destructor TGlibThread.Destroy;
+begin
+ DebugMsg(['(II) TGlibThread.Destroy']);
+{ if (FHandle <> nil) and not FFinished then
+ begin
+ Terminate;
+ if FCreateSuspended then
+ Resume;
+ WaitFor;
+ end; }
+ inherited Destroy;
+end;
+
+procedure TGlibThread.Resume;
+var err: PGError;
+begin
+ DebugMsg(['(II) TGlibThread.Resume']);
+ err := nil;
+ FHandle := g_thread_create_full(@xg_thread_func, Self, 0, False, False, G_THREAD_PRIORITY_NORMAL, @err);
+ if FHandle = nil then DebugMsg(['(EE) TGlibThread.Resume: Error creating new thread: ', err.message]);
+end;
+
+
+
+end.
+
diff --git a/UGnome.pas b/UGnome.pas
new file mode 100644
index 0000000..f90886b
--- /dev/null
+++ b/UGnome.pas
@@ -0,0 +1,1274 @@
+(*
+ Tux Commander - UGnome - libgnome and libgnomeui related functions and classes
+ Copyright (C) 2008 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit UGnome;
+
+interface
+
+uses glib2, gdk2, gdk2pixbuf, gtk2, pango, Classes, Libc,
+ GTKForms, GTKControls, GTKStdCtrls, GTKExtCtrls, GTKClasses, GTKDialogs, GTKUtils, GTKConsts;
+
+type TGnomeColorButton = class(TGTKButton)
+ private
+ FUseGnomeUI: boolean;
+ FColor: TGDKColor;
+ FColorChanged: TNotifyEvent;
+ function GetColor: TGDKColor;
+ procedure SetColor(Value: TGDKColor);
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ procedure SetDefaultColor;
+ procedure UnsetDefaultColor;
+ property Color: GTKClasses.TGDKColor read GetColor write SetColor;
+ published
+ property OnColorChanged: TNotifyEvent read FColorChanged write FColorChanged;
+ end;
+
+ TGnomeIconEntry = class(TGTKVBox)
+ private
+ FIconChanged: TNotifyEvent;
+ function GetFilename: string;
+ procedure SetFilename(Value: string);
+ procedure SetPixmapSubdir(Value: string);
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ published
+ property Filename: string read GetFilename write SetFilename;
+ property PixpamSubdir: string write SetPixmapSubdir;
+ property OnIconChanged: TNotifyEvent read FIconChanged write FIconChanged;
+ end;
+
+ TGnomeDateEdit = class(TGTKHBox)
+ private
+ function GetTime: TDateTime;
+ procedure SetTime(Value: TDateTime);
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ published
+ property Time: TDateTime read GetTime write SetTime;
+ end;
+
+ TEphyNotebook = class;
+
+ TEphyNotebookReorderedEvent = procedure (Sender: TObject; const Source, Dest: integer) of object;
+ TEphyNotebookTabCloseEvent = procedure (Sender: TObject; const TabNum: integer; var CanClose: boolean) of object;
+ TEphyNotebookTabDoubleClickEvent = procedure (Sender: TObject; const TabNum: integer) of object;
+ TEphyNotebookFindNotebookAtPointerEvent = function (Sender: TObject; const AbsX, AbsY: integer): TEphyNotebook of object;
+ TEphyNotebookMoveTabToAnotherNotebookEvent = function (Sender: TObject; Destination: TEphyNotebook; const SourceTabNo, DestTabNo: integer): boolean of object;
+ TEphyNotebookTabSwitchedEvent = procedure (Sender: TObject; const NewTabNum: integer; const ShouldFocus: boolean) of object;
+ TEphyNotebookTabFocusOnlyEvent = procedure (Sender: TObject; const NewTabNum: integer) of object;
+ // Extended capatibilities notebook (icons, close buttons, reordering by drag&drop)
+ TEphyNotebook = class(TGTKNotebook)
+ private
+ FShowCloseButtons: boolean;
+ FShowTooltips: boolean;
+ FAllowDragDrop: boolean;
+ FAllowDragOutside: boolean;
+ FTooltips: PGtkTooltips;
+ FOnNotebookReordered: TEphyNotebookReorderedEvent;
+ FOnTabClose: TEphyNotebookTabCloseEvent;
+ FOnTabDoubleClick: TEphyNotebookTabDoubleClickEvent;
+ FOnFindNotebookAtPointer: TEphyNotebookFindNotebookAtPointerEvent;
+ FOnMoveTabToAnotherNotebook: TEphyNotebookMoveTabToAnotherNotebookEvent;
+ FOnTabSwitchedEvent: TEphyNotebookTabSwitchedEvent;
+ FOnTabFocusOnlyEvent: TEphyNotebookTabFocusOnlyEvent;
+
+ // Notebook private
+ motion_notify_handler_id, grab_notify_handler_id, toplevel_grab_broken_handler_id, toplevel_motion_notify_handler_id,
+ toplevel_button_release_handler_id: gulong;
+ x_start, y_start, drag_start_idx: gint;
+ drag_in_progress: gboolean;
+ cursor: PGdkCursor;
+
+ FBusy: boolean;
+
+ procedure SetShowCloseButtons(Value: boolean);
+ procedure SetShowTooltips(Value: boolean);
+ procedure SetAllowDragDrop(Value: boolean);
+ procedure SetAllowDragOutside(Value: boolean);
+
+ function find_tab_num_at_pos(abs_x, abs_y: integer): integer;
+ function find_notebook_at_pointer(abs_x, abs_y: integer): TEphyNotebook;
+ function is_in_notebook_window(notebook: TEphyNotebook; abs_x, abs_y: integer): boolean;
+ function drag_start(time: guint32): gboolean;
+ procedure drag_stop(time: guint32);
+ procedure move_tab(dest_position: integer);
+ procedure move_tab_to_another_notebook(dest: TEphyNotebook; event: PGdkEventMotion);
+
+ function GetPageIndex: integer;
+ procedure SetPageIndex(Value: integer);
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ function AppendPage(Child: TGTKControl; Caption: string): integer;
+ function InsertPage(Position: integer; Child: TGTKControl; Caption: string): integer;
+ procedure RemovePage(PageNo: integer);
+ function GetTabCaption(PageNo: integer): string;
+ procedure SetTabCaption(PageNo: integer; Caption: string);
+ procedure SetTabTooltip(PageNo: integer; Tooltip: string);
+ published
+ property PageIndex: integer read GetPageIndex write SetPageIndex;
+ property ShowCloseButtons: boolean read FShowCloseButtons write SetShowCloseButtons default False;
+ property ShowTooltips: boolean read FShowTooltips write SetShowTooltips default False;
+ property AllowDragDrop: boolean read FAllowDragDrop write SetAllowDragDrop default False;
+ property AllowDragOutside: boolean read FAllowDragOutside write SetAllowDragOutside default False;
+ property OnNotebookReordered: TEphyNotebookReorderedEvent read FOnNotebookReordered write FOnNotebookReordered;
+ property OnTabClose: TEphyNotebookTabCloseEvent read FOnTabClose write FOnTabClose;
+ property OnTabDoubleClick: TEphyNotebookTabDoubleClickEvent read FOnTabDoubleClick write FOnTabDoubleClick;
+ property OnFindNotebookAtPointer: TEphyNotebookFindNotebookAtPointerEvent read FOnFindNotebookAtPointer write FOnFindNotebookAtPointer;
+ property OnMoveTabToAnotherNotebook: TEphyNotebookMoveTabToAnotherNotebookEvent read FOnMoveTabToAnotherNotebook write FOnMoveTabToAnotherNotebook;
+ property OnTabSwitched: TEphyNotebookTabSwitchedEvent read FOnTabSwitchedEvent write FOnTabSwitchedEvent;
+ property OnTabFocusOnlyEvent: TEphyNotebookTabFocusOnlyEvent read FOnTabFocusOnlyEvent write FOnTabFocusOnlyEvent;
+ end;
+
+
+
+
+function MessageBoxShowOnce(const Text: string; const DontShowAgainText: string; var DontShowAgainChecked: boolean;
+ Buttons: TMessageButtons = [mbOK]; Style: TMessageStyle = mbInfo;
+ Default: TMessageButton = mbNone; Escape: TMessageButton = mbNone): TMessageButton;
+
+
+
+type PGnomeColorPicker = PGtkWidget;
+ PGnomeIconEntry = PGtkWidget;
+ PGnomeDateEdit = PGtkWidget;
+
+const AFTER_ALL_TABS = -1;
+ NOT_IN_APP_WINDOWS = -2;
+
+var libGnomeUI2Handle, libGnome2Handle, libGtk2Handle: Pointer;
+ gnome_about_new: function (const name, version, copyright, comments: Pchar; const authors, documenters: PPchar;
+ const translator_credits: Pchar; logo_pixbuf: PGdkPixbuf): PGtkWidget; cdecl;
+{$IFDEF KYLIX}
+ gnome_program_init: function (const app_id, app_version: PChar; const module_info: Pointer; argc: longint; argv: PPChar;
+ const first_property_name: PChar; const first_property_value: Int64; const second_property_name: PChar): Pointer; cdecl;
+{$ELSE}
+ gnome_program_init: function (const app_id, app_version: PChar; const module_info: Pointer; argc: integer; argv: PPChar): Pointer; varargs; cdecl;
+{$ENDIF}
+ libgnome_module_info_get: function: Pointer; cdecl;
+ libgnomeui_module_info_get: function: Pointer; cdecl;
+ gnome_color_picker_new: function: PGnomeColorPicker; cdecl;
+ gnome_color_picker_get_i16: procedure (cp: PGnomeColorPicker; R, G, B, A: Pword); cdecl;
+ gnome_color_picker_set_i16: procedure (cp: PGnomeColorPicker; R, G, B, A: word); cdecl;
+ gnome_icon_entry_new: function (const history_id, browse_dialog_title: Pchar): PGtkWidget; cdecl;
+ gnome_icon_entry_set_pixmap_subdir: procedure (ientry: PGnomeIconEntry; const subdir: Pgchar); cdecl;
+ gnome_icon_entry_get_filename: function (ientry: PGnomeIconEntry): Pgchar; cdecl;
+ gnome_icon_entry_set_filename: function (ientry: PGnomeIconEntry; const filename: Pgchar): gboolean; cdecl;
+ gnome_date_edit_new: function (the_time: __time_t; show_time, use_24_format: gboolean): PGtkWidget; cdecl;
+ gnome_date_edit_set_time: procedure (gde: PGnomeDateEdit; the_time: time_t); cdecl;
+ gnome_date_edit_get_time: function (gde: PGnomeDateEdit): time_t; cdecl;
+ gtk_event_box_set_visible_window: procedure (event_box: PGtkEventBox; visible_window: gboolean); cdecl;
+ gtk_icon_size_lookup_for_settings: function (settings: PGtkSettings; size: TGtkIconSize; width, height: Pgint): gboolean; cdecl;
+
+
+
+procedure LoadGnomeLibs;
+
+implementation
+
+uses SysUtils, DateUtils, UConfig, UCoreUtils, ULocale;
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure TGnomeColorButton_OnClick(button: PGtkButton; user_data: Pgpointer); cdecl;
+var Dialog: TGTKColorSelectionDialog;
+ i: integer;
+begin
+ if Assigned(user_data) then
+ with TGnomeColorButton(user_data) do begin
+ Dialog := TGTKColorSelectionDialog.CreateWithTitle(Parent, LANGSelectFileTypeColor);
+ try
+ Dialog.ShowPalette := True;
+ Dialog.Color := Color;
+ if Byte(Dialog.Run) = 251 then begin
+ for i := 0 to 4 do SetBackgroundColor(i, GDKColorToPGdkColor(Dialog.Color));
+ FColor := Dialog.Color;
+ if Assigned(FColorChanged) then FColorChanged(TGnomeColorButton(user_data));
+ end;
+ finally
+ Dialog.Free;
+ end;
+ end;
+end;
+
+procedure TGnomeColorButton_color_set(colorpicker: PGnomeColorPicker; arg1, arg2, arg3, arg4: Word; user_data: Pointer); cdecl;
+begin
+ if Assigned(user_data) and Assigned(TGnomeColorButton(user_data).FColorChanged) then
+ with TGnomeColorButton(user_data) do begin
+ FColorChanged(TGnomeColorButton(user_data));
+ FColor := Color;
+ end;
+end;
+
+constructor TGnomeColorButton.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FUseGnomeUI := Assigned(gnome_color_picker_new) and Assigned(gnome_color_picker_get_i16) and Assigned(gnome_color_picker_set_i16);
+ if FUseGnomeUI then begin
+ FWidget := gnome_color_picker_new;
+ g_signal_connect(PGtkObject(FWidget), 'color-set', G_CALLBACK(@TGnomeColorButton_color_set), Self);
+ end else begin
+ FWidget := gtk_button_new_with_label(''); // This should be here due to height-related troubles
+ g_signal_connect(PGtkObject(FWidget), 'clicked', G_CALLBACK(@TGnomeColorButton_OnClick), Self);
+ BorderStyle := bsHalf;
+ end;
+ Show;
+ FColorChanged := nil;
+end;
+
+destructor TGnomeColorButton.Destroy;
+begin
+ inherited Destroy;
+end;
+
+function TGnomeColorButton.GetColor: TGDKColor;
+var R, G, B, A: word;
+begin
+ if FUseGnomeUI then begin
+ if Enabled then begin
+ gnome_color_picker_get_i16(FWidget, @R, @G, @B, @A);
+ Result := PGdkColorToGDKColor(AllocateColor(nil, R, G, B));
+ end else Result := FColor;
+ end else Result := FColor;
+end;
+
+procedure TGnomeColorButton.SetColor(Value: TGDKColor);
+var i: integer;
+begin
+ FColor := Value;
+ if FUseGnomeUI then gnome_color_picker_set_i16(FWidget, Value.red, Value.green, Value.blue, 0)
+ else for i := 0 to 4 do SetBackgroundColor(i, GDKColorToPGdkColor(Value));
+end;
+
+procedure TGnomeColorButton.SetDefaultColor;
+var i: integer;
+begin
+ if not Enabled then Exit;
+ gtk_widget_set_sensitive(PGtkWidget(FWidget), False);
+ if FUseGnomeUI then begin
+ FColor := GetColor;
+ gnome_color_picker_set_i16(FWidget, 0, 0, 0, 0)
+// SetColor(PGdkColorToGDKColor(AllocateColor(FWidget, 0, 0, 0){GetDefaultBackgroundColor(1)}));
+ end else for i := 0 to 4 do SetBackgroundColor(i, GetDefaultBackgroundColor(i));
+end;
+
+procedure TGnomeColorButton.UnsetDefaultColor;
+var i: integer;
+begin
+ if Enabled then Exit;
+ gtk_widget_set_sensitive(PGtkWidget(FWidget), True);
+ if FUseGnomeUI then SetColor(FColor) else
+ for i := 0 to 4 do SetBackgroundColor(i, GDKColorToPGdkColor(FColor));
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure TGnomeIconEntry_changed(iconentry: PGnomeIconEntry; user_data: gpointer); cdecl;
+begin
+ if Assigned(user_data) and Assigned(TGnomeIconEntry(user_data).FIconChanged) then
+ TGnomeIconEntry(user_data).FIconChanged(TGnomeIconEntry(user_data));
+end;
+
+constructor TGnomeIconEntry.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FIconChanged := nil;
+ FWidget := gnome_icon_entry_new('History', 'Browse');
+ g_signal_connect(PGtkObject(FWidget), 'changed', G_CALLBACK(@TGnomeIconEntry_changed), Self);
+ Show;
+end;
+
+destructor TGnomeIconEntry.Destroy;
+begin
+ inherited Destroy;
+end;
+
+function TGnomeIconEntry.GetFilename: string;
+begin
+ Result := gnome_icon_entry_get_filename(FWidget);
+end;
+
+procedure TGnomeIconEntry.SetFilename(Value: string);
+begin
+ gnome_icon_entry_set_filename(FWidget, PChar(Value));
+end;
+
+procedure TGnomeIconEntry.SetPixmapSubdir(Value: string);
+begin
+ gnome_icon_entry_set_pixmap_subdir(FWidget, PChar(Value));
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGnomeDateEdit.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FWidget := gnome_date_edit_new(0, False, True);
+ Show;
+end;
+
+destructor TGnomeDateEdit.Destroy;
+begin
+ inherited Destroy;
+end;
+
+function TGnomeDateEdit.GetTime: TDateTime;
+begin
+ Result := UnixToDateTime(gnome_date_edit_get_time(FWidget));
+end;
+
+procedure TGnomeDateEdit.SetTime(Value: TDateTime);
+begin
+ gnome_date_edit_set_time(FWidget, DateTimeToUnix(Value));
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+
+function button_press_cb(notebook: PGtkWidget; event: PGdkEventButton; data: gpointer): gboolean; cdecl; forward;
+function button_release_cb(notebook: PGtkWidget; event: PGdkEventButton; data: gpointer): gboolean; cdecl; forward;
+function scroll_event_callback(widget: PGtkWidget; event: PGdkEventScroll; user_data: gpointer): gboolean; cdecl; forward;
+
+constructor TEphyNotebook.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FTooltips := gtk_tooltips_new;
+ gtk_tooltips_disable(FTooltips);
+ cursor := nil;
+ FShowCloseButtons := False;
+ FShowTooltips := False;
+ FAllowDragDrop := False;
+ FAllowDragOutside := False;
+ FOnNotebookReordered := nil;
+ FOnTabClose := nil;
+ FOnTabDoubleClick := nil;
+ FOnFindNotebookAtPointer := nil;
+ FOnMoveTabToAnotherNotebook := nil;
+ FOnTabFocusOnlyEvent := nil;
+ FBusy := False;
+
+ // Set up drag-and-drop
+ g_signal_connect(FWidget, 'button-press-event', G_CALLBACK(@button_press_cb), Self);
+ g_signal_connect(FWidget, 'button-release-event', G_CALLBACK(@button_release_cb), Self);
+ g_signal_connect(FWidget, 'scroll-event', G_CALLBACK(@scroll_event_callback), Self);
+ gtk_widget_add_events(FWidget, GDK_BUTTON1_MOTION_MASK);
+
+ Show;
+end;
+
+destructor TEphyNotebook.Destroy;
+begin
+ inherited Destroy;
+end;
+
+procedure TEphyNotebook.SetShowCloseButtons(Value: boolean);
+begin
+ FShowCloseButtons := Value;
+
+ // Apply settings here
+end;
+
+
+procedure TEphyNotebook.SetShowTooltips(Value: boolean);
+begin
+ FShowTooltips := Value;
+ if Value then gtk_tooltips_enable(FTooltips)
+ else gtk_tooltips_disable(FTooltips);
+end;
+
+procedure TEphyNotebook.SetAllowDragDrop(Value: boolean);
+begin
+ FAllowDragDrop := Value;
+ if (not Value) and drag_in_progress then drag_stop(GDK_CURRENT_TIME (* FIXME? *));
+end;
+
+procedure TEphyNotebook.SetAllowDragOutside(Value: boolean);
+begin
+ FAllowDragOutside := Value;
+ if (not Value) and drag_in_progress then drag_stop(GDK_CURRENT_TIME (* FIXME? *));
+end;
+
+// Following code is inspired by ephy-notebook.c from Epiphany 2.14.1
+procedure tab_label_style_set_cb(hbox: PGtkWidget; previous_style: PGtkStyle; user_data: gpointer); cdecl;
+var button: PGtkWidget;
+{ metrics: PPangoFontMetrics;
+ context: PPangoContext;
+ char_width, }h, w: integer;
+begin
+{ context := gtk_widget_get_pango_context(hbox);
+ metrics := pango_context_get_metrics(context, hbox^.style^.font_desc, pango_context_get_language(context));
+
+ char_width := pango_font_metrics_get_approximate_digit_width(metrics);
+ pango_font_metrics_unref(metrics); }
+
+ if @gtk_icon_size_lookup_for_settings <> nil
+ then gtk_icon_size_lookup_for_settings(gtk_widget_get_settings(hbox), GTK_ICON_SIZE_MENU, @w, @h)
+ else begin w := 16; h := 16; end;
+
+// gtk_widget_set_size_request(hbox, TAB_WIDTH_N_CHARS * PANGO_PIXELS(char_width) + 2 * w, -1);
+
+ button := g_object_get_data(G_OBJECT(hbox), 'close-button');
+ gtk_widget_set_size_request(button, w + 2, h + 2);
+end;
+
+procedure close_button_clicked_cb(widget: PGtkWidget; data: pointer); cdecl;
+var tab: PGtkWidget;
+ ntb: TEphyNotebook;
+ position: integer;
+ CanClose: boolean;
+begin
+ tab := g_object_get_data(G_OBJECT(widget), 'child');
+ ntb := TEphyNotebook(data);
+
+ position := gtk_notebook_page_num(GTK_NOTEBOOK(ntb.FWidget), GTK_WIDGET(tab));
+// DebugMsg(['@******* close_button_clicked_cb: Position = ', position, ', data = 0x', IntToHex(Integer(data), 8), ', widget = 0x', IntToHex(Integer(widget), 8)]);
+
+ CanClose := True;
+
+ if @ntb.FOnTabClose <> nil then ntb.FOnTabClose(ntb, position, CanClose);
+
+ if CanClose then gtk_notebook_remove_page(GTK_NOTEBOOK(ntb.FWidget), position);
+end;
+
+function label_ebox_button_pressed(widget: PGtkWidget; event: PGdkEventButton; data: pointer): gboolean; cdecl;
+var tab: PGtkWidget;
+ ntb: TEphyNotebook;
+ position: integer;
+begin
+ Result := False;
+ ntb := TEphyNotebook(data);
+ tab := g_object_get_data(G_OBJECT(widget), 'child');
+ position := gtk_notebook_page_num(GTK_NOTEBOOK(ntb.FWidget), GTK_WIDGET(tab));
+// DebugMsg(['@******* label_ebox_button_pressed, button = ', event^.button, ', Position = ', position, ', data = 0x', IntToHex(Integer(data), 8), ', widget = 0x', IntToHex(Integer(widget), 8)]);
+
+ if (((event^.button = 2) and (event^._type = GDK_BUTTON_PRESS)) or // Middle-click
+ ((event^.button = 1) and (event^._type = GDK_2BUTTON_PRESS))) and // Double-click
+ Assigned(ntb.FOnTabDoubleClick) then
+ begin
+ ntb.FOnTabDoubleClick(ntb, position);
+ Result := True;
+ ntb.x_start := -1;
+ ntb.y_start := -1;
+ end;
+end;
+
+
+function TEphyNotebook.AppendPage(Child: TGTKControl; Caption: string): integer;
+begin
+ Result := InsertPage(ChildrenCount, Child, Caption);
+end;
+
+function TEphyNotebook.InsertPage(Position: integer; Child: TGTKControl; Caption: string): integer;
+var hbox, label_hbox, label_ebox, _label, close_button, image, icon: PGtkWidget;
+ rcstyle: PGtkRcStyle;
+begin
+ // set hbox spacing and label padding (see below) so that there's an equal amount of space around the label
+ hbox := gtk_hbox_new(FALSE, 0);
+
+ label_ebox := gtk_event_box_new();
+ if @gtk_event_box_set_visible_window <> nil then gtk_event_box_set_visible_window(GTK_EVENT_BOX (label_ebox), FALSE);
+ gtk_box_pack_start(GTK_BOX (hbox), label_ebox, TRUE, TRUE, 0);
+ g_signal_connect(G_OBJECT(label_ebox), 'button-press-event', G_CALLBACK(@label_ebox_button_pressed), Self);
+ g_object_set_data(G_OBJECT(label_ebox), 'child', Child.FWidget);
+
+ label_hbox := gtk_hbox_new (FALSE, 0);
+ gtk_container_add(GTK_CONTAINER (label_ebox), label_hbox);
+
+ // setup close button
+ close_button := gtk_button_new ();
+ gtk_button_set_relief (GTK_BUTTON (close_button), GTK_RELIEF_NONE);
+ // don't allow focus on the close button
+ g_object_set(G_OBJECT(close_button), 'can-focus', gboolean(FALSE), nil);
+ gtk_button_set_relief (GTK_BUTTON (close_button), GTK_RELIEF_NONE);
+
+ rcstyle := gtk_rc_style_new ();
+ rcstyle^.xthickness := Ord(rcstyle^.ythickness = 0);
+ gtk_widget_modify_style (close_button, rcstyle);
+ gtk_rc_style_unref (rcstyle);
+
+ image := gtk_image_new_from_stock (GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU);
+ gtk_container_add (GTK_CONTAINER (close_button), image);
+ gtk_box_pack_start (GTK_BOX (hbox), close_button, FALSE, FALSE, 0);
+
+ gtk_tooltips_set_tip(FTooltips, close_button, 'Close tab', nil);
+ g_object_set_data(G_OBJECT(close_button), 'tab', hbox);
+ g_object_set_data(G_OBJECT(close_button), 'child', Child.FWidget);
+ g_signal_connect(G_OBJECT(close_button), 'clicked', G_CALLBACK(@close_button_clicked_cb), Self);
+
+ // setup site icon, empty by default
+ icon := gtk_image_new ();
+ gtk_box_pack_start (GTK_BOX (label_hbox), icon, FALSE, FALSE, 0);
+
+ // setup label
+ _label := gtk_label_new(PChar(Caption));
+// gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END);
+// gtk_label_set_single_line_mode (GTK_LABEL (label), TRUE);
+ gtk_misc_set_alignment (GTK_MISC(_label), 0.0, 0.5);
+ gtk_misc_set_padding (GTK_MISC(_label), 2, 0);
+ gtk_box_pack_start (GTK_BOX(label_hbox), _label, TRUE, TRUE, 0);
+
+ // Set minimal size
+ g_signal_connect(hbox, 'style-set', G_CALLBACK(@tab_label_style_set_cb), nil);
+
+
+ gtk_widget_show (hbox);
+ gtk_widget_show (label_ebox);
+ gtk_widget_show (label_hbox);
+ gtk_widget_show (_label);
+ gtk_widget_show (image);
+ if FShowCloseButtons then gtk_widget_show (close_button);
+
+ g_object_set_data (G_OBJECT (hbox), 'label', _label);
+ g_object_set_data (G_OBJECT (hbox), 'label-ebox', label_ebox);
+ g_object_set_data (G_OBJECT (hbox), 'icon', icon);
+ g_object_set_data (G_OBJECT (hbox), 'close-button', close_button);
+ g_object_set_data (G_OBJECT (hbox), 'tooltips', FTooltips);
+
+ Result := gtk_notebook_insert_page(PGtkNotebook(FWidget), Child.FWidget, hbox, Position);
+end;
+
+procedure TEphyNotebook.RemovePage(PageNo: integer);
+begin
+ gtk_notebook_remove_page(PGtkNotebook(FWidget), PageNo);
+end;
+
+function TEphyNotebook.GetTabCaption(PageNo: integer): string;
+var wid, lab: PGtkWidget;
+begin
+ wid := gtk_notebook_get_tab_label(PGtkNotebook(FWidget), gtk_notebook_get_nth_page(PGtkNotebook(FWidget), PageNo));
+ lab := g_object_get_data (G_OBJECT(wid), 'label');
+ Result := PgcharToString(gtk_label_get_text(GTK_LABEL(lab)));
+end;
+
+procedure TEphyNotebook.SetTabCaption(PageNo: integer; Caption: string);
+var wid, lab: PGtkWidget;
+begin
+ wid := gtk_notebook_get_tab_label(PGtkNotebook(FWidget), gtk_notebook_get_nth_page(PGtkNotebook(FWidget), PageNo));
+ lab := g_object_get_data (G_OBJECT(wid), 'label');
+ gtk_label_set_text(GTK_LABEL(lab), StringToPgchar(Caption));
+end;
+
+procedure TEphyNotebook.SetTabTooltip(PageNo: integer; Tooltip: string);
+var wid, lab: PGtkWidget;
+begin
+ wid := gtk_notebook_get_tab_label(PGtkNotebook(FWidget), gtk_notebook_get_nth_page(PGtkNotebook(FWidget), PageNo));
+ lab := g_object_get_data (G_OBJECT(wid), 'label-ebox');
+ gtk_tooltips_set_tip(FTooltips, lab, StringToPgchar(Tooltip), nil);
+end;
+
+function TEphyNotebook.GetPageIndex: integer;
+begin
+ Result := gtk_notebook_get_current_page(PGtkNotebook(FWidget));
+end;
+
+procedure TEphyNotebook.SetPageIndex(Value: integer);
+begin
+ DebugMsg(['SetPageIndex(Value = ', Value, ')']);
+ if (GetPageIndex <> Value) and (Value >= 0) then begin
+ gtk_notebook_set_page(PGtkNotebook(FWidget), Value);
+ if Assigned(FOnTabSwitchedEvent) then FOnTabSwitchedEvent(Self, Value, True);
+ end;
+end;
+
+
+function TEphyNotebook.find_tab_num_at_pos(abs_x, abs_y: integer): integer;
+var tab_pos: TGtkPositionType;
+ page_num: integer;
+ page, tab: PGtkWidget;
+ max_x, max_y, x_root, y_root: integer;
+begin
+ page_num := 0;
+ tab_pos := gtk_notebook_get_tab_pos(PGtkNotebook(FWidget));
+
+ if PGtkNotebook(FWidget)^.first_tab = nil then begin
+ DebugMsg(['@***************** first_tab = nil']);
+ Result := AFTER_ALL_TABS;
+// DebugMsg(['@******* find_tab_num_at_pos(abs_x = ', abs_x, ', abs_y = ', abs_y, ', Result = ', Result, ')']);
+ Exit;
+ end;
+
+ // For some reason unfullscreen + quick click can cause a wrong click event to be reported to the tab
+ if not is_in_notebook_window(Self, abs_x, abs_y) then begin
+ Result := NOT_IN_APP_WINDOWS;
+// DebugMsg(['@******* find_tab_num_at_pos(abs_x = ', abs_x, ', abs_y = ', abs_y, ', Result = ', Result, ')']);
+ Exit;
+ end;
+
+ while gtk_notebook_get_nth_page(PGtkNotebook(FWidget), page_num) <> nil do
+ begin
+ page := gtk_notebook_get_nth_page(PGtkNotebook(FWidget), page_num);
+ tab := gtk_notebook_get_tab_label(PGtkNotebook(FWidget), page);
+ if tab = nil then begin
+ Result := AFTER_ALL_TABS;
+// DebugMsg(['@******* find_tab_num_at_pos(abs_x = ', abs_x, ', abs_y = ', abs_y, ', Result = ', Result, ')']);
+ Exit;
+ end;
+
+ if (not GTK_WIDGET_MAPPED(GTK_WIDGET(tab))) then begin
+ Inc(page_num);
+ Continue;
+ end;
+
+ gdk_window_get_origin(GDK_WINDOW(tab^.window), @x_root, @y_root);
+
+ max_x := x_root + tab^.allocation.x + tab^.allocation.width;
+ max_y := y_root + tab^.allocation.y + tab^.allocation.height;
+
+ if (((tab_pos = GTK_POS_TOP) or (tab_pos = GTK_POS_BOTTOM)) and (abs_x <= max_x)) or
+ ((tab_pos = GTK_POS_LEFT) or (tab_pos = GTK_POS_RIGHT)) and (abs_y <= max_y) then
+ begin
+ Result := page_num;
+// DebugMsg(['@******* find_tab_num_at_pos(abs_x = ', abs_x, ', abs_y = ', abs_y, ', Result = ', Result, ')']);
+ Exit;
+ end;
+
+ Inc(page_num);
+ end;
+ Result := AFTER_ALL_TABS;
+// DebugMsg(['@******* find_tab_num_at_pos(abs_x = ', abs_x, ', abs_y = ', abs_y, ', Result = ', Result, ')']);
+end;
+
+function TEphyNotebook.find_notebook_at_pointer(abs_x, abs_y: integer): TEphyNotebook;
+(* var win_at_pointer{, toplevel_win}: PGdkWindow;
+ x, y: integer;
+// toplevel: pointer; *)
+begin
+ Result := nil;
+ if Assigned(FOnFindNotebookAtPointer) then Result := FOnFindNotebookAtPointer(Self, abs_x, abs_y);
+
+
+// toplevel := NULL;
+{
+ // FIXME multi-head
+ win_at_pointer := gdk_window_at_pointer(@x, @y);
+ if win_at_pointer = nil then begin
+ // We are outside all windows containing a notebook
+ Result := nil;
+ Exit;
+ end;
+}
+
+(* toplevel_win := gdk_window_get_toplevel(win_at_pointer);
+
+ // get the GtkWidget which owns the toplevel GdkWindow
+ gdk_window_get_user_data(toplevel_win, @toplevel);
+
+ // toplevel should be an EphyWindow
+{@@@} if (toplevel <> nil) and GTK_IS_WINDOW toplevel) then
+ begin
+ Result := EPHY_NOTEBOOK(ephy_window_get_notebook(EPHY_WINDOW (toplevel)));
+ Exit;
+ end;
+ *)
+{ Result := nil;}
+end;
+
+function TEphyNotebook.is_in_notebook_window(notebook: TEphyNotebook; abs_x, abs_y: integer): boolean;
+begin
+ Result := find_notebook_at_pointer(abs_x, abs_y) <> nil;
+// Result := notebook = find_notebook_at_pointer(abs_x, abs_y);
+// Result := True;
+end;
+
+
+
+
+(*
+void
+terminal_notebook_move_tab (TerminalNotebook *src,
+ TerminalNotebook *dest,
+ TerminalScreen *screen,
+ int dest_position)
+{
+ if (dest == NULL || src == dest)
+ {
+ gtk_notebook_reorder_child
+ (GTK_NOTEBOOK (src), GTK_WIDGET (screen), dest_position);
+
+ if (src->priv->drag_in_progress == FALSE)
+ {
+ g_signal_emit (G_OBJECT (src), signals[TABS_REORDERED], 0);
+ }
+ }
+ else
+ {
+ GtkWidget *toplevel;
+
+ /* make sure the screen isn't destroyed while we move it */
+ g_object_ref (screen);
+
+ terminal_notebook_remove_tab (src, screen);
+
+ /* Set new window for screen so TerminalScreen widget realize function
+ * works.
+ */
+ toplevel = gtk_widget_get_toplevel (GTK_WIDGET (dest));
+
+ g_assert (GTK_WIDGET_TOPLEVEL (toplevel));
+ g_assert (TERMINAL_IS_WINDOW (toplevel));
+
+ terminal_screen_set_window (screen, TERMINAL_WINDOW(toplevel));
+
+ terminal_notebook_add_tab (dest, screen, dest_position, TRUE);
+ g_object_unref (screen);
+ }
+} *)
+
+procedure TEphyNotebook.drag_stop(time: guint32);
+var toplevel, child: PGtkWidget;
+ drag_stop_idx: integer;
+begin
+ DebugMsg(['@######## drag_stop']);
+
+ toplevel := gtk_widget_get_toplevel(FWidget);
+ if not GTK_WIDGET_TOPLEVEL(toplevel) then begin
+ DebugMsg(['@######## drag_stop: GTK_WIDGET_TOPLEVEL(toplevel) = False']);
+ Exit;
+ end;
+{ child := gtk_bin_get_child(GTK_BIN(toplevel));
+ if child = nil then begin
+ DebugMsg(['@######## drag_stop: child = nil']);
+ Exit;
+ end; }
+
+ // disconnect the signals before ungrabbing!
+ if toplevel_grab_broken_handler_id <> 0 then begin
+ g_signal_handler_disconnect(toplevel, toplevel_grab_broken_handler_id);
+ toplevel_grab_broken_handler_id := 0;
+ end;
+ if grab_notify_handler_id <> 0 then begin
+ g_signal_handler_disconnect(FWidget, grab_notify_handler_id);
+ grab_notify_handler_id := 0;
+ end;
+ if toplevel_motion_notify_handler_id <> 0 then begin
+ g_signal_handler_disconnect(toplevel, toplevel_motion_notify_handler_id);
+ toplevel_motion_notify_handler_id := 0;
+ end;
+ if toplevel_button_release_handler_id <> 0 then begin
+ g_signal_handler_disconnect(toplevel, toplevel_button_release_handler_id);
+ toplevel_button_release_handler_id := 0;
+ end;
+ if motion_notify_handler_id <> 0 then begin
+ g_signal_handler_disconnect(FWidget, motion_notify_handler_id);
+ motion_notify_handler_id := 0;
+ end;
+
+ // ungrab the pointer if it's grabbed
+ // FIXME multihead
+ if gdk_pointer_is_grabbed() then gdk_pointer_ungrab(time);
+ gtk_grab_remove(toplevel);
+
+ if drag_in_progress then begin
+ if FBusy then Exit;
+ drag_stop_idx := gtk_notebook_get_current_page(GTK_NOTEBOOK(FWidget));
+ DebugMsg(['@######## drag_stop: final move: ', drag_start_idx, ' --> ', drag_stop_idx]);
+
+ // The two indexes are equal when moving tab to another notebook
+ if (@FOnNotebookReordered <> nil) and (drag_start_idx <> drag_stop_idx) then begin
+ FBusy := True;
+ FOnNotebookReordered(Self, drag_start_idx, drag_stop_idx);
+ Application.ProcessMessages;
+ FBusy := False;
+ end;
+ end;
+
+ drag_in_progress := False;
+ x_start := -1;
+ y_start := -1;
+end;
+
+function grab_broken_event_cb(widget: PGtkWidget; event: PGdkEvent; data: gpointer): gboolean; cdecl;
+begin
+ if data <> nil then TEphyNotebook(data).drag_stop(GDK_CURRENT_TIME (* FIXME? *));
+ Result := False;
+end;
+
+procedure grab_notify_cb(widget: PGtkWidget; was_grabbed: gboolean; data: gpointer); cdecl;
+begin
+ if data <> nil then TEphyNotebook(data).drag_stop(GDK_CURRENT_TIME (* FIXME? *));
+end;
+
+function toplevel_motion_notify_cb(widget: PGtkWidget; event: PGdkEventMotion; data: gpointer): gboolean; cdecl;
+var ntb, dest: TEphyNotebook;
+ page_num: integer;
+begin
+// DebugMsg(['@######## toplevel_motion_notify_cb(..., data = 0x', IntToHex(Integer(data), 8), ')']);
+ Result := False;
+ ntb := TEphyNotebook(data);
+ if ntb.FBusy then Exit;
+
+ page_num := ntb.find_tab_num_at_pos(Trunc(event^.x_root), Trunc(event^.y_root));
+// if page_num >= -1 then ntb.move_tab(page_num);
+ dest := ntb.find_notebook_at_pointer(Trunc(event^.x_root), Trunc(event^.y_root));
+
+// DebugMsg(['@######## toplevel_motion_notify_cb: page_num = ', page_num, ', dest = 0x', IntToHex(Integer(dest), 8), ')']);
+
+ if (page_num <> NOT_IN_APP_WINDOWS) and (dest <> nil) then begin
+ if (dest <> ntb) and ntb.FAllowDragOutside then ntb.move_tab_to_another_notebook(dest, event) else
+ if page_num >= 0 then ntb.move_tab(page_num) // Same notebook
+ else {DebugMsg(['@######## toplevel_motion_notify_cb: Assertion failed: page_num >= 0'])};
+ end;
+
+
+(* TerminalNotebook *dest = NULL;
+ int page_num, result;
+
+ result = find_notebook_and_tab_at_pos ((gint)event->x_root,
+ (gint)event->y_root,
+ &dest, &page_num);
+
+ if (result != NOT_IN_APP_WINDOWS)
+ {
+ if (dest != notebook)
+ {
+ move_tab_to_another_notebook (notebook, dest,
+ event, page_num);
+ }
+ else
+ {
+ g_assert (page_num >= -1);
+ move_tab (notebook, page_num);
+ }
+ }
+ *)
+end;
+
+function toplevel_button_release_cb(widget: PGtkWidget; event: PGdkEventButton; data: gpointer): gboolean; cdecl;
+var ntb: TEphyNotebook;
+ cur_page_num: integer;
+ cur_page: PGtkWidget;
+begin
+ DebugMsg(['@######## toplevel_button_release_cb(..., data = 0x', IntToHex(Integer(data), 8), ')']);
+ ntb := TEphyNotebook(data);
+
+ if ntb.drag_in_progress then begin
+ cur_page_num := gtk_notebook_get_current_page(GTK_NOTEBOOK(ntb.FWidget));
+ cur_page := gtk_notebook_get_nth_page(GTK_NOTEBOOK(ntb.FWidget), cur_page_num);
+
+(* if (!is_in_notebook_window (notebook, event->x_root, event->y_root)
+ && gtk_notebook_get_n_pages (GTK_NOTEBOOK (notebook)) > 1)
+ {
+ /* Tab was detached */
+ g_signal_emit (G_OBJECT (notebook),
+ signals[TAB_DETACHED], 0, cur_page);
+ } *)
+ end;
+
+ // This must be called even if a drag isn't happening
+ ntb.drag_stop(event^.time);
+ Result := False;
+end;
+
+function TEphyNotebook.drag_start(time: guint32): gboolean;
+var toplevel, child: PGtkWidget;
+begin
+ DebugMsg(['@######## drag_start']);
+ Result := False;
+ // FIXME multihead
+ if drag_in_progress or gdk_pointer_is_grabbed() then Exit;
+ if not FAllowDragDrop then Exit;
+ if FBusy then Exit;
+
+ drag_in_progress := True;
+
+ // get a new cursor, if necessary
+ // FIXME multi-head
+ if cursor = nil then cursor := gdk_cursor_new(GDK_FLEUR);
+
+ toplevel := gtk_widget_get_toplevel(FWidget);
+ if not GTK_WIDGET_TOPLEVEL(toplevel) then begin
+ DebugMsg(['@######## drag_start: GTK_WIDGET_TOPLEVEL(toplevel) = False']);
+ Result := False;
+ Exit;
+ end;
+
+ child := gtk_bin_get_child(GTK_BIN(toplevel));
+ if child = nil then begin
+ DebugMsg(['@######## drag_start: child = nil']);
+ Result := False;
+ Exit;
+ end;
+
+ // grab the pointer
+ gtk_grab_add(toplevel);
+
+ // FIXME multi-head
+ if gdk_pointer_grab(toplevel^.window, False, GDK_BUTTON1_MOTION_MASK or GDK_BUTTON_RELEASE_MASK, nil,
+ cursor, time) <> GDK_GRAB_SUCCESS then
+ begin
+ DebugMsg(['@######## drag_start: gdk_pointer_grab <> GDK_GRAB_SUCCESS']);
+ drag_stop(time);
+ Result := False;
+ Exit;
+ end;
+
+ if (toplevel_grab_broken_handler_id = 0) and (toplevel_motion_notify_handler_id = 0) and
+ (toplevel_button_release_handler_id = 0) and (grab_notify_handler_id = 0) then
+ begin
+ toplevel_grab_broken_handler_id := g_signal_connect(toplevel, 'grab-broken-event', G_CALLBACK(@grab_broken_event_cb), Self);
+ toplevel_motion_notify_handler_id := g_signal_connect(toplevel, 'motion-notify-event', G_CALLBACK(@toplevel_motion_notify_cb), Self);
+ toplevel_button_release_handler_id := g_signal_connect(toplevel, 'button-release-event', G_CALLBACK(@toplevel_button_release_cb), Self);
+ grab_notify_handler_id := g_signal_connect(FWidget, 'grab-notify', G_CALLBACK(@grab_notify_cb), Self);
+
+ drag_start_idx := gtk_notebook_get_current_page(GTK_NOTEBOOK(FWidget));
+ Result := True;
+ end else begin
+ DebugMsg(['@######## drag_start: some handlers are non-null']);
+ Result := False;
+ end;
+end;
+
+// this function is only called during dnd, we don't need to emit TABS_REORDERED here, instead we do it on drag_stop
+procedure TEphyNotebook.move_tab(dest_position: integer);
+var cur_page_num: integer;
+ cur_tab: PGtkWidget;
+begin
+ cur_page_num := gtk_notebook_get_current_page(GTK_NOTEBOOK(FWidget));
+// DebugMsg(['@######## move_tab(dest_position = ', dest_position, ', cur_page_num = ', cur_page_num]);
+ if (dest_position <> cur_page_num) and (dest_position >= 0) then begin
+ cur_tab := gtk_notebook_get_nth_page(GTK_NOTEBOOK(FWidget), cur_page_num);
+ gtk_notebook_reorder_child(GTK_NOTEBOOK(FWidget), cur_tab, dest_position);
+
+{ terminal_notebook_move_tab (TERMINAL_NOTEBOOK (notebook), NULL,
+ TERMINAL_SCREEN (cur_tab),
+ dest_position); }
+ end;
+end;
+
+function motion_notify_cb(notebook: PGtkWidget; event: PGdkEventMotion; data: gpointer): gboolean; cdecl;
+var ntb: TEphyNotebook;
+begin
+// DebugMsg(['@######## motion_notify_cb(..., data = 0x', IntToHex(Integer(data), 8), ')']);
+ ntb := TEphyNotebook(data);
+ Result := False;
+
+ if (not ntb.drag_in_progress) and (ntb.x_start >= 0) and (ntb.y_start >= 0) and
+ gtk_drag_check_threshold(GTK_WIDGET(notebook), ntb.x_start, ntb.y_start,
+ Trunc(event^.x_root), Trunc(event^.y_root))
+ then Result := ntb.drag_start(event^.time);
+end;
+
+procedure TEphyNotebook.move_tab_to_another_notebook(dest: TEphyNotebook; event: PGdkEventMotion);
+var cur_page, dest_page_num: integer;
+begin
+ // This is getting tricky, the screen was dragged in a notebook in another window of the same app, we move the screen
+ // to that new notebook, and let this notebook handle the drag
+
+ DebugMsg(['@######## move_tab_to_another_notebook(dest = 0x', IntToHex(Integer(pointer(dest)), 8), ')']);
+ if not (dest is TEphyNotebook) then begin
+ DebugMsg(['@######## move_tab_to_another_notebook: dest(', dest.ClassName, ') is not TEphyNotebook']);
+ Exit;
+ end;
+
+ if Self = dest then begin
+ DebugMsg(['@######## move_tab_to_another_notebook: dest = Self']);
+ Exit;
+ end;
+
+ if not Assigned(@FOnMoveTabToAnotherNotebook) then begin
+ DebugMsg(['@######## move_tab_to_another_notebook: FOnMoveTabToAnotherNotebook not handled, giving up.']);
+ Exit;
+ end;
+
+ cur_page := gtk_notebook_get_current_page(GTK_NOTEBOOK(FWidget));
+
+ // stop drag in origin window
+ // ungrab the pointer if it's grabbed
+ drag_stop(event^.time);
+
+{ if gdk_pointer_is_grabbed() then gdk_pointer_ungrab(event^.time);
+ gtk_grab_remove(FWidget); }
+
+
+(* g_assert (TERMINAL_IS_NOTEBOOK (dest));
+ g_assert (dest != src);
+
+ cur_page = gtk_notebook_get_current_page (GTK_NOTEBOOK (src));
+ screen = gtk_notebook_get_nth_page (GTK_NOTEBOOK (src), cur_page);
+
+ /* stop drag in origin window */
+ /* ungrab the pointer if it's grabbed */
+ drag_stop (src, event->time);
+ if (gdk_pointer_is_grabbed ())
+ {
+ gdk_pointer_ungrab (event->time);
+ }
+ gtk_grab_remove (GTK_WIDGET (src));
+
+ terminal_notebook_move_tab (src, dest, TERMINAL_SCREEN (screen),
+ dest_position);
+
+ /* start drag handling in dest notebook */
+
+ dest->priv->motion_notify_handler_id =
+ g_signal_connect (G_OBJECT (dest),
+ "motion-notify-event",
+ G_CALLBACK (motion_notify_cb),
+ NULL);
+ *)
+
+ dest_page_num := dest.find_tab_num_at_pos(Trunc(event^.x_root), Trunc(event^.y_root));
+ if FOnMoveTabToAnotherNotebook(Self, dest, cur_page, dest_page_num) then begin
+ // move newly created tab in dest notebook to position of mouse cursor
+// toplevel_motion_notify_cb(dest.FWidget, event, dest);
+
+ Application.ProcessMessages;
+
+ // start drag handling in dest notebook
+ dest.x_start := Trunc(event^.x_root);
+ dest.y_start := Trunc(event^.y_root);
+ dest.motion_notify_handler_id := g_signal_connect(G_OBJECT(dest.FWidget), 'motion-notify-event', G_CALLBACK(@motion_notify_cb), dest);
+ dest.drag_start(event^.time);
+
+
+{ dest.motion_notify_handler_id := g_signal_connect(G_OBJECT(dest.FWidget), 'motion-notify-event', G_CALLBACK(@motion_notify_cb), nil);
+ dest.drag_start(event^.time); }
+ end;
+end;
+
+function button_release_cb(notebook: PGtkWidget; event: PGdkEventButton; data: gpointer): gboolean; cdecl;
+var ntb: TEphyNotebook;
+begin
+ ntb := TEphyNotebook(data);
+ DebugMsg(['@######## button_release_cb(..., data = 0x', IntToHex(Integer(data), 8), ')']);
+
+ // This must be called even if a drag isn't happening
+ ntb.drag_stop(event^.time);
+ Result := False;
+end;
+
+function button_press_cb(notebook: PGtkWidget; event: PGdkEventButton; data: gpointer): gboolean; cdecl;
+var tab_clicked: integer;
+ ntb: TEphyNotebook;
+begin
+ ntb := TEphyNotebook(data);
+ if ntb.FBusy then Exit;
+ Result := False;
+
+ DebugMsg(['@######## button_press_cb(..., data = 0x', IntToHex(Integer(data), 8), ')']);
+ tab_clicked := ntb.find_tab_num_at_pos(Trunc(event^.x_root), Trunc(event^.y_root));
+ DebugMsg(['@################# tab_clicked = ', tab_clicked]);
+
+ if ntb.drag_in_progress then begin
+ DebugMsg(['drag_in_progress, exiting.']);
+ Result := True;
+ Exit;
+ end;
+
+ if (event^.button = 1) and (event^._type = GDK_BUTTON_PRESS) and (tab_clicked >= 0) then
+ begin
+ ntb.x_start := Trunc(event^.x_root);
+ ntb.y_start := Trunc(event^.y_root);
+ DebugMsg(['@################# x_start = ', ntb.x_start, ', y_start = ', ntb.y_start]);
+ ntb.motion_notify_handler_id := g_signal_connect(G_OBJECT(notebook), 'motion-notify-event', G_CALLBACK(@motion_notify_cb), data);
+
+ if tab_clicked >= 0 then begin
+ if tab_clicked <> gtk_notebook_get_current_page(PGtkNotebook(ntb.FWidget)) then begin
+ ntb.FBusy := True;
+ gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), tab_clicked);
+ if Assigned(ntb.FOnTabSwitchedEvent) then ntb.FOnTabSwitchedEvent(ntb, tab_clicked, True);
+ Application.ProcessMessages;
+ ntb.FBusy := False;
+ end else begin
+ if Assigned(ntb.FOnTabFocusOnlyEvent) then ntb.FOnTabFocusOnlyEvent(ntb, tab_clicked);
+ end;
+ end;
+ Result := True;
+ end else
+ if (GDK_BUTTON_PRESS = event^._type) and (event^.button = 3) then begin
+ if tab_clicked = -1 then begin
+ // consume event, so that we don't pop up the context menu when the mouse if not over a screen label
+ Result := True;
+ end else
+ // switch to the page the mouse is over, but don't consume the event
+ if (tab_clicked >= 0) then gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), tab_clicked);
+ end;
+end;
+
+function scroll_event_callback(widget: PGtkWidget; event: PGdkEventScroll; user_data: gpointer): gboolean; cdecl;
+var ntb: TEphyNotebook;
+ page: integer;
+ child: PGtkWidget;
+ px, py: gint;
+begin
+ Result := True;
+ ntb := TEphyNotebook(user_data);
+ if ntb.FBusy then Exit;
+
+ child := gtk_notebook_get_nth_page(GTK_NOTEBOOK(ntb.FWidget), gtk_notebook_get_current_page(PGtkNotebook(ntb.FWidget)));
+ if (child <> nil) then begin
+// DebugMsg(['scroll_event_callback: x = ', event^.x, ', y = ', event^.y]);
+ px := 0;
+ py := 0;
+ gtk_widget_get_pointer(child, @px, @py);
+// DebugMsg(['scroll_event_callback: px = ', px, ', py = ', py]);
+ if (px >= 0) and (py >= 0) then Exit;
+ end;
+
+ page := gtk_notebook_get_current_page(PGtkNotebook(ntb.FWidget))
+ - Ord(event^.direction = GDK_SCROLL_UP) + Ord(event^.direction = GDK_SCROLL_DOWN);
+ if (page < 0) or (page > ntb.ChildrenCount - 1) then Exit;
+
+ ntb.FBusy := True;
+ gtk_notebook_set_current_page(PGtkNotebook(ntb.FWidget), page);
+ if Assigned(ntb.FOnTabSwitchedEvent) then ntb.FOnTabSwitchedEvent(ntb, page, False);
+ Application.ProcessMessages;
+ ntb.FBusy := False;
+end;
+
+
+
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+function Gnome_MessageBox_key_press_event(widget: PGtkWidget; event: PGdkEventKey; user_data : gpointer): gboolean; cdecl;
+begin
+ Result := False;
+ if event^.keyval = GDK_ESCAPE then begin
+ gtk_dialog_response(PGtkDialog(widget), integer(user_data));
+// Beep;
+ Result := True;
+ end;
+end;
+
+function MessageBoxShowOnce(const Text: string; const DontShowAgainText: string; var DontShowAgainChecked: boolean;
+ Buttons: TMessageButtons = [mbOK]; Style: TMessageStyle = mbInfo;
+ Default: TMessageButton = mbNone; Escape: TMessageButton = mbNone): TMessageButton;
+const TMessageStyleID : array[0..3] of TGtkMessageType = (GTK_MESSAGE_ERROR, GTK_MESSAGE_INFO, GTK_MESSAGE_QUESTION, GTK_MESSAGE_WARNING);
+var Dialog: PGtkWidget;
+ DialogParent: PGtkWindow;
+ CheckBox: PGtkCheckButton;
+ i: integer;
+begin
+ if Application.Terminated then
+ begin
+ Result := Escape;
+ Exit;
+ end;
+ if Screen.FormCount > 0
+ then DialogParent := PGtkWindow(Screen.Forms[0].FWidget)
+ else DialogParent := nil;
+ Dialog := gtk_message_dialog_new(DialogParent, GTK_DIALOG_MODAL or GTK_DIALOG_DESTROY_WITH_PARENT, TMessageStyleID[Integer(Style)],
+ GTK_BUTTONS_NONE, StringToPgchar(Text));
+ CheckBox := PGtkCheckButton(gtk_check_button_new_with_mnemonic(StringToPgchar(DontShowAgainText)));
+ gtk_widget_show(PGtkWidget(CheckBox));
+ gtk_box_pack_end(GTK_BOX(GTK_DIALOG(Dialog).vbox), PGtkWidget(CheckBox), False, False, 12);
+ for i := 1 to NumMessageButtons do
+ if TMessageButton(i - 1) in Buttons
+ then gtk_dialog_add_button(PGtkDialog(Dialog), MessageButtonID[i], i);
+ if Escape <> mbNone then g_signal_connect(PGtkObject(Dialog), 'key-press-event', G_CALLBACK(@Gnome_MessageBox_key_press_event),
+ Pointer(Ord(Escape) + 1{MessageButtonID[Ord(Escape)]}));
+ if Default <> mbNone then gtk_dialog_set_default_response(PGtkDialog(Dialog), Ord(Default));
+ Result := TMessageButton(gtk_dialog_run(PGtkDialog(Dialog)) - 1);
+ DontShowAgainChecked := gtk_toggle_button_get_active(PGtkToggleButton(CheckBox));
+ gtk_widget_destroy(Dialog);
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+
+procedure SetupGnomeLibs;
+var g: Pointer;
+begin
+ try
+ if Assigned(gnome_program_init) and Assigned(libgnomeui_module_info_get) and Assigned(libgnome_module_info_get) then begin
+ DebugMsg(['Initializing Gnome...']);
+ g := gnome_program_init('TuxCommander', PChar(ConstAboutVersion), libgnomeui_module_info_get, GTKForms.argc, GTKForms.argv,
+ 'show-crash-dialog', 0, nil);
+ DebugMsg([' *GnomeProgram = 0x', IntToHex(QWORD(g), 8)]);
+
+ end;
+ except end;
+end;
+
+procedure LoadGnomeLibs;
+begin
+ // Set default values
+ @gnome_about_new := nil;
+ @gnome_color_picker_new := nil;
+ @gnome_color_picker_get_i16 := nil;
+ @gnome_color_picker_set_i16 := nil;
+ @libgnomeui_module_info_get := nil;
+ @gnome_program_init := nil;
+ @libgnome_module_info_get := nil;
+ @gnome_icon_entry_new := nil;
+ @gnome_icon_entry_set_pixmap_subdir := nil;
+ @gnome_icon_entry_get_filename := nil;
+ @gnome_icon_entry_set_filename := nil;
+ @gtk_event_box_set_visible_window := nil;
+
+ // Dynamic loading
+ libGnome2Handle := dlopen('libgnome-2.so.0', RTLD_LAZY);
+ if libGnome2Handle = nil then libGnome2Handle := dlopen('libgnome-2.so', RTLD_LAZY);
+ if libGnome2Handle <> nil then begin
+ @gnome_program_init := dlsym(libGnome2Handle, 'gnome_program_init');
+ @libgnome_module_info_get := dlsym(libGnome2Handle, 'libgnome_module_info_get');
+ DebugMsg(['libgnome-2.so loaded, @gnome_program_init = 0x', IntToHex(QWORD(@gnome_program_init), 8), ', @libgnome_module_info_get = 0x', IntToHex(QWORD(@libgnome_module_info_get), 8)]);
+ end;
+ libGnomeUI2Handle := dlopen('libgnomeui-2.so.0', RTLD_LAZY);
+ if libGnomeUI2Handle = nil then libGnomeUI2Handle := dlopen('libgnomeui-2.so', RTLD_LAZY);
+ if libGnomeUI2Handle <> nil then begin
+ @gnome_about_new := dlsym(libGnomeUI2Handle, 'gnome_about_new');
+ @gnome_color_picker_new := dlsym(libGnomeUI2Handle, 'gnome_color_picker_new');
+ @gnome_color_picker_get_i16 := dlsym(libGnomeUI2Handle, 'gnome_color_picker_get_i16');
+ @gnome_color_picker_set_i16 := dlsym(libGnomeUI2Handle, 'gnome_color_picker_set_i16');
+ @libgnomeui_module_info_get := dlsym(libGnomeUI2Handle, 'libgnomeui_module_info_get');
+ @gnome_icon_entry_new := dlsym(libGnomeUI2Handle, 'gnome_icon_entry_new');
+ @gnome_icon_entry_set_pixmap_subdir := dlsym(libGnomeUI2Handle, 'gnome_icon_entry_set_pixmap_subdir');
+ @gnome_icon_entry_get_filename := dlsym(libGnomeUI2Handle, 'gnome_icon_entry_get_filename');
+ @gnome_icon_entry_set_filename := dlsym(libGnomeUI2Handle, 'gnome_icon_entry_set_filename');
+ @gnome_date_edit_new := dlsym(libGnomeUI2Handle, 'gnome_date_edit_new');
+ @gnome_date_edit_set_time := dlsym(libGnomeUI2Handle, 'gnome_date_edit_set_time');
+ @gnome_date_edit_get_time := dlsym(libGnomeUI2Handle, 'gnome_date_edit_get_time');
+ DebugMsg(['libgnomeui-2.so loaded, @gnome_about_new = 0x', IntToHex(QWORD(@gnome_about_new), 8), ', @gnome_color_picker_new = 0x', IntToHex(QWORD(@gnome_color_picker_new), 8),
+ ', @gnome_icon_entry_new = 0x', IntToHex(QWORD(@gnome_icon_entry_new), 8), ', @gnome_date_edit_new = 0x', IntToHex(QWORD(@gnome_date_edit_new), 8),
+ ', @libgnomeui_module_info_get = 0x', IntToHex(QWORD(@libgnomeui_module_info_get), 8)]);
+ end;
+ libGtk2Handle := dlopen('libgtk-x11-2.0.so.0', RTLD_LAZY);
+ if libGtk2Handle = nil then libGtk2Handle := dlopen('libgtk-x11-2.0.so.0', RTLD_LAZY);
+ if libGtk2Handle <> nil then begin
+ @gtk_event_box_set_visible_window := dlsym(libGtk2Handle, 'gtk_event_box_set_visible_window');
+ @gtk_icon_size_lookup_for_settings := dlsym(libGtk2Handle, 'gtk_icon_size_lookup_for_settings');
+ DebugMsg(['libgtk-x11-2.0.so loaded, @gtk_event_box_set_visible_window = 0x', IntToHex(QWORD(@gtk_event_box_set_visible_window), 8),
+ ', @gtk_icon_size_lookup_for_settings = 0x', IntToHex(QWORD(@gtk_icon_size_lookup_for_settings), 8)]);
+ end;
+ SetupGnomeLibs;
+end;
+
+
+initialization
+finalization
+// if libGnomeUI2Handle <> 0 then FreeLibrary(libGnomeUI2Handle);
+// if libGnome2Handle <> 0 then FreeLibrary(libGnome2Handle);
+end.
+
diff --git a/ULocale.pas b/ULocale.pas
new file mode 100644
index 0000000..6b9cb1b
--- /dev/null
+++ b/ULocale.pas
@@ -0,0 +1,297 @@
+(*
+ Tux Commander - ULocale - Localization core
+ Copyright (C) 2007 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+{$J+}
+unit ULocale;
+
+interface
+
+var LANGF2Button_Caption, LANGF3Button_Caption, LANGF4Button_Caption, LANGF5Button_Caption, LANGF6Button_Caption,
+ LANGF7Button_Caption, LANGF8Button_Caption: string;
+ LANGmnuFile_Caption, LANGmnuMark_Caption, LANGmnuCommands_Caption, LANGmnuHelp_Caption, LANGmiExit_Caption,
+ LANGmiSelectGroup_Caption, LANGmiUnselectGroup_Caption, LANGmiSelectAll_Caption, LANGmiUnselectAll_Caption,
+ LANGmiInvertSelection_Caption, LANGmiRefresh_Caption, LANGmiAbout_Caption: string;
+ LANGColumn1_Caption, LANGColumn2_Caption, LANGColumn3_Caption, LANGColumn4_Caption, LANGColumn5_Caption: string;
+ LANGExpandSelection, LANGShrinkSelection, LANGNoMatchesFound, LANGNoFilesSelected, LANGSelectedFilesDirectories,
+ LANGDirectoryS, LANGFileS, LANGDoYouReallyWantToDeleteTheS, LANGDoYouReallyWantToDeleteTheSS, LANGCopyFiles,
+ LANGMoveRenameFiles, LANGCopyDFileDirectoriesTo, LANGMoveRenameDFileDirectoriesTo, LANGCopySC, LANGMoveRenameSC: string;
+ LANGQuickFind: string;
+
+ LANGAboutString, LANGAboutStringGnome, LANGDiskStatFmt, LANGDiskStatVolNameFmt, LANGStatusLineFmt: string;
+ LANGPanelStrings : array[boolean] of string;
+
+ LANGDIR, LANGErrorGettingListingForSPanel, LANGErrorGettingListingForSPanelNoPath, LANGErrorCreatingNewDirectorySInSPanel,
+ LANGErrorCreatingNewDirectorySInSPanelNoPath, LANGTheFileDirectory, LANGCouldNotBeDeleted, LANGCouldNotBeDeletedS,
+ LANGUserCancelled, LANGTheDirectorySIsNotEmpty, LANGCannotCopyFile, LANGCopyError, LANGMoveError, LANGOverwriteS,
+ LANGWithFileS, LANGOvewriteSBytesS, LANGTheFile, LANGCopy, LANGMove, LANGTheDirectory, LANGTheSymbolicLink,
+ LANGCannotMoveFile, LANGCouldNotBeCreated, LANGCouldNotBeCreatedS, LANGFromS, LANGToS, LANGCannotCopyFileToItself,
+ LANGMemoryAllocationFailed, LANGCannotOpenSourceFile, LANGCannotOpenDestinationFile, LANGCannotCloseDestinationFile,
+ LANGCannotCloseSourceFile, LANGCannotReadFromSourceFile, LANGCannotWriteToDestinationFile: string;
+
+ LANGUnknownException, LANGNoAccess, LANGUnknownError: string;
+
+ LANGCreateANewDirectory, LANGEnterDirectoryName: string;
+
+ LANGOverwriteQuestion, LANGOverwriteButton_Caption, LANGOverwriteAllButton_Caption, LANGSkipButton_Caption,
+ LANGOverwriteAllOlderButton_Caption, LANGSkipAllButton_Caption, LANGRenameButton_Caption, LANGAppendButton_Caption,
+ LANGRename, LANGRenameFile, LANGIgnoreButton_Caption: string;
+
+ LANGProgress, LANGCancel, LANGDelete: string;
+
+ LANGSpecifyFileType: string;
+
+ LANGRemoveDirectory, LANGDoYouWantToDeleteItWithAllItsFilesAndSubdirectories, LANGRetry, LANGDeleteButton_Caption,
+ LANGAll: string;
+
+ LANGCopyFilesSC, LANGAppendQuestion, LANGPreparingList: string;
+
+ LANGYouMustSelectAValidFile, LANGmiVerifyChecksums, LANGVerifyChecksumsCaption, LANGCheckButtonCaptionCheck,
+ LANGCheckButtonCaptionStop, LANGFileListTooltip, LANGFilenameColumnCaption, LANGTheFileSYouAreTryingToOpenIsQuiteBig,
+ LANGAnErrorOccuredWhileInitializingMemoryBlock, LANGAnErrorOccuredWhileOpeningFileSS, LANGAnErrorOccuredWhileReadingFileSS : string;
+ LANGChecksumNotChecked, LANGChecksumChecking, LANGChecksumInterrupted, LANGChecksumDOK: string;
+
+ LANGmiCreateChecksumsCaption, LANGYouMustSelectAtLeastOneFileToCalculateChecksum, LANGCreateChecksumsCaption,
+ LANGCCHKSUMPage1Text, LANGCCHKSUMPage4Text, LANGCCHKSUMPage6Text, LANGCCHKSUMPage7Text, LANGCCHKSUMPage1Title,
+ LANGCCHKSUMPage2Title, LANGCCHKSUMPage3Title, LANGCCHKSUMPage4Title, LANGCCHKSUMPage5Title, LANGCCHKSUMPage6Title,
+ LANGCCHKSUMPage7Title, LANGCCHKSUMSFVFile, LANGCCHKSUMMD5sumFile, LANGCCHKSUMFileName, LANGCCHKSUMCreateSeparateChecksumFiles,
+ LANGCCHKSUMNowProcessingFileS, LANGCCHKSUMFinishCaption, LANGCCHKSUMAreYouSureYouWantToAbortTheProcessing,
+ LANGCCHKSUMAnErrorOccuredWhileOpeningFileSS, LANGCCHKSUMAnErrorOccuredWhileReadingFileSS,
+ LANGCCHKSUMAnErrorOccuredWhileWritingFileSS: string;
+
+ LANGAnErrorOccuredWhileWritingFileSS, LANGTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt, LANGTheTargetFileSCannotBeRemovedS,
+ LANGMergeCaption, LANGPleaseInsertNextDiskOrGiveDifferentLocation, LANGMergeOfSSucceeded, LANGWarningCreatedFileFailsCRCCheck,
+ LANGMergeOfSSucceeded_NoCRCFileAvailable, LANGMergeSAndAllFilesWithAscendingNamesToTheFollowingDirectory, LANGMergeSC,
+ LANGmiSplitFileCaption, LANGmiMergeFilesCaption: string;
+
+ LANGSplitTheFileSToDirectory, LANGSplitSC, LANGSplitFile, LANGBytesPerFile, LANGAutomatic, LANGDeleteFilesOnTargetDisk,
+ LANGSplitCaption, LANGCannotOpenFileS, LANGCannotSplitTheFileToMoreThan999Parts,
+ LANGThereAreSomeFilesInTheTargetDirectorySDoYouWantToDeleteThem, LANGThereAreDFilesInTheTargetDirectoryDoYouWantToDeleteThem,
+ LANGAnErrorOccuredWhileOperationS, LANGSplitOfSSucceeded, LANGSplitOfSFailed: string;
+
+ LANGmnuShow_Caption, LANGmiShowDotFiles_Caption, LANGTheFileYouAreTryingToOpenIsQuiteBig,
+ LANGCannotExecuteSPleaseCheckTheConfiguration, LANGEdit, LANGEnterFilenameToEdit: string;
+
+ LANGmnuSettings_Caption, LANGmiFileTypes_Caption, LANGThereIsNoApplicationAssociatedWithS, LANGErrorExecutingCommand,
+ LANGEditFileTypesCaption, LANGTitleLabel_Caption, LANGExtensionsColumn, LANGDescriptionColumn, LANGFileTypesList,
+ LANGActionName, LANGCommand, LANGSetDefaultActionButton_Caption, LANGRunInTerminalCheckBox_Caption,
+ LANGAutodetectCheckBox_Caption, LANGBrowseButton_Caption, LANGCommandLabel_Caption, LANGDescriptionLabel_Caption,
+ LANGFNameExtLabel_Caption, LANGNotebookPageExtensions, LANGNotebookPageActions, LANGDefault,
+ LANGCannotSaveFileTypeAssociationsBecauseOtherProcess: string;
+
+ LANGDefaultColor, LANGIcon, LANGBrowseForIcon, LANGSelectFileTypeColor, LANGColor: string;
+
+ LANGmiChangePermissions_Caption, LANGmiChangeOwner_Caption, LANGmiCreateSymlink_Caption, LANGmiEditSymlink_Caption,
+ LANGChmodProgress, LANGChownProgress, LANGYouMustSelectAValidSymbolicLink, LANGPopupRunS, LANGPopupOpenS, LANGPopupGoUp,
+ LANGPopupOpenWithS, LANGPopupDefault, LANGPopupOpenWith, LANGPopupViewFile, LANGPopupEditFile, LANGPopupMakeSymlink,
+ LANGPopupRename, LANGPopupDelete, LANGDialogChangePermissions, LANGCouldNotBeChmoddedS, LANGDialogChangeOwner,
+ LANGCouldNotBeChownedS, LANGDialogMakeSymlink, LANGDialogEditSymlink, LANGFEditSymlink_Caption,
+ LANGFEditSymlink_SymbolicLinkFilename, LANGFEditSymlink_SymbolicLinkPointsTo: string;
+
+ LANGFChmod_Caption, LANGFChmod_PermissionFrame, LANGFChmod_FileFrame, LANGFChmod_ApplyRecursivelyFor, LANGFChmod_miAllFiles,
+ LANGFChmod_miDirectories, LANGFChmod_OctalLabel, LANGFChmod_SUID, LANGFChmod_SGID, LANGFChmod_Sticky, LANGFChmod_RUSR,
+ LANGFChmod_WUSR, LANGFChmod_XUSR, LANGFChmod_RGRP, LANGFChmod_WGRP, LANGFChmod_XGRP, LANGFChmod_ROTH, LANGFChmod_WOTH,
+ LANGFChmod_XOTH, LANGFChmod_TextLabel, LANGFChmod_FileLabel, LANGFChown_Caption, LANGFChown_OwnerFrame, LANGFChown_GroupFrame,
+ LANGFChown_FileFrame, LANGFChown_ApplyRecursively, LANGFSymlink_Caption, LANGFSymlink_ExistingFilename,
+ LANGFSymlink_SymlinkFilename: string;
+
+ LANGmnuBookmarks_Caption, LANGmiAddBookmark_Caption, LANGmiEditBookmarks_Caption, LANGBookmarkPopupDelete_Caption,
+ LANGmiPreferences_Caption, LANGTheCurrentDirectoryAlreadyExistsInTheBookmarksList, LANGSomeOtherInstanceChanged,
+ LANGPreferences_Caption, LANGPreferences_TitleLabel_Caption, LANGPreferences_GeneralPage, LANGPreferences_FontsPage,
+ LANGPreferences_ColorsPage, LANGPreferences_RowHeight, LANGPreferences_NumHistoryItems, LANGPreferences_Default,
+ LANGPreferences_ClearReadonlyAttribute, LANGPreferences_DisableMouseRenaming, LANGPreferences_ShowFiletypeIconsInList,
+ LANGPreferences_ExternalAppsLabel, LANGPreferences_Viewer, LANGPreferences_Editor, LANGPreferences_Terminal,
+ LANGPreferences_ListFont, LANGPreferences_Change, LANGPreferences_UseDefaultFont, LANGPreferences_Foreground,
+ LANGPreferences_Background, LANGPreferences_NormalItem, LANGPreferences_SetToDefaultToUseGTKThemeColors,
+ LANGPreferences_Cursor, LANGPreferences_InactiveItem, LANGPreferences_SelectedItem, LANGPreferences_LinkItem,
+ LANGPreferences_LinkItemHint, LANGPreferences_DotFileItem, LANGPreferences_DotFileItemHint,
+ LANGPreferences_BrowseForApplication, LANGPreferences_DefaultS, LANGPreferences_SelectFont: string;
+
+ LANGBookmarkButton_Tooltip, LANGUpButton_Tooltip, LANGRootButton_Tooltip, LANGHomeButton_Tooltip, LANGLeftEqualButton_Tooltip,
+ LANGRightEqualButton_Tooltip, LANGmiShowDirectorySizes_Caption, LANGmiTargetSource_Caption, LANGFileTypeDirectory,
+ LANGFileTypeFile, LANGFileTypeMetafile, LANGPreferencesPanelsPage, LANGPreferencesApplicationsPage,
+ LANGPreferencesExperimentalPage, LANGPreferencesSelectAllDirectoriesCheckBox_Caption,
+ LANGPreferencesNewStyleAltOCheckBox_Caption, LANGPreferencesNewStyleAltOCheckBox_Tooltip,
+ LANGPreferencesShowFuncButtonsCheckBox_Caption, LANGPreferencesSizeFormatLabel_Caption, LANGPreferencesmiSizeFormat1,
+ LANGPreferencesmiSizeFormat6, LANGPreferencesAutodetectXApp, LANGPreferencesAlwaysRunInTerminal,
+ LANGPreferencesNeverRunInTerminal, LANGPreferencesCmdLineBehaviourLabel_Caption, LANGPreferencesFeatures,
+ LANGPreferencesDisableMouseRename_Tooltip, LANGPreferencesDisableFileTipsCheckBox_Caption,
+ LANGPreferencesDisableFileTipsCheckBox_Tooltip, LANGPreferencesShow, LANGPreferencesDirsInBoldCheckBox_Caption,
+ LANGPreferencesDisableDirectoryBracketsCheckBox_Caption, LANGPreferencesOctalPermissionsCheckBox_Caption,
+ LANGPreferencesOctalPermissionsCheckBox_Tooltip, LANGPreferencesMovement, LANGPreferencesLynxLikeMotionCheckBox_Caption,
+ LANGPreferencesInsertMovesDownCheckBox_Caption, LANGPreferencesSpaceMovesDownCheckBox_Caption, LANGPreferencesViewer,
+ LANGPreferencesCommandSC, LANGPreferencesUseInternalViewer, LANGPreferencesEditor, LANGPreferencesTerminal,
+ LANGPreferencesExperimentalFeatures, LANGPreferencesExperimentalWarningLabel_Caption,
+ LANGPreferencesFocusRefreshCheckBox_Caption, LANGPreferencesFocusRefreshCheckBox_Tooltip,
+ LANGPreferencesWMCompatModeCheckBox_Caption, LANGPreferencesWMCompatModeCheckBox_Tooltip,
+ LANGPreferencesCompatUseLibcSystemCheckBox_Caption, LANGPreferencesCompatUseLibcSystemCheckBox_Tooltip: string;
+
+ LANGmiSearchCaption2, LANGmiNoMounterBarCaption, LANGmiShowOneMounterBarCaption, LANGmiShowTwoMounterBarCaption,
+ LANGmnuNetworkCaption, LANGmiConnectionsCaption, LANGmiOpenConnectionCaption, LANGmiQuickConnectCaption, LANGmnuPluginsCaption,
+ LANGmiTestPluginCaption, LANGmiMounterSettingsCaption, LANGmiColumnsCaption, LANGmiSavePositionCaption, LANGmiMountCaption,
+ LANGmiUmountCaption, LANGmiEjectCaption, LANGmiDuplicateTabCaption, LANGmiCloseTabCaption, LANGmiCloseAllTabsCaption,
+ LANGCannotDetermineDestinationEngine, LANGCannotLoadFile, LANGMountPointDevice, LANGMountSC, LANGNoPluginsFound,
+ LANGPluginAbout, LANGCouldntOpenURI, LANGPluginAboutInside, LANGAreYouSureCloseAllTabs, LANGCouldntOpenURIArchive,
+ LANGThereIsNoModuleAvailable, LANGIgnoreError, LANGErrorMount, LANGErrorUmount, LANGErrorEject: string;
+
+ LANGMounterPrefs_Caption, LANGMounterPrefs_TitleLabelCaption, LANGMounterPrefs_ListViewFrameCaption,
+ LANGMounterPrefs_MountName, LANGMounterPrefs_MountPoint, LANGMounterPrefs_Device, LANGMounterPrefs_MoveUpButtonTooltip,
+ LANGMounterPrefs_MoveDownButtonTooltip, LANGMounterPrefs_UseFSTabDefaultsCheckBox,
+ LANGMounterPrefs_UseFSTabDefaultsCheckBoxTooltip, LANGMounterPrefs_ToggleModeCheckBox,
+ LANGMounterPrefs_ToggleModeCheckBoxTooltip, LANGMounterPrefs_PropertiesFrameCaption, LANGMounterPrefs_DisplayTextLabelCaption,
+ LANGMounterPrefs_MountPointLabelCaption, LANGMounterPrefs_MountDeviceLabelCaption, LANGMounterPrefs_DeviceTypeLabelCaption,
+ LANGMounterPrefs_miLocalDiskCaption, LANGMounterPrefs_miRemovableCaption, LANGMounterPrefs_miCDCaption,
+ LANGMounterPrefs_miFloppyCaption, LANGMounterPrefs_miNetworkCaption, LANGMounterPrefs_MountCommandLabelCaption,
+ LANGMounterPrefs_UmountCommandLabelCaption, LANGMounterPrefs_MountCommandEntryTooltip,
+ LANGMounterPrefs_UmountCommandEntryTooltip, LANGMounterPrefs_IconLabelCaption: string;
+
+ LANGConnMgr_Caption, LANGConnMgr_ConnectButton, LANGConnMgr_OpenConnection, LANGConnMgr_NameColumn, LANGConnMgr_URIColumn,
+ LANGConnMgr_AddConnectionButtonCaption, LANGConnMgr_AddConnectionButtonTooltip, LANGConnMgr_EditButtonCaption,
+ LANGConnMgr_EditButtonTooltip, LANGConnMgr_RemoveButtonCaption, LANGConnMgr_RemoveButtonTooltip,
+ LANGConnMgr_DoYouWantDelete: string;
+
+ LANGConnProp_FTP, LANGConnProp_SFTP, LANGConnProp_SMB, LANGConnProp_HTTP, LANGConnProp_HTTPS, LANGConnProp_Other,
+ LANGConnProp_Caption, LANGConnProp_VFSModule, LANGConnProp_URI, LANGConnProp_URIEntryTooltip,
+ LANGConnProp_DetailedInformations, LANGConnProp_Name, LANGConnProp_Server, LANGConnProp_Username,
+ LANGConnProp_UserNameEntryTooltip, LANGConnProp_Password, LANGConnProp_TargetDirectory, LANGConnProp_ServiceType,
+ LANGConnProp_MaskPassword, LANGConnProp_MenuItemCaption: string;
+
+ LANGConnLogin_Caption, LANGConnLogin_Login, LANGConnLogin_ExperimentalWarningLabelCaption, LANGConnLogin_Username,
+ LANGConnLogin_Password, LANGConnLogin_AnonymousCheckButton: string;
+
+ LANGColumns_Caption, LANGColumns_Title, LANGColumns_MoveUpButtonTooltip, LANGColumns_MoveDownButtonTooltip,
+ LANGColumns_TitlesLongName, LANGColumns_TitlesLongNameExt, LANGColumns_TitlesLongExt, LANGColumns_TitlesLongSize,
+ LANGColumns_TitlesLongDateTime, LANGColumns_TitlesLongDate, LANGColumns_TitlesLongTime, LANGColumns_TitlesLongUser,
+ LANGColumns_TitlesLongGroup, LANGColumns_TitlesLongAttr, LANGColumns_TitlesShortName, LANGColumns_TitlesShortNameExt,
+ LANGColumns_TitlesShortExt, LANGColumns_TitlesShortSize, LANGColumns_TitlesShortDateTime, LANGColumns_TitlesShortDate,
+ LANGColumns_TitlesShortTime, LANGColumns_TitlesShortUser, LANGColumns_TitlesShortGroup,
+ LANGColumns_TitlesShortAttr: string;
+
+ LANGTestPlugin_Caption, LANGTestPlugin_Title, LANGTestPlugin_ExperimentalWarningLabelCaption, LANGTestPlugin_Plugin,
+ LANGTestPlugin_Command, LANGTestPlugin_Username, LANGTestPlugin_Password, LANGTestPlugin_AnonymousCheckButton,
+ LANGTestPlugin_NoPluginsFound: string;
+
+ LANGRemoteWait_Caption, LANGRemoteWait_OperationInProgress, LANGRemoteWait_ItemsFound: string;
+
+ LANGSearch_Bytes, LANGSearch_kB, LANGSearch_MB, LANGSearch_days, LANGSearch_weeks, LANGSearch_months, LANGSearch_years,
+ LANGSearch_Caption, LANGSearch_General, LANGSearch_Advanced, LANGSearch_SearchResults, LANGSearch_SearchFor,
+ LANGSearch_FileMaskEntryTooltip, LANGSearch_SearchIn, LANGSearch_SearchArchivesCheckButton, LANGSearch_FindText,
+ LANGSearch_FindTextEntryTooltip, LANGSearch_CaseSensitiveCheckButton, LANGSearch_StayCurrentFSCheckButton,
+ LANGSearch_CaseSensitiveMatchCheckButton, LANGSearch_Size, LANGSearch_Date, LANGSearch_BiggerThan, LANGSearch_SmallerThan,
+ LANGSearch_ModifiedBetweenRadioButton, LANGSearch_NotModifiedAfterRadioButton, LANGSearch_ModifiedLastRadioButton,
+ LANGSearch_ModifiedNotLastRadionButton, LANGSearch_ModifiedBetweenEntry1, LANGSearch_ViewButtonCaption,
+ LANGSearch_NewSearchButtonCaption, LANGSearch_GoToFileButtonCaption, LANGSearch_FeedToListboxButtonCaption,
+ LANGSearch_StatusSC, LANGSearch_Ready, LANGSearch_PreparingToSearch, LANGSearch_SearchInProgress, LANGSearch_UserCancelled,
+ LANGSearch_SearchFinished, LANGSearch_FilesFound, LANGSearch_And: string;
+
+ LANGCloseOpenConnection, LANGDuplicateTabWarning, LANGDontShowAgain, LANGSwitchOtherPanelWarning, LANGOpenConnectionsWarning,
+ LANGmiDisconnect_Caption, LANGDisconnectButton_Tooltip, LANGLeaveArchiveButton_Tooltip, LANGOpenTerminalButton_Tooltip,
+ LANGOpenTerminalButton_Caption, LANGShowTextUIDsCheckBox_Caption, LANGShowTextUIDsCheckBox_Tooltip: string;
+
+ LANGmiNewTab_Caption, LANGFilePopupMenu_Properties, LANGCommandEntry_Tooltip, LANGmiFiles_Caption: string;
+
+ LANGPasswordButton_Tooltip, LANGHandleRunFromArchive_Bytes, LANGHandleRunFromArchive_FileTypeDesc_Unknown,
+ LANGHandleRunFromArchive_NotAssociated, LANGHandleRunFromArchive_SelfExecutable,
+ LANGHandleRunFromArchive_CouldntCreateTemporaryDirectory, LANGFRunFromVFS_Caption, LANGFRunFromVFS_TitleLabel,
+ LANGFRunFromVFS_FileNameLabel, LANGFRunFromVFS_FileTypeLabel, LANGFRunFromVFS_SizeLabel, LANGFRunFromVFS_PackedSizeLabel,
+ LANGFRunFromVFS_DateLabel, LANGFRunFromVFS_InfoLabel, LANGFRunFromVFS_OpensWithLabel, LANGFRunFromVFS_ExecuteButton,
+ LANGFRunFromVFS_ExecuteAllButton, LANGFSetPassword_Caption, LANGFSetPassword_Label1_Caption, LANGFSetPassword_Label2_Caption,
+ LANGFSetPassword_ShowPasswordCheckButton: string;
+
+
+
+
+
+
+procedure AddTranslation(Language: string; LangSetProc: pointer);
+procedure SetTranslationTexts(ForceLocale: string = '');
+
+implementation
+
+uses SysUtils, UTranslation_EN, UTranslation_CZ, UTranslation_RU, UTranslation_DE, UTranslation_SV, UTranslation_FR,
+ UTranslation_ES, UTranslation_PL, UTranslation_UA, UTranslation_SR, UTranslation_HU, UTranslation_IT;
+
+
+
+const LangTable: array of string = nil;
+ LangProcTable: array of pointer = nil;
+
+var Lang: string;
+
+procedure AddTranslation(Language: string; LangSetProc: pointer);
+begin
+ if not Assigned(LangTable) then SetLength(LangTable, 0);
+ if not Assigned(LangProcTable) then SetLength(LangProcTable, 0);
+ SetLength(LangTable, Length(LangTable) + 1);
+ LangTable[Length(LangTable) - 1] := ANSIUpperCase(Language);
+ SetLength(LangProcTable, Length(LangProcTable) + 1);
+ LangProcTable[Length(LangProcTable) - 1] := LangSetProc;
+end;
+
+function LookupLanguages: integer;
+var i: integer;
+begin
+ Result := -1;
+ for i := 0 to Length(LangTable) - 1 do
+ if LangTable[i] = Lang then begin
+ Result := i;
+ Break;
+ end;
+end;
+
+procedure SetTranslationTexts(ForceLocale: string = '');
+var LangIdx: integer;
+ SetProc: procedure;
+begin
+ if not (Assigned(LangTable) and (Length(LangTable) > 0)) then begin
+ WriteLn('**** tuxcmd CRITICAL: No usable translations found. At least one is required. Probably you have compiled the application incorrectly.');
+ Halt(1);
+ end;
+ // Assign default language - English
+ try
+ Lang := 'EN';
+ LangIdx := LookupLanguages;
+ if LangIdx >= 0 then begin
+ SetProc := LangProcTable[LangIdx];
+ SetProc;
+ end;
+ except end;
+ // Assign other languages
+ if Length(ForceLocale) = 0 then begin
+ Lang := GetEnvironmentVariable('LC_MESSAGES');
+ if Length(Trim(Lang)) = 0 then Lang := GetEnvironmentVariable('LC_ALL');
+ if Length(Trim(Lang)) = 0 then Lang := GetEnvironmentVariable('LANGUAGE');
+ if Length(Trim(Lang)) = 0 then Lang := GetEnvironmentVariable('LANG');
+ if Length(Trim(Lang)) = 0 then Lang := 'en_US'; // Default language
+ end else Lang := ForceLocale;
+ if Length(Trim(Lang)) >= 2 then Lang := AnsiUpperCase(Copy(Lang, 1, 2));
+ LangIdx := LookupLanguages;
+ if LangIdx = -1 then begin
+ Lang := 'EN';
+ LangIdx := LookupLanguages;
+ end;
+ SetProc := LangProcTable[LangIdx];
+ try
+ SetProc;
+ except
+ on E: Exception do WriteLn('*** Exception ', E.ClassName, ' raised in SetProc - language ', LangTable[LangIdx], ', procedure @ ', integer(@SetProc), ': ', E.Message);
+ end;
+end;
+
+
+end.
diff --git a/ULogin.pas b/ULogin.pas
new file mode 100644
index 0000000..8dbf5bb
--- /dev/null
+++ b/ULogin.pas
@@ -0,0 +1,146 @@
+(*
+ Tux Commander - ULogin - Login dialog
+ Copyright (C) 2004 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit ULogin;
+
+interface
+
+uses
+ glib2, gdk2, gtk2, pango, SysUtils, Types, Classes, Variants, GTKControls, GTKForms, GTKStdCtrls, GTKExtCtrls, GTKConsts, GTKView,
+ GTKUtils, GTKDialogs, GTKPixbuf, GTKClasses, GTKMenus,
+ UCoreClasses;
+
+type
+ TFLogin = class(TGTKDialog)
+ TitleFrame: TGTKFrame;
+ TitleLabel: TGTKLabel;
+ TitleEventBox: TGTKEventBox;
+ TitleIcon: TGTKImage;
+ TitleHBox: TGTKHBox;
+ Table: TGTKTable;
+ Label3, Label4: TGTKLabel;
+ UserEntry, PasswordEntry: TGTKEntry;
+ ExperimentalWarningLabel: TGTKLabel;
+ ExperimentalWarningIcon: TGTKImage;
+ AnonymousCheckButton: TGTKCheckButton;
+ HBox4: TGTKHBox;
+ procedure FormCreate(Sender: TObject); override;
+ procedure FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+ procedure AnonymousCheckButtonToggled(Sender: TObject);
+ end;
+
+var
+ FLogin: TFLogin;
+
+implementation
+
+uses ULocale;
+
+
+procedure TFLogin.FormCreate(Sender: TObject);
+begin
+ SetDefaultSize(200, 150);
+ Caption := LANGConnLogin_Caption;
+ Buttons := [mbOK, mbCancel];
+ DefaultButton := mbOK;
+ ShowSeparator := False;
+ TitleEventBox := TGTKEventBox.Create(Self);
+ TitleLabel := TGTKLabel.Create(Self);
+ TitleLabel.Caption := Format('<span size="x-large" weight="ultrabold">%s</span>', [LANGConnLogin_Login]);
+ TitleLabel.UseMarkup := True;
+ TitleLabel.XAlign := 0;
+ TitleLabel.XPadding := 0;
+ TitleLabel.YPadding := 3;
+ TitleEventBox.ControlState := csPrelight;
+ TitleFrame := TGTKFrame.CreateWithoutLabel(Self);
+ TitleFrame.ShadowType := stShadowOut;
+ TitleIcon := TGTKImage.Create(Self);
+ TitleIcon.SetFromStock('gtk-dialog-authentication', isLargeToolbar);
+ TitleHBox := TGTKHBox.Create(Self);
+ TitleHBox.Homogeneous := False;
+ TitleHBox.AddControlEx(TGTKEventBox.Create(Self), False, False, 5);
+ TitleHBox.AddControlEx(TitleIcon, False, False, 0);
+ TitleHBox.AddControlEx(TitleLabel, True, True, 10);
+ TitleEventBox.AddControl(TitleHBox);
+ TitleFrame.AddControl(TitleEventBox);
+ ClientArea.AddControlEx(TitleFrame, False, True, 0);
+
+ HBox4 := TGTKHBox.Create(Self);
+ HBox4.Homogeneous := False;
+ ExperimentalWarningLabel := TGTKLabel.Create(Self);
+ ExperimentalWarningLabel.Caption := LANGConnLogin_ExperimentalWarningLabelCaption;
+ ExperimentalWarningLabel.UseMarkup := True;
+ ExperimentalWarningLabel.LineWrap := True;
+ ExperimentalWarningIcon := TGTKImage.Create(Self);
+ ExperimentalWarningIcon.SetFromStock('gtk-dialog-authentication', isDialog);
+ HBox4.AddControlEx(ExperimentalWarningIcon, False, False, 7);
+ HBox4.AddControlEx(ExperimentalWarningLabel, True, True, 7);
+ HBox4.AddControlEx(TGTKEventBox.Create(Self), False, False, 8);
+
+
+ Table := TGTKTable.Create(Self);
+ Table.BorderWidth := 20;
+ ClientArea.AddControlEx(Table, True, True, 0);
+ Table.AddControlEx(0, 0, 2, 1, HBox4, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 5, 0);
+ Table.AddControlEx(0, 1, 2, 1, TGTKEventBox.Create(Self), [taoShrink, taoFill], [taoShrink], 5, 10);
+ Label3 := TGTKLabel.Create(Self);
+ Label3.XAlign := 1;
+ Label3.Caption := LANGConnLogin_Username;
+ UserEntry := TGTKEntry.Create(Self);
+ Label3.FocusControl := UserEntry;
+ Label3.UseUnderline := True;
+ Label4 := TGTKLabel.Create(Self);
+ Label4.XAlign := 1;
+ Label4.Caption := LANGConnLogin_Password;
+ PasswordEntry := TGTKEntry.Create(Self);
+ PasswordEntry.Visibility := False;
+ Label4.FocusControl := PasswordEntry;
+ Label4.UseUnderline := True;
+ AnonymousCheckButton := TGTKCheckButton.CreateWithLabel(Self, LANGConnLogin_AnonymousCheckButton);
+ AnonymousCheckButton.OnToggled := AnonymousCheckButtonToggled;
+ AnonymousCheckButton.Checked := False;
+ Table.AddControlEx(0, 2, 1, 1, Label3, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 5, 2);
+ Table.AddControlEx(1, 2, 1, 1, UserEntry, [taoExpand, taoFill], [taoShrink], 5, 2);
+ Table.AddControlEx(0, 3, 1, 1, Label4, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 5, 2);
+ Table.AddControlEx(1, 3, 1, 1, PasswordEntry, [taoExpand, taoFill], [taoShrink], 5, 2);
+ Table.AddControlEx(0, 4, 2, 1, AnonymousCheckButton, [taoExpand, taoFill], [taoShrink], 20, 2);
+
+ UserEntry.SetFocus;
+ OnKeyDown := FormKeyDown;
+end;
+
+procedure TFLogin.FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+begin
+ case Key of
+ GDK_RETURN, GDK_KP_ENTER: ModalResult := mbOK;
+ GDK_ESCAPE: ModalResult := mbCancel;
+ end;
+end;
+
+procedure TFLogin.AnonymousCheckButtonToggled(Sender: TObject);
+begin
+ Label3.Enabled := not AnonymousCheckButton.Checked;
+ Label4.Enabled := not AnonymousCheckButton.Checked;
+ UserEntry.Enabled := not AnonymousCheckButton.Checked;
+ PasswordEntry.Enabled := not AnonymousCheckButton.Checked;
+end;
+
+
+end.
+
diff --git a/UMain.pas b/UMain.pas
new file mode 100644
index 0000000..3fb485a
--- /dev/null
+++ b/UMain.pas
@@ -0,0 +1,6128 @@
+(*
+ Tux Commander - UMain - Main form and window-related functions
+ Copyright (C) 2008 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit UMain;
+
+interface
+
+uses
+ gtk2, gdk2, gdk2pixbuf, glib2, pango, StrUtils, SysUtils, Types, Classes, DateUtils,
+ GTKForms, GTKControls, GTKMenus, GTKStdCtrls, GTKExtCtrls, GTKView, GTKConsts, GTKUtils,
+ GTKClasses, GTKPixbuf, UEngines, UConfig, UGnome, UVFSCore, UCoreClasses;
+
+type
+ TFMain = class(TGTKForm)
+ MainVBox : TGTKVBox;
+ MainMenuHandleBox : TGTKHandleBox;
+ MainMenu : TGTKMenuBar;
+ LeftPanelBox, RightPanelBox : TGTKVBox;
+ PanelSeparator : TGTKHPaned;
+ LeftStatusBox, RightStatusBox, LeftPathLabelHBox, RightPathLabelHBox : TGTKHBox;
+ LeftPathLabel, RightPathLabel : TGTKLabel;
+ LeftPathLabelEventBox, RightPathLabelEventBox : TGTKEventBox;
+ LeftScrolledWindow, RightScrolledWindow : TGTKScrolledWindow;
+ LeftListView, RightListView: TGTKListView;
+ LeftStatusLine, RightStatusLine : TGTKLabel;
+ LeftUpButton, LeftRootButton, LeftHomeButton, RightUpButton, RightRootButton, RightHomeButton,
+ LeftBookmarkButton, RightBookmarkButton : TGTKButton;
+ LeftEqualButton, RightEqualButton : TGTKButton;
+ LeftDiskInfoLabel, RightDiskInfoLabel : TGTKLabel;
+ ButtonsBox : TGTKTable;
+ F2Button, F3Button, F4Button, F5Button, F6Button, F7Button, F8Button : TGTKButton;
+ mnuFile, mnuMark, mnuCommands, mnuShow, mnuSettings, mnuHelp : TGTKMenuItem;
+ miExit : TGTKMenuItem;
+ miSelectGroup, miUnselectGroup, miSelectAll, miUnselectAll, miInvertSelection : TGTKMenuItem;
+ miRefresh : TGTKMenuItem;
+ miShowDotFiles : TGTKMenuItem;
+ miFileTypes: TGTKMenuItem;
+ miAbout : TGTKMenuItem;
+ miVerifyChecksums, miCreateChecksums : TGTKMenuItem;
+ miSplitFile, miMergeFiles : TGTKMenuItem;
+ miChangePermissions, miChangeOwner: TGTKMenuItem;
+ miCreateSymlink, miEditSymlink: TGTKMenuItem;
+ LeftQuickFindVBox, RightQuickFindVBox: TGTKVBox;
+ LeftQuickFindHBox, RightQuickFindHBox: TGTKHBox;
+ LeftQuickFindLabel, RightQuickFindLabel: TGTKLabel;
+ LeftQuickFindEntry, RightQuickFindEntry: TGTKEntry;
+ LeftQuickFindSeparator, RightQuickFindSeparator, ButtonBoxSeparator: TGTKHSeparator;
+ CommandLineHBox: TGTKHBox;
+ CommandLineCombo: TGTKCombo;
+ CommandLineLabel: TGTKLabel;
+ SplitterPopupMenu: TGTKMenuItem;
+ FilePopupMenu: TGTKMenuItem;
+ miPreferences: TGTKMenuItem;
+ mnuBookmarks, miAddBookmark, miEditBookmarks, BookmarkPopup, BookmarkPopupDelete, miBookmarksSeparator: TGTKMenuItem;
+ miShowDirectorySizes, miTargetSource: TGTKMenuItem;
+ ButtonBoxSpace: TGTKEventBox;
+ MounterBarHandleBox : TGTKHandleBox;
+ MounterBarTable: TGTKTable;
+ MounterButtonPopupMenu, miMount, miUmount, miEject: TGTKMenuItem;
+ miMounterSettings, miNoMounterBar, miShowOneMounterBar, miShowTwoMounterBar: TGTKMenuItem;
+ LeftMounterTable, RightMounterTable: TGTKTable;
+ miColumns: TGTKMenuItem;
+ mnuPlugins, miTestPlugin: TGTKMenuItem;
+ miSavePosition: TGTKMenuItem;
+ LeftPanelNotebook, RightPanelNotebook: TEphyNotebook;
+ LeftListBox, RightListBox: TGTKVBox;
+ TabPopupMenu, miDuplicateTab, miCloseTab, miCloseAllTabs: TGTKMenuItem;
+ mnuNetwork, miConnections, miOpenConnection, miQuickConnect, miDisconnect: TGTKMenuItem;
+ miSearch: TGTKMenuItem;
+ LeftDisconnectButton, RightDisconnectButton, LeftLeaveArchiveButton, RightLeaveArchiveButton: TGTKButton;
+ OpenTerminalButton: TGTKButton;
+ miNewTab: TGTKMenuItem;
+ LeftPasswordButton, RightPasswordButton: TGTKImageButton;
+ procedure FormCreate(Sender: TObject); override;
+ procedure FormDestroy(Sender: TObject);
+ procedure FormResize(Sender: TObject);
+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
+ procedure PanelSeparatorResize(Sender: TObject);
+ procedure miExitClick(Sender: TObject);
+ procedure miAboutClick(Sender: TObject);
+ procedure miRefreshClick(Sender: TObject);
+ procedure mnuMarkClick(Sender: TObject);
+ procedure ListViewKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+ procedure ListViewEnter(Sender: TObject; var Accept: boolean);
+ procedure PathLabelMouseDown(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean);
+ procedure PathButtonClick(Sender: TObject);
+ function CompareFunc(Sender: TObject; var model: PGtkTreeModel; var a, b: PGtkTreeIter): integer;
+ procedure F5ButtonClick(Sender: TObject);
+ procedure F6ButtonClick(Sender: TObject);
+ procedure F7ButtonClick(Sender: TObject);
+ procedure F8ButtonClick(Sender: TObject);
+ procedure ListViewDblClick(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean);
+ procedure ListViewMouseDown(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean);
+ procedure ListViewMouseUp(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean);
+ procedure InplaceEditTimerTimer(Sender: TObject);
+ procedure ListViewEdited(Sender: TObject; Column: TGTKTreeViewColumn; Item: TGTKListItem; var NewText: string; var AllowChange: boolean; var DataColumn: integer);
+ procedure ListViewSelectionChanged(Sender: TObject);
+ procedure QuickFindEntryEnter(Sender: TObject; var Accept: boolean);
+ procedure miVerifyChecksumsClick(Sender: TObject);
+ procedure miCreateChecksumsClick(Sender: TObject);
+ procedure miMergeFilesClick(Sender: TObject);
+ procedure miSplitFileClick(Sender: TObject);
+ procedure miShowDotFilesClick(Sender: TObject);
+ procedure F3F4ButtonClick(Sender: TObject);
+ procedure miFileTypesClick(Sender: TObject);
+ procedure CommandLineComboKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+ procedure FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+ procedure InactiveItemsTimerTimer(Sender: TObject);
+ function OldGTKConvertToSorted(Sender: TObject; const Index: integer): integer;
+ function OldGTKConvertFromSorted(Sender: TObject; const Index: integer): integer;
+ procedure SplitterPopupMenuClick(Sender: TObject);
+ procedure miChangePermissionsClick(Sender: TObject);
+ procedure miChangeOwnerClick(Sender: TObject);
+ procedure miCreateSymlinkClick(Sender: TObject);
+ procedure miEditSymlinkClick(Sender: TObject);
+ procedure FilePopupMenuPopup(Sender: TObject);
+ procedure FilePopupMenuItemClick(Sender: TObject);
+ procedure miPreferencesClick(Sender: TObject);
+ procedure miAddBookmarkClick(Sender: TObject);
+ procedure miBookmarkClick(Sender: TObject);
+ procedure BookmarkPopupDeleteClick(Sender: TObject);
+ procedure BookmarkItemMouseUp(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean);
+ procedure BookmarkButtonClick(Sender: TObject);
+ procedure mnuBookmarksPopup(Sender: TObject);
+ procedure miShowDirectorySizesClick(Sender: TObject);
+ procedure miTargetSourceClick(Sender: TObject);
+ procedure MounterButtonClick(Sender: TObject);
+ procedure MounterButtonPopupMenuPopup(Sender: TObject);
+ procedure MounterButtonMouseDown(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean);
+ procedure miMountClick(Sender: TObject);
+ procedure miUmountClick(Sender: TObject);
+ procedure miEjectClick(Sender: TObject);
+ procedure miMounterSettingsClick(Sender: TObject);
+ procedure miShowMounterBarClick(Sender: TObject);
+ procedure miColumnsClick(Sender: TObject);
+ procedure ListViewColumnsChanged(Sender: TObject);
+ procedure RebuildListViewsTimerTimer(Sender: TObject);
+ procedure miTestPluginClick(Sender: TObject);
+ procedure miPluginAboutClick(Sender: TObject);
+ procedure miSavePositionClick(Sender: TObject);
+ procedure TabNotebookSwitchPage(Sender: TObject; const NewTabNum: integer; const ShouldFocus: boolean);
+ procedure miDuplicateTabClick(Sender: TObject);
+ procedure miCloseTabClick(Sender: TObject);
+ procedure miCloseAllTabsClick(Sender: TObject);
+ procedure TabPopupMenuPopup(Sender: TObject);
+ procedure miOpenConnectionClick(Sender: TObject);
+ procedure miSearchClick(Sender: TObject);
+ procedure miDisconnectClick(Sender: TObject);
+ procedure DisconnectButtonClick(Sender: TObject);
+ procedure LeaveArchiveButtonClick(Sender: TObject);
+ procedure OpenTerminalButtonClick(Sender: TObject);
+ procedure ListViewColumnClicked(Sender: TObject);
+ procedure NotebookReordered(Sender: TObject; const Source, Dest: integer);
+ procedure NotebookTabClosed(Sender: TObject; const TabNum: integer; var CanClose: boolean);
+ procedure NotebookTabDoubleClick(Sender: TObject; const TabNum: integer);
+ function NotebookFindNotebookAtPointerEvent(Sender: TObject; const AbsX, AbsY: integer): TEphyNotebook;
+ function NotebookMoveTabToAnotherNotebook(Sender: TObject; Destination: TEphyNotebook; const SourceTabNo, DestTabNo: integer): boolean;
+ procedure NotebookTabFocusOnlyEvent(Sender: TObject; const TabNum: integer);
+ procedure miFilePropertiesClick(Sender: TObject);
+ procedure PasswordButtonClick(Sender: TObject);
+ private
+ LeftLastFocused, Editing, QuickFind, RedrawLeftInactive, RedrawRightInactive, StartUp, LeftTabPopup: boolean;
+ LastWidth, RunningEscSensitive: integer;
+ InplaceEditTimer, InactiveItemsTimer, RebuildListViewsTimer: TGTKTimer;
+ InplaceEditItem: TGTKListItem;
+ SavedCmdLine: string;
+ LastMounterButton: TGTKButton;
+ MounterTableList, MounterTableListLeft, MounterTableListRight: TList;
+ LeftNotebookBoxList, RightNotebookBoxList: TList;
+ LeftPathsHighlight, RightPathsHighlight: TStringList;
+ LeftTabEngines, RightTabEngines: TList;
+ LastUsedFilter: string;
+ procedure ConstructPanels;
+ procedure ConstructMenu;
+ procedure ConstructColumns(ListView: TGTKListView);
+ procedure AfterStart;
+ procedure ActivateItem(const ItemIndex: longint; const MouseActivate: boolean);
+ procedure UpdatePanelInfo;
+ procedure UpdatePanelInfoDown(LeftPanel: boolean);
+ procedure UpdateCaption;
+ procedure ChangingDir(LeftPanel: boolean; NewPath: string; HiliString1: string = ''; HiliString2: string = ''; const PreserveSelection: boolean = False; const AutoFallback: boolean = False; Plugin: TVFSPlugin = nil);
+ procedure DoSelect(SelectType: integer);
+ procedure ListViewCellDataFunc(Sender: TObject; tree_view: PGtkTreeView; tree_column : PGtkTreeViewColumn; cell : PGtkCellRenderer; tree_model : PGtkTreeModel; iter : PGtkTreeIter);
+ procedure DoGetDirSize(AllItems: boolean);
+ procedure DoDelete(LeftPanel: boolean; ListView: TGTKListView; Engine: TPanelEngine; DataList: TList);
+ procedure DoCopyMove(LeftPanel, CopyMode, ShiftPressed: boolean; ListView: TGTKListView; Engine: TPanelEngine; DataList: TList);
+ procedure DoRefresh(LeftPanel, StaySame, AutoFallback: boolean);
+ procedure DoQuickRename(LeftPanel: boolean; ListView: TGTKListView; const CalledFromKey: boolean);
+ procedure ActivateQuickFind(LeftPanel: boolean);
+ procedure DeactivateQuickFind(LeftPanel: boolean);
+ function QuickFindSendKey(LeftPanel: boolean; Key: word): boolean;
+ procedure ProcessMarkKey(KeyType, Key: integer);
+ procedure SwitchOtherPanel(LeftPanel, RequestNewAltO: boolean);
+ procedure EditViewFile(LeftPanel: boolean; AListView: TGTKListView; View, NewFile: boolean);
+ procedure RunFile(Path: string; Engine: TPanelEngine; CustomAction: integer);
+ function ActivateCommandLine(Key: word; const ActualPosition: boolean = False): boolean;
+ procedure ApplySettings(RebuildListViews, RebuildIcons, Startup: boolean);
+ procedure RefreshBookmarksMenu;
+ procedure PopupFileMenuPos;
+ procedure HandleFormFocusIn;
+ procedure SwitchPanelCtrlLeftRight(LeftPanel, LeftArrowPressed: boolean);
+ procedure FillMounterBar;
+ procedure RebuildListViews(DoRefresh: boolean);
+ procedure FillPluginMenu;
+ procedure NewTab(LeftPanel: boolean);
+ procedure SwitchTab(TabNo: integer; LeftPanel, SetFocus: boolean);
+ procedure CloseTab(TabNo: integer; LeftPanel: boolean);
+ procedure AddTabs(LeftPanel: boolean; TabList: TStringList; TabSortIDs, TabSortTypes: TList; SetTabActive: integer);
+ function HandleVFSArchive(const Ext, FullPath, HighlightItem, TargetPath: string): boolean;
+ procedure CloseVFS(LeftPanel, SurpressRefresh: boolean);
+ procedure ShowBookmarkQuick(LeftPanel: boolean);
+ procedure SetTabLabel(Notebook: TEphyNotebook; PageIndex: integer; ALabel, Tooltip: string);
+ procedure NewTabInternal(LeftPanel: boolean; _Engine: TPanelEngine; _Path: string; NewTabPosition: integer);
+ procedure CopyFilenamesToClipboard(FullPaths, LeftPanel: boolean);
+ function HandleRunFromArchive(var APath: string; Engine: TPanelEngine; Command, FileTypeDesc: string; BypassDialog: boolean): boolean;
+ function HandleSetPassword(Engine: TPanelEngine): boolean;
+ public
+ LeftPanelEngine, RightPanelEngine : TPanelEngine;
+ ColumnSortIDs: array[1..ConstNumPanelColumns] of integer;
+ LastClick: TDateTime;
+ procedure EditViewFileInternal(ParentWindow: TGTKControl; Filename: string; Engine: TPanelEngine; View, NewFile: boolean);
+ end;
+
+var
+ FMain: TFMain;
+
+implementation
+
+uses Libc,
+ UCore, USelect, UNewDir, UDirDelete, UProgress, UCopyMove,
+ UCoreUtils, ULocale, UChecksum, UChecksumDruid, USplitFile,
+ UFileTypeSettings, UFileAssoc, UChmod, UChown, USymlink,
+ UPreferences, UViewer, UToolTips, UMounterPrefs, UColumns,
+ UTestPlugin, UConnectionManager, USearch, UProperties,
+ URemoteWait, URunFromVFS, USetPassword, uVFSprototypes;
+
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+function form_event_handler(widget: PGtkWidget; event: PGdkEvent; user_data: gpointer): gboolean; cdecl; forward;
+
+procedure TFMain.FormCreate(Sender: TObject);
+begin
+ ReportGTKVersion;
+ StartUp := True;
+ RunningEscSensitive := 0;
+ Editing := False;
+ QuickFind := False;
+ LeftTabPopup := True;
+ LastClick := 0;
+ LastUsedFilter := '*.*';
+ RedrawLeftInactive := False;
+ RedrawRightInactive := False;
+ MounterTableList := TList.Create;
+ MounterTableListLeft := TList.Create;
+ MounterTableListRight := TList.Create;
+ LeftNotebookBoxList := TList.Create;
+ RightNotebookBoxList := TList.Create;
+ LeftPathsHighlight := TStringList.Create;
+ RightPathsHighlight := TStringList.Create;
+ LeftTabEngines := TList.Create;
+ RightTabEngines := TList.Create;
+ Caption := ConstAppTitle;
+ WindowPosition := wpCenter;
+ MainVBox := TGTKVBox.Create(Self);
+ AddControl(MainVBox);
+ MainMenuHandleBox := TGTKHandleBox.Create(Self);
+ MainVBox.AddControlEx(MainMenuHandleBox, False, True, 0);
+ MainMenu := TGTKMenuBar.Create(Self);
+ MainMenuHandleBox.AddControl(MainMenu);
+ ConstructMenu;
+ InplaceEditTimer := TGTKTimer.Create(Self);
+ InplaceEditTimer.Enabled := False;
+ InplaceEditTimer.OnTimer := InplaceEditTimerTimer;
+ InactiveItemsTimer := TGTKTimer.Create(Self);
+ InactiveItemsTimer.Enabled := False;
+ InactiveItemsTimer.Interval := ConfInactiveTimerDelay;
+ if not Application.GTKVersion_2_6_0_Up then InactiveItemsTimer.OnTimer := InactiveItemsTimerTimer;
+ RebuildListViewsTimer := TGTKTimer.Create(Self);
+ RebuildListViewsTimer.Enabled := False;
+ RebuildListViewsTimer.OnTimer := RebuildListViewsTimerTimer;
+ MounterBarHandleBox := TGTKHandleBox.Create(Self);
+ MounterBarHandleBox.SetSizeRequest(10, -1);
+ MainVBox.AddControlEx(MounterBarHandleBox, False, True, 0);
+ MounterBarTable := TGTKTable.Create(Self);
+ MounterBarHandleBox.AddControl(MounterBarTable);
+ LeftPanelBox := TGTKVBox.Create(Self);
+ RightPanelBox := TGTKVBox.Create(Self);
+ PanelSeparator := TGTKHPaned.Create(Self);
+ MainVBox.AddControlEx(PanelSeparator, True, True, 0);
+ PanelSeparator.Child1 := LeftPanelBox;
+ PanelSeparator.Child2 := RightPanelBox;
+ ConstructPanels;
+ CommandLineHBox := TGTKHBox.Create(Self);
+ CommandLineHBox.Homogeneous := False;
+ CommandLineCombo := TGTKCombo.Create(Self);
+ CommandLineCombo.DisableActivate;
+ CommandLineCombo.MatchValue := False;
+ CommandLineCombo.CaseSensitive := True;
+// CommandLineCombo.Entry.OnKeyDown := CommandLineComboKeyDown;
+ CommandLineLabel := TGTKLabel.Create(Self);
+ CommandLineLabel.Alignment := taRightJustify;
+ CommandLineLabel.SetAlignment(1, 0.5);
+ CommandLineLabel.SetSizeRequest(300, -1);
+ OpenTerminalButton := TGTKButton.Create(Self);
+ OpenTerminalButton.Caption := LANGOpenTerminalButton_Caption;
+ OpenTerminalButton.BorderStyle := bsNone;
+ OpenTerminalButton.CanFocus := False;
+ OpenTerminalButton.Tooltip := LANGOpenTerminalButton_Tooltip;
+ OpenTerminalButton.OnClick := OpenTerminalButtonClick;
+ CommandLineHBox.AddControlEx(CommandLineLabel, False, False, 0);
+ CommandLineHBox.AddControlEx(CommandLineCombo, True, True, 5);
+ CommandLineHBox.AddControlEx(TGTKVSeparator.Create(Self), False, False, 2);
+ CommandLineHBox.AddControlEx(OpenTerminalButton, False, False, 2);
+ MainVBox.AddControlEx(TGTKHSeparator.Create(Self), False, False, 2);
+ MainVBox.AddControlEx(CommandLineHBox, False, False, 0);
+ ButtonsBox := TGTKTable.Create(Self);
+ F2Button := TGTKButton.Create(Self);
+ F3Button := TGTKButton.Create(Self);
+ F4Button := TGTKButton.Create(Self);
+ F5Button := TGTKButton.Create(Self);
+ F6Button := TGTKButton.Create(Self);
+ F7Button := TGTKButton.Create(Self);
+ F8Button := TGTKButton.Create(Self);
+ ButtonsBox.AddControlEx(0, 0, 1, 1, F2Button, [taoExpand, taoFill], [taoShrink, taoExpand, taoFill], 0, 0);
+ ButtonsBox.AddControlEx(1, 0, 1, 1, TGTKVSeparator.Create(Self), [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 2, 4);
+ ButtonsBox.AddControlEx(2, 0, 1, 1, F3Button, [taoExpand, taoFill], [taoShrink, taoExpand, taoFill], 0, 0);
+ ButtonsBox.AddControlEx(3, 0, 1, 1, TGTKVSeparator.Create(Self), [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 2, 4);
+ ButtonsBox.AddControlEx(4, 0, 1, 1, F4Button, [taoExpand, taoFill], [taoShrink, taoExpand, taoFill], 0, 0);
+ ButtonsBox.AddControlEx(5, 0, 1, 1, TGTKVSeparator.Create(Self), [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 2, 4);
+ ButtonsBox.AddControlEx(6, 0, 1, 1, F5Button, [taoExpand, taoFill], [taoShrink, taoExpand, taoFill], 0, 0);
+ ButtonsBox.AddControlEx(7, 0, 1, 1, TGTKVSeparator.Create(Self), [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 2, 4);
+ ButtonsBox.AddControlEx(8, 0, 1, 1, F6Button, [taoExpand, taoFill], [taoShrink, taoExpand, taoFill], 0, 0);
+ ButtonsBox.AddControlEx(9, 0, 1, 1, TGTKVSeparator.Create(Self), [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 2, 4);
+ ButtonsBox.AddControlEx(10, 0, 1, 1, F7Button, [taoExpand, taoFill], [taoShrink, taoExpand, taoFill], 0, 0);
+ ButtonsBox.AddControlEx(11, 0, 1, 1, TGTKVSeparator.Create(Self), [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 2, 4);
+ ButtonsBox.AddControlEx(12, 0, 1, 1, F8Button, [taoExpand, taoFill], [taoShrink, taoExpand, taoFill], 0, 0);
+ ButtonBoxSeparator := TGTKHSeparator.Create(Self);
+ ButtonBoxSpace := TGTKEventBox.Create(Self);
+ MainVBox.AddControlEx(ButtonBoxSpace, False, False, 2);
+ MainVBox.AddControlEx(ButtonBoxSeparator, False, False, 2);
+ MainVBox.AddControlEx(ButtonsBox, False, False, 0);
+ F2Button.BorderStyle := bsNone;
+ F3Button.BorderStyle := bsNone;
+ F4Button.BorderStyle := bsNone;
+ F5Button.BorderStyle := bsNone;
+ F6Button.BorderStyle := bsNone;
+ F7Button.BorderStyle := bsNone;
+ F8Button.BorderStyle := bsNone;
+ F2Button.Caption := LANGF2Button_Caption;
+ F3Button.Caption := LANGF3Button_Caption;
+ F4Button.Caption := LANGF4Button_Caption;
+ F5Button.Caption := LANGF5Button_Caption;
+ F6Button.Caption := LANGF6Button_Caption;
+ F7Button.Caption := LANGF7Button_Caption;
+ F8Button.Caption := LANGF8Button_Caption;
+ F2Button.OnClick := F6ButtonClick;
+ F3Button.OnClick := F3F4ButtonClick;
+ F4Button.OnClick := F3F4ButtonClick;
+ F5Button.OnClick := F5ButtonClick;
+ F6Button.OnClick := F6ButtonClick;
+ F7Button.OnClick := F7ButtonClick;
+ F8Button.OnClick := F8ButtonClick;
+ F2Button.CanFocus := False;
+ F3Button.CanFocus := False;
+ F4Button.CanFocus := False;
+ F5Button.CanFocus := False;
+ F6Button.CanFocus := False;
+ F7Button.CanFocus := False;
+ F8Button.CanFocus := False;
+ PanelSeparator.PopupMenu := SplitterPopupMenu;
+ LeftListView.PopupMenu := FilePopupMenu;
+ RightListView.PopupMenu := FilePopupMenu;
+
+ // Events
+ OnResize := FormResize;
+ OnDestroy := FormDestroy;
+ OnKeyDown := FormKeyDown;
+ OnClose := FormClose;
+ g_signal_connect_after(FWidget, 'event-after', G_CALLBACK(@form_event_handler), nil);
+ PanelSeparator.OnResize := PanelSeparatorResize;
+ LeftListView.OnKeyDown := ListViewKeyDown;
+ RightListView.OnKeyDown := ListViewKeyDown;
+ LeftListView.OnEnter := ListViewEnter;
+ RightListView.OnEnter := ListViewEnter;
+ LeftPathLabelEventBox.OnMouseDown := PathLabelMouseDown;
+ RightPathLabelEventBox.OnMouseDown := PathLabelMouseDown;
+ LeftUpButton.OnClick := PathButtonClick;
+ LeftRootButton.OnClick := PathButtonClick;
+ LeftHomeButton.OnClick := PathButtonClick;
+ RightUpButton.OnClick := PathButtonClick;
+ RightRootButton.OnClick := PathButtonClick;
+ RightHomeButton.OnClick := PathButtonClick;
+ LeftEqualButton.OnClick := miTargetSourceClick;
+ RightEqualButton.OnClick := miTargetSourceClick;
+ LeftDisconnectButton.OnClick := DisconnectButtonClick;
+ RightDisconnectButton.OnClick := DisconnectButtonClick;
+ LeftLeaveArchiveButton.OnClick := LeaveArchiveButtonClick;
+ RightLeaveArchiveButton.OnClick := LeaveArchiveButtonClick;
+ LeftListView.CompareFunc := CompareFunc;
+ RightListView.CompareFunc := CompareFunc;
+ LeftListView.CellDataFunc := ListViewCellDataFunc;
+ RightListView.CellDataFunc := ListViewCellDataFunc;
+ LeftListView.OnMouseDown := ListViewMouseDown;
+ RightListView.OnMouseDown := ListViewMouseDown;
+ LeftListView.OnMouseUp := ListViewMouseUp;
+ RightListView.OnMouseUp := ListViewMouseUp;
+{ LeftListView.OnDblClick := ListViewDblClick;
+ RightListView.OnDblClick := ListViewDblClick;}
+ LeftListView.OnSelectionChanged := ListViewSelectionChanged;
+ RightListView.OnSelectionChanged := ListViewSelectionChanged;
+ LeftQuickFindEntry.OnEnter := QuickFindEntryEnter;
+ RightQuickFindEntry.OnEnter := QuickFindEntryEnter;
+ LeftPanelNotebook.OnTabSwitched := TabNotebookSwitchPage;
+ RightPanelNotebook.OnTabSwitched := TabNotebookSwitchPage;
+ LeftPanelNotebook.PopupMenu := TabPopupMenu;
+ RightPanelNotebook.PopupMenu := TabPopupMenu;
+ AfterStart;
+end;
+
+procedure TFMain.ConstructPanels;
+begin
+ LeftMounterTable := TGTKTable.Create(Self);
+ LeftMounterTable.SetSizeRequest(10, -1);
+ RightMounterTable := TGTKTable.Create(Self);
+ RightMounterTable.SetSizeRequest(10, -1);
+ LeftMounterTable.BorderWidth := 2;
+ RightMounterTable.BorderWidth := 2;
+ LeftPanelBox.AddControlEx(LeftMounterTable, False, False, 0);
+ RightPanelBox.AddControlEx(RightMounterTable, False, False, 0);
+ LeftStatusBox := TGTKHBox.Create(Self);
+ RightStatusBox := TGTKHBox.Create(Self);
+ LeftStatusBox.Homogeneous := False;
+ RightStatusBox.Homogeneous := False;
+ LeftPathLabel := TGTKLabel.Create(Self);
+ RightPathLabel := TGTKLabel.Create(Self);
+ LeftPathLabel.SetSizeRequest(10, -1);
+ RightPathLabel.SetSizeRequest(10, -1);
+ LeftPathLabelEventBox := TGTKEventBox.Create(Self);
+ RightPathLabelEventBox := TGTKEventBox.Create(Self);
+ LeftPathLabelHBox := TGTKHBox.Create(Self);
+ RightPathLabelHBox := TGTKHBox.Create(Self);
+ LeftPathLabelHBox.Homogeneous := False;
+ RightPathLabelHBox.Homogeneous := False;
+ LeftBookmarkButton := TGTKButton.Create(Self); LeftBookmarkButton.Caption := '❇';
+ RightBookmarkButton := TGTKButton.Create(Self); RightBookmarkButton.Caption := '❇';
+ LeftPasswordButton := TGTKImageButton.Create(Self); LeftPasswordButton.Icon := StockLock16;
+ RightPasswordButton := TGTKImageButton.Create(Self); RightPasswordButton.Icon := StockLock16;
+ LeftPasswordButton.BorderStyle := bsNone;
+ RightPasswordButton.BorderStyle := bsNone;
+ LeftBookmarkButton.SetSizeRequest(22, 22); LeftBookmarkButton.Tooltip := LANGBookmarkButton_Tooltip;
+ RightBookmarkButton.SetSizeRequest(22, 22); RightBookmarkButton.Tooltip := LANGBookmarkButton_Tooltip;
+ LeftPasswordButton.SetSizeRequest(28, 22); LeftPasswordButton.Tooltip := LANGPasswordButton_Tooltip;
+ RightPasswordButton.SetSizeRequest(28, 22); RightPasswordButton.Tooltip := LANGPasswordButton_Tooltip;
+ LeftPasswordButton.Visible := False;
+ RightPasswordButton.Visible := False;
+ LeftBookmarkButton.CanFocus := False;
+ RightBookmarkButton.CanFocus := False;
+ LeftPasswordButton.CanFocus := False;
+ RightPasswordButton.CanFocus := False;
+ LeftBookmarkButton.OnClick := BookmarkButtonClick;
+ RightBookmarkButton.OnClick := BookmarkButtonClick;
+ LeftPasswordButton.OnClick := PasswordButtonClick;
+ RightPasswordButton.OnClick := PasswordButtonClick;
+ LeftScrolledWindow := TGTKScrolledWindow.Create(Self);
+ RightScrolledWindow := TGTKScrolledWindow.Create(Self);
+ LeftListView := TGTKListView.CreateTyped(Self, True, [lcPointer]);
+ RightListView := TGTKListView.CreateTyped(Self, True, [lcPointer]);
+ if not Application.GTKVersion_2_0_5_Up then begin
+ LeftListView.FromSortedCoversionFunc := OldGTKConvertFromSorted;
+ LeftListView.ToSortedCoversionFunc := OldGTKConvertToSorted;
+ RightListView.FromSortedCoversionFunc := OldGTKConvertFromSorted;
+ RightListView.ToSortedCoversionFunc := OldGTKConvertToSorted;
+ end;
+ LeftStatusLine := TGTKLabel.Create(Self);
+ RightStatusLine := TGTKLabel.Create(Self);
+ LeftQuickFindVBox := TGTKVBox.Create(Self);
+ LeftQuickFindHBox := TGTKHBox.Create(Self);
+ LeftQuickFindLabel := TGTKLabel.Create(Self);
+ LeftQuickFindEntry := TGTKEntry.Create(Self);
+ LeftQuickFindEntry.CanFocus := False;
+ LeftQuickFindSeparator := TGTKHSeparator.Create(Self);
+ LeftQuickFindHBox.AddControlEx(LeftQuickFindLabel, False, False, 0);
+ LeftQuickFindHBox.AddControlEx(LeftQuickFindEntry, True, True, 5);
+ LeftQuickFindHBox.Homogeneous := False;
+ LeftQuickFindVBox.AddControlEx(LeftQuickFindHBox, False, False, 5);
+ LeftQuickFindVBox.AddControlEx(LeftQuickFindSeparator, False, False, 0);
+ LeftQuickFindLabel.Caption := LANGQuickFind;
+ LeftQuickFindVBox.Hide;
+ RightQuickFindVBox := TGTKVBox.Create(Self);
+ RightQuickFindHBox := TGTKHBox.Create(Self);
+ RightQuickFindLabel := TGTKLabel.Create(Self);
+ RightQuickFindEntry := TGTKEntry.Create(Self);
+ RightQuickFindEntry.CanFocus := False;
+ RightQuickFindSeparator := TGTKHSeparator.Create(Self);
+ RightQuickFindHBox.AddControlEx(RightQuickFindLabel, False, False, 0);
+ RightQuickFindHBox.AddControlEx(RightQuickFindEntry, True, True, 5);
+ RightQuickFindHBox.Homogeneous := False;
+ RightQuickFindVBox.AddControlEx(RightQuickFindHBox, False, False, 5);
+ RightQuickFindVBox.AddControlEx(RightQuickFindSeparator, False, False, 0);
+ RightQuickFindLabel.Caption := LANGQuickFind;
+ RightQuickFindVBox.Hide;
+ LeftDisconnectButton := TGTKButton.Create(Self);
+ LeftDisconnectButton.Caption := '✖';
+ LeftDisconnectButton.CanFocus := False;
+ LeftDisconnectButton.SetSizeRequest(22, 22);
+ LeftDisconnectButton.Tooltip := LANGDisconnectButton_Tooltip;
+ LeftDisconnectButton.Visible := False;
+ RightDisconnectButton := TGTKButton.Create(Self);
+ RightDisconnectButton.Caption := '✖';
+ RightDisconnectButton.CanFocus := False;
+ RightDisconnectButton.SetSizeRequest(22, 22);
+ RightDisconnectButton.Tooltip := LANGDisconnectButton_Tooltip;
+ RightDisconnectButton.Visible := False;
+ LeftLeaveArchiveButton := TGTKButton.Create(Self);
+ LeftLeaveArchiveButton.Caption := '⇚';
+ LeftLeaveArchiveButton.CanFocus := False;
+ LeftLeaveArchiveButton.SetSizeRequest(22, 22);
+ LeftLeaveArchiveButton.Tooltip := LANGLeaveArchiveButton_Tooltip;
+ LeftLeaveArchiveButton.Visible := False;
+ RightLeaveArchiveButton := TGTKButton.Create(Self);
+ RightLeaveArchiveButton.Caption := '⇚';
+ RightLeaveArchiveButton.CanFocus := False;
+ RightLeaveArchiveButton.SetSizeRequest(22, 22);
+ RightLeaveArchiveButton.Tooltip := LANGLeaveArchiveButton_Tooltip;
+ RightLeaveArchiveButton.Visible := False;
+ LeftPathLabelHBox.AddControlEx(LeftPathLabelEventBox, True, True, 0);
+ LeftPathLabelHBox.AddControlEx(LeftPasswordButton, False, False, 0);
+ LeftPathLabelHBox.AddControlEx(LeftDisconnectButton, False, True, 0);
+ LeftPathLabelHBox.AddControlEx(LeftLeaveArchiveButton, False, True, 0);
+ LeftPathLabelHBox.AddControlEx(LeftBookmarkButton, False, False, 0);
+ RightPathLabelHBox.AddControlEx(RightPathLabelEventBox, True, True, 0);
+ RightPathLabelHBox.AddControlEx(RightPasswordButton, False, False, 0);
+ RightPathLabelHBox.AddControlEx(RightDisconnectButton, False, True, 0);
+ RightPathLabelHBox.AddControlEx(RightLeaveArchiveButton, False, True, 0);
+ RightPathLabelHBox.AddControlEx(RightBookmarkButton, False, False, 0);
+ LeftPathLabelEventBox.AddControl(LeftPathLabel);
+ RightPathLabelEventBox.AddControl(RightPathLabel);
+ LeftPanelNotebook := TEphyNotebook.Create(Self);
+ LeftPanelNotebook.Visible := False;
+ LeftPanelNotebook.SetSizeRequest(10, -1);
+ LeftPanelNotebook.Scrollable := True;
+ LeftPanelNotebook.ShowBorder := False;
+ LeftPanelNotebook.CanFocus := False; // Notebook should be focusable to allow scrolling when many tabs -- temporarily disabled
+ LeftPanelNotebook.ShowCloseButtons := True;
+ LeftPanelNotebook.AllowDragDrop := True;
+ LeftPanelNotebook.AllowDragOutside := True;
+ LeftPanelNotebook.ShowTooltips := True;
+ LeftPanelNotebook.OnNotebookReordered := NotebookReordered;
+ LeftPanelNotebook.OnTabClose := NotebookTabClosed;
+ LeftPanelNotebook.OnTabDoubleClick := NotebookTabDoubleClick;
+ LeftPanelNotebook.OnFindNotebookAtPointer := NotebookFindNotebookAtPointerEvent;
+ LeftPanelNotebook.OnMoveTabToAnotherNotebook := NotebookMoveTabToAnotherNotebook;
+ LeftPanelNotebook.OnTabFocusOnlyEvent := NotebookTabFocusOnlyEvent;
+ RightPanelNotebook := TEphyNotebook.Create(Self);
+ RightPanelNotebook.Visible := False;
+ RightPanelNotebook.SetSizeRequest(10, -1);
+ RightPanelNotebook.Scrollable := True;
+ RightPanelNotebook.ShowBorder := False;
+ RightPanelNotebook.CanFocus := False;
+ RightPanelNotebook.ShowCloseButtons := True;
+ RightPanelNotebook.AllowDragDrop := True;
+ RightPanelNotebook.AllowDragOutside := True;
+ RightPanelNotebook.ShowTooltips := True;
+ RightPanelNotebook.OnNotebookReordered := NotebookReordered;
+ RightPanelNotebook.OnTabClose := NotebookTabClosed;
+ RightPanelNotebook.OnTabDoubleClick := NotebookTabDoubleClick;
+ RightPanelNotebook.OnFindNotebookAtPointer := NotebookFindNotebookAtPointerEvent;
+ RightPanelNotebook.OnMoveTabToAnotherNotebook := NotebookMoveTabToAnotherNotebook;
+ RightPanelNotebook.OnTabFocusOnlyEvent := NotebookTabFocusOnlyEvent;
+ LeftListBox := TGTKVBox.Create(Self);
+ LeftListBox.AddControlEx(LeftScrolledWindow, True, True, 0);
+ RightListBox := TGTKVBox.Create(Self);
+ RightListBox.AddControlEx(RightScrolledWindow, True, True, 0);
+ LeftPanelBox.AddControlEx(LeftStatusBox, False, True, 0);
+ RightPanelBox.AddControlEx(RightStatusBox, False, True, 0);
+ LeftPanelBox.AddControlEx(LeftPathLabelHBox, False, False, 1);
+ RightPanelBox.AddControlEx(RightPathLabelHBox, False, False, 1);
+ LeftPanelBox.AddControlEx(LeftPanelNotebook, True, True, 0);
+ RightPanelBox.AddControlEx(RightPanelNotebook, True, True, 0);
+ LeftPanelBox.AddControlEx(LeftListBox, True, True, 0);
+ RightPanelBox.AddControlEx(RightListBox, True, True, 0);
+ LeftPanelBox.AddControlEx(LeftQuickFindVBox, False, True, 0);
+ RightPanelBox.AddControlEx(RightQuickFindVBox, False, True, 0);
+ LeftPanelBox.AddControlEx(LeftStatusLine, False, True, 0);
+ RightPanelBox.AddControlEx(RightStatusLine, False, True, 0);
+ LeftScrolledWindow.AddControl(LeftListView);
+ RightScrolledWindow.AddControl(RightListView);
+ LeftScrolledWindow.HorizScrollBarPolicy := sbAutomatic;
+ RightScrolledWindow.HorizScrollBarPolicy := sbAutomatic;
+ LeftScrolledWindow.VertScrollBarPolicy := sbAutomatic;
+ RightScrolledWindow.VertScrollBarPolicy := sbAutomatic;
+ LeftScrolledWindow.ShadowType := stShadowIn;
+ RightScrolledWindow.ShadowType := stShadowIn;
+ LeftUpButton := TGTKButton.Create(Self); LeftUpButton.Caption := '..';
+ LeftRootButton := TGTKButton.Create(Self); LeftRootButton.Caption := '/';
+ LeftHomeButton := TGTKButton.Create(Self); LeftHomeButton.Caption := '~';
+ LeftEqualButton := TGTKButton.Create(Self); LeftEqualButton.Caption := '=';
+ LeftUpButton.SetSizeRequest(22, 22); LeftUpButton.Tooltip := LANGUpButton_Tooltip;
+ LeftRootButton.SetSizeRequest(22, 22); LeftRootButton.Tooltip := LANGRootButton_Tooltip;
+ LeftHomeButton.SetSizeRequest(22, 22); LeftHomeButton.Tooltip := LANGHomeButton_Tooltip;
+ LeftEqualButton.SetSizeRequest(22, 22); LeftEqualButton.Tooltip := LANGLeftEqualButton_Tooltip;
+ LeftDiskInfoLabel := TGTKLabel.Create(Self);
+ LeftStatusBox.AddControlEx(LeftDiskInfoLabel, True, True, 0);
+ LeftStatusBox.AddControlEndEx(LeftUpButton, False, False, 0);
+ LeftStatusBox.AddControlEndEx(LeftRootButton, False, False, 0);
+ LeftStatusBox.AddControlEndEx(LeftHomeButton, False, False, 0);
+ LeftStatusBox.AddControlEndEx(LeftEqualButton, False, False, 0);
+ RightUpButton := TGTKButton.Create(Self); RightUpButton.Caption := '..';
+ RightRootButton := TGTKButton.Create(Self); RightRootButton.Caption := '/';
+ RightHomeButton := TGTKButton.Create(Self); RightHomeButton.Caption := '~';
+ RightEqualButton := TGTKButton.Create(Self); RightEqualButton.Caption := '=';
+ RightUpButton.SetSizeRequest(22, 22); RightUpButton.Tooltip := LANGUpButton_Tooltip;
+ RightRootButton.SetSizeRequest(22, 22); RightRootButton.Tooltip := LANGRootButton_Tooltip;
+ RightHomeButton.SetSizeRequest(22, 22); RightHomeButton.Tooltip := LANGHomeButton_Tooltip;
+ RightEqualButton.SetSizeRequest(22, 22); RightEqualButton.Tooltip := LANGRightEqualButton_Tooltip;
+ LeftUpButton.CanFocus := False;
+ LeftRootButton.CanFocus := False;
+ LeftHomeButton.CanFocus := False;
+ LeftEqualButton.CanFocus := False;
+ RightUpButton.CanFocus := False;
+ RightRootButton.CanFocus := False;
+ RightHomeButton.CanFocus := False;
+ RightEqualButton.CanFocus := False;
+ RightDiskInfoLabel := TGTKLabel.Create(Self);
+ RightStatusBox.AddControlEx(RightDiskInfoLabel, True, True, 0);
+ RightStatusBox.AddControlEndEx(RightUpButton, False, False, 0);
+ RightStatusBox.AddControlEndEx(RightRootButton, False, False, 0);
+ RightStatusBox.AddControlEndEx(RightHomeButton, False, False, 0);
+ RightStatusBox.AddControlEndEx(RightEqualButton, False, False, 0);
+ ConstructColumns(LeftListView);
+ ConstructColumns(RightListView);
+ LeftPathLabel.XAlign := 0;
+ LeftPathLabel.XPadding := 5;
+ LeftPathLabel.YPadding := 1;
+ RightPathLabel.XAlign := 0;
+ RightPathLabel.XPadding := 5;
+ RightPathLabel.YPadding := 1;
+ LeftDiskInfoLabel.XAlign := 0;
+ LeftDiskInfoLabel.XPadding := 5;
+ LeftDiskInfoLabel.YAlign := 0.5;
+ RightDiskInfoLabel.XAlign := 0;
+ RightDiskInfoLabel.XPadding := 5;
+ RightDiskInfoLabel.YAlign := 0.5;
+ LeftStatusLine.XAlign := 0;
+ LeftStatusLine.XPadding := 5;
+ LeftStatusLine.YAlign := 0.5;
+ RightStatusLine.XAlign := 0;
+ RightStatusLine.XPadding := 5;
+ RightStatusLine.YAlign := 0.5;
+{ LeftStatusBox.SetSizeRequest(1, 18);
+ RightStatusBox.SetSizeRequest(1, 18); }
+ LeftStatusLine.SetSizeRequest(1, 18);
+ RightStatusLine.SetSizeRequest(1, 18);
+ LeftDiskInfoLabel.SetSizeRequest(1, -1);
+ RightDiskInfoLabel.SetSizeRequest(1, -1);
+ LeftQuickFindVBox.SetSizeRequest(1, -1);
+ RightQuickFindVBox.SetSizeRequest(1, -1);
+end;
+
+procedure TFMain.ConstructMenu;
+const ShowDotFilesShortcut: TGDKShortCut = ( Key: 46; Locked: False; ModAlt: False; ModShift: False; ModCtrl: True);
+var i: integer;
+ Item: TGTKMenuItem;
+ Group: TGTKMenuItemGroup;
+begin
+ mnuFile := TGTKMenuItem.Create(Self);
+ mnuFile.Caption := LANGmnuFile_Caption;
+ MainMenu.Items.Add(mnuFile);
+// mnuFile.Add(TGTKMenuItem.CreateTyped(Self, itTearOff));
+ miChangePermissions := TGTKMenuItem.CreateTyped(Self, itImageText);
+ miChangePermissions.Caption := LANGmiChangePermissions_Caption;
+ miChangePermissions.StockIcon := 'gtk-convert';
+ miChangePermissions.OnClick := miChangePermissionsClick;
+ mnuFile.Add(miChangePermissions);
+ miChangeOwner := TGTKMenuItem.Create(Self);
+ miChangeOwner.Caption := LANGmiChangeOwner_Caption;
+ miChangeOwner.OnClick := miChangeOwnerClick;
+ mnuFile.Add(miChangeOwner);
+ mnuFile.Add(TGTKMenuItem.CreateTyped(Self, itSeparator));
+ miCreateSymlink := TGTKMenuItem.CreateTyped(Self, itImageText);
+ miCreateSymlink.Caption := LANGmiCreateSymlink_Caption;
+ miCreateSymlink.StockIcon := 'gtk-jump-to';
+ miCreateSymlink.OnClick := miCreateSymlinkClick;
+ mnuFile.Add(miCreateSymlink);
+ miEditSymlink := TGTKMenuItem.Create(Self);
+ miEditSymlink.Caption := LANGmiEditSymlink_Caption;
+ miEditSymlink.OnClick := miEditSymlinkClick;
+ mnuFile.Add(miEditSymlink);
+ mnuFile.Add(TGTKMenuItem.CreateTyped(Self, itSeparator));
+ miSplitFile := TGTKMenuItem.Create(Self);
+ miSplitFile.Caption := LANGmiSplitFileCaption;
+ miSplitFile.OnClick := miSplitFileClick;
+ mnuFile.Add(miSplitFile);
+ miMergeFiles := TGTKMenuItem.Create(Self);
+ miMergeFiles.Caption := LANGmiMergeFilesCaption;
+ miMergeFiles.OnClick := miMergeFilesClick;
+ mnuFile.Add(miMergeFiles);
+ mnuFile.Add(TGTKMenuItem.CreateTyped(Self, itSeparator));
+ miVerifyChecksums := TGTKMenuItem.Create(Self);
+ miVerifyChecksums.Caption := LANGmiVerifyChecksums;
+ miVerifyChecksums.OnClick := miVerifyChecksumsClick;
+ mnuFile.Add(miVerifyChecksums);
+ miCreateChecksums := TGTKMenuItem.Create(Self);
+ miCreateChecksums.Caption := LANGmiCreateChecksumsCaption;
+ miCreateChecksums.OnClick := miCreateChecksumsClick;
+ mnuFile.Add(miCreateChecksums);
+ mnuFile.Add(TGTKMenuItem.CreateTyped(Self, itSeparator));
+ miExit := TGTKMenuItem.CreateTyped(Self, itImageText);
+ miExit.Caption := LANGmiExit_Caption;
+ miExit.StockIcon := 'gtk-quit';
+ miExit.OnClick := miExitClick;
+ mnuFile.Add(miExit);
+
+ mnuMark := TGTKMenuItem.Create(Self);
+ mnuMark.Caption := LANGmnuMark_Caption;
+ MainMenu.Items.Add(mnuMark);
+// mnuMark.Add(TGTKMenuItem.CreateTyped(Self, itTearOff));
+ miSelectGroup := TGTKMenuItem.CreateTyped(Self, itImageText);
+ miSelectGroup.Caption := LANGmiSelectGroup_Caption;
+ miSelectGroup.ShortCuts.Add(MakeGDKShortCut(GDK_KP_PLUS, False, False, False, False));
+ miSelectGroup.StockIcon := 'gtk-add';
+ miSelectGroup.OnClick := mnuMarkClick;
+ mnuMark.Add(miSelectGroup);
+ miUnselectGroup := TGTKMenuItem.CreateTyped(Self, itImageText);
+ miUnselectGroup.Caption := LANGmiUnselectGroup_Caption;
+ miUnselectGroup.ShortCuts.Add(MakeGDKShortCut(GDK_KP_MINUS, False, False, False, False));
+ miUnselectGroup.StockIcon := 'gtk-remove';
+ miUnselectGroup.OnClick := mnuMarkClick;
+ mnuMark.Add(miUnselectGroup);
+ miSelectAll := TGTKMenuItem.Create(Self);
+ miSelectAll.Caption := LANGmiSelectAll_Caption;
+ miSelectAll.ShortCuts.Add(MakeGDKShortCut(GDK_KP_PLUS, False, False, False, True));
+ miSelectAll.OnClick := mnuMarkClick;
+ mnuMark.Add(miSelectAll);
+ miUnselectAll := TGTKMenuItem.Create(Self);
+ miUnselectAll.Caption := LANGmiUnselectAll_Caption;
+ miUnselectAll.ShortCuts.Add(MakeGDKShortCut(GDK_KP_MINUS, False, False, False, True));
+ miUnselectAll.OnClick := mnuMarkClick;
+ mnuMark.Add(miUnselectAll);
+ miInvertSelection := TGTKMenuItem.Create(Self);
+ miInvertSelection.Caption := LANGmiInvertSelection_Caption;
+ miInvertSelection.ShortCuts.Add(MakeGDKShortCut(GDK_KP_ASTERISK, False, False, False, False));
+ miInvertSelection.OnClick := mnuMarkClick;
+ mnuMark.Add(miInvertSelection);
+
+ mnuCommands := TGTKMenuItem.Create(Self);
+ mnuCommands.Caption := LANGmnuCommands_Caption;
+ MainMenu.Items.Add(mnuCommands);
+// mnuCommands.Add(TGTKMenuItem.CreateTyped(Self, itTearOff));
+ miSearch := TGTKMenuItem.CreateTyped(Self, itImageText);
+ miSearch.StockIcon := 'gtk-find';
+ miSearch.Caption := LANGmiSearchCaption2;
+ miSearch.ShortCuts.AddName('<Alt>F7');
+ miSearch.OnClick := miSearchClick;
+ mnuCommands.Add(miSearch);
+ mnuCommands.Add(TGTKMenuItem.CreateTyped(Self, itSeparator));
+ miRefresh := TGTKMenuItem.CreateTyped(Self, itImageText);
+ miRefresh.Caption := LANGmiRefresh_Caption;
+ miRefresh.StockIcon := 'gtk-refresh';
+ miRefresh.ShortCuts.AddName('<Control>R');
+ miRefresh.OnClick := miRefreshClick;
+ mnuCommands.Add(miRefresh);
+ miShowDirectorySizes := TGTKMenuItem.CreateTyped(Self, itImageText);
+ miShowDirectorySizes.Caption := LANGmiShowDirectorySizes_Caption;
+ miShowDirectorySizes.OnClick := miShowDirectorySizesClick;
+ mnuCommands.Add(miShowDirectorySizes);
+ mnuCommands.Add(TGTKMenuItem.CreateTyped(Self, itSeparator));
+ miNewTab := TGTKMenuItem.CreateTyped(Self, itImageText);
+ miNewTab.Caption := LANGmiNewTab_Caption;
+ miNewTab.ShortCuts.AddName('<Control>T');
+ miNewTab.OnClick := miDuplicateTabClick;
+ miNewTab.StockIcon := 'gtk-index';
+ mnuCommands.Add(miNewTab);
+ mnuCommands.Add(TGTKMenuItem.CreateTyped(Self, itSeparator));
+ miTargetSource := TGTKMenuItem.CreateTyped(Self, itImageText);
+ miTargetSource.Caption := LANGmiTargetSource_Caption;
+// miTargetSource.ShortCuts.AddName('<Alt>O');
+ miTargetSource.OnClick := miTargetSourceClick;
+ mnuCommands.Add(miTargetSource);
+
+ mnuShow := TGTKMenuItem.Create(Self);
+ mnuShow.Caption := LANGmnuShow_Caption;
+ MainMenu.Items.Add(mnuShow);
+// mnuShow.Add(TGTKMenuItem.CreateTyped(Self, itTearOff));
+ miShowDotFiles := TGTKMenuItem.CreateTyped(Self, itCheck);
+ miShowDotFiles.Caption := LANGmiShowDotFiles_Caption;
+ miShowDotFiles.Checked := ConfShowDotFiles;
+ miShowDotFiles.OnClick := miShowDotFilesClick;
+ miShowDotFiles.ShortCuts.Add(ShowDotFilesShortcut);
+ mnuShow.Add(miShowDotFiles);
+ mnuShow.Add(TGTKMenuItem.CreateTyped(Self, itSeparator));
+ miNoMounterBar := TGTKMenuItem.CreateTyped(Self, itRadio, nil);
+ miNoMounterBar.Caption := LANGmiNoMounterBarCaption;
+ miNoMounterBar.Checked := ConfShowMounterBar = 0;
+ Group := miNoMounterBar.Group;
+ mnuShow.Add(miNoMounterBar);
+ miShowOneMounterBar := TGTKMenuItem.CreateTyped(Self, itRadio, Group);
+ miShowOneMounterBar.Caption := LANGmiShowOneMounterBarCaption;
+ miShowOneMounterBar.Checked := ConfShowMounterBar = 1;
+ Group := miShowOneMounterBar.Group;
+ mnuShow.Add(miShowOneMounterBar);
+ miShowTwoMounterBar := TGTKMenuItem.CreateTyped(Self, itRadio, Group);
+ miShowTwoMounterBar.Caption := LANGmiShowTwoMounterBarCaption;
+ miShowTwoMounterBar.Checked := ConfShowMounterBar = 2;
+ mnuShow.Add(miShowTwoMounterBar);
+ // Assign of the events has to be done after all radio items are created
+ miNoMounterBar.OnClick := miShowMounterBarClick;
+ miShowOneMounterBar.OnClick := miShowMounterBarClick;
+ miShowTwoMounterBar.OnClick := miShowMounterBarClick;
+
+ mnuBookmarks := TGTKMenuItem.Create(Self);
+ mnuBookmarks.Caption := LANGmnuBookmarks_Caption;
+ mnuBookmarks.OnPopup := mnuBookmarksPopup;
+ mnuBookmarks.OnClick := mnuBookmarksPopup;
+ MainMenu.Items.Add(mnuBookmarks);
+// mnuBookmarks.Add(TGTKMenuItem.CreateTyped(Self, itTearOff));
+ miAddBookmark := TGTKMenuItem.CreateTyped(Self, itImageText);
+ miAddBookmark.Caption := LANGmiAddBookmark_Caption;
+ miAddBookmark.StockIcon := 'gtk-add';
+ miAddBookmark.OnClick := miAddBookmarkClick;
+ mnuBookmarks.Add(miAddBookmark);
+ miEditBookmarks := TGTKMenuItem.CreateTyped(Self, itImageText);
+ miEditBookmarks.Caption := LANGmiEditBookmarks_Caption;
+ miEditBookmarks.Enabled := False;
+ miEditBookmarks.Visible := False;
+ miEditBookmarks.Tooltip := 'Currently not implemented - use the popup menu';
+ mnuBookmarks.Add(miEditBookmarks);
+ miBookmarksSeparator := TGTKMenuItem.CreateTyped(Self, itSeparator);
+ mnuBookmarks.Add(miBookmarksSeparator);
+
+ BookmarkPopup := TGTKMenuItem.Create(Self);
+ BookmarkPopupDelete := TGTKMenuItem.Create(Self);
+ BookmarkPopupDelete.Caption := LANGBookmarkPopupDelete_Caption;
+ BookmarkPopupDelete.OnClick := BookmarkPopupDeleteClick;
+ BookmarkPopup.Add(BookmarkPopupDelete);
+
+ mnuNetwork := TGTKMenuItem.Create(Self);
+ mnuNetwork.Caption := LANGmnuNetworkCaption;
+ MainMenu.Items.Add(mnuNetwork);
+// mnuNetwork.Add(TGTKMenuItem.CreateTyped(Self, itTearOff));
+ miConnections := TGTKMenuItem.CreateTyped(Self, itImageText);
+ miConnections.Caption := LANGmiConnectionsCaption;
+ miConnections.StockIcon := 'gtk-network';
+ miConnections.Enabled := False;
+ mnuNetwork.Add(miConnections);
+ mnuNetwork.Add(TGTKMenuItem.CreateTyped(Self, itSeparator));
+ miOpenConnection := TGTKMenuItem.CreateTyped(Self, itImageText);
+ miOpenConnection.Caption := LANGmiOpenConnectionCaption;
+ miOpenConnection.OnClick := miOpenConnectionClick;
+ miOpenConnection.StockIcon := 'gtk-connect';
+ miOpenConnection.ShortCuts.AddName('<Control>F');
+ mnuNetwork.Add(miOpenConnection);
+ miQuickConnect := TGTKMenuItem.CreateTyped(Self, itImageText);
+ miQuickConnect.Caption := LANGmiQuickConnectCaption;
+ miQuickConnect.Enabled := False;
+ miQuickConnect.ShortCuts.AddName('<Control>N');
+ mnuNetwork.Add(miQuickConnect);
+ mnuNetwork.Add(TGTKMenuItem.CreateTyped(Self, itSeparator));
+ miDisconnect := TGTKMenuItem.CreateTyped(Self, itImageText);
+ miDisconnect.Caption := LANGmiDisconnect_Caption;
+ miDisconnect.Enabled := False;
+ miDisconnect.ShortCuts.AddName('<Control>D');
+ miDisconnect.StockIcon := 'gtk-disconnect';
+ miDisconnect.OnClick := miDisconnectClick;
+ mnuNetwork.Add(miDisconnect);
+
+ mnuPlugins := TGTKMenuItem.Create(Self);
+ mnuPlugins.Caption := LANGmnuPluginsCaption;
+ MainMenu.Items.Add(mnuPlugins);
+// mnuPlugins.Add(TGTKMenuItem.CreateTyped(Self, itTearOff));
+ miTestPlugin := TGTKMenuItem.CreateTyped(Self, itImageText);
+ miTestPlugin.Caption := LANGmiTestPluginCaption;
+ miTestPlugin.OnClick := miTestPluginClick;
+ mnuPlugins.Add(miTestPlugin);
+ mnuPlugins.Add(TGTKMenuItem.CreateTyped(Self, itSeparator));
+
+ mnuSettings := TGTKMenuItem.Create(Self);
+ mnuSettings.Caption := LANGmnuSettings_Caption;
+ MainMenu.Items.Add(mnuSettings);
+// mnuSettings.Add(TGTKMenuItem.CreateTyped(Self, itTearOff));
+ miPreferences := TGTKMenuItem.CreateTyped(Self, itImageText);
+ miPreferences.Caption := LANGmiPreferences_Caption;
+ miPreferences.StockIcon := 'gtk-preferences';
+ miPreferences.OnClick := miPreferencesClick;
+ mnuSettings.Add(miPreferences);
+ miFileTypes := TGTKMenuItem.CreateTyped(Self, itImageText);
+ miFileTypes.Caption := LANGmiFileTypes_Caption;
+ miFileTypes.OnClick := miFileTypesClick;
+ mnuSettings.Add(miFileTypes);
+ miMounterSettings := TGTKMenuItem.CreateTyped(Self, itImageText);
+ miMounterSettings.Caption := LANGmiMounterSettingsCaption;
+ miMounterSettings.OnClick := miMounterSettingsClick;
+ mnuSettings.Add(miMounterSettings);
+ miColumns := TGTKMenuItem.CreateTyped(Self, itImageText);
+ miColumns.Caption := LANGmiColumnsCaption;
+ miColumns.OnClick := miColumnsClick;
+ mnuSettings.Add(miColumns);
+ mnuSettings.Add(TGTKMenuItem.CreateTyped(Self, itSeparator));
+ miSavePosition := TGTKMenuItem.CreateTyped(Self, itImageText);
+ miSavePosition.Caption := LANGmiSavePositionCaption;
+ miSavePosition.OnClick := miSavePositionClick;
+ mnuSettings.Add(miSavePosition);
+
+ mnuHelp := TGTKMenuItem.Create(Self);
+ mnuHelp.Caption := LANGmnuHelp_Caption;
+ MainMenu.Items.Add(mnuHelp);
+// mnuHelp.Add(TGTKMenuItem.CreateTyped(Self, itTearOff));
+ miAbout := TGTKMenuItem.CreateTyped(Self, itImageText);
+ miAbout.Caption := LANGmiAbout_Caption;
+ miAbout.StockIcon := 'gtk-about';
+ miAbout.OnClick := miAboutClick;
+ mnuHelp.Add(miAbout);
+
+ // Splitter popup menu
+ SplitterPopupMenu := TGTKMenuItem.Create(Self);
+// SplitterPopupMenu.Add(TGTKMenuItem.CreateTyped(Self, itTearOff));
+ for i := 2 to 8 do begin
+ Item := TGTKMenuItem.Create(Self);
+ Item.Caption := Format('%d - %d', [i * 10, (10 - i) * 10]);
+ Item.Data := Pointer(i * 10);
+ Item.OnClick := SplitterPopupMenuClick;
+ SplitterPopupMenu.Add(Item);
+ end;
+
+ // Files popup menu
+ FilePopupMenu := TGTKMenuItem.Create(Self);
+ FilePopupMenu.OnPopup := FilePopupMenuPopup;
+
+ // Mounter popup menu
+ MounterButtonPopupMenu := TGTKMenuItem.Create(Self);
+ MounterButtonPopupMenu.OnPopup := MounterButtonPopupMenuPopup;
+ miMount := TGTKMenuItem.CreateTyped(Self, itImageText);
+ miMount.Caption := LANGmiMountCaption;
+ miMount.StockIcon := 'gtk-connect';
+ miMount.OnClick := miMountClick;
+ MounterButtonPopupMenu.Add(miMount);
+ miUmount := TGTKMenuItem.CreateTyped(Self, itImageText);
+ miUmount.Caption := LANGmiUmountCaption;
+ miUmount.StockIcon := 'gtk-disconnect';
+ miUmount.OnClick := miUmountClick;
+ MounterButtonPopupMenu.Add(miUmount);
+ miEject := TGTKMenuItem.CreateTyped(Self, itImageText);
+ miEject.Caption := LANGmiEjectCaption;
+// miEject.StockIcon := 'gtk-cdrom';
+ miEject.OnClick := miEjectClick;
+ MounterButtonPopupMenu.Add(miEject);
+
+ // Tab popup menu
+ TabPopupMenu := TGTKMenuItem.Create(Self);
+ TabPopupMenu.OnPopup := TabPopupMenuPopup;
+ miDuplicateTab := TGTKMenuItem.CreateTyped(Self, itImageText);
+ miDuplicateTab.Caption := LANGmiDuplicateTabCaption;
+ miDuplicateTab.ShortCuts.AddName('<Control>T');
+ miDuplicateTab.OnClick := miDuplicateTabClick;
+ miDuplicateTab.StockIcon := 'gtk-index';
+ TabPopupMenu.Add(miDuplicateTab);
+ TabPopupMenu.Add(TGTKMenuItem.CreateTyped(Self, itSeparator));
+ miCloseTab := TGTKMenuItem.CreateTyped(Self, itImageText);
+ miCloseTab.Caption := LANGmiCloseTabCaption;
+ miCloseTab.ShortCuts.AddName('<Control>W');
+ miCloseTab.OnClick := miCloseTabClick;
+ miCloseTab.StockIcon := 'gtk-close';
+ TabPopupMenu.Add(miCloseTab);
+ miCloseAllTabs := TGTKMenuItem.CreateTyped(Self, itImageText);
+ miCloseAllTabs.Caption := LANGmiCloseAllTabsCaption;
+ miCloseAllTabs.OnClick := miCloseAllTabsClick;
+ TabPopupMenu.Add(miCloseAllTabs);
+end;
+
+procedure TFMain.ConstructColumns(ListView: TGTKListView);
+var i, FirstColumn, LastColumn: integer;
+ Column: TGTKTreeViewColumn;
+ FontDesc: PPangoFontDescription;
+begin
+ ListView.SelectionMode := smBrowse;
+ GetFirstLastPanelColumn(FirstColumn, LastColumn);
+
+ for i := 1 to ConstNumPanelColumns do
+ if ConfColumnVisible[i] then begin
+
+ // First column should have filetype icon
+ if (i = FirstColumn) and ConfUseFileTypeIcons then begin
+ Column := ListView.Columns.AddTyped(ctImageText);
+ Column.SetImageProperty('ypad', 0);
+ Column.SetImageProperty('yalign', 0.5);
+ Column.SetImageProperty('xpad', 0);
+ Column.SetImageProperty('xalign', 0.5);
+ if (ConfRowHeight > 0) and ConfUseFileTypeIcons then begin
+ Column.SetImageProperty('width', ConfRowHeight);
+ Column.SetImageProperty('height', ConfRowHeight);
+ end;
+ end else Column := ListView.Columns.Add;
+
+
+ Column.Caption := ConfColumnTitlesShort[ConfColumnIDs[i]];
+
+ if (i < LastColumn){ or Application.GTKVersion_2_4_0_Up} then begin
+{ Column.MinWidth := 10;
+ Column.MaxWidth := 500; }
+{ Column.SizingMode := smFixed;
+ Column.FixedWidth := ConfColumnSizes[i]; }
+ g_object_set(G_OBJECT(Column.FColumn), 'sizing', 2, 'fixed-width', ConfColumnSizes[i], nil);
+ end else g_object_set(G_OBJECT(Column.FColumn), 'sizing', 0, nil);
+ // Column.SizingMode := smFixed; // smAutoSize;
+
+ gtk_tree_view_column_set_spacing(Column.FColumn, 1); // Bug with column spacing?
+
+ Column.Resizable := True;
+ Column.Reorderable := True;
+// if not ConfUseSystemFont then ListView.Columns[i - 1].SetProperty('font', ConfPanelFont);
+ Column.SetProperty('ypad', 0);
+ Column.SetProperty('yalign', 0.5);
+ Column.Tag := i;
+ g_object_set_data(G_OBJECT(Column.FColumn), 'Column_ID', Pointer(i));
+ if ConfRowHeight > 0 then Column.SetProperty('height', ConfRowHeight);
+ Column.SortID := ListView.Columns.Count - 1;
+ ColumnSortIDs[Column.SortID + 1] := ConfColumnIDs[i];
+ if ConfRowHeight < 0 then gtk_cell_renderer_text_set_fixed_height_from_font(PGtkCellRendererText(Column.FRenderer), 1);
+{ gtk_cell_renderer_text_set_fixed_height_from_font(PGtkCellRendererText(Column.FRenderer), 1);
+ gtk_cell_renderer_set_fixed_size(PGtkCellRenderer(Column.FRenderer), ConfColumnSizes[i], ConfRowHeight); }
+ if ConfColumnIDs[i] < 3 then begin // Filename column
+ Column.OnEdited := ListViewEdited;
+ if Application.GTKVersion_2_6_0_Up then Column.SetProperty('ellipsize', 3);
+ end;
+ if ConfColumnIDs[i] in [4, 8, 9] then begin
+ Column.SetProperty('xalign', 1);
+ Column.Alignment := 1;
+ end;
+ if Application.GTKVersion_2_4_0_Up then Column.SetProperty('single-paragraph-mode', 1);
+ Column.OnClicked := ListViewColumnClicked;
+
+ end;
+
+ // Set the list font
+ if not ConfUseSystemFont then begin
+ FontDesc := pango_font_description_from_string(PChar(ConfPanelFont));
+ gtk_widget_modify_font(ListView.FWidget, FontDesc);
+ end else gtk_widget_modify_font(ListView.FWidget, nil);
+
+ // Set the fixed row height - temporarily disabled due to bug in custom drawing
+// if Application.GTKVersion_2_4_0_Up then g_object_set(ListView.FWidget, 'fixed_height_mode', integer(True), nil);
+end;
+
+procedure TFMain.FormDestroy(Sender: TObject);
+begin
+ LeftNotebookBoxList.Free;
+ RightNotebookBoxList.Free;
+end;
+
+procedure TFMain.FormClose(Sender: TObject; var Action: TCloseAction);
+
+ function InternalCloseEngine(Engine, FallbackEngine: TPanelEngine): TPanelEngine;
+ begin
+ Result := FallbackEngine;
+ if not Assigned(Engine.ParentEngine) or (not (Engine is TVFSEngine)) then Exit;
+ Result := Engine.ParentEngine;
+// if not TVFSEngine(Engine).VFSClose then DebugMsg(['Error closing the engine...']);
+// Engine.Free;
+ end;
+
+var i: integer;
+ b, DontShowAgain: boolean;
+ res: TMessageButton;
+begin
+ // Find all opened connections and warn user
+ b := False;
+ if LeftPanelNotebook.Visible and Assigned(LeftTabEngines) and (LeftTabEngines.Count > 0) then
+ for i := 0 to LeftTabEngines.Count - 1 do
+ if TPanelEngine(LeftTabEngines[i]) is TVFSEngine then begin
+ b := True;
+ Break;
+ end;
+ if (not b) or (RightPanelNotebook.Visible and Assigned(RightTabEngines) and (RightTabEngines.Count > 0)) then
+ for i := 0 to RightTabEngines.Count - 1 do
+ if TPanelEngine(RightTabEngines[i]) is TVFSEngine then begin
+ b := True;
+ Break;
+ end;
+ b := b or (LeftPanelEngine is TVFSEngine) or (RightPanelEngine is TVFSEngine);
+ if b and ConfOpenConnectionsWarning then begin
+ res := MessageBoxShowOnce(LANGOpenConnectionsWarning, LANGDontShowAgain, DontShowAgain, [mbYes, mbNo], mbWarning, mbYes, mbNo);
+ if DontShowAgain then begin
+ ConfOpenConnectionsWarning := False;
+ WriteMainGUISettings;
+ end;
+ if res = mbNo then begin
+ Action := caNone;
+ Exit;
+ end;
+ end;
+
+ // Close all active connections
+ if b then begin
+ if (not LeftPanelNotebook.Visible) and (LeftPanelEngine is TVFSEngine) then CloseVFS(True, True)
+ else
+ for i := 0 to LeftTabEngines.Count - 1 do try
+ if LeftPanelNotebook.PageIndex = i then CloseVFS(True, True) else
+ if Assigned(LeftTabEngines[i]) and (TPanelEngine(LeftTabEngines[i]) is TVFSEngine) then begin
+ LeftPanelTabs[i] := TPanelEngine(LeftTabEngines[i]).SavePath;
+ LeftTabEngines[i] := InternalCloseEngine(LeftTabEngines[i], LeftLocalEngine);
+ end;
+ except end;
+ if (not RightPanelNotebook.Visible) and (RightPanelEngine is TVFSEngine) then CloseVFS(False, True)
+ else
+ for i := 0 to RightTabEngines.Count - 1 do try
+ if RightPanelNotebook.PageIndex = i then CloseVFS(False, True) else
+ if TPanelEngine(RightTabEngines[i]) is TVFSEngine then begin
+ RightPanelTabs[i] := TPanelEngine(RightTabEngines[i]).SavePath;
+ RightTabEngines[i] := InternalCloseEngine(RightTabEngines[i], RightLocalEngine);
+ end;
+ except end;
+ end;
+
+ // Unset the columns changed signal because it is called on window close
+ LeftListView.OnColumnsChanged := nil;
+ RightListView.OnColumnsChanged := nil;
+
+ ConfMainWindowState := Integer(WindowState);
+ if ConfMainWindowState <> 0 then begin
+ ConfMainWindowPosLeft := TGTKControl(Self).Left;
+ ConfMainWindowPosTop := TGTKControl(Self).Top;
+ ConfMainWindowWidth := TGTKControl(Self).Width;
+ ConfMainWindowHeight := TGTKControl(Self).Height;
+ end else begin
+ ConfMainWindowPosLeft := Left;
+ ConfMainWindowPosTop := Top;
+ ConfMainWindowWidth := Width;
+ ConfMainWindowHeight := Height;
+ end;
+ for i := 0 to LeftListView.Columns.Count - 1 do
+ ConfColumnSizes[LeftListView.Columns[i].Tag] := LeftListView.Columns[i].Width;
+ ConfMainWindowLeftSortColumn := LeftListView.SortColumnID;
+ ConfMainWindowLeftSortType := Integer(LeftListView.SortOrder);
+ ConfMainWindowRightSortColumn := RightListView.SortColumnID;
+ ConfMainWindowRightSortType := Integer(RightListView.SortOrder);
+
+ ConfLeftTabBarTabIndex := LeftPanelNotebook.PageIndex;
+ ConfRightTabBarTabIndex := RightPanelNotebook.PageIndex;
+end;
+
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure TFMain.AfterStart;
+var i: integer;
+ TmpList: TStringList;
+ TmpList2, TmpList3: TList;
+begin
+ LeftPanelEngine := LeftLocalEngine;
+ RightPanelEngine := RightLocalEngine;
+
+ // Apply the settings
+ ApplySettings(False, False, True);
+
+ MounterBarHandleBox.Visible := ConfShowMounterBar = 1;
+ LeftMounterTable.Visible := ConfShowMounterBar = 2;
+ RightMounterTable.Visible := ConfShowMounterBar = 2;
+ FillMounterBar;
+
+ LeftListView.SetFocus;
+ if CommandLineHistory.Count > 0 then
+ for i := 0 to CommandLineHistory.Count - 1 do
+ CommandLineCombo.Items.Append(CommandLineHistory[i]);
+ CommandLineCombo.Entry.Text := '';
+
+ RefreshBookmarksMenu;
+
+ ButtonsBox.Visible := ConfShowFuncButtons;
+ ButtonBoxSeparator.Visible := ConfShowFuncButtons;
+ ButtonBoxSpace.Visible := not ConfShowFuncButtons;
+
+ FillPluginMenu;
+
+ FileListTipsInstall(PGtkTreeView(LeftListView.FWidget));
+ FileListTipsInstall(PGtkTreeView(RightListView.FWidget));
+ FileListTipsEnable;
+
+ // Load and restore panel tabs
+ if ConfSavePanelTabs then try
+ TmpList := TStringList.Create;
+ TmpList2 := TList.Create;
+ TmpList3 := TList.Create;
+ ReadTabs(True, TmpList, TmpList2, TmpList3);
+ if (TmpList.Count > 0) and (TmpList2.Count > 0) and (TmpList3.Count > 0) then
+ AddTabs(True, TmpList, TmpList2, TmpList3, ConfLeftTabBarTabIndex);
+ TmpList.Clear;
+ TmpList2.Clear;
+ TmpList3.Clear;
+ ReadTabs(False, TmpList, TmpList2, TmpList3);
+ if (TmpList.Count > 0) and (TmpList2.Count > 0) and (TmpList3.Count > 0) then
+ AddTabs(False, TmpList, TmpList2, TmpList3, ConfRightTabBarTabIndex);
+ TmpList.Free;
+ TmpList2.Free;
+ TmpList3.Free;
+ except
+ on E: Exception do DebugMsg(['*** Exception raised in TFMain.AfterStart, loading tabs: (', E.ClassName, '): ', E.Message]);
+ end;
+
+ // Refresh the lists
+ ChangingDir(True, ConfLeftPath, '', '', False, True); // AutoFallback
+ ChangingDir(False, ConfRightPath, '', '', False, True);
+ LeftListView.SetSortInfo(ConfMainWindowLeftSortColumn, TGTKTreeViewSortOrder(ConfMainWindowLeftSortType));
+ RightListView.SetSortInfo(ConfMainWindowRightSortColumn, TGTKTreeViewSortOrder(ConfMainWindowRightSortType));
+
+ // Set window position and size
+ SetDefaultSize(ConfMainWindowWidth, ConfMainWindowHeight);
+ if (ConfMainWindowPosLeft > -1) and (ConfMainWindowPosTop > -1)
+ then WindowMove(ConfMainWindowPosLeft, ConfMainWindowPosTop);
+ if ConfWMCompatMode then Show;
+ case integer(ConfMainWindowState) of
+ Ord(wsMaximized) : Maximize;
+ Ord(wsMinimized) : Minimize;
+ end;
+ if not ConfWMCompatMode then Show;
+
+ // Other things
+ StartUp := False; // Set the flag to process Splitter repositioning
+ PanelSeparator.Position := Round(Width * (ConfPanelSep / 100));
+
+ Application.ProcessMessages; // Need to process all messages before unlocking
+ InternalLockInit(False);
+
+ LeftListView.OnColumnsChanged := ListViewColumnsChanged;
+ RightListView.OnColumnsChanged := ListViewColumnsChanged;
+ LeftListView.SetFocus;
+end;
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure TFMain.PanelSeparatorResize(Sender: TObject);
+begin
+ if not StartUp then ConfPanelSep := Round((PanelSeparator.Position / Width) * 100);
+end;
+
+procedure TFMain.miExitClick(Sender: TObject);
+begin
+ Close;
+end;
+
+procedure TFMain.miAboutClick(Sender: TObject);
+begin
+ InternalLock;
+ ShowAbout;
+ Application.ProcessMessages;
+ InternalLockInit(False);
+end;
+
+procedure TFMain.ListViewKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+var AListView: TGTKListView;
+ ANotebook: TEphyNotebook;
+ LeftPanel: boolean;
+ vadj, hadj: PGtkAdjustment;
+ x: integer;
+begin
+ if not Assigned(Sender) or not (Sender is TGTKListView) then DebugMsg(['**** ListViewKeyDown: Sender is not TGTKListView or not valid']);
+ AListView := Sender as TGTKListView;
+ if LeftListView.Focused then LeftPanel := True
+ else if RightListView.Focused then LeftPanel := False
+ else LeftPanel := LeftLastFocused;
+ if LeftPanel then begin
+ ANotebook := LeftPanelNotebook;
+ vadj := gtk_scrolled_window_get_vadjustment(PGtkScrolledWindow(LeftScrolledWindow.FWidget));
+ hadj := gtk_scrolled_window_get_hadjustment(PGtkScrolledWindow(LeftScrolledWindow.FWidget));
+ end else begin
+ ANotebook := RightPanelNotebook;
+ vadj := gtk_scrolled_window_get_vadjustment(PGtkScrolledWindow(RightScrolledWindow.FWidget));
+ hadj := gtk_scrolled_window_get_hadjustment(PGtkScrolledWindow(RightScrolledWindow.FWidget));
+ end;
+ FileListTipsHide;
+ case Key of
+ GDK_TAB, 65056 : if (ssCtrl in Shift) and ANotebook.Visible then begin
+ Accept := False;
+ x := (ANotebook.PageIndex + 1 - 2*Ord(ssShift in Shift)) mod ANotebook.ChildrenCount;
+ if x < 0 then x := ANotebook.ChildrenCount - 1;
+ ANotebook.PageIndex := x;
+ end else begin
+ Accept := False;
+ DeactivateQuickFind(LeftPanel);
+ Application.ProcessMessages;
+ if InternalLockUnlocked then // prevent changing focus when busy
+ if LeftPanel then RightListView.SetFocus
+ else LeftListView.SetFocus;
+ end;
+ GDK_RETURN, GDK_KP_ENTER : if (Key = GDK_RETURN) and (Shift = [ssAlt, ssShift]) then DoGetDirSize(True) else
+ if ([ssAlt] = Shift) or ([ssCtrl] = Shift) then begin
+ CommandLineComboKeyDown(Sender, Key, Shift, Accept);
+ Accept := False;
+ CommandLineCombo.Entry.SetFocus;
+ CommandLineCombo.Entry.SelectRegion(Length(CommandLineCombo.Entry.Text), Length(CommandLineCombo.Entry.Text));
+ end else
+ if Length(Trim(CommandLineCombo.Entry.Text)) > 0 then CommandLineComboKeyDown(Sender, Key, Shift, Accept)
+ else if Assigned(AListView.Selected) then ActivateItem(AListView.Selected.Index, False);
+ GDK_BACKSPACE : if QuickFind then begin Accept := False; QuickFindSendKey(LeftPanel, Key); end
+ else if LeftPanel then PathButtonClick(LeftUpButton)
+ else PathButtonClick(RightUpButton);
+ GDK_Right : begin
+ if [ssCtrl] = Shift then SwitchPanelCtrlLeftRight(LeftPanel, False) else
+ if ConfLynxLikeMotion then begin
+ if Assigned(AListView.Selected) then ActivateItem(AListView.Selected.Index, False);
+ end;
+ Accept := False;
+ end;
+ GDK_Left : begin
+ if [ssCtrl] = Shift then SwitchPanelCtrlLeftRight(LeftPanel, True) else
+ if ConfLynxLikeMotion then
+ if LeftPanel then PathButtonClick(LeftUpButton)
+ else PathButtonClick(RightUpButton);
+ Accept := False;
+ end;
+ GDK_INSERT : DoSelect(5);
+ GDK_SPACE : begin
+ Accept := False;
+ if QuickFind then QuickFindSendKey(LeftPanel, Key)
+ else if Length(CommandLineCombo.Entry.Text) > 0 then ActivateCommandLine(Key)
+ else begin
+ if not PDataItem(AListView.Selected.Data)^.Selected then DoGetDirSize(False);
+ DoSelect(8);
+ end;
+ end;
+ GDK_F1 : if Shift = [ssAlt] then begin
+ ShowBookmarkQuick(True);
+ Accept := False;
+ end;
+ GDK_F2 : if Shift = [ssAlt] then begin
+ ShowBookmarkQuick(False);
+ Accept := False;
+ end else
+ if (Shift = [ssShift]) or (Shift = [ssCtrl]) then begin
+ CopyFilenamesToClipboard(Shift = [ssCtrl], LeftPanel);
+ end else begin
+ DeactivateQuickFind(LeftPanel);
+ Accept:= False;
+ F6ButtonClick(nil);
+ end;
+ GDK_F3 : begin
+ DeactivateQuickFind(LeftPanel);
+ Accept:= False;
+ F3F4ButtonClick(F3Button);
+ end;
+ GDK_F4 : begin
+ DeactivateQuickFind(LeftPanel);
+ Accept:= False;
+ if ssShift in Shift then EditViewFile(LeftPanel, AListView, False, True)
+ else F3F4ButtonClick(F4Button);
+ end;
+ GDK_F5 : begin
+ DeactivateQuickFind(LeftPanel);
+ Accept:= False;
+ if ssShift in Shift then F5ButtonClick(nil)
+ else F5ButtonClick(Sender);
+ end;
+ GDK_F6 : begin
+ DeactivateQuickFind(LeftPanel);
+ Accept:= False;
+ if ssShift in Shift then begin
+ if not Assigned(AListView.Columns[0].FColumn^.editable_widget) then Editing := False;
+ DoQuickRename(Sender = LeftListView, AListView, True)
+ end else F6ButtonClick(Sender);
+ end;
+ GDK_F7 : begin
+ DeactivateQuickFind(LeftPanel);
+ Accept:= False;
+ if ssAlt in Shift then miSearchClick(Sender)
+ else F7ButtonClick(Sender);
+ end;
+ GDK_F8, GDK_Delete_Key : begin
+ DeactivateQuickFind(LeftPanel);
+ Accept:= False;
+ F8ButtonClick(Sender);
+ end;
+ GDK_ESCAPE : begin
+ if not QuickFind then CommandLineCombo.Entry.Text := '';
+ DeactivateQuickFind(LeftPanel);
+ if RunningEscSensitive > 0 then FMainEscPressed := True;
+ end;
+ GDK_S, GDK_Capital_S : if (ssAlt in Shift) or (ssCtrl in Shift)
+ then ActivateQuickFind(Sender = LeftListView)
+ else begin
+ Accept := False;
+ if QuickFind then QuickFindSendKey(LeftPanel, Key)
+ else ActivateCommandLine(Key);
+ end;
+ GDK_O, GDK_Capital_O : if ssAlt in Shift then SwitchOtherPanel(LeftPanel, False)
+ else begin
+ Accept := False;
+ if QuickFind then QuickFindSendKey(LeftPanel, Key)
+ else ActivateCommandLine(Key);
+ end;
+
+ GDK_P, GDK_Capital_P, GDK_N, GDK_Capital_N:
+ if ((Shift = [ssAlt]) or (Shift = [ssCtrl]) or ((Shift = []) and (not QuickFind))) { and (CommandLineHistory.Count > 0) }
+ then CommandLineComboKeyDown(Sender, Key, Shift, Accept)
+ else if QuickFind then QuickFindSendKey(LeftPanel, Key);
+ GDK_A, GDK_Capital_A: if (Shift = [ssAlt]) or (Shift = [ssCtrl]) or ((Shift = []) and (not QuickFind))
+ then CommandLineComboKeyDown(Sender, Key, Shift, Accept)
+ else if QuickFind then QuickFindSendKey(LeftPanel, Key);
+ GDK_WIN_POPUP : begin
+ Accept := False;
+ PopupFileMenuPos;
+ end;
+ GDK_HOME: if Shift = [ssCtrl] then begin
+ if LeftPanel then PathButtonClick(LeftHomeButton)
+ else PathButtonClick(RightHomeButton);
+ Accept := False;
+ end else if Assigned(AListView.Selected) and (AListView.ConvertToSorted(AListView.Selected.Index) = 0) then Accept := False;
+ GDK_END: if Assigned(AListView.Selected) and (AListView.ConvertToSorted(AListView.Selected.Index) = AListView.Items.Count - 1) then Accept := False;
+ GDK_SLASH, GDK_KP_SLASH: if Shift = [ssCtrl] then begin
+ if LeftPanel then PathButtonClick(LeftRootButton)
+ else PathButtonClick(RightRootButton);
+ Accept := False;
+ end;
+{ GDK_0..GDK_9: if ConfBookmarkQuickJump and (Shift = [ssAlt]) then QuickJumpToBookmark(LeftPanel, Key - GDK_1)
+ else begin
+ Accept := False;
+ if QuickFind then QuickFindSendKey(LeftPanel, Key)
+ else ActivateCommandLine(Key);
+ end; }
+ GDK_Down : if [ssCtrl] = Shift then begin
+ Accept := False;
+ CommandLineCombo.Entry.SetFocus;
+ CommandLineCombo.Entry.SelectAll;
+ end else begin
+ if QuickFind then QuickFindSendKey(LeftPanel, Key)
+ else if Assigned(AListView.Selected) and (AListView.ConvertToSorted(AListView.Selected.Index) = AListView.Items.Count - 1) then Accept := False;
+ end;
+ GDK_Up : if Assigned(AListView.Selected) and (AListView.ConvertToSorted(AListView.Selected.Index) = 0) then Accept := False;
+
+ GDK_Page_Up, GDK_Page_Down: if (Shift = [ssCtrl]) and ANotebook.Visible then
+ begin
+ Accept := False;
+ x := (ANotebook.PageIndex + 1 - 2*Ord(Key = GDK_Page_Up)) mod ANotebook.ChildrenCount;
+ if x < 0 then x := ANotebook.ChildrenCount - 1;
+ ANotebook.PageIndex := x;
+ end else begin
+ if Assigned(AListView.Selected) and
+ (((Key = GDK_Page_Up) and (AListView.ConvertToSorted(AListView.Selected.Index) = 0)) or
+ ((Key = GDK_Page_Down) and (AListView.ConvertToSorted(AListView.Selected.Index) = AListView.Items.Count - 1)))
+ then Accept := False;
+ end;
+
+ else if QuickFind then Accept := not QuickFindSendKey(LeftPanel, Key)
+ else Accept := not ActivateCommandLine(Key);
+ end;
+end;
+
+procedure TFMain.ListViewEnter(Sender: TObject; var Accept: boolean);
+var s: string;
+begin
+ LeftLastFocused := Sender = LeftListView;
+ if LeftLastFocused then begin
+ LeftPathLabelEventBox.ControlState := csSelected;
+ RightPathLabelEventBox.ControlState := csActive;
+ s := LeftPathLabel.Caption;
+ end else begin
+ LeftPathLabelEventBox.ControlState := csActive;
+ RightPathLabelEventBox.ControlState := csSelected;
+ s := RightPathLabel.Caption;
+ end;
+ CommandLineLabel.Caption := Format('%s@%s:%s>', [GetUserName, GetHostName, s]);
+ UpdateCaption;
+ miDisconnect.Enabled := (LeftLastFocused and (LeftPanelEngine is TVFSEngine) and (not TVFSEngine(LeftPanelEngine).ArchiveMode)) or
+ ((not LeftLastFocused) and (RightPanelEngine is TVFSEngine) and (not TVFSEngine(RightPanelEngine).ArchiveMode));
+end;
+
+procedure TFMain.FormResize(Sender: TObject);
+begin
+ if Width <> LastWidth then begin
+// DebugMsg(['FormResize: ', Width, 'x', Height]);
+ PanelSeparator.Position := Round(Width * (ConfPanelSep / 100));
+ CommandLineLabel.SetSizeRequest(Round(Width / 2.5), -1);
+ LastWidth := Width;
+ end;
+end;
+
+procedure TFMain.PathLabelMouseDown(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean);
+begin
+ if Button = mbLeft then
+ if Sender = LeftPathLabelEventBox then LeftListView.SetFocus
+ else if Sender = RightPathLabelEventBox then RightListView.SetFocus;
+end;
+
+procedure TFMain.ActivateItem(const ItemIndex: longint; const MouseActivate: boolean);
+var Data: PDataItem;
+ LeftPanel: boolean;
+ DataList: TList;
+ Engine: TPanelEngine;
+ AListView: TGTKListView;
+ Ext: string;
+begin
+ if LeftListView.Focused then LeftPanel := True
+ else if RightListView.Focused then LeftPanel := False
+ else LeftPanel := LeftLastFocused;
+ if LeftPanel then begin
+ DataList := LeftPanelData;
+ Engine := LeftPanelEngine;
+ AListView := LeftListView;
+ end else begin
+ DataList := RightPanelData;
+ Engine := RightPanelEngine;
+ AListView := RightListView;
+ end;
+ DeactivateQuickFind(LeftPanel);
+ if Application.GTKVersion_2_0_5_Up then Data := DataList[ItemIndex]
+ else Data := AListView.Items[ItemIndex].AsPointer(0);
+ DebugMsg(['Selected:', Data^.AName]);
+ if not Assigned(Data) then Exit;
+ if Data^.UpDir then ChangingDir(LeftPanel, '..') else
+ if Data^.IsDir then begin
+ if MouseActivate then begin
+ if AListView.Items.Count > 0 then AListView.Items[0].Selected := True;
+ Application.ProcessMessages;
+ end;
+ ChangingDir(LeftPanel, String(Data^.AName));
+ end else begin
+ Ext := ANSIUpperCase(Trim(Copy(String(Data^.AName), LastDelimiter('.', String(Data^.AName)) + 1, Length(String(Data^.AName)) - LastDelimiter('.', String(Data^.AName)))));
+ // Test for known internal functions
+ if (Ext = 'SFV') or (Ext = 'MD5') then miVerifyChecksumsClick(Self) else
+ if (Ext = 'CRC') or (Ext = '001') then miMergeFilesClick(Self) else
+ if not ((Engine is TLocalTreeEngine) and HandleVFSArchive(Ext, IncludeTrailingPathDelimiter(Engine.Path) + String(Data^.AName), String(Data^.AName), '/')) then
+ if (not ConfUseURI) or ((Engine is TVFSEngine) and TVFSEngine(Engine).ArchiveMode)
+ then RunFile(IncludeTrailingPathDelimiter(Engine.Path) + String(Data^.AName), Engine, -1)
+ else RunFile(ExcludeTrailingPathDelimiter(Engine.GetPrefix) + IncludeTrailingPathDelimiter(Engine.Path) + String(Data^.AName), Engine, -1);
+ end;
+end;
+
+procedure TFMain.ChangingDir(LeftPanel: boolean; NewPath: string; HiliString1: string = ''; HiliString2: string = ''; const PreserveSelection: boolean = False; const AutoFallback: boolean = False; Plugin: TVFSPlugin = nil);
+var ListView: TGTKListView;
+ Engine: TPanelEngine;
+ s, ss: string;
+ i, Sel, Err: integer;
+ b, bb: boolean;
+ tt: TDateTime;
+ DataList, DirList: TList;
+ SelectedFiles: TStringList;
+ ANotebook: TEphyNotebook;
+ ATabList: TStringList;
+ TabEngines: TList;
+ OpenDirThread: TOpenDirThread;
+
+ function LookupItem(const AName: string; const CaseSensitive: boolean): boolean;
+ var i: integer;
+ begin
+ Result := False;
+ for i := 0 to DataList.Count - 1 do
+ if (CaseSensitive and (ANSICompareStr(string(PDataItem(DataList[i])^.AName), AName) = 0)) or
+ ((not CaseSensitive) and (ANSICompareText(string(PDataItem(DataList[i])^.AName), AName) = 0)) then
+ begin
+ Sel := i;
+ Result := True;
+ Break;
+ end;
+ end;
+
+ procedure DoThread;
+ begin
+ try
+ OpenDirThread.AEngine := Engine;
+ OpenDirThread.APath := NewPath;
+ OpenDirThread.ASelItem := '';
+ OpenDirThread.AAutoFallBack := AutoFallback;
+ OpenDirThread.ADirList := DirList;
+ if Plugin <> nil then begin
+ DebugMsg(['Plugin <> nil']);
+ OpenDirThread.APlugin := Plugin;
+ OpenDirThread.AFullPath := HiliString1;
+ OpenDirThread.AHighlightItem := HiliString2;
+ end;
+ DebugMsg(['(II) TFMain.ChangingDir: begin thread']);
+ OpenDirThread.Resume;
+ tt := Now;
+ b := False;
+ FRemoteWait := nil;
+ repeat
+ Sleep(ConstInternalProgressTimer);
+// DebugMsg([' (II) TFMain.ChangingDir: sleep.']);
+ Application.ProcessMessages;
+ if not b and (MilliSecondsBetween(tt, Now) >= ConstRemoteWaitDialogDelay) then begin
+ FRemoteWait := TFRemoteWait.Create(Application);
+ FRemoteWait.ParentForm := FMain;
+ FRemoteWait.ShowModal;
+ b := True;
+ end;
+ if Assigned(FRemoteWait) then
+ if FRemoteWait.Cancelled then OpenDirThread.CancelIt := True;
+ until OpenDirThread.Finished;
+ if FRemoteWait <> nil then FRemoteWait.Free;
+ DebugMsg(['(II) TFMain.ChangingDir: end thread, running time = ', OpenDirThread.RunningTime, 'ms']);
+ except
+ on E: Exception do DebugMsg(['*** Exception raised in TFMain.ChangingDir:DoThread (', E.ClassName, '): ', E.Message]);
+ end;
+ end;
+
+begin
+ DebugMsg(['*** Begin changing dir to ', NewPath]);
+ if LeftPanel then begin
+ ListView := LeftListView;
+ Engine := LeftPanelEngine;
+ DataList := LeftPanelData;
+ ANotebook := LeftPanelNotebook;
+ ATabList := LeftPanelTabs;
+ TabEngines := LeftTabEngines;
+ end else begin
+ ListView := RightListView;
+ Engine := RightPanelEngine;
+ DataList := RightPanelData;
+ ANotebook := RightPanelNotebook;
+ ATabList := RightPanelTabs;
+ TabEngines := RightTabEngines;
+ end;
+ try
+ if (NewPath = '..') and (Engine.ParentEngine <> nil) and (Engine.Path = '/') then begin
+ CloseVFS(LeftPanel, False);
+ Exit;
+ end;
+
+ InternalLock;
+ FileListTipsDisable;
+ SelectedFiles := nil;
+ if PreserveSelection then begin
+ SelectedFiles := TStringList.Create;
+ if DataList.Count > 0 then
+ for i := 0 to DataList.Count - 1 do
+ if PDataItem(DataList[i])^.Selected and (not PDataItem(DataList[i])^.UpDir)
+ then SelectedFiles.Add(PDataItem(DataList[i])^.AName);
+ end;
+ Editing := False;
+ DeactivateQuickFind(LeftPanel);
+ DeactivateQuickFind(not LeftPanel);
+ DirList := TList.Create;
+
+ // Threading...
+ OpenDirThread := TOpenDirThread.Create;
+ DebugMsg(['TFMain.ChangingDir: Creating thread...']);
+ DoThread;
+
+ bb := OpenDirThread.VFSOpenResult = 0;
+ if OpenDirThread.VFSOpenResult <> 0 then begin
+ DebugMsg(['(II) TFMain.ChangingDir: OpenDirThread.VFSOpenResult <> 0']);
+ if OpenDirThread.VFSOpenResult = cVFS_BadPassword then begin
+ // Handle password
+ if not HandleSetPassword(OpenDirThread.xEngine) then Exit;
+ ss := OpenDirThread.xEngine.Password;
+ if Assigned(OpenDirThread.xEngine) then OpenDirThread.xEngine.Free;
+ DebugMsg(['TFMain.ChangingDir: Freeing thread...']);
+ OpenDirThread.Free;
+ OpenDirThread := TOpenDirThread.Create;
+ DebugMsg(['TFMain.ChangingDir: Creating thread...']);
+ OpenDirThread.Password := ss;
+ DoThread;
+ bb := OpenDirThread.VFSOpenResult = 0;
+ end;
+ end;
+ if Plugin <> nil then begin
+ HiliString1 := '';
+ HiliString2 := '';
+ end;
+ if not bb then begin
+ Application.MessageBox(LANGCouldntOpenURIArchive, [mbOK], mbError, mbOK, mbOK);
+ DebugMsg(['TFMain.ChangingDir: Freeing thread...']);
+ OpenDirThread.Free;
+ end else
+ if OpenDirThread.ChDirResult <> 0 then begin
+ if OpenDirThread.ChDirResult = 1 then Application.MessageBox(Format(LANGErrorGettingListingForSPanelNoPath, [LANGPanelStrings[LeftPanel], 'Exception']), [mbOK], mbError, mbNone, mbOK)
+ else Application.MessageBox(Format(LANGErrorGettingListingForSPanel, [LANGPanelStrings[LeftPanel], ANSIToUTF8(GetErrorString(OpenDirThread.ChDirResult)), ANSIToUTF8(NewPath)]), [mbOK], mbError, mbNone, mbOK);
+ DebugMsg(['TFMain.ChangingDir: Freeing thread...']);
+ OpenDirThread.Free;
+ end else begin
+ if OpenDirThread.ListingResult <> 0 then begin
+ Application.MessageBox(Format(LANGErrorGettingListingForSPanel, [LANGPanelStrings[LeftPanel], ANSIToUTF8(GetErrorString(OpenDirThread.ListingResult)), Engine.Path]), [mbOK], mbError, mbNone, mbOK);
+ Exit;
+ end;
+ s := OpenDirThread.ASelItem;
+ Engine := OpenDirThread.AEngine; // set current Engine from the thread (might have been modified due to VFS)
+ if LeftPanel then LeftPanelEngine := Engine
+ else RightPanelEngine := Engine;
+ DebugMsg(['TFMain.ChangingDir: Freeing thread...']);
+ OpenDirThread.Free;
+
+ FillPanel(DirList, ListView, Engine, LeftPanel); // This is time consuming
+ DirList.Free;
+ if DataList.Count > 0 then begin
+ if PreserveSelection and (SelectedFiles.Count > 0) and (DataList.Count > 0) then
+ for i := 0 to DataList.Count - 1 do
+ if (not PDataItem(DataList[i])^.UpDir) and (SelectedFiles.IndexOf(PDataItem(DataList[i])^.AName) >= 0)
+ then PDataItem(DataList[i])^.Selected := True;
+ Sel := 0;
+ b := (NewPath = '..') and (Length(Trim(s)) > 0) and LookupItem(s, True);
+ if not b then b := (HiliString1 <> '') and LookupItem(HiliString1, True);
+ if (not b) and (HiliString1 <> '') then LookupItem(HiliString1, False);
+ if (not b) and (HiliString2 <> '') then LookupItem(HiliString2, True);
+ if (not b) and (HiliString2 <> '') then LookupItem(HiliString2, False);
+ if (Engine.Path = '/') and (NewPath = '/') then Sel := ListView.ConvertFromSorted(0);
+ ListView.Items[Sel].Selected := True;
+// Application.ProcessMessages;
+ ListView.Items[Sel].SetCursor(0, False, not Application.GTKVersion_2_2_0_Up, 0.5, 0);
+// Application.ProcessMessages;
+ end;
+ UpdatePanelInfo;
+ UpdatePanelInfoDown(LeftPanel);
+ UpdatePanelInfoDown(not LeftPanel);
+ if ANotebook.Visible then begin
+ ATabList[ANotebook.PageIndex] := Engine.Path;
+ TabEngines[ANotebook.PageIndex] := Engine;
+ s := ExtractFileName(ExcludeTrailingPathDelimiter(Engine.Path));
+ if s = '' then s := '/';
+ SetTabLabel(ANotebook, ANotebook.PageIndex, ANSIToUTF8(s), ANSIToUTF8(Engine.Path));
+ end;
+ end; // of Chdir, Listing, ...
+ Engine.ExplicitChDir('/');
+ Application.ProcessMessages;
+ InternalUnLock;
+ FileListTipsEnable;
+ except
+ on E: Exception do DebugMsg(['*** Exception raised in TFMain.ChangingDir (', E.ClassName, '): ', E.Message]);
+ end;
+end;
+
+procedure TFMain.DoRefresh(LeftPanel, StaySame, AutoFallback: boolean);
+var ListView: TGTKListView;
+ Engine: TPanelEngine;
+ DataList: TList;
+ s1, s2: string;
+begin
+ if LeftPanel then begin
+ ListView := LeftListView;
+ Engine := LeftPanelEngine;
+ DataList := LeftPanelData;
+ end else begin
+ ListView := RightListView;
+ Engine := RightPanelEngine;
+ DataList := RightPanelData;
+ end;
+ s1 := ''; s2 := '';
+ FindNextSelected(ListView, DataList, s1, s2);
+ ChangingDir(LeftPanel, Engine.Path, s1, s2, StaySame, AutoFallback);
+end;
+
+procedure TFMain.UpdateCaption;
+var LeftPanel: boolean;
+ s: string;
+begin
+ if LeftListView.Focused then LeftPanel := True else
+ if RightListView.Focused then LeftPanel := False else
+ LeftPanel := LeftLastFocused;
+ if LeftPanel then begin
+ if LeftPanelEngine.GetPrefix <> '' then s := ANSIToUTF8(Format(ConstFullPathFormatStr, [LeftPanelEngine.GetPrefix, LeftPanelEngine.Path]))
+ else s := ANSIToUTF8(LeftPanelEngine.Path);
+ end else
+ if RightPanelEngine.GetPrefix <> '' then s := ANSIToUTF8(Format(ConstFullPathFormatStr, [RightPanelEngine.GetPrefix, RightPanelEngine.Path]))
+ else s := ANSIToUTF8(RightPanelEngine.Path);
+ Caption := Format('Tux Commander [%s]', [s]);
+end;
+
+procedure TFMain.UpdatePanelInfo;
+var FSFree, FSSize: Int64;
+ FSName, s: string;
+ Time1, Time2: TDateTime;
+begin
+ UpdateCaption;
+ Time1 := Now;
+ if LeftPanelEngine.GetPrefix <> ''
+ then LeftPathLabel.Caption := ANSIToUTF8(Format(ConstFullPathFormatStr, [LeftPanelEngine.GetPrefix, LeftPanelEngine.Path]))
+ else LeftPathLabel.Caption := ANSIToUTF8(LeftPanelEngine.Path);
+ if RightPanelEngine.GetPrefix <> ''
+ then RightPathLabel.Caption := ANSIToUTF8(Format(ConstFullPathFormatStr, [RightPanelEngine.GetPrefix, RightPanelEngine.Path]))
+ else RightPathLabel.Caption := ANSIToUTF8(RightPanelEngine.Path);
+ LeftPathLabel.UseMarkup := True;
+ RightPathLabel.UseMarkup := True;
+ if LeftLastFocused then s := LeftPathLabel.Caption
+ else s := RightPathLabel.Caption;
+ CommandLineLabel.Caption := Format('%s@%s:%s>', [GetUserName, GetHostName, s]);
+ LeftPanelEngine.GetFileSystemInfo(LeftPanelEngine.Path, FSSize, FSFree, FSName);
+ if FSName <> ''
+ then LeftDiskInfoLabel.Caption := Format(LANGDiskStatVolNameFmt, [FSName,
+ ANSIToUTF8(FormatSize(FSFree, 1024)),
+ ANSIToUTF8(FormatSize(FSSize, 1024))])
+ else LeftDiskInfoLabel.Caption := Format(LANGDiskStatFmt,
+ [ANSIToUTF8(FormatSize(FSFree, 1024)),
+ ANSIToUTF8(FormatSize(FSSize, 1024))]);
+ RightPanelEngine.GetFileSystemInfo(RightPanelEngine.Path, FSSize, FSFree, FSName);
+ if FSName <> ''
+ then RightDiskInfoLabel.Caption := Format(LANGDiskStatVolNameFmt, [FSName,
+ ANSIToUTF8(FormatSize(FSFree, 1024)),
+ ANSIToUTF8(FormatSize(FSSize, 1024))])
+ else RightDiskInfoLabel.Caption := Format(LANGDiskStatFmt,
+ [ANSIToUTF8(FormatSize(FSFree, 1024)),
+ ANSIToUTF8(FormatSize(FSSize, 1024))]);
+ LeftDiskInfoLabel.UseMarkup := True;
+ RightDiskInfoLabel.UseMarkup := True;
+
+ // Update the visibility of VFS buttons
+ LeftDisconnectButton.Visible := (LeftPanelEngine is TVFSEngine) and (not TVFSEngine(LeftPanelEngine).ArchiveMode);
+ LeftLeaveArchiveButton.Visible := (LeftPanelEngine is TVFSEngine) and TVFSEngine(LeftPanelEngine).ArchiveMode;
+ RightDisconnectButton.Visible := (RightPanelEngine is TVFSEngine) and (not TVFSEngine(RightPanelEngine).ArchiveMode);
+ RightLeaveArchiveButton.Visible := (RightPanelEngine is TVFSEngine) and TVFSEngine(RightPanelEngine).ArchiveMode;
+ LeftPasswordButton.Visible := (LeftPanelEngine is TVFSEngine) and TVFSEngine(LeftPanelEngine).GetPasswordRequired;
+ RightPasswordButton.Visible := (RightPanelEngine is TVFSEngine) and TVFSEngine(RightPanelEngine).GetPasswordRequired;
+ miDisconnect.Enabled := (LeftLastFocused and (LeftPanelEngine is TVFSEngine) and (not TVFSEngine(LeftPanelEngine).ArchiveMode)) or
+ ((not LeftLastFocused) and (RightPanelEngine is TVFSEngine) and (not TVFSEngine(RightPanelEngine).ArchiveMode));
+ Time2 := Now;
+ DebugMsg(['UpdatePanelInfo: ', SecondOf(Time2 - Time1), ':', MillisecondOf(Time2 - Time1)]);
+end;
+
+procedure TFMain.UpdatePanelInfoDown(LeftPanel: boolean);
+var Size, TotalSize: Int64;
+ NumSel, TotalFiles: longint;
+ i: integer;
+ Data: PDataItem;
+ s: string;
+ DataList: TList;
+begin
+ if LeftPanel then DataList := LeftPanelData
+ else DataList := RightPanelData;
+ Size := 0;
+ TotalSize := 0;
+ NumSel := 0;
+ TotalFiles := 0;
+ if DataList.Count > 0 then
+ for i := 0 to DataList.Count - 1 do begin
+ Data := DataList[i];
+ if (not Data^.UpDir) and ((not Data^.IsDir) or (Data^.IsDir and (Data^.Size > -1))) then begin
+ Inc(TotalSize, Data^.Size);
+ Inc(TotalFiles);
+ if Data^.Selected then begin
+ Inc(NumSel);
+ Inc(Size, Data^.Size);
+ end;
+ end;
+ end;
+ s := Format(LANGStatusLineFmt, [ANSIToUTF8(FormatSize(Size, 1024)),
+ ANSIToUTF8(FormatSize(TotalSize, 1024)), NumSel, TotalFiles]);
+ if LeftPanel then LeftStatusLine.Caption := s
+ else RightStatusLine.Caption := s;
+end;
+
+procedure TFMain.PathButtonClick(Sender: TObject);
+var NewPath: string;
+ LeftPanel: boolean;
+begin
+ LeftPanel := (Sender = LeftUpButton) or (Sender = LeftHomeButton) or (Sender = LeftRootButton);
+ if (Sender = LeftUpButton) or (Sender = RightUpButton) then NewPath := '..'
+ else if (Sender = LeftRootButton) or (Sender = RightRootButton) then NewPath := '/'
+ else if (Sender = LeftHomeButton) or (Sender = RightHomeButton) then NewPath := GetHomePath
+ else Exit;
+
+ // Close VFS connections
+ if ((Sender = LeftRootButton) or (Sender = LeftHomeButton)) and (not (LeftPanelEngine is TLocalTreeEngine)) then
+ while (LeftPanelEngine is TVFSEngine) do CloseVFS(LeftPanel, True);
+ if ((Sender = RightRootButton) or (Sender = RightHomeButton)) and (not (RightPanelEngine is TLocalTreeEngine)) then
+ while (RightPanelEngine is TVFSEngine) do CloseVFS(LeftPanel, True);
+
+ ChangingDir(LeftPanel, NewPath);
+ if LeftPanel then LeftListView.SetFocus
+ else RightListView.SetFocus;
+end;
+
+procedure TFMain.miRefreshClick(Sender: TObject);
+begin
+ DoRefresh(LeftListView.Focused, True, True);
+end;
+
+function TFMain.CompareFunc(Sender: TObject; var model: PGtkTreeModel; var a, b: PGtkTreeIter): integer;
+var Data1, Data2: PDataItem;
+ Path: PGtkTreePath;
+ DataList: TList;
+begin
+ Result := 0;
+ if not Application.GTKVersion_2_0_5_Up then begin
+ gtk_tree_model_get(model, a, 0, @Data1, -1);
+ gtk_tree_model_get(model, b, 0, @Data2, -1);
+ end else begin
+ if Sender = LeftListView then DataList := LeftPanelData
+ else DataList := RightPanelData;
+ Path := gtk_tree_model_get_path(model, a);
+ if not Assigned(Path) then Exit;
+ Data1 := DataList[gtk_tree_path_get_indices(Path)^];
+ gtk_tree_path_free(Path);
+ Path := gtk_tree_model_get_path(model, b);
+ if not Assigned(Path) then Exit;
+ Data2 := DataList[gtk_tree_path_get_indices(Path)^];
+ gtk_tree_path_free(Path);
+ end;
+ Result := LVCompareItems(Data1, Data2, (Sender as TGTKView).SortOrder = soAscending, FMain.ColumnSortIDs[(Sender as TGTKView).SortColumnID + 1]);
+end;
+
+(********************************************************************************************************************************)
+procedure TFMain.DoSelect(SelectType: integer);
+var Filter, s: string;
+ LeftPanel, ExpandSel, b, Found: boolean;
+ ListView: TGTKListView;
+ Engine: TPanelEngine;
+ i, j: integer;
+ Item: TGTKListItem;
+ Data: PDataItem;
+ DataList: TList;
+ Wilds: array of string;
+begin
+ try
+ InternalLock;
+ try
+ if LeftListView.Focused then LeftPanel := True else
+ if RightListView.Focused then LeftPanel := False else Exit;
+ if LeftPanel then begin
+ ListView := LeftListView;
+ Engine := LeftPanelEngine;
+ DataList := LeftPanelData;
+ end else begin
+ ListView := RightListView;
+ Engine := RightPanelEngine;
+ DataList := RightPanelData;
+ end;
+ DeactivateQuickFind(LeftPanel);
+ ExpandSel := False;
+ if SelectType in [1, 2] then try
+ FSelect := TFSelect.Create(Self);
+ case SelectType of
+ 1 : FSelect.Caption := LANGExpandSelection;
+ 2 : FSelect.Caption := LANGShrinkSelection;
+ end;
+{ FSelect.TitleLabel.Caption := Format('<span size="large" weight="ultrabold">%s</span>', [FSelect.Caption]);
+ FSelect.TitleLabel.UseMarkup := True; }
+ ExpandSel := SelectType = 1;
+ FSelect.ComboBox.Entry.Text := LastUsedFilter;
+ FSelect.ComboBox.Entry.SelectAll;
+ if FSelect.Run = mbOK
+ then begin
+ Filter := FSelect.ComboBox.Entry.Text;
+ LastUsedFilter := Filter;
+ if FSelect.ComboBox.Entry.Text <> '*.*' then
+ SaveItemToHistory(FSelect.ComboBox.Entry.Text, SelectHistory);
+ end else Exit;
+ finally
+ FSelect.Free;
+ end;
+
+ case SelectType of
+ 1, 2 : if ListView.Items.Count > 1 then begin
+ SetLength(Wilds, 0);
+ while LastDelimiter(ConfSelItemsDelim, Filter) > 0 do begin
+ i := LastDelimiter(ConfSelItemsDelim, Filter);
+ if i < Length(Filter) then begin
+ s := Copy(Filter, i + 1, Length(Filter) - i);
+ Delete(Filter, i, Length(Filter) - i + 1);
+ SetLength(Wilds, Length(Wilds) + 1);
+ Wilds[Length(Wilds) - 1] := s;
+ end;
+ end;
+ if Length(Filter) > 0 then begin
+ SetLength(Wilds, Length(Wilds) + 1);
+ Wilds[Length(Wilds) - 1] := Filter;
+ end;
+ Found := False;
+ for i := 0 to DataList.Count - 1 do begin
+ Data := DataList[i];
+ if Assigned(Data) and (not Data^.UpDir) and (ConfSelectAllDirs or (not Data^.IsDir)) {and (Data^.Selected <> ExpandSel)} then begin
+ b := False;
+ for j := 0 to Length(Wilds) - 1 do
+ b := b or IsWild(String(Data^.AName), Wilds[j], True);
+ if b then begin
+ Data^.Selected := ExpandSel;
+ Found := True;
+ end;
+ end;
+ end;
+ SetLength(Wilds, 0);
+ if not Found then Application.MessageBox(LANGNoMatchesFound, [mbOK], mbWarning, mbNone, mbOK);
+ end;
+ 3, 4 : if DataList.Count > 0 then
+ for i := 0 to DataList.Count - 1 do
+ if (not PDataItem(DataList[i])^.UpDir) and (ConfSelectAllDirs or (not PDataItem(DataList[i])^.IsDir)) then
+ PDataItem(DataList[i])^.Selected := not PDataItem(DataList[i])^.Selected;
+ 5, 8 : begin
+ Item := ListView.Selected;
+ if Assigned(Item) and Assigned(Item.Data) then begin
+ Data := PDataItem(Item.Data);
+ if (Engine.Path = '/') or (Item.Index > 0) then Data^.Selected := not Data^.Selected;
+ if (ListView.ConvertToSorted(Item.Index) < ListView.Items.Count - 1) and
+ (((SelectType = 5) and ConfInsMoveDown) or ((SelectType = 8) and ConfSpaceMovesDown)) then begin
+ ListView.Selected := ListView.Items[ListView.ConvertFromSorted(ListView.ConvertToSorted(Item.Index) + 1)];
+ ListView.Selected.SetCursor(0, False, False, 0, 0);
+ end else Item.RedrawRow; // Move to the next item will invalidate it automatically
+ end;
+ end;
+ 6, 7: if DataList.Count > 0 then
+ for i := 0 to DataList.Count - 1 do
+ if (not PDataItem(DataList[i])^.UpDir) and (ConfSelectAllDirs or (not PDataItem(DataList[i])^.IsDir)) then
+ PDataItem(DataList[i])^.Selected := SelectType = 6;
+ end;
+ if SelectType in [1..4, 6..7] then ListView.Invalidate; // Make changes appear
+ UpdatePanelInfoDown(LeftPanel);
+ Application.ProcessMessages;
+ except end;
+ finally
+ Application.ProcessMessages;
+ InternalUnLock;
+ end;
+end;
+
+procedure TFMain.ProcessMarkKey(KeyType, Key: integer);
+var LeftPanel: boolean;
+ ListView: TGTKListView;
+ Pos: integer;
+begin
+ if LeftListView.Focused then LeftPanel := True else
+ if RightListView.Focused then LeftPanel := False else
+ LeftPanel := LeftLastFocused;
+ if LeftPanel then ListView := LeftListView
+ else ListView := RightListView;
+ if Editing and Assigned(ListView.Columns[0].FColumn^.editable_widget) then begin
+ Pos := gtk_editable_get_position(PGtkEditable(ListView.Columns[0].FColumn^.editable_widget));
+ gtk_editable_insert_text(PGtkEditable(ListView.Columns[0].FColumn^.editable_widget), PChar(UTF8Encode(WideChar(KeyValToUnicode(Key)))), 1, @Pos);
+ gtk_editable_set_position(PGtkEditable(ListView.Columns[0].FColumn^.editable_widget), Pos);
+ end;
+ if CommandLineCombo.Entry.Focused then ActivateCommandLine(Key, True) else
+ if QuickFind then QuickFindSendKey(LeftPanel, Key)
+ else DoSelect(KeyType);
+end;
+
+procedure TFMain.mnuMarkClick(Sender: TObject);
+begin
+ if Sender = miSelectGroup then ProcessMarkKey(1, GDK_KP_PLUS) else
+ if Sender = miUnselectGroup then ProcessMarkKey(2, GDK_KP_MINUS) else
+ if Sender = miSelectAll then DoSelect(6) else
+ if Sender = miUnselectAll then DoSelect(7) else
+ if Sender = miInvertSelection then ProcessMarkKey(4, GDK_KP_ASTERISK);
+end;
+
+(********************************************************************************************************************************)
+procedure TFMain.ListViewCellDataFunc(Sender: TObject; tree_view: PGtkTreeView; tree_column : PGtkTreeViewColumn; cell : PGtkCellRenderer; tree_model : PGtkTreeModel; iter : PGtkTreeIter);
+var s: PChar;
+ Sel, ImageCol: boolean;
+ Data: PDataItem;
+ i, ColumnID, ColumnIdx: integer;
+ DataList: TList;
+ TreePath: PGtkTreePath;
+ AFGColor, ABGColor: PGdkColor;
+{ Rect, VisibleRect: TGdkRectangle; }
+begin
+ AFGColor := nil;
+ ABGColor := nil;
+ if Application.GTKVersion_2_0_5_Up then ColumnIdx := gtk_tree_view_column_get_sort_column_id(tree_column) else
+ begin
+ ColumnIdx := 0;
+ for i := 0 to (Sender as TGTKListView).Columns.Count - 1 do
+ if (cell = (Sender as TGTKListView).Columns[i].FRenderer) or (cell = (Sender as TGTKListView).Columns[i].FPixbufRenderer) then begin
+ ColumnIdx := i;
+ Break;
+ end;
+ end;
+ ColumnID := ColumnSortIDs[ColumnIdx + 1] - 1;
+ ImageCol := False;
+ if ColumnIdx = 0 then ImageCol := GTK_IS_CELL_RENDERER_PIXBUF(cell);
+ Data := nil;
+ if not Application.GTKVersion_2_0_5_Up then gtk_tree_model_get(tree_model, iter, 0, @Data, -1)
+ else begin
+ if Sender = LeftListView then DataList := LeftPanelData
+ else DataList := RightPanelData;
+ TreePath := gtk_tree_model_get_path(tree_model, iter);
+ if not Assigned(TreePath) then Exit;
+ (Sender as TGTKListView).ConvertPathToChild(TreePath);
+ Data := DataList[gtk_tree_path_get_indices(TreePath)^];
+ gtk_tree_path_free(TreePath);
+ end;
+(* gtk_tree_view_get_cell_area(tree_view, TreePath, nil, @Rect);
+ gtk_tree_view_get_visible_rect(tree_view, @VisibleRect);
+ if (Rect.height = 0) or (Rect.height <> ConfRowHeight) or (Rect.y = 0) or (Rect.y > VisibleRect.y + VisibleRect.height) then Exit; *)
+
+// DebugMsg(['Rendering text ', Data^.ColumnData[ColumnID]]);
+
+ if not Assigned(Data) then Exit;
+ Sel := gtk_tree_selection_iter_is_selected((Sender as TGTKView).FSelection, iter);
+ with Data^ do begin
+ // ################ Prepare colors
+ if Selected then AFGColor := SelectedItemGDKColor else begin
+ if Sel then begin
+ if (Sender as TGTKView).Focused
+ then AFGColor := ActiveItemGDKColor
+ else AFGColor := InactiveItemGDKColor;
+ end else AFGColor := ItemColor;
+ end;
+ if not Sel then ABGColor := NormalItemGDKBackground else
+ if (Sender as TGTKView).Focused then ABGColor := ActiveItemGDKBackground
+ else ABGColor := InactiveItemGDKBackground;
+
+
+
+ // ################ Setting the properties
+ if not ImageCol then begin
+ if Editing and (InplaceEditItem.Data = Data) and (ColumnID < 3) and ((ColumnID = 0) or (ColumnID = 1) or Assigned(tree_column^.editable_widget))
+ then begin
+ if (ColumnID = 0) or (ColumnID = 1) then s := PChar(ANSIToUTF8(string(AName))) else s := nil;
+ g_object_set(cell, 'text', s, 'foreground-gdk', AFGColor, nil);
+ if Application.GTKVersion_2_2_0_Up or (not ConfUseFileTypeIcons) then
+ g_object_set(cell, 'background-gdk', ABGColor, nil);
+ end
+ else begin // not editing
+ if ConfDirsInBold then begin
+ if IsDir or UpDir then g_object_set(cell, 'markup', PChar(Format('<span weight="bold">%s</span>', [QuoteMarkupStr(ColumnData[ColumnID])])), 'foreground-gdk', AFGColor, nil)
+ else g_object_set(cell, 'markup', PChar(QuoteMarkupStr(ColumnData[ColumnID])), 'foreground-gdk', AFGColor, nil);
+ end else g_object_set(cell, 'text', ColumnData[ColumnID], 'foreground-gdk', AFGColor, nil);
+ if Application.GTKVersion_2_2_0_Up or (not ConfUseFileTypeIcons) then
+ g_object_set(cell, 'background-gdk', ABGColor, nil); // Older versions have bug in color filling
+ end;
+ end else // this is the image column
+ if ConfUseFileTypeIcons then begin // Assign icons
+ if Application.GTKVersion_2_2_0_Up then
+ g_object_set(cell, 'cell-background-gdk', ABGColor, nil); // Older versions don't have this property
+ if Sel and (not (Sender as TGTKView).Focused) and Application.GTKVersion_2_2_0_Up then begin
+ if InactiveItemsTimer.Enabled then InactiveItemsTimer.Enabled := False;
+ if Sender = LeftListView then RedrawLeftInactive := True
+ else RedrawRightInactive := True;
+ InactiveItemsTimer.Enabled := not Application.GTKVersion_2_6_0_Up;
+ end;
+ if Icon <> nil then g_object_set(cell, 'pixbuf', Icon, nil);
+ end;
+ end;
+end;
+
+procedure TFMain.F7ButtonClick(Sender: TObject);
+var LeftPanel: boolean;
+ ListView: TGTKListView;
+ Engine: TPanelEngine;
+ NewDir: string;
+begin
+ try
+ InternalLock;
+ try
+ if Sender = F7Button then LeftPanel := LeftLastFocused else
+ if LeftListView.Focused then LeftPanel := True else
+ if RightListView.Focused then LeftPanel := False else Exit;
+ if LeftPanel then ListView := LeftListView
+ else ListView := RightListView;
+ if LeftPanel then Engine := LeftPanelEngine
+ else Engine := RightPanelEngine;
+
+ try
+ FNewDir := TFNewDir.Create(Self);
+ if FNewDir.Run = mbOK
+ then NewDir := Utf8ToAnsi(FNewDir.Entry.Text)
+ else Exit;
+ finally
+ FNewDir.Free;
+ end;
+
+ if NewDir = '' then Exit;
+ if not MakeDirectory(ListView, Engine, LeftPanel, NewDir) then Exit;
+ ChangingDir(LeftPanel, Engine.Path, NewDir);
+ DoRefresh(not LeftPanel, True, True);
+ except end;
+ finally
+ Application.ProcessMessages;
+ InternalLockInit(False);
+ end;
+end;
+
+procedure TFMain.DoGetDirSize(AllItems: boolean);
+var LeftPanel: boolean;
+ ListView: TGTKListView;
+ Engine: TPanelEngine;
+ DataList: TList;
+begin
+ if LeftListView.Focused then LeftPanel := True else
+ if RightListView.Focused then LeftPanel := False else Exit;
+ if LeftPanel then begin
+ ListView := LeftListView;
+ Engine := LeftPanelEngine;
+ DataList := LeftPanelData;
+ end else begin
+ ListView := RightListView;
+ Engine := RightPanelEngine;
+ DataList := RightPanelData;
+ end;
+
+ RunningEscSensitive := 1;
+ GetDirSize(ListView, Engine, DataList, AllItems);
+ FMainEscPressed := False;
+ RunningEscSensitive := 0;
+end;
+
+procedure TFMain.DoDelete(LeftPanel: boolean; ListView: TGTKListView; Engine: TPanelEngine; DataList: TList);
+var i, j : integer;
+ SelCount: longint;
+ s, s2, smsg, NextItem1, NextItem2: string;
+ Data: PDataItem;
+ AWorkingThread: TWorkerThread;
+ AFProgress: TFProgress;
+begin
+ try
+ InternalLock;
+ SelCount := 0;
+ if DataList.Count > 0 then
+ for i := 0 to DataList.Count - 1 do
+ with PDataItem(DataList[i])^ do
+ if Selected and (not UpDir) then Inc(SelCount);
+
+ if (SelCount = 0) and ((not Assigned(ListView.Selected)) or PDataItem(ListView.Selected.Data)^.UpDir) then begin
+// WriteLn(integer(mbApply), ', ', integer(Application.MessageBox(LANGNoFilesSelected, [mbOK], mbInfo, mbNone, mbApply)));
+ Application.MessageBox(LANGNoFilesSelected, [mbOK], mbInfo, mbNone, mbOK);
+ Exit;
+ end;
+
+ Data := nil;
+ if Assigned(ListView.Selected) then Data := ListView.Selected.Data;
+ if SelCount > 0 then begin
+ j := 0;
+ s2 := '';
+ for i := 0 to DataList.Count - 1 do
+ with PDataItem(DataList[i])^ do
+ if Selected and (not UpDir) then begin
+ s2 := s2 + #10 + AName;
+ Inc(j);
+ if j = 5 then Break;
+ end;
+ if SelCount > j then s2 := s2 + #10 + '...';
+ s := Format(LANGSelectedFilesDirectories, [SelCount]);
+ smsg := Format(LANGDoYouReallyWantToDeleteTheSS, [s, s2]);
+ end else begin
+ if Assigned(Data) then
+ if Data^.IsDir then s := Format(LANGDirectoryS, [ANSIToUTF8(string(Data^.AName))])
+ else s := Format(LANGFileS, [ANSIToUTF8(string(Data^.AName))]);
+ smsg := Format(LANGDoYouReallyWantToDeleteTheS, [s]);
+ end;
+ if Application.MessageBox(QuotePercentStr(smsg), [mbYes, mbNo], mbQuestion, mbNone, mbNo) <> mbYes then Exit;
+
+ FindNextSelected(ListView, DataList, NextItem1, NextItem2);
+ AWorkingThread := TWorkerThread.Create;
+ DebugMsg(['TFMain.DoDelete: Creating thread...']);
+ AFProgress := TFProgress.Create(Self);
+ try
+ AFProgress.SetNumBars(False);
+// AFProgress.ProgressBar.Max := 100;
+ AFProgress.ProgressBar.Value := 0;
+ AWorkingThread.ProgressForm := AFProgress;
+ if Assigned(ListView.Selected) then AWorkingThread.SelectedItem := ListView.Selected.Data;
+ AWorkingThread.Engine := Engine;
+ AWorkingThread.LeftPanel := LeftPanel;
+ AWorkingThread.DataList := DataList;
+ AWorkingThread.WorkerProcedure := DeleteFilesWorker;
+ AWorkingThread.Resume;
+
+// AFProgress.Run;
+
+ AFProgress.ParentForm := FMain;
+ AFProgress.ShowModal;
+ ProcessProgressThread(AWorkingThread, AFProgress);
+ AFProgress.Close;
+
+
+{ FProgress.ShowModal;
+ Application.ProcessMessages;
+ repeat
+ Sleep(100);
+ Application.ProcessMessages;
+// FProgress.Run;
+ until False; }
+
+{ FProgress.ShowModal;
+ DeleteFiles(FProgress, ListView, Engine, LeftPanel, DataList); }
+
+ finally
+ AFProgress.Free;
+ AWorkingThread.Free;
+ DebugMsg(['TFMain.DoDelete: Freeing thread...']);
+ end;
+ ChangingDir(LeftPanel, Engine.Path, NextItem1, NextItem2);
+ DoRefresh(not LeftPanel, True, True);
+ finally
+ Application.ProcessMessages;
+ InternalUnLock;
+ end;
+end;
+
+procedure TFMain.F8ButtonClick(Sender: TObject);
+var LeftPanel: boolean;
+ ListView: TGTKListView;
+ Engine: TPanelEngine;
+ DataList: TList;
+begin
+ try
+ if (Sender = F8Button) or (Sender is TGTKMenuItem)
+ then LeftPanel := LeftLastFocused else
+ if LeftListView.Focused then LeftPanel := True else
+ if RightListView.Focused then LeftPanel := False else Exit;
+ if LeftPanel then begin
+ ListView := LeftListView;
+ Engine := LeftPanelEngine;
+ DataList := LeftPanelData;
+ end else begin
+ ListView := RightListView;
+ Engine := RightPanelEngine;
+ DataList := RightPanelData;
+ end;
+ DoDelete(LeftPanel, ListView, Engine, DataList);
+ except end;
+end;
+
+procedure TFMain.F5ButtonClick(Sender: TObject);
+var LeftPanel: boolean;
+ ListView: TGTKListView;
+ Engine: TPanelEngine;
+ DataList: TList;
+begin
+ try
+ if Sender = F5Button then LeftPanel := LeftLastFocused else
+ if LeftListView.Focused then LeftPanel := True else
+ if RightListView.Focused then LeftPanel := False else Exit;
+ if LeftPanel then begin
+ ListView := LeftListView;
+ Engine := LeftPanelEngine;
+ DataList := LeftPanelData;
+ end else begin
+ ListView := RightListView;
+ Engine := RightPanelEngine;
+ DataList := RightPanelData;
+ end;
+ DoCopyMove(LeftPanel, True, Sender = nil, ListView, Engine, DataList);
+ except end;
+end;
+
+procedure TFMain.F6ButtonClick(Sender: TObject);
+var LeftPanel: boolean;
+ ListView: TGTKListView;
+ Engine: TPanelEngine;
+ DataList: TList;
+begin
+ try
+ if (Sender = F6Button) or (Sender = F2Button) or (Sender is TGTKMenuItem)
+ then LeftPanel := LeftLastFocused else
+ if LeftListView.Focused then LeftPanel := True else
+ if RightListView.Focused then LeftPanel := False else Exit;
+ if LeftPanel then begin
+ ListView := LeftListView;
+ Engine := LeftPanelEngine;
+ DataList := LeftPanelData;
+ end else begin
+ ListView := RightListView;
+ Engine := RightPanelEngine;
+ DataList := RightPanelData;
+ end;
+ DoCopyMove(LeftPanel, False, (Sender = nil) or (Sender = F2Button) or (Sender is TGTKMenuItem), ListView, Engine, DataList);
+ except end;
+end;
+
+procedure TFMain.DoCopyMove(LeftPanel, CopyMode, ShiftPressed: boolean; ListView: TGTKListView; Engine: TPanelEngine; DataList: TList);
+var i: integer;
+ SelCount: longint;
+ NewPath, SelSingle, NextItem1, NextItem2: string;
+ AWorkingThread: TWorkerThread;
+ AFProgress: TFProgress;
+ CurrentEngine, OppositeEngine: TPanelEngine;
+ s: string;
+begin
+ try
+ InternalLock;
+ SelCount := 0;
+ if DataList.Count > 0 then
+ for i := 0 to DataList.Count - 1 do
+ with PDataItem(DataList[i])^ do
+ if Selected and (not UpDir) then Inc(SelCount);
+
+ if (SelCount = 0) and ((not Assigned(ListView.Selected)) or PDataItem(ListView.Selected.Data)^.UpDir) then begin
+ Application.MessageBox(LANGNoFilesSelected, [mbOK], mbInfo, mbNone, mbOK);
+ Exit;
+ end;
+
+ SelSingle := '';
+ if SelCount = 0 then begin
+ SelCount := 1;
+ SelSingle := PDataItem(ListView.Selected.Data)^.AName;
+ end;
+
+ if LeftPanel then begin
+ CurrentEngine := LeftPanelEngine;
+ OppositeEngine := RightPanelEngine;
+ end else begin
+ CurrentEngine := RightPanelEngine;
+ OppositeEngine := LeftPanelEngine;
+ end;
+
+ try
+ FCopyMove := TFCopyMove.Create(Self);
+ if CopyMode then begin
+ FCopyMove.Caption := LANGCopyFiles;
+ FCopyMove.Label1.Caption := Format(LANGCopyDFileDirectoriesTo, [SelCount]);
+ end else begin
+ FCopyMove.Caption := LANGMoveRenameFiles;
+ FCopyMove.Label1.Caption := Format(LANGMoveRenameDFileDirectoriesTo, [SelCount]);
+ end;
+ if ShiftPressed then begin
+ if SelSingle <> '' then FCopyMove.Entry.Text := ANSIToUTF8(SelSingle)
+ else FCopyMove.Entry.Text := '*.*';
+ end else
+ if OppositeEngine is TLocalTreeEngine then FCopyMove.Entry.Text := ANSIToUTF8(OppositeEngine.Path)
+ else FCopyMove.Entry.Text := ANSIToUTF8(Format(ConstFullPathFormatStr, [OppositeEngine.GetPrefix, OppositeEngine.Path]));
+ FCopyMove.Entry.SelectAll;
+ if FCopyMove.Run <> mbOK then Exit;
+ NewPath := UTF8ToANSI(FCopyMove.Entry.Text);
+ finally
+ FCopyMove.Free;
+ end;
+
+ // Handle password in archives
+ if (CurrentEngine is TVFSEngine) and (CurrentEngine as TVFSEngine).GetPasswordRequired and (Length((CurrentEngine as TVFSEngine).Password) < 1) then
+ if not HandleSetPassword(CurrentEngine) then Exit;
+ if (OppositeEngine is TVFSEngine) and (OppositeEngine as TVFSEngine).GetPasswordRequired and (Length((OppositeEngine as TVFSEngine).Password) < 1) then
+ if not HandleSetPassword(OppositeEngine) then Exit;
+
+ FindNextSelected(ListView, DataList, NextItem1, NextItem2);
+ AWorkingThread := TWorkerThread.Create;
+ DebugMsg(['TFMain.DoCopyMove: Creating thread...']);
+ AFProgress := TFProgress.Create(Self);
+ try
+ if CopyMode then AFProgress.Label1.Caption := LANGCopySC
+ else AFProgress.Label1.Caption := LANGMoveRenameSC;
+ AFProgress.SetNumBars(True);
+ AFProgress.ProgressBar.Value := 0;
+ AWorkingThread.ProgressForm := AFProgress;
+ if Assigned(ListView.Selected) then AWorkingThread.SelectedItem := ListView.Selected.Data;
+ AWorkingThread.DestEngine := nil;
+ AWorkingThread.SrcEngine := Engine;
+
+ // Determine on which engine the entered path is
+ if Pos(ConstPathDelim, NewPath) = 0 then begin
+ if OppositeEngine is TLocalTreeEngine then AWorkingThread.DestEngine := OppositeEngine else
+ if CurrentEngine is TLocalTreeEngine then AWorkingThread.DestEngine := CurrentEngine
+ else begin
+ Application.MessageBox(LANGCannotDetermineDestinationEngine, [mbOK], mbError, mbOK, mbOK);
+ Exit;
+ end;
+ end else begin
+ s := Copy(NewPath, 1, Pos(ConstPathDelim, NewPath) - 1);
+ if s = OppositeEngine.GetPrefix then AWorkingThread.DestEngine := OppositeEngine else
+ if s = CurrentEngine.GetPrefix then AWorkingThread.DestEngine := CurrentEngine
+ else begin
+ Application.MessageBox(LANGCannotDetermineDestinationEngine, [mbOK], mbError, mbOK, mbOK);
+ Exit;
+ end;
+ end;
+ if AWorkingThread = nil then begin // Something went terribly wrong
+ Application.MessageBox(LANGCannotDetermineDestinationEngine, [mbOK], mbError, mbOK, mbOK);
+ Exit;
+ end;
+
+ // Strip the engine prefix
+ if Pos(ConstPathDelim, NewPath) > 0 then Delete(NewPath, 1, Pos(ConstPathDelim, NewPath));
+
+ AWorkingThread.LeftPanel := LeftPanel;
+ AWorkingThread.DataList := DataList;
+ AWorkingThread.WorkerProcedure := CopyFilesWorker;
+// AWorkingThread.WorkerProcedure := DummyThreadWorker;
+ AWorkingThread.ParamBool3 := CopyMode;
+ AWorkingThread.ParamBool4 := False;
+ AWorkingThread.ParamString1 := NewPath;
+ AWorkingThread.ParamDataItem1 := nil;
+
+ AFProgress.ParentForm := FMain;
+ AFProgress.ShowModal;
+ Application.ProcessMessages;
+
+ DebugMsg(['*** Copy: AWorkingThread.Resume']);
+// DebugMsg(['*** Copy: xg_thread_supported = ', xg_thread_supported()]);
+ AWorkingThread.Resume;
+// AWorkingThread.WorkerProcedure(AWorkingThread);
+ DebugMsg(['*** Copy: AWorkingThread.Resumed.']);
+ ProcessProgressThread(AWorkingThread, AFProgress);
+// DebugMsg(['***************************x1']);
+ AFProgress.Close;
+// Beep;
+ finally
+// DebugMsg(['** ddddddddddddddd ???']);
+ AFProgress.Free;
+ DebugMsg(['TFMain.DoCopyMove: Freeing thread...']);
+ AWorkingThread.Free;
+ end;
+ ChangingDir(LeftPanel, Engine.Path, NextItem1, NextItem2);
+ DoRefresh(not LeftPanel, True, False);
+ finally
+ DebugMsg(['** TFMain.DoCopyMove finished']);
+ Application.ProcessMessages;
+ InternalUnLock;
+ end;
+end;
+
+procedure TFMain.ListViewDblClick(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean);
+begin
+ DebugMsg(['DblClick']);
+ Accept := True; // This causes selecting the item if clicked is different than selected
+ if (Sender as TGTKListView).GetItemAtPos(X, Y) <> (Sender as TGTKListView).Selected then Exit;
+ Accept := False;
+ DebugMsg(['DblClick OK']);
+ if not (Sender as TGTKListView).Focused then (Sender as TGTKListView).SetFocus;
+ if Assigned((Sender as TGTKListView).Selected) and Assigned((Sender as TGTKListView).Selected.Data)
+ then ActivateItem((Sender as TGTKListView).Selected.Index, True);
+end;
+
+procedure TFMain.ListViewMouseDown(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean);
+var Item: TGTKListItem;
+ Click: TDateTime;
+begin
+ try
+ InternalLock;
+// DebugMsg(['ListViewMouseDown, X = ', X, ', Y = ', Y]);
+ if Button = mbLeft then begin
+ Click := Now;
+ if LastClick + ConfDblClickDelay/MSecsPerDay > Click then begin
+ Accept := False;
+ InplaceEditTimer.Enabled := False;
+ LastClick := 0;
+ ListViewDblClick(Sender, Button, Shift, X, Y, Accept);
+ Exit;
+ end;
+ LastClick := Click;
+ DebugMsg(['Click, Focus = ', (Sender as TGTKControl).Focused]);
+ if not (Sender as TGTKListView).Focused then Exit; // (Sender as TGTKListView).SetFocus;
+ Item := (Sender as TGTKListView).GetItemAtPos(X, Y);
+ if (Item = (Sender as TGTKListView).Selected) and Assigned(Item) and Assigned((Sender as TGTKListView).Selected) and
+ Assigned(Item.Data) and (not PDataItem(Item.Data)^.UpDir) and (Sender as TGTKListView).Focused and (not ConfDisableMouseRename) then
+ begin
+ DebugMsg(['Quick-Rename']);
+ InplaceEditTimer.Interval := ConfQuickRenameDelay;
+ InplaceEditTimer.Enabled := True;
+ InplaceEditItem := Item;
+ end;
+ Accept := True;
+ end else
+ if Button = mbRight then begin
+ if not (Sender as TGTKListView).Focused then (Sender as TGTKListView).SetFocus;
+ Item := (Sender as TGTKListView).GetItemAtPos(X, Y);
+ if Assigned(Item) then begin
+ Item.Selected := True;
+ Item.SetCursor(0, False, not Application.GTKVersion_2_2_0_Up, 0.5, 0);
+ end;
+ end;
+ finally
+ Application.ProcessMessages;
+ InternalUnLock;
+ end;
+end;
+
+procedure TFMain.InplaceEditTimerTimer(Sender: TObject);
+var LeftPanel: boolean;
+ ListView: TGTKListView;
+begin
+ InplaceEditTimer.Enabled := False;
+ try
+ LeftPanel := LeftLastFocused;
+ if LeftPanel then begin
+ ListView := LeftListView;
+ end else begin
+ ListView := RightListView;
+ end;
+ if ListView.Selected <> InplaceEditItem then Exit;
+ DoQuickRename(LeftPanel, ListView, False);
+ except end;
+end;
+
+procedure TFMain.DoQuickRename(LeftPanel: boolean; ListView: TGTKListView; const CalledFromKey: boolean);
+var i: integer;
+begin
+ if (not Assigned(ListView.Selected)) or (not Assigned(ListView.Selected.Data)) or
+ PDataItem(ListView.Selected.Data)^.UpDir or Editing then Exit;
+ Editing := True;
+ if CalledFromKey then InplaceEditItem := ListView.Selected;
+ for i := 1 to ConstNumPanelColumns do
+ if ColumnSortIDs[i] in [1, 2] then begin
+ ListView.Columns[i - 1].SetProperty('editable', 1);
+ ListView.StartEditing(i - 1);
+ Break;
+ end;
+end;
+
+procedure TFMain.ListViewEdited(Sender: TObject; Column: TGTKTreeViewColumn; Item: TGTKListItem; var NewText: string; var AllowChange: boolean; var DataColumn: integer);
+var AListView: TGTKListView;
+ DataList: TList;
+ Engine: TPanelEngine;
+ AWorkingThread: TWorkerThread;
+ AFProgress: TFProgress;
+ i: integer;
+ s1, s2: string;
+begin
+ try
+ InternalLock;
+ AListView := (((Sender as TGTKTreeViewColumn).Parent as TGTKTreeViewColumns).Parent as TGTKListView);
+ for i := 1 to ConstNumPanelColumns do
+ if ColumnSortIDs[i] in [1, 2] then begin
+ AListView.Columns[i - 1].SetProperty('editable', 0);
+ Break;
+ end;
+ if AListView = LeftListView then begin
+ Engine := LeftPanelEngine;
+ DataList := LeftPanelData;
+ end else begin
+ Engine := RightPanelEngine;
+ DataList := RightPanelData;
+ end;
+ Editing := False;
+ if (AListView.Selected = InplaceEditItem) and (AListView.Selected.Data = InplaceEditItem.Data) and
+ (String(PDataItem(InplaceEditItem.Data)^.AName) <> NewText) then
+ begin
+ AWorkingThread := TWorkerThread.Create;
+ DebugMsg(['TFMain.ListViewEdited: Creating thread...']);
+ AFProgress := TFProgress.Create(Self);
+ try
+ AFProgress.SetNumBars(True);
+ AFProgress.ProgressBar.Value := 0;
+ AFProgress.Label1.Caption := LANGMoveRenameSC;
+ AWorkingThread.ProgressForm := AFProgress;
+ if Assigned(AListView.Selected) then AWorkingThread.SelectedItem := AListView.Selected.Data;
+ AWorkingThread.SrcEngine := Engine;
+ AWorkingThread.DestEngine := Engine;
+ AWorkingThread.LeftPanel := AListView = LeftListView;
+ AWorkingThread.DataList := DataList;
+ AWorkingThread.WorkerProcedure := CopyFilesWorker;
+ AWorkingThread.ParamBool3 := False;
+ AWorkingThread.ParamBool4 := True;
+ AWorkingThread.ParamString1 := UTF8ToANSI(NewText);
+ AWorkingThread.ParamDataItem1 := InplaceEditItem.Data;
+ AWorkingThread.Resume;
+// AWorkingThread.WorkerProcedure(AWorkingThread);
+ AFProgress.ParentForm := FMain;
+ AFProgress.ShowModal;
+ ProcessProgressThread(AWorkingThread, AFProgress);
+ AFProgress.Close;
+ finally
+ AFProgress.Free;
+ DebugMsg(['TFMain.ListViewEdited: Freeing thread...']);
+ AWorkingThread.Free;
+ end;
+ s1 := ''; s2 := '';
+ FindNextSelected(AListView, DataList, s1, s2);
+ ChangingDir(AListView = LeftListView, Engine.Path, {String(PDataItem(InplaceEditItem.Data)^.AName),} NewText, s2);
+ DoRefresh(AListView <> LeftListView, True, True);
+ end;
+ AListView.SetFocus;
+ finally
+ Application.ProcessMessages;
+ InternalUnLock;
+ end;
+end;
+
+procedure TFMain.ListViewSelectionChanged(Sender: TObject);
+var i: integer;
+// AListView: TGTKListView;
+begin
+ if Editing and ((Sender as TGTKListView).Selected <> InplaceEditItem) then begin
+ Editing := False;
+ for i := 1 to ConstNumPanelColumns do
+ if ColumnSortIDs[i] in [1, 2] then begin
+ (Sender as TGTKListView).Columns[i - 1].SetProperty('editable', 0);
+ Break;
+ end;
+ end;
+ if QuickFind then DeactivateQuickFind(Sender = LeftListView);
+ if Sender = LeftListView then begin
+ if LeftPanelNotebook.Visible and (LeftPathsHighlight.Count > LeftPanelNotebook.PageIndex) and (LeftPanelNotebook.PageIndex >= 0) and
+ Assigned(LeftListView.Selected) and Assigned(LeftListView.Selected.Data)
+ then LeftPathsHighlight[LeftPanelNotebook.PageIndex] := PDataItem(LeftListView.Selected.Data)^.AName;
+ end else
+ if RightPanelNotebook.Visible and (RightPathsHighlight.Count > RightPanelNotebook.PageIndex) and (RightPanelNotebook.PageIndex >= 0) and
+ Assigned(RightListView.Selected) and Assigned(RightListView.Selected.Data)
+ then RightPathsHighlight[RightPanelNotebook.PageIndex] := PDataItem(RightListView.Selected.Data)^.AName;
+{ if Application.GTKVersion_2_6_0_Up then begin
+ AListView := Sender as TGTKListView;
+ if Assigned(AListView) and Assigned(AListView.Selected) and Assigned(AListView.Selected.Data) and Assigned(PDataItem(AListView.Selected.Data)^.ItemColor)
+ then gtk_widget_modify_text(AListView.FWidget, GTK_STATE_SELECTED, PDataItem(AListView.Selected.Data)^.ItemColor);
+ end; }
+end;
+
+procedure TFMain.ActivateQuickFind(LeftPanel: boolean);
+var Entry: TGTKEntry;
+begin
+ QuickFind := True;
+ if LeftPanel then begin
+ Entry := LeftQuickFindEntry;
+ LeftQuickFindVBox.Show;
+ end else begin
+ Entry := RightQuickFindEntry;
+ RightQuickFindVBox.Show;
+ end;
+ Entry.Text := '';
+end;
+
+procedure TFMain.QuickFindEntryEnter(Sender: TObject; var Accept: boolean);
+begin
+ Accept := False;
+ (Sender as TGTKControl).SetFocus;
+end;
+
+procedure TFMain.DeactivateQuickFind(LeftPanel: boolean);
+begin
+ QuickFind := False;
+ if LeftPanel then LeftQuickFindVBox.Hide
+ else RightQuickFindVBox.Hide;
+end;
+
+function TFMain.QuickFindSendKey(LeftPanel: boolean; Key: word): boolean;
+var Entry: TGTKEntry;
+ s, NewText: string;
+ i: integer;
+ AListView: TGTKListView;
+ DataList: TList;
+ Data: PDataItem;
+ Found: boolean;
+ OldSelectionChangedEvent: TNotifyEvent;
+begin
+ Result := False;
+ if not QuickFind then Exit;
+ if LeftPanel then begin
+ Entry := LeftQuickFindEntry;
+ AListView := LeftListView;
+ DataList := LeftPanelData;
+ end else begin
+ Entry := RightQuickFindEntry;
+ AListView := RightListView;
+ DataList := RightPanelData;
+ end;
+ if Key = GDK_BACKSPACE then begin
+ if Length(Entry.Text) > 0 then Entry.Text := AnsiToUTF8(Copy(UTF8ToAnsi(Entry.Text), 1, Length(UTF8ToAnsi(Entry.Text)) - 1));
+ NewText := UTF8ToAnsi(Entry.Text);
+ end else begin
+ s := UTF8ToANSI(UTF8Encode(WideChar(KeyValToUnicode(Key))));
+ if (Length(s) = 0) or (s = #0) then Exit;
+ NewText := UTF8ToAnsi(Entry.Text) + s;
+ end;
+ if (DataList.Count > 0) and (Length(NewText) > 0) then begin
+ Found := False;
+ for i := 0 to DataList.Count - 1 do begin
+ Data := DataList[AListView.ConvertFromSorted(i)];
+ if Assigned(Data) and (not Data^.UpDir) and (Pos(AnsiUpperCase(NewText), AnsiUpperCase(Data^.AName)) = 1) then begin
+ Found := True;
+ OldSelectionChangedEvent := AListView.OnSelectionChanged;
+ AListView.OnSelectionChanged := nil;
+ AListView.Selected := AListView.Items[AListView.ConvertFromSorted(i)];
+ AListView.Items[AListView.ConvertFromSorted(i)].SetCursor(0, False, False, 0, 0);
+ AListView.OnSelectionChanged := OldSelectionChangedEvent;
+ Break;
+ end;
+ end;
+ if Found then Entry.Text := AnsiToUTF8(NewText)
+ else Beep;
+ Result := True;
+ end;
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure TFMain.miVerifyChecksumsClick(Sender: TObject);
+var i, SelCount: integer;
+ b, LeftPanel: boolean;
+ AListView: TGTKListView;
+ Engine: TPanelEngine;
+ DataList: TList;
+begin
+ try
+ InternalLock;
+ if LeftListView.Focused then LeftPanel := True else
+ if RightListView.Focused then LeftPanel := False else
+ LeftPanel := LeftLastFocused;
+ if LeftPanel then begin
+ AListView := LeftListView;
+ Engine := LeftPanelEngine;
+ DataList := LeftPanelData;
+ end else begin
+ AListView := RightListView;
+ Engine := RightPanelEngine;
+ DataList := RightPanelData;
+ end;
+
+ SelCount := 0;
+ if DataList.Count > 0 then
+ for i := 0 to DataList.Count - 1 do
+ with PDataItem(DataList[i])^ do
+ if Selected and (not UpDir) and (not IsDir) then Inc(SelCount);
+ if (SelCount = 0) and ((not Assigned(AListView.Selected)) or PDataItem(AListView.Selected.Data)^.UpDir or PDataItem(AListView.Selected.Data)^.IsDir) then begin
+ Application.MessageBox(LANGYouMustSelectAValidFile, [mbOK], mbError, mbNone, mbOK);
+ Exit;
+ end;
+
+ try
+ FChecksum := TFChecksum.Create(Self);
+ FChecksum.Engine := Engine;
+ FChecksum.DataList := DataList;
+ FChecksum.AListView := AListView;
+ if SelCount = 0 then b := FChecksum.ProcessFile(IncludeTrailingPathDelimiter(Engine.Path) + string(PDataItem(AListView.Selected.Data)^.AName))
+ else begin
+ b := False;
+ for i := 0 to DataList.Count - 1 do
+ with PDataItem(DataList[i])^ do
+ if (not UpDir) and (not IsDir) and Selected then {$B+}
+ b := b or FChecksum.ProcessFile(IncludeTrailingPathDelimiter(Engine.Path) + string(AName));
+ {$B-}
+ end;
+ if b and (FChecksum.List.Count > 0) then FChecksum.Run;
+ finally
+ FChecksum.Free;
+ end;
+ finally
+ Application.ProcessMessages;
+ InternalLockInit(False);
+ end;
+end;
+
+(********************************************************************************************************************************)
+procedure TFMain.miCreateChecksumsClick(Sender: TObject);
+var i, SelCount: integer;
+ LeftPanel: boolean;
+ AListView: TGTKListView;
+ Engine: TPanelEngine;
+ DataList: TList;
+begin
+ try
+ InternalLock;
+ if LeftListView.Focused then LeftPanel := True else
+ if RightListView.Focused then LeftPanel := False else
+ LeftPanel := LeftLastFocused;
+ if LeftPanel then begin
+ AListView := LeftListView;
+ Engine := LeftPanelEngine;
+ DataList := LeftPanelData;
+ end else begin
+ AListView := RightListView;
+ Engine := RightPanelEngine;
+ DataList := RightPanelData;
+ end;
+
+ SelCount := 0;
+ if DataList.Count > 0 then
+ for i := 0 to DataList.Count - 1 do
+ with PDataItem(DataList[i])^ do
+ if Selected and (not UpDir) and (not IsDir) then Inc(SelCount);
+ if (SelCount = 0) and ((not Assigned(AListView.Selected)) or PDataItem(AListView.Selected.Data)^.UpDir or PDataItem(AListView.Selected.Data)^.IsDir) then begin
+ Application.MessageBox(LANGYouMustSelectAtLeastOneFileToCalculateChecksum, [mbOK], mbError, mbNone, mbOK);
+ Exit;
+ end;
+
+ try
+ FChecksumDruid := TFChecksumDruid.Create(Self);
+ Engine.ExplicitChDir(Engine.Path);
+ FChecksumDruid.Engine := Engine;
+ if Engine.Path = '/' then FChecksumDruid.DirName := 'root'
+ else FChecksumDruid.DirName := ExtractFileName(ExcludeTrailingPathDelimiter(Engine.Path));
+ if SelCount = 0 then FChecksumDruid.FileNames.Add(IncludeTrailingPathDelimiter(Engine.Path) + string(PDataItem(AListView.Selected.Data)^.AName))
+ else
+ for i := 0 to DataList.Count - 1 do
+ with PDataItem(DataList[i])^ do
+ if (not UpDir) and (not IsDir) and Selected then
+ FChecksumDruid.FileNames.Add(IncludeTrailingPathDelimiter(Engine.Path) + string(AName));
+ FChecksumDruid.Run;
+ finally
+ if FChecksumDruid.SeparateFileCheckBox.Checked
+ then DoRefresh(AListView = LeftListView, True, True)
+ else ChangingDir(AListView = LeftListView, Engine.Path, FChecksumDruid.FileNameEntry.Text, PDataItem(AListView.Selected.Data)^.AName);
+ DoRefresh(AListView <> LeftListView, True, True);
+ FChecksumDruid.Free;
+ Engine.ExplicitChDir('/');
+ end;
+ finally
+ Application.ProcessMessages;
+ InternalLockInit(False);
+ end;
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure TFMain.miMergeFilesClick(Sender: TObject);
+var LeftPanel, HasInitialCRC: boolean;
+ AListView: TGTKListView;
+ Engine: TPanelEngine;
+ FilePath, s, TargetName: string;
+ TargetCRC: LongWord;
+ TargetSize: Int64;
+ AWorkingThread: TWorkerThread;
+ AFProgress: TFProgress;
+begin
+ try
+ InternalLock;
+ if LeftListView.Focused then LeftPanel := True else
+ if RightListView.Focused then LeftPanel := False else
+ LeftPanel := LeftLastFocused;
+ if LeftPanel then begin
+ AListView := LeftListView;
+ Engine := LeftPanelEngine;
+ end else begin
+ AListView := RightListView;
+ Engine := RightPanelEngine;
+ end;
+
+ if (not Assigned(AListView.Selected)) or (not Assigned(AListView.Selected.Data)) or PDataItem(AListView.Selected.Data)^.IsDir or
+ PDataItem(AListView.Selected.Data)^.UpDir then
+ begin
+ Application.MessageBox(LANGYouMustSelectAValidFile, [mbOK], mbError, mbNone, mbOK);
+ Exit;
+ end;
+
+ FilePath := '';
+ try
+ FNewDir := TFNewDir.Create(Self);
+ FNewDir.Caption := LANGMergeCaption;
+ FNewDir.Label1.SetSizeRequest(500, -1);
+ FNewDir.Label1.Caption := Format(LANGMergeSAndAllFilesWithAscendingNamesToTheFollowingDirectory, [ANSIToUTF8(PDataItem(AListView.Selected.Data)^.AName)]);
+ if LeftPanel then FNewDir.Entry.Text := ANSIToUTF8(RightPanelEngine.Path)
+ else FNewDir.Entry.Text := ANSIToUTF8(LeftPanelEngine.Path);
+ FNewDir.Entry.SelectAll;
+ if FNewDir.Run = mbOK
+ then FilePath := UTF8ToAnsi(FNewDir.Entry.Text)
+ else Exit;
+ finally
+ FNewDir.Free;
+ end;
+ if FilePath = '' then Exit;
+
+ AWorkingThread := TWorkerThread.Create;
+ DebugMsg(['TFMain.miMergeFilesClick: Creating thread...']);
+ AFProgress := TFProgress.Create(Self);
+ try
+ AWorkingThread.ParamString1 := FilePath;
+ AWorkingThread.ParamString2 := IncludeTrailingPathDelimiter(Engine.Path) + PDataItem(AListView.Selected.Data)^.AName;
+ HasInitialCRC := CRCGetInfo(AWorkingThread.ParamString2, Engine, TargetName, TargetCRC, TargetSize);
+ AWorkingThread.ParamString3 := TargetName;
+ AWorkingThread.ParamBool1 := HasInitialCRC;
+ AWorkingThread.ParamLongWord1 := TargetCRC;
+ AWorkingThread.ParamInt64 := TargetSize;
+ AFProgress.SetNumBars(HasInitialCRC);
+ AFProgress.ProgressBar.Value := 0;
+ AFProgress.Label1.Caption := LANGMergeSC;
+ AWorkingThread.ProgressForm := AFProgress;
+ AWorkingThread.Engine := Engine;
+ AWorkingThread.LeftPanel := LeftPanel;
+ AWorkingThread.WorkerProcedure := MergeFilesWorker;
+ AWorkingThread.Resume;
+ AFProgress.ParentForm := FMain;
+ AFProgress.ShowModal;
+ ProcessProgressThread(AWorkingThread, AFProgress);
+ AFProgress.Close;
+ s := AWorkingThread.ParamString3;
+ finally
+ AFProgress.Free;
+ DebugMsg(['TFMain.miMergeFilesClick: Freeing thread...']);
+ AWorkingThread.Free;
+ end;
+
+ ChangingDir(LeftPanel, Engine.Path, s, PDataItem(AListView.Selected.Data)^.AName);
+ DoRefresh(not LeftPanel, True, True);
+ finally
+ Application.ProcessMessages;
+ InternalLockInit(False);
+ end;
+end;
+
+(********************************************************************************************************************************)
+procedure TFMain.miSplitFileClick(Sender: TObject);
+var LeftPanel: boolean;
+ AListView: TGTKListView;
+ Engine: TPanelEngine;
+ FilePath: string;
+ DeleteTarget: boolean;
+ MaxSize: Int64;
+ i: integer;
+ AWorkingThread: TWorkerThread;
+ AFProgress: TFProgress;
+begin
+ try
+ InternalLock;
+ if LeftListView.Focused then LeftPanel := True else
+ if RightListView.Focused then LeftPanel := False else
+ LeftPanel := LeftLastFocused;
+ if LeftPanel then begin
+ AListView := LeftListView;
+ Engine := LeftPanelEngine;
+ end else begin
+ AListView := RightListView;
+ Engine := RightPanelEngine;
+ end;
+
+ if (not Assigned(AListView.Selected)) or (not Assigned(AListView.Selected.Data)) or PDataItem(AListView.Selected.Data)^.IsDir or
+ PDataItem(AListView.Selected.Data)^.UpDir then
+ begin
+ Application.MessageBox(LANGYouMustSelectAValidFile, [mbOK], mbError, mbNone, mbOK);
+ Exit;
+ end;
+
+ FilePath := '';
+ try
+ FSplitFile := TFSplitFile.Create(Self);
+ FSplitFile.Label1.Caption := Format(LANGSplitTheFileSToDirectory, [ANSIToUTF8(PDataItem(AListView.Selected.Data)^.AName)]);
+ FSplitFile.Label1.UseUnderline := True;
+ if LeftPanel then FSplitFile.Entry.Text := AnsiToUtf8(RightPanelEngine.Path)
+ else FSplitFile.Entry.Text := AnsiToUtf8(LeftPanelEngine.Path);
+ FSplitFile.Entry.SelectAll;
+ if FSplitFile.Run = mbOK
+ then FilePath := UTF8ToAnsi(FSplitFile.Entry.Text)
+ else Exit;
+ DeleteTarget := FSplitFile.DeleteTargetCheckBox.Checked;
+ MaxSize := 0;
+ for i := 1 to Length(SplitConsts) do
+ if Trim(AnsiUpperCase(SplitConsts[i].Title)) = Trim(AnsiUpperCase(FSplitFile.SizeCombo.Entry.Text)) then
+ begin
+ MaxSize := SplitConsts[i].PartSize;
+ Break;
+ end;
+ if MaxSize = 0 then MaxSize := GetStrSize(UTF8ToANSI(FSplitFile.SizeCombo.Entry.Text));
+ finally
+ FSplitFile.Free;
+ end;
+ if FilePath = '' then Exit;
+
+ AWorkingThread := TWorkerThread.Create;
+ DebugMsg(['TFMain.miSplitFileClick: Creating thread...']);
+ AFProgress := TFProgress.Create(Self);
+ try
+ AWorkingThread.ParamString1 := IncludeTrailingPathDelimiter(Engine.Path) + PDataItem(AListView.Selected.Data)^.AName;
+ AWorkingThread.ParamString2 := FilePath;
+ AWorkingThread.ParamBool1 := DeleteTarget;
+ AWorkingThread.ParamInt64 := MaxSize;
+ AFProgress.SetNumBars(MaxSize > 0);
+ AFProgress.ProgressBar.Value := 0;
+ AFProgress.Label1.Caption := LANGSplitSC;
+ AWorkingThread.ProgressForm := AFProgress;
+ AWorkingThread.Engine := Engine;
+ AWorkingThread.LeftPanel := LeftPanel;
+ AWorkingThread.WorkerProcedure := SplitFilesWorker;
+ AWorkingThread.Resume;
+ AFProgress.ParentForm := FMain;
+ AFProgress.ShowModal;
+ ProcessProgressThread(AWorkingThread, AFProgress);
+ AFProgress.Close;
+ finally
+ AFProgress.Free;
+ DebugMsg(['TFMain.miSplitFileClick: Freeing thread...']);
+ AWorkingThread.Free;
+ end;
+
+ DoRefresh(LeftPanel, True, True);
+ DoRefresh(not LeftPanel, True, True);
+ finally
+ Application.ProcessMessages;
+ InternalLockInit(False);
+ end;
+end;
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure TFMain.SwitchOtherPanel(LeftPanel, RequestNewAltO: boolean);
+var AListView: TGTKListView;
+ SrcEngine, OrigSrcEngine, TargetEngine: TPanelEngine;
+ s: string;
+ DontShowAgain: boolean;
+begin
+ if LeftPanel then begin
+ AListView := LeftListView;
+ SrcEngine := LeftPanelEngine;
+ TargetEngine := RightPanelEngine;
+ end else begin
+ AListView := RightListView;
+ SrcEngine := RightPanelEngine;
+ TargetEngine := LeftPanelEngine;
+ end;
+ OrigSrcEngine := SrcEngine;
+
+ if not (SrcEngine is TLocalTreeEngine) then begin
+ if ConfSwitchOtherPanelBehaviour < 0 then begin
+ MessageBoxShowOnce(LANGSwitchOtherPanelWarning, LANGDontShowAgain, DontShowAgain, [mbOK], mbWarning, mbOK, mbOK);
+ if DontShowAgain then begin
+ ConfSwitchOtherPanelBehaviour := 1;
+ WriteMainGUISettings;
+ end;
+ end;
+// Exit;
+ end;
+
+ // don't change dir in VFS engines
+ while not (SrcEngine is TLocalTreeEngine) do SrcEngine := SrcEngine.ParentEngine;
+ while not (TargetEngine is TLocalTreeEngine) do TargetEngine := TargetEngine.ParentEngine;
+
+ if (not ConfNewStyleAltO) and (not RequestNewAltO) then begin
+ s := ExcludeTrailingPathDelimiter(SrcEngine.Path);
+ if OrigSrcEngine = SrcEngine then begin
+ if (not Assigned(AListView.Selected)) or (not Assigned(AListView.Selected.Data)) or PDataItem(AListView.Selected.Data)^.UpDir or
+ (not PDataItem(AListView.Selected.Data)^.IsDir)
+ then begin if Length(s) > 1 then s := IncludeTrailingPathDelimiter(Copy(s, 1, LastDelimiter(PathDelim, s))); end
+ else s := IncludeTrailingPathDelimiter(IncludeTrailingPathDelimiter(s) + PDataItem(AListView.Selected.Data)^.AName);
+ end;
+ if IncludeTrailingPathDelimiter(TargetEngine.Path) <> s then begin
+ if LeftPanel then RightPanelEngine := TargetEngine
+ else LeftPanelEngine := TargetEngine;
+ ChangingDir(not LeftPanel, s);
+ end;
+ // Move one item down
+ if (OrigSrcEngine = SrcEngine) and Assigned(AListView.Selected) and (AListView.ConvertToSorted(AListView.Selected.Index) < AListView.Items.Count - 1) then begin
+ AListView.Selected := AListView.Items[AListView.ConvertFromSorted(AListView.ConvertToSorted(AListView.Selected.Index) + 1)];
+ AListView.Selected.SetCursor(0, False, False, 0, 0);
+ end;
+ end else begin
+ if IncludeTrailingPathDelimiter(TargetEngine.Path) <> IncludeTrailingPathDelimiter(SrcEngine.Path) then begin
+ if LeftPanel then RightPanelEngine := TargetEngine
+ else LeftPanelEngine := TargetEngine;
+ ChangingDir(not LeftPanel, SrcEngine.Path);
+ end;
+ end;
+end;
+
+procedure TFMain.miShowDotFilesClick(Sender: TObject);
+begin
+ ConfShowDotFiles := miShowDotFiles.Checked;
+ DoRefresh(True, True, True);
+ DoRefresh(False, True, True);
+end;
+
+procedure TFMain.F3F4ButtonClick(Sender: TObject);
+var LeftPanel: boolean;
+ AListView: TGTKListView;
+begin
+ try
+ InternalLock;
+ if LeftListView.Focused then LeftPanel := True else
+ if RightListView.Focused then LeftPanel := False else
+ LeftPanel := LeftLastFocused;
+ if LeftPanel then begin
+ AListView := LeftListView;
+ end else begin
+ AListView := RightListView;
+ end;
+ if (not Assigned(AListView.Selected)) or (not Assigned(AListView.Selected.Data)) or PDataItem(AListView.Selected.Data)^.IsDir or
+ PDataItem(AListView.Selected.Data)^.UpDir then
+ begin
+ Application.MessageBox(LANGYouMustSelectAValidFile, [mbOK], mbError, mbNone, mbOK);
+ Exit;
+ end;
+ EditViewFile(LeftPanel, AListView, (Sender = F3Button) or ((Sender is TGTKMenuItem) and (Integer((Sender as TGTKMenuItem).Data) = 200)), False);
+ finally
+ Application.ProcessMessages;
+ InternalLockInit(False);
+ end;
+end;
+
+procedure TFMain.EditViewFile(LeftPanel: boolean; AListView: TGTKListView; View, NewFile: boolean);
+var ANewDir: TFNewDir;
+ Engine: TPanelEngine;
+ AFile, s: string;
+ Stat: PDataItemSL;
+ Error, x: integer;
+// AViewer: TViewerThread;
+ AViewer: TFViewer;
+begin
+ try
+ InternalLock;
+ if LeftPanel then Engine := LeftPanelEngine
+ else Engine := RightPanelEngine;
+ if NewFile then begin
+ ANewDir := TFNewDir.Create(Self);
+ try
+ ANewDir.Caption := LANGEdit;
+ ANewDir.Label1.Caption := LANGEnterFilenameToEdit;
+ ANewDir.Label1.UseUnderline := True;
+ ANewDir.Label1.FocusControl := ANewDir.Entry;
+ if Assigned(AListView.Selected) and Assigned(AListView.Selected.Data) and (not PDataItem(AListView.Selected.Data)^.IsDir) and
+ (not PDataItem(AListView.Selected.Data)^.UpDir)
+ then ANewDir.Entry.Text := AnsiToUTF8(PDataItem(AListView.Selected.Data)^.AName)
+ else ANewDir.Entry.Text := '';
+ if Length(ANewDir.Entry.Text) > 0 then ANewDir.Entry.SelectAll;
+ if ANewDir.Run <> mbOK then Exit;
+ AFile := IncludeTrailingPathDelimiter(Engine.Path) + UTF8ToAnsi(ANewDir.Entry.Text);
+ finally
+ ANewDir.Free;
+ end;
+ end else AFile := IncludeTrailingPathDelimiter(Engine.Path) + PDataItem(AListView.Selected.Data)^.AName;
+
+ EditViewFileInternal(Self, AFile, Engine, View, NewFile);
+
+ finally
+ Application.ProcessMessages;
+ InternalUnLock;
+ end;
+end;
+
+procedure TFMain.EditViewFileInternal(ParentWindow: TGTKControl; Filename: string; Engine: TPanelEngine; View, NewFile: boolean);
+var s: string;
+ Stat: PDataItemSL;
+ Error, x: integer;
+// AViewer: TViewerThread;
+ AViewer: TFViewer;
+begin
+ Stat := Engine.GetFileInfoSL(Filename);
+ if Assigned(Stat) and (Stat^.Size > ConfEditViewFileSizeLimit) and
+ (Application.MessageBox(LANGTheFileYouAreTryingToOpenIsQuiteBig, [mbYes, mbNo], mbWarning, mbNone, mbNo) = mbNo)
+ then Exit;
+
+ if View then s := ConfViewer
+ else s := ConfEditor;
+
+ if (Engine is TVFSEngine) and (not NewFile) then
+ if not HandleRunFromArchive(Filename, Engine, s, '', True) then Exit;
+
+ if ConfUseInternalViewer and View then begin
+(* AViewer := TViewerThread.Create(Self);
+ if not AViewer.LoadFile(AFile) then begin
+ Application.MessageBox(Format('Cannot load file ''%s''. Please check the permissions.', [ANSIToUTF8(AFile)]), [mbOK], mbError);
+ AViewer.Free;
+ end else AViewer.Resume; *)
+ AViewer := TFViewer.Create(ParentWindow);
+ if not AViewer.LoadFile(Filename) then begin
+ Application.MessageBox(Format(LANGCannotLoadFile, [ANSIToUTF8(Filename)]), [mbOK], mbError, mbNone, mbOK);
+ AViewer.Free;
+ end else begin
+// gtk_window_set_transient_for(PGtkWindow(AViewer.FWidget), PGtkWindow(ParentWindow.FWidget));
+ AViewer.Show;
+ end;
+ end else begin
+ if View then x := ConfViewerTerminalBehaviour
+ else x := ConfEditorTerminalBehaviour;
+ if not ExecuteProgram(Format('%s %s', [s, QuoteStr(Filename)]), ExtractFilePath(Filename), x = 0, x = 1, Error) then
+ Application.MessageBox(Format(LANGCannotExecuteSPleaseCheckTheConfiguration, [ANSIToUTF8(s)]), [mbOK], mbError, mbNone, mbOK);
+ end;
+end;
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure TFMain.miFileTypesClick(Sender: TObject);
+var x: pointer;
+begin
+ try
+ InternalLock;
+ FFileTypeSettings := TFFileTypeSettings.Create(Self);
+ ReadAssoc;
+ FFileTypeSettings.AssignAssocList(AssocList);
+ FFileTypeSettings.FillList;
+ if FFileTypeSettings.Run = mbOK then begin
+ RemoveIconRefs(FFileTypeSettings.IntAssocList, True);
+ RemoveIconRefs(AssocList, False);
+ FFileTypeSettings.CleanItems;
+ x := AssocList;
+ AssocList := FFileTypeSettings.IntAssocList;
+ FFileTypeSettings.IntAssocList := x;
+ RecreateIcons(AssocList);
+ DoRefresh(True, True, True);
+ DoRefresh(False, True, True);
+ WriteAssoc;
+ end;
+ finally
+ FFileTypeSettings.Free;
+ Application.ProcessMessages;
+ InternalLockInit(False);
+ end;
+end;
+
+procedure TFMain.RunFile(Path: string; Engine: TPanelEngine; CustomAction: integer);
+var Command, Ext, FileTypeDesc: string;
+ i, j, Last, ac: integer;
+ b, AutodetectGUI, RunInTerminal: boolean;
+ Stat: PDataItemSL;
+ s: string;
+begin
+ try
+ InternalLock;
+ Command := '';
+ FileTypeDesc := '';
+ AutodetectGUI := True;
+ RunInTerminal := False;
+ if (Pos('.', ExtractFileName(Path)) > 0) and (LastDelimiter('.', ExtractFileName(Path)) < Length(ExtractFileName(Path))) then begin
+ Ext := ANSIUpperCase(Trim(Copy(ExtractFileName(Path), LastDelimiter('.', ExtractFileName(Path)) + 1, Length(ExtractFileName(Path)) - LastDelimiter('.', ExtractFileName(Path)))));
+ // Search in the association list
+ if AssocList.Count > 0 then
+ for i := 0 to AssocList.Count - 1 do
+ with TFileAssoc(AssocList[i]) do
+ if (ActionList.Count > 0) and (Length(Trim(Extensions)) > 0) then begin
+ b := False;
+ if Pos(';', Extensions) = 0 then b := ANSIUpperCase(Trim(Extensions)) = Ext else begin
+ Last := 0;
+ for j := 1 to Length(Extensions) do
+ if Extensions[j] = ';' then begin
+ if ANSIUpperCase(Trim(Copy(Extensions, Last + 1, j - Last - 1))) = Ext then begin
+ b := True;
+ Break;
+ end;
+ Last := j;
+ end;
+ if not b then b := ANSIUpperCase(Trim(Copy(Extensions, LastDelimiter(';', Extensions) + 1, Length(Extensions) - LastDelimiter(';', Extensions)))) = Ext;
+ end;
+ if b then begin
+ FileTypeDesc := FileTypeName;
+ if (CustomAction > ActionList.Count - 1) or (CustomAction = -1)
+ then ac := DefaultAction
+ else ac := CustomAction;
+ if ac > ActionList.Count - 1 then ac := 0;
+ if ActionList.Count >= ac then begin
+ Command := Trim(TAssocAction(ActionList[ac]).ActionCommand);
+ AutodetectGUI := TAssocAction(ActionList[ac]).AutodetectGUI;
+ RunInTerminal := TAssocAction(ActionList[ac]).RunInTerminal;
+ end;
+ if Command <> '' then Break;
+ end;
+ end;
+ end;
+
+ // Association not found, try to execute file itself
+ if Command = '' then begin
+ DebugMsg(['File association not found']);
+ if CustomAction > -1 then begin
+ DebugMsg(['Some strange error occured...']);
+ Exit;
+ end;
+ Stat := Engine.GetFileInfoSL(Path);
+ if Assigned(Stat) and Stat^.IsExecutable then begin
+ b := True;
+ if Engine is TVFSEngine then b := HandleRunFromArchive(Path, Engine, Command, FileTypeDesc, False); // not a local engine, extract to local first
+ if b then begin
+ Libc.__chdir(PChar(ExtractFilePath(Path)));
+ b := ExecuteProgram(QuoteStr(Path), ExtractFilePath(Path), AutodetectGUI, RunInTerminal, i);
+ Libc.__chdir(PChar('/'));
+ end else b := True; // Mask cancelled extraction from VFS
+ end else begin
+ if Engine is TVFSEngine then begin
+ HandleRunFromArchive(Path, Engine, Command, FileTypeDesc, False);
+ b := True;
+ end else
+ if Application.MessageBox(Format(LANGThereIsNoApplicationAssociatedWithS, [ANSIToUTF8(ExtractFileName(Path))]), [mbYes, mbNo], mbQuestion, mbNone, mbNo) = mbYes
+ then miFileTypesClick(Self);
+ Exit;
+ end;
+
+ end else begin
+ DebugMsg(['File association found: ', Command]);
+ s := Command;
+ b := True;
+ if Engine is TVFSEngine then b := HandleRunFromArchive(Path, Engine, Command, FileTypeDesc, False); // not a local engine, extract to local first
+ if Pos('%s', s) > 0 then s := Format(s, ['''' + QuoteStr(Path) + ''''])
+ else s := Format('%s %s', [s, QuoteStr(Path)]);
+// DebugMsg(['execute: ', s, ' , ', Command, ' , ', QuoteStr(Path)]);
+ if b then begin
+ Libc.__chdir(PChar(ExtractFilePath(Path)));
+ b := ExecuteProgram(s, ExtractFilePath(Path), AutodetectGUI, RunInTerminal, i);
+ Libc.__chdir(PChar('/'));
+ end else b := True; // Mask cancelled extraction from VFS
+ end;
+ if not b then Application.MessageBox(Format(LANGCannotExecuteSPleaseCheckTheConfiguration, [ANSIToUTF8(s)]), [mbOK], mbError, mbNone, mbOK);
+ finally
+ Application.ProcessMessages;
+ InternalUnLock;
+ end;
+end;
+
+procedure TFMain.CommandLineComboKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+var Error, OldPos, i: integer;
+ AListView: TGTKListView;
+ Engine: TPanelEngine;
+ s, s2, Orig: string;
+begin
+ try
+ InternalLock;
+ case Key of
+ GDK_RETURN, GDK_KP_ENTER: begin
+ Accept := False;
+ if LeftLastFocused then Engine := LeftPanelEngine
+ else Engine := RightPanelEngine;
+ // Insert filename
+ if (ssAlt in Shift) or (ssCtrl in Shift) then begin
+ if LeftLastFocused then AListView := LeftListView
+ else AListView := RightListView;
+ if Assigned(AListView.Selected) and Assigned(AListView.Selected.Data) and (not PDataItem(AListView.Selected.Data)^.UpDir) then begin
+ s2 := QuoteStr(String(PDataItem(AListView.Selected.Data)^.AName)) + ' ';
+ if Length(CommandLineCombo.Entry.Text) = 0 then begin
+ CommandLineCombo.Entry.Text := Format('./%s', [s2]);
+ CommandLineCombo.Entry.CursorPosition := Length(s2);
+ end else begin
+ OldPos := CommandLineCombo.Entry.CursorPosition;
+ s := CommandLineCombo.Entry.Text;
+ Insert(s2, s, OldPos + 1);
+ CommandLineCombo.Entry.Text := s;
+ CommandLineCombo.Entry.CursorPosition := OldPos + Length(s2);
+ end;
+ end;
+ Exit;
+ end;
+
+ Orig := Trim(CommandLineCombo.Entry.Text);
+ if Length(Orig) > 0 then begin
+ if ANSIUpperCase(Orig) = 'CD' then begin
+ if LeftLastFocused then PathButtonClick(LeftHomeButton)
+ else PathButtonClick(RightHomeButton);
+ end else
+ if (Length(Orig) > 3) and (ANSIUpperCase(Copy(Orig, 1, 3)) = 'CD ') then begin
+ ChangingDir(LeftLastFocused, ProcessPattern(Engine, Copy(Orig, 4, Length(Orig) - 3), Engine.Path, '', True));
+ end else begin
+ while not (Engine is TLocalTreeEngine) do Engine := Engine.ParentEngine;
+ ChDir(Engine.Path);
+ if not ExecuteProgram(Orig, Engine.Path, ConfCmdLineTerminalBehaviour = 0 , ConfCmdLineTerminalBehaviour = 1, Error) then
+ Application.MessageBox(LANGErrorExecutingCommand, [mbOK], mbError, mbNone, mbOK);
+ ChDir('/');
+ end;
+ end;
+ CommandLineCombo.Entry.Text := '';
+ if LeftLastFocused then LeftListView.SetFocus
+ else RightListView.SetFocus;
+
+ if Length(Orig) > 0 then begin
+ SaveItemToHistory(Orig, CommandLineHistory);
+ if CommandLineCombo.Items.Count > 0 then
+ for i := CommandLineCombo.Items.Count - 1 downto 0 do
+ CommandLineCombo.Items.Delete(i);
+ if CommandLineHistory.Count > 0 then
+ for i := 0 to CommandLineHistory.Count - 1 do
+ CommandLineCombo.Items.Append(CommandLineHistory[i]);
+ CommandLineCombo.Entry.Text := '';
+ end;
+ end;
+ GDK_Down, GDK_Up:
+ begin
+ Accept := False;
+ if LeftLastFocused then AListView := LeftListView
+ else AListView := RightListView;
+ if (not (([ssCtrl] = Shift) and (Key = GDK_Up))) and (
+ ((Key = GDK_Down) and (AListView.ConvertToSorted(AListView.Selected.Index) < AListView.Items.Count - 1)) or
+ ((Key = GDK_Up) and (AListView.ConvertToSorted(AListView.Selected.Index) > 0))) then
+ begin
+ AListView.Selected := AListView.Items[AListView.ConvertFromSorted(AListView.ConvertToSorted(AListView.Selected.Index) + (Ord(Key = GDK_Down) * 2) - 1)];
+ AListView.Selected.SetCursor(0, False, False, 0, 0);
+ end;
+ AListView.SetFocus;
+ end;
+ GDK_ESCAPE: begin
+ Accept := False;
+ CommandLineCombo.Entry.Text := '';
+ if LeftLastFocused then LeftListView.SetFocus
+ else RightListView.SetFocus;
+ end;
+ GDK_TAB: begin
+ Accept := False;
+ if LeftLastFocused then RightListView.SetFocus
+ else LeftListView.SetFocus;
+ end;
+ GDK_P, GDK_Capital_P: if ((Shift = [ssAlt]) or (Shift = [ssCtrl])) and (CommandLineHistory.Count > 0) then
+ begin
+ Accept := False;
+ Orig := Trim(CommandLineCombo.Entry.Text);
+ i := CommandLineHistory.IndexOf(Orig);
+ if i < 0 then begin
+ SavedCmdLine := Orig;
+ i := 0;
+ end else
+ if CommandLineHistory.Count > i + 1 then Inc(i);
+ CommandLineCombo.Entry.Text := CommandLineHistory[i];
+ CommandLineCombo.Entry.SetFocus;
+ CommandLineCombo.Entry.SelectRegion(Length(CommandLineCombo.Entry.Text), Length(CommandLineCombo.Entry.Text));
+ end else if not CommandLineCombo.Entry.Focused then ActivateCommandLine(Key);
+ GDK_N, GDK_Capital_N: if ((Shift = [ssAlt]) or (Shift = [ssCtrl])) and (CommandLineHistory.Count > 0) then
+ begin
+ Accept := False;
+ Orig := Trim(CommandLineCombo.Entry.Text);
+ i := CommandLineHistory.IndexOf(Orig);
+ if i < 0 then Exit else
+ if i = 0 then begin
+ s := SavedCmdLine;
+ SavedCmdLine := '';
+ end else
+ if CommandLineHistory.Count > i then s := CommandLineHistory[i - 1];
+ CommandLineCombo.Entry.Text := s;
+ CommandLineCombo.Entry.SetFocus;
+ CommandLineCombo.Entry.SelectRegion(Length(CommandLineCombo.Entry.Text), Length(CommandLineCombo.Entry.Text));
+ end else if not CommandLineCombo.Entry.Focused then ActivateCommandLine(Key);
+ GDK_A, GDK_Capital_A: if (Shift = [ssAlt]) or (Shift = [ssCtrl]) then
+ begin
+ Accept := False;
+ if LeftLastFocused then Engine := LeftPanelEngine
+ else Engine := RightPanelEngine;
+ s2 := QuoteStr(IncludeTrailingPathDelimiter(Engine.Path));
+ OldPos := CommandLineCombo.Entry.CursorPosition;
+ s := CommandLineCombo.Entry.Text;
+ Insert(s2, s, OldPos + 1);
+ CommandLineCombo.Entry.SetFocus;
+ CommandLineCombo.Entry.Text := s;
+ CommandLineCombo.Entry.CursorPosition := OldPos + Length(s2);
+ end else if not CommandLineCombo.Entry.Focused then ActivateCommandLine(Key);
+ end;
+ finally
+ Application.ProcessMessages;
+ InternalUnLock;
+ end;
+end;
+
+function TFMain.ActivateCommandLine(Key: word; const ActualPosition: boolean = False): boolean;
+var s, s2: string;
+ OldPos: integer;
+begin
+ Result := False;
+ s := UTF8Encode(WideChar(KeyValToUnicode(Key)));
+ if (Length(s) = 0) or (s = #0) then Exit;
+ if ActualPosition and CommandLineCombo.Entry.Focused then begin
+ OldPos := CommandLineCombo.Entry.CursorPosition;
+ s2 := CommandLineCombo.Entry.Text;
+ Insert(s, s2, Length(ANSILeftStr(s2, OldPos)) + 1);
+ CommandLineCombo.Entry.Text := s2;
+ CommandLineCombo.Entry.CursorPosition := OldPos + 1;
+ end else begin
+ CommandLineCombo.Entry.Text := CommandLineCombo.Entry.Text + s;
+ CommandLineCombo.Entry.SetFocus;
+ CommandLineCombo.Entry.SelectRegion(Length(CommandLineCombo.Entry.Text), Length(CommandLineCombo.Entry.Text));
+ end;
+ Result := True;
+end;
+
+procedure TFMain.FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+var AListView: TGTKListView;
+begin
+ if CommandLineCombo.Entry.Focused then CommandLineComboKeyDown(Sender, Key, Shift, Accept);
+ if Editing and (Key = GDK_ESCAPE) then begin
+ Editing := False;
+ if LeftLastFocused then AListView := LeftListView
+ else AListView := RightListView;
+ AListView.Columns[0].SetProperty('editable', 0);
+ end;
+end;
+
+procedure TFMain.InactiveItemsTimerTimer(Sender: TObject);
+
+ procedure Redraw(AListView: TGTKListView; tree_view: PGtkTreeView);
+ var TreePath: PGtkTreePath;
+ Iter: TGtkTreeIter;
+ Rect: TGdkRectangle;
+ PixBuf, Icon: PGdkPixbuf;
+ cell_width, cell_height: integer;
+ begin
+ if (csDestroying in ComponentState) or (AListView = nil) or (AListView.FSelection = nil) then Exit;
+ if not gtk_tree_selection_get_selected(AListView.FSelection, nil, @Iter) then Exit;
+ TreePath := gtk_tree_model_get_path(gtk_tree_view_get_model(tree_view), @Iter);
+ if not Assigned(TreePath) then Exit;
+ gtk_tree_view_get_background_area(tree_view, TreePath, AListView.Columns[0].FColumn, @Rect);
+ gtk_tree_path_free(TreePath);
+ gtk_cell_renderer_get_size(AListView.Columns[0].FPixbufRenderer, PGtkWidget(tree_view), nil, nil, nil, @cell_width, @cell_height);
+ Icon := PDataItem(AListView.Selected.Data)^.Icon;
+ Rect.width := Rect.x + cell_width + AListView.Columns[0].FRenderer^.xpad * 2 + 1;
+ PixBuf := gdk_pixbuf_new(GDK_COLORSPACE_RGB, True, 8, Rect.width, Rect.height);
+ gdk_pixbuf_fill(PixBuf, InactiveItemBGColorNum);
+ gdk_pixbuf_render_to_drawable_alpha(PixBuf, PGdkDrawable(gtk_tree_view_get_bin_window(tree_view)), 0, 0, Rect.x, Rect.y,
+ Rect.width, Rect.height, GDK_PIXBUF_ALPHA_FULL, 0, GDK_RGB_DITHER_NORMAL, 0, 0);
+ gdk_pixbuf_unref(PixBuf);
+ gdk_pixbuf_render_to_drawable_alpha(Icon, PGdkDrawable(gtk_tree_view_get_bin_window(tree_view)), 0, 0,
+ Rect.x + AListView.Columns[0].FRenderer^.xpad, Rect.y + Rect.height div 2 - (16 div 2),
+ 16, 16, GDK_PIXBUF_ALPHA_FULL, 0, GDK_RGB_DITHER_NORMAL, 0, 0);
+ end;
+
+
+begin
+ if Assigned(Sender) and Assigned(InactiveItemsTimer) and Assigned(LeftListView) and Assigned(RightListView) and
+ (not (csDestroying in ComponentState)) then
+ try
+ InactiveItemsTimer.Enabled := False;
+ if RedrawLeftInactive and (not LeftListView.Focused) // and (not ConfInactiveItemDefaultColors)
+ then Redraw(LeftListView, PGtkTreeView(LeftListView.FWidget));
+ if RedrawRightInactive and (not RightListView.Focused) // and (not ConfInactiveItemDefaultColors)
+ then Redraw(RightListView, PGtkTreeView(RightListView.FWidget));
+ RedrawLeftInactive := False;
+ RedrawRightInactive := False;
+ except end;
+end;
+
+
+(********************************************************************************************************************************)
+function TFMain.OldGTKConvertToSorted(Sender: TObject; const Index: integer): integer;
+var DataList, List: TList;
+ i: integer;
+ AListView: TGTKListView;
+begin
+ Result := -1;
+ if Sender = LeftListView then begin
+ DataList := LeftPanelData;
+ AListView := LeftListView;
+ end else begin
+ DataList := RightPanelData;
+ AListView := RightListView;
+ end;
+ List := nil; // Silent compiler warnings
+ if Assigned(DataList) and (DataList.Count > 0) then
+ try
+ List := TList.Create;
+ for i := 0 to DataList.Count - 1 do List.Add(DataList[i]);
+ if (List.Count > 1) and (AListView.SortOrder <> soNone) then
+ SortDataList(List, AListView.SortOrder = soAscending, AListView.SortColumnID);
+ Result := List.IndexOf(DataList[Index]);
+ finally
+ List.Free;
+ end;
+end;
+
+function TFMain.OldGTKConvertFromSorted(Sender: TObject; const Index: integer): integer;
+var DataList, List: TList;
+ i: integer;
+ AListView: TGTKListView;
+begin
+ Result := -1;
+ if Sender = LeftListView then begin
+ DataList := LeftPanelData;
+ AListView := LeftListView;
+ end else begin
+ DataList := RightPanelData;
+ AListView := RightListView;
+ end;
+ List := nil; // Silent compiler warnings
+ if Assigned(DataList) and (DataList.Count > 0) then
+ try
+ List := TList.Create;
+ for i := 0 to DataList.Count - 1 do List.Add(DataList[i]);
+ if (List.Count > 1) and (AListView.SortOrder <> soNone) then
+ SortDataList(List, AListView.SortOrder = soAscending, AListView.SortColumnID);
+ Result := DataList.IndexOf(List[Index]);
+ finally
+ List.Free;
+ end;
+end;
+
+(********************************************************************************************************************************)
+procedure TFMain.SplitterPopupMenuClick(Sender: TObject);
+begin
+ if not (Sender is TGTKMenuItem) then Exit;
+ ConfPanelSep := Integer((Sender as TGTKMenuItem).Data);
+ PanelSeparator.Position := Round(Width * (ConfPanelSep / 100));
+end;
+
+(********************************************************************************************************************************)
+procedure TFMain.miChangePermissionsClick(Sender: TObject);
+var LeftPanel: boolean;
+ AListView: TGTKListView;
+ Engine: TPanelEngine;
+ DataList: TList;
+ i: longint;
+ SelCount: longint;
+ AFile, NextItem1, NextItem2: string;
+ Stat: PDataItemSL;
+ UsrManager: TUserManager;
+ AWorkingThread: TWorkerThread;
+ AFProgress: TFProgress;
+begin
+ try
+ InternalLock;
+ if LeftListView.Focused then LeftPanel := True else
+ if RightListView.Focused then LeftPanel := False else
+ LeftPanel := LeftLastFocused;
+ if LeftPanel then begin
+ AListView := LeftListView;
+ Engine := LeftPanelEngine;
+ DataList := LeftPanelData;
+ end else begin
+ AListView := RightListView;
+ Engine := RightPanelEngine;
+ DataList := RightPanelData;
+ end;
+
+ SelCount := 0;
+ if DataList.Count > 0 then
+ for i := 0 to DataList.Count - 1 do
+ with PDataItem(DataList[i])^ do
+ if Selected and (not UpDir) then Inc(SelCount);
+ if (SelCount = 0) and ((not Assigned(AListView.Selected)) or PDataItem(AListView.Selected.Data)^.UpDir) then begin
+ Application.MessageBox(LANGNoFilesSelected, [mbOK], mbInfo, mbNone, mbOK);
+ Exit;
+ end;
+
+ AFile := '';
+ if SelCount = 0 then AFile := PDataItem(AListView.Selected.Data)^.AName else
+ for i := 0 to DataList.Count - 1 do
+ with PDataItem(DataList[i])^ do
+ if Selected and (not UpDir) then begin
+ AFile := AName;
+ Break;
+ end;
+
+ // Handle password
+ if (Engine is TVFSEngine) and TVFSEngine(Engine).GetPasswordRequired and (Length(TVFSEngine(Engine).Password) < 1) then
+ if not HandleSetPassword(Engine) then Exit;
+
+ if AFile <> '' then
+ try
+ FChmod := TFChmod.Create(Self);
+ Stat := Engine.GetFileInfoSL(IncludeTrailingPathDelimiter(Engine.Path) + AFile);
+ if not Assigned(Stat) then Exit;
+ UsrManager := TUserManager.Create;
+ try
+ FChmod.AssignMode(Stat^.Mode, AFile, UsrManager.GetUserName(Stat^.UID), UsrManager.GetGroupName(Stat^.GID));
+ finally
+ UsrManager.Free;
+ end;
+ if FChmod.Run = mbOK then begin
+ FindNextSelected(AListView, DataList, NextItem1, NextItem2);
+
+ AWorkingThread := TWorkerThread.Create;
+ AFProgress := TFProgress.Create(Self);
+ try
+ AFProgress.SetNumBars(False);
+ AFProgress.ProgressBar.Value := 0;
+ AFProgress.Label1.Caption := LANGChmodProgress;
+ AWorkingThread.ProgressForm := AFProgress;
+ if Assigned(AListView.Selected) then AWorkingThread.SelectedItem := AListView.Selected.Data;
+ AWorkingThread.ParamBool1 := FChmod.RecursiveCheckButton.Checked;
+ AWorkingThread.ParamInt1 := FChmod.RecursiveOptionMenu.ItemIndex;
+ AWorkingThread.ParamCardinal1 := FChmod.LastMode;
+ AWorkingThread.Engine := Engine;
+ AWorkingThread.LeftPanel := LeftPanel;
+ AWorkingThread.DataList := DataList;
+ AWorkingThread.WorkerProcedure := ChmodFilesWorker;
+ AWorkingThread.Resume;
+ AFProgress.ParentForm := FMain;
+ if (SelCount > 1) or FChmod.RecursiveCheckButton.Checked then AFProgress.ShowModal;
+ ProcessProgressThread(AWorkingThread, AFProgress);
+ AFProgress.Close;
+ finally
+ AFProgress.Free;
+ AWorkingThread.Free;
+ end;
+ ChangingDir(LeftPanel, Engine.Path, NextItem1, NextItem2);
+ DoRefresh(not LeftPanel, True, True);
+ end;
+ finally
+ FChmod.Free;
+ end;
+ finally
+ Application.ProcessMessages;
+ InternalLockInit(False);
+ end;
+end;
+
+procedure TFMain.miChangeOwnerClick(Sender: TObject);
+var LeftPanel: boolean;
+ AListView: TGTKListView;
+ Engine: TPanelEngine;
+ DataList: TList;
+ i: integer;
+ SelCount: longint;
+ AFile, NextItem1, NextItem2: string;
+ Stat: PDataItemSL;
+ AWorkingThread: TWorkerThread;
+ AFProgress: TFProgress;
+begin
+ try
+ InternalLock;
+ if LeftListView.Focused then LeftPanel := True else
+ if RightListView.Focused then LeftPanel := False else
+ LeftPanel := LeftLastFocused;
+ if LeftPanel then begin
+ AListView := LeftListView;
+ Engine := LeftPanelEngine;
+ DataList := LeftPanelData;
+ end else begin
+ AListView := RightListView;
+ Engine := RightPanelEngine;
+ DataList := RightPanelData;
+ end;
+
+ SelCount := 0;
+ if DataList.Count > 0 then
+ for i := 0 to DataList.Count - 1 do
+ with PDataItem(DataList[i])^ do
+ if Selected and (not UpDir) then Inc(SelCount);
+ if (SelCount = 0) and ((not Assigned(AListView.Selected)) or PDataItem(AListView.Selected.Data)^.UpDir) then begin
+ Application.MessageBox(LANGNoFilesSelected, [mbOK], mbInfo, mbNone, mbOK);
+ Exit;
+ end;
+
+ AFile := '';
+ if SelCount = 0 then AFile := PDataItem(AListView.Selected.Data)^.AName else
+ for i := 0 to DataList.Count - 1 do
+ with PDataItem(DataList[i])^ do
+ if Selected and (not UpDir) then begin
+ AFile := AName;
+ Break;
+ end;
+
+ // Handle password
+ if (Engine is TVFSEngine) and TVFSEngine(Engine).GetPasswordRequired and (Length(TVFSEngine(Engine).Password) < 1) then
+ if not HandleSetPassword(Engine) then Exit;
+
+ if AFile <> '' then
+ try
+ FChown := TFChown.Create(Self);
+ Stat := Engine.GetFileInfoSL(IncludeTrailingPathDelimiter(Engine.Path) + AFile);
+ if not Assigned(Stat) then Exit;
+ FChown.AssignMode(Stat^.Mode, AFile, Stat^.UID, Stat^.GID);
+ if FChown.Run = mbOK then begin
+ FindNextSelected(AListView, DataList, NextItem1, NextItem2);
+
+ AWorkingThread := TWorkerThread.Create;
+ AFProgress := TFProgress.Create(Self);
+ try
+ AFProgress.SetNumBars(False);
+ AFProgress.ProgressBar.Value := 0;
+ AFProgress.Label1.Caption := LANGChownProgress;
+ AWorkingThread.ProgressForm := AFProgress;
+ if Assigned(AListView.Selected) then AWorkingThread.SelectedItem := AListView.Selected.Data;
+ AWorkingThread.ParamBool1 := FChown.RecursiveCheckButton.Checked;
+ AWorkingThread.ParamCardinal1 := FChown.LastUID;
+ AWorkingThread.ParamCardinal2 := FChown.LastGID;
+ AWorkingThread.Engine := Engine;
+ AWorkingThread.LeftPanel := LeftPanel;
+ AWorkingThread.DataList := DataList;
+ AWorkingThread.WorkerProcedure := ChownFilesWorker;
+ AWorkingThread.Resume;
+ AFProgress.ParentForm := FMain;
+ if (SelCount > 1) or FChown.RecursiveCheckButton.Checked then AFProgress.ShowModal;
+ ProcessProgressThread(AWorkingThread, AFProgress);
+ AFProgress.Close;
+ finally
+ AFProgress.Free;
+ AWorkingThread.Free;
+ end;
+
+ ChangingDir(LeftPanel, Engine.Path, NextItem1, NextItem2);
+ DoRefresh(not LeftPanel, True, True);
+ end;
+ finally
+ FChown.Free;
+ end;
+ finally
+ Application.ProcessMessages;
+ InternalLockInit(False);
+ end;
+end;
+
+(********************************************************************************************************************************)
+procedure TFMain.miCreateSymlinkClick(Sender: TObject);
+var LeftPanel: boolean;
+ AListView: TGTKListView;
+ Engine, EngineOpposite: TPanelEngine;
+ s1, s2: string;
+begin
+ try
+ InternalLock;
+ if LeftListView.Focused then LeftPanel := True else
+ if RightListView.Focused then LeftPanel := False else
+ LeftPanel := LeftLastFocused;
+ if LeftPanel then begin
+ AListView := LeftListView;
+ Engine := LeftPanelEngine;
+ EngineOpposite := RightPanelEngine;
+ end else begin
+ AListView := RightListView;
+ Engine := RightPanelEngine;
+ EngineOpposite := LeftPanelEngine;
+ end;
+
+ if (not Assigned(AListView.Selected)) or (not Assigned(AListView.Selected.Data)) or PDataItem(AListView.Selected.Data)^.UpDir
+ then s1 := ExcludeTrailingPathDelimiter(Engine.Path)
+ else s1 := IncludeTrailingPathDelimiter(Engine.Path) + PDataItem(AListView.Selected.Data)^.AName;
+ if Engine.Path <> EngineOpposite.Path
+ then s2 := IncludeTrailingPathDelimiter(EngineOpposite.Path) + PDataItem(AListView.Selected.Data)^.AName
+ else s2 := '';
+
+ // Handle password
+ if (Engine is TVFSEngine) and TVFSEngine(Engine).GetPasswordRequired and (Length(TVFSEngine(Engine).Password) < 1) then
+ if not HandleSetPassword(Engine) then Exit;
+
+ if CreateSymlink(s1, s2, Engine) then begin
+ DoRefresh(LeftPanel, True, True);
+ DoRefresh(not LeftPanel, True, True);
+ end;
+ finally
+ Application.ProcessMessages;
+ InternalLockInit(False);
+ end;
+end;
+
+procedure TFMain.miEditSymlinkClick(Sender: TObject);
+var LeftPanel: boolean;
+ AListView: TGTKListView;
+ Engine: TPanelEngine;
+begin
+ try
+ InternalLock;
+ if LeftListView.Focused then LeftPanel := True else
+ if RightListView.Focused then LeftPanel := False else
+ LeftPanel := LeftLastFocused;
+ if LeftPanel then begin
+ AListView := LeftListView;
+ Engine := LeftPanelEngine;
+ end else begin
+ AListView := RightListView;
+ Engine := RightPanelEngine;
+ end;
+
+ if (not Assigned(AListView.Selected)) or (not Assigned(AListView.Selected.Data)) or (not PDataItem(AListView.Selected.Data)^.IsLnk) or
+ PDataItem(AListView.Selected.Data)^.UpDir then
+ begin
+ Application.MessageBox(LANGYouMustSelectAValidSymbolicLink, [mbOK], mbError, mbNone, mbOK);
+ Exit;
+ end;
+
+ // Handle password
+ if (Engine is TVFSEngine) and TVFSEngine(Engine).GetPasswordRequired and (Length(TVFSEngine(Engine).Password) < 1) then
+ if not HandleSetPassword(Engine) then Exit;
+
+ if EditSymlink(IncludeTrailingPathDelimiter(Engine.Path) + PDataItem(AListView.Selected.Data)^.AName, Engine) then begin
+ DoRefresh(LeftPanel, True, True);
+ DoRefresh(not LeftPanel, True, True);
+ end;
+ finally
+ Application.ProcessMessages;
+ InternalLockInit(False);
+ end;
+end;
+
+(********************************************************************************************************************************)
+procedure TFMain.FilePopupMenuPopup(Sender: TObject);
+
+ procedure ClearPopupMenu(Popup: TGTKMenuItem);
+ begin
+ while Popup.Count > 0 do begin
+ if Popup.Items[0].Count > 0 then ClearPopupMenu(Popup.Items[0]);
+ Popup.Items[0].Free;
+ Popup.Delete(0);
+ end;
+ end;
+
+var Item: TGTKMenuItem;
+ DataItem: PDataItemSL;
+ Engine: TPanelEngine;
+ AListView: TGTKListView;
+ FileName, ShortFName, Ext: string;
+ UpDir, b, Found: boolean;
+ i, j, Last: integer;
+begin
+ ClearPopupMenu(FilePopupMenu);
+ if LeftLastFocused then begin
+ Engine := LeftPanelEngine;
+ AListView := LeftListView;
+ end else begin
+ Engine := RightPanelEngine;
+ AListView := RightListView;
+ end;
+ FileName := IncludeTrailingPathDelimiter(Engine.Path);
+ if Assigned(AListView.Selected) and Assigned(AListView.Selected.Data) and (not PDataItem(AListView.Selected.Data)^.UpDir)
+ then FileName := FileName + PDataItem(AListView.Selected.Data)^.AName;
+ ShortFName := ExtractFileName(ExcludeTrailingPathDelimiter(FileName));
+ DataItem := Engine.GetFileInfoSL(FileName);
+ if not Assigned(DataItem) then begin
+ DebugMsg(['Error: File data not assigned. Bug ???! FileName = ', FileName]);
+ Exit;
+ end;
+ UpDir := PDataItem(AListView.Selected.Data)^.UpDir;
+
+ if not DataItem^.IsDir then begin
+ Item := TGTKMenuItem.CreateTyped(Self, itImageText);
+ Item.Caption := Format(LANGPopupRunS, [ANSIToUTF8(QuoteMarkupStr(ShortFName))]);
+ Item.StockIcon := 'gtk-execute';
+ Item.Data := Pointer(1);
+ Item.OnClick := FilePopupMenuItemClick;
+ Item.Enabled := Engine.FileCanRun(FileName);
+ FilePopupMenu.Add(Item);
+ end else begin
+ Item := TGTKMenuItem.CreateTyped(Self, itImageText);
+ if UpDir then Item.Caption := LANGPopupGoUp
+ else Item.Caption := Format(LANGPopupOpenS, [ANSIToUTF8(QuoteMarkupStr(ShortFName))]);
+ Item.StockIcon := 'gtk-open';
+ Item.Data := Pointer(1);
+ Item.OnClick := FilePopupMenuItemClick;
+ FilePopupMenu.Add(Item);
+ end;
+
+ // Find actions for meta-item
+ if AssocList.Count > 0 then
+ for i := 0 to AssocList.Count - 1 do
+ if ((DataItem^.IsDir and (TFileAssoc(AssocList[i]).FileTypeName = ConstFTAMetaDirectory)) or
+ ((not DataItem^.IsDir) and (TFileAssoc(AssocList[i]).FileTypeName = ConstFTAMetaFile))) and
+ (TFileAssoc(AssocList[i]).ActionList.Count > 0) then
+ with TFileAssoc(AssocList[i]) do begin
+ FilePopupMenu.Add(TGTKMenuItem.CreateTyped(Self, itSeparator));
+ for j := 0 to ActionList.Count - 1 do begin
+ Item := TGTKMenuItem.CreateTyped(Self, itImageText);
+ Item.Caption := Format(LANGPopupOpenWithS, [TAssocAction(ActionList[j]).ActionName]);
+ Item.Data := ActionList[j];
+ Item.OnClick := FilePopupMenuItemClick;
+ FilePopupMenu.Add(Item);
+ end;
+ Break;
+ end;
+ FilePopupMenu.Add(TGTKMenuItem.CreateTyped(Self, itSeparator));
+
+ // Find and add actions for this file type
+ Found := False;
+ if Pos('.', ShortFName) > 0 then begin
+ Ext := ANSIUpperCase(Trim(Copy(ShortFName, LastDelimiter('.', ShortFName) + 1, Length(ShortFName) - LastDelimiter('.', ShortFName))));
+ if AssocList.Count > 0 then
+ for i := 0 to AssocList.Count - 1 do
+ with TFileAssoc(AssocList[i]) do
+ if (ActionList.Count > 0) and (Length(Trim(Extensions)) > 0) then begin
+ b := False;
+ if Pos(';', Extensions) = 0 then b := ANSIUpperCase(Trim(Extensions)) = Ext else begin
+ Last := 0;
+ for j := 1 to Length(Extensions) do
+ if Extensions[j] = ';' then begin
+ if ANSIUpperCase(Trim(Copy(Extensions, Last + 1, j - Last - 1))) = Ext then begin
+ b := True;
+ Break;
+ end;
+ Last := j;
+ end;
+ if not b then b := ANSIUpperCase(Trim(Copy(Extensions, LastDelimiter(';', Extensions) + 1, Length(Extensions) - LastDelimiter(';', Extensions)))) = Ext;
+ end;
+ if b and (ActionList.Count > 0) then begin
+ Found := True;
+ for j := 0 to ActionList.Count - 1 do begin
+ Item := TGTKMenuItem.CreateTyped(Self, itImageText);
+ Item.Caption := Format(LANGPopupOpenWithS, [TAssocAction(ActionList[j]).ActionName]);
+ if ((j = 0) and (DefaultAction > ActionList.Count - 1)) or (j = DefaultAction) then
+ Item.Caption := Item.Caption + LANGPopupDefault;
+ Item.Data := ActionList[j];
+ Item.OnClick := FilePopupMenuItemClick;
+ FilePopupMenu.Add(Item);
+ end;
+ end;
+ end;
+ end;
+ if (not Found) and (not DataItem^.IsDir) then begin
+ Item := TGTKMenuItem.CreateTyped(Self, itImageText);
+ Item.Caption := LANGPopupOpenWith;
+ Item.Data := Pointer(2);
+ Item.OnClick := FilePopupMenuItemClick;
+ FilePopupMenu.Add(Item);
+ end;
+
+ // Other items
+ if not DataItem^.IsDir then begin
+ FilePopupMenu.Add(TGTKMenuItem.CreateTyped(Self, itSeparator));
+ Item := TGTKMenuItem.CreateTyped(Self, itImageText);
+ Item.Caption := LANGPopupViewFile;
+ Item.StockIcon := 'gtk-find';
+ Item.Data := Pointer(200); // This number HAVE to be here due to F3F4ButtonClick method using
+ Item.OnClick := F3F4ButtonClick;
+ FilePopupMenu.Add(Item);
+ Item := TGTKMenuItem.CreateTyped(Self, itImageText);
+ Item.Caption := LANGPopupEditFile;
+ Item.Data := Pointer(201); // Here too
+ Item.OnClick := F3F4ButtonClick;
+ FilePopupMenu.Add(Item);
+ end;
+ if not DataItem^.IsDir then FilePopupMenu.Add(TGTKMenuItem.CreateTyped(Self, itSeparator));
+ Item := TGTKMenuItem.CreateTyped(Self, itImageText);
+ Item.Caption := LANGPopupMakeSymlink;
+ Item.StockIcon := 'gtk-jump-to';
+ Item.OnClick := miCreateSymlinkClick;
+ FilePopupMenu.Add(Item);
+ if DataItem^.IsLnk then begin
+ Item := TGTKMenuItem.CreateTyped(Self, itImageText);
+ Item.Caption := LANGmiEditSymlink_Caption;
+ Item.OnClick := miEditSymlinkClick;
+ FilePopupMenu.Add(Item);
+ end;
+ FilePopupMenu.Add(TGTKMenuItem.CreateTyped(Self, itSeparator));
+ Item := TGTKMenuItem.CreateTyped(Self, itImageText);
+ Item.Caption := LANGmiChangePermissions_Caption;
+ Item.StockIcon := 'gtk-convert';
+ Item.OnClick := miChangePermissionsClick;
+ Item.Enabled := not UpDir;
+ FilePopupMenu.Add(Item);
+ Item := TGTKMenuItem.CreateTyped(Self, itImageText);
+ Item.Caption := LANGmiChangeOwner_Caption;
+ Item.OnClick := miChangeOwnerClick;
+ Item.Enabled := not UpDir;
+ FilePopupMenu.Add(Item);
+ FilePopupMenu.Add(TGTKMenuItem.CreateTyped(Self, itSeparator));
+ Item := TGTKMenuItem.CreateTyped(Self, itImageText);
+ Item.Caption := LANGPopupRename;
+ Item.OnClick := F6ButtonClick;
+ Item.Enabled := not UpDir;
+ FilePopupMenu.Add(Item);
+ Item := TGTKMenuItem.CreateTyped(Self, itImageText);
+ Item.Caption := LANGPopupDelete;
+ Item.StockIcon := 'gtk-delete';
+ Item.OnClick := F8ButtonClick;
+ Item.Enabled := not UpDir;
+ FilePopupMenu.Add(Item);
+// FilePopupMenu.Add(TGTKMenuItem.CreateTyped(Self, itSeparator));
+ Item := TGTKMenuItem.CreateTyped(Self, itImageText);
+ Item.Caption := LANGFilePopupMenu_Properties;
+ Item.StockIcon := 'gtk-properties';
+ Item.OnClick := miFilePropertiesClick;
+ Item.Enabled := False;
+ Item.Visible := False;
+// Item.Enabled := not UpDir;
+ FilePopupMenu.Add(Item);
+end;
+
+procedure TFMain.FilePopupMenuItemClick(Sender: TObject);
+var Engine: TPanelEngine;
+ DataItem: PDataItemSL;
+ AListView: TGTKListView;
+ FileName, ShortFName, s, APath: string;
+ Error: integer;
+ b: boolean;
+begin
+ try
+ InternalLock;
+ if (not Assigned(Sender)) or (not (Sender is TGTKMenuItem)) then begin
+ DebugMsg(['Error: Popup menuitem is invalid']);
+ end;
+ if LeftLastFocused then begin
+ Engine := LeftPanelEngine;
+ AListView := LeftListView;
+ end else begin
+ Engine := RightPanelEngine;
+ AListView := RightListView;
+ end;
+ FileName := IncludeTrailingPathDelimiter(Engine.Path);
+ if Assigned(AListView.Selected) and Assigned(AListView.Selected.Data) and (not PDataItem(AListView.Selected.Data)^.UpDir)
+ then FileName := FileName + PDataItem(AListView.Selected.Data)^.AName;
+ ShortFName := ExtractFileName(ExcludeTrailingPathDelimiter(FileName));
+ DataItem := Engine.GetFileInfoSL(FileName);
+ if not Assigned(DataItem) then begin
+ DebugMsg(['Error: File data not assigned. Bug ???! FileName = ', FileName]);
+ Exit;
+ end;
+ if ConfUseURI and ((Engine is TVFSEngine) and (not TVFSEngine(Engine).ArchiveMode))
+ then FileName := ExcludeTrailingPathDelimiter(Engine.GetPrefix) + FileName;
+
+ case Integer((Sender as TGTKMenuItem).Data) of
+ 1: if DataItem^.IsDir then ActivateItem(AListView.Selected.Index, False)
+ else begin
+ b := True;
+ if Engine is TVFSEngine then b := HandleRunFromArchive(FileName, Engine, '', '', False); // not a local engine, extract to local first
+ if b then begin
+ Libc.__chdir(PChar(ExtractFilePath(FileName)));
+ b := ExecuteProgram(QuoteStr(FileName), ExtractFilePath(FileName), True, False, Error);
+ Libc.__chdir(PChar('/'));
+ end else b := True; // Mask cancelled extraction from VFS
+ if not b then Application.MessageBox(LANGErrorExecutingCommand, [mbOK], mbError, mbNone, mbOK);
+ end;
+ 2: if Application.MessageBox(Format(LANGThereIsNoApplicationAssociatedWithS, [ANSIToUTF8(ShortFName)]), [mbYes, mbNo], mbQuestion, mbNone, mbNo) = mbYes
+ then miFileTypesClick(Self);
+ else begin
+ b := True;
+ s := TAssocAction((Sender as TGTKMenuItem).Data).ActionCommand;
+ if Engine is TVFSEngine then b := HandleRunFromArchive(FileName, Engine, s, '', False); // not a local engine, extract to local first
+ if Pos('%s', s) > 0 then s := Format(s, ['''' + QuoteStr(FileName) + ''''])
+ else s := Format('%s %s', [s, QuoteStr(FileName)]);
+ if b then begin
+ Libc.__chdir(PChar(ExtractFilePath(FileName)));
+ b := ExecuteProgram(s, ExtractFilePath(FileName), TAssocAction((Sender as TGTKMenuItem).Data).AutodetectGUI,
+ TAssocAction((Sender as TGTKMenuItem).Data).RunInTerminal, Error);
+ Libc.__chdir(PChar('/'));
+ end else b := True; // Mask cancelled extraction from VFS
+ if not b then Application.MessageBox(Format(LANGCannotExecuteSPleaseCheckTheConfiguration, [ANSIToUTF8(FileName)]), [mbOK], mbError, mbNone, mbOK);
+ end;
+ end;
+ finally
+ Application.ProcessMessages;
+ InternalUnLock;
+ end;
+end;
+
+(********************************************************************************************************************************)
+procedure TFMain.ListViewMouseUp(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean);
+var AListView: TGTKListView;
+ i, FirstColumn, LastColumn: integer;
+ LeftLV, b: boolean;
+begin
+ if Button = mbLeft then begin
+ AListView := Sender as TGTKListView;
+ LeftLV := AListView = LeftListView;
+ GetFirstLastPanelColumn(FirstColumn, LastColumn);
+ b := True;
+ for i := 0 to AListView.Columns.Count - 1 do
+ if (AListView.Columns[i].Tag <> LastColumn) or (FirstColumn = LastColumn) then
+ b := b and (ConfColumnSizes[AListView.Columns[i].Tag] = AListView.Columns[i].Width);
+ if not b then begin
+ DebugMsg(['*** ListView Mouse Up -> resizing columns']);
+ for i := 0 to AListView.Columns.Count - 1 do
+ ConfColumnSizes[AListView.Columns[i].Tag] := AListView.Columns[i].Width;
+ if LeftLV then AListView := RightListView
+ else AListView := LeftListView;
+ // Change target widths
+ for i := 0 to AListView.Columns.Count - 1 do
+ if ConfColumnSizes[AListView.Columns[i].Tag] <> AListView.Columns[i].Width then
+ AListView.Columns[i].FixedWidth := ConfColumnSizes[AListView.Columns[i].Tag];
+ end;
+ end;
+end;
+
+procedure TFMain.ListViewColumnClicked(Sender: TObject);
+var ANotebook: TEphyNotebook;
+ AListView: TGTKListView;
+ LeftLV: boolean;
+begin
+ AListView := ((Sender as TGTKTreeViewColumn).Parent as TGTKTreeViewColumns).Parent as TGTKListView;
+ LeftLV := AListView = LeftListView;
+
+ // Check for sort change
+ if LeftLV then ANotebook := LeftPanelNotebook
+ else ANotebook := RightPanelNotebook;
+ try
+ if ANotebook.Visible then begin
+ DebugMsg(['*** ListView Mouse Up -> saving sort info to tab ', ANotebook.PageIndex, ', SortColumnID = ', AListView.SortColumnID]);
+ if LeftLV then begin
+ LeftTabSortIDs[ANotebook.PageIndex] := Pointer(AListView.SortColumnID);
+ LeftTabSortTypes[ANotebook.PageIndex] := Pointer(Integer(AListView.SortOrder));
+ end else begin
+ RightTabSortIDs[ANotebook.PageIndex] := Pointer(AListView.SortColumnID);
+ RightTabSortTypes[ANotebook.PageIndex] := Pointer(Integer(AListView.SortOrder));
+ end;
+ end;
+ except
+ on E: Exception do DebugMsg(['*** Exception raised in TFMain.ListViewColumnClicked(', E.ClassName, '): ', E.Message]);
+ end;
+
+end;
+
+(********************************************************************************************************************************)
+procedure TFMain.miPreferencesClick(Sender: TObject);
+begin
+ try
+ InternalLock;
+ FPreferences := TFPreferences.Create(Self);
+ FPreferences.AssignDefaultValues;
+ if FPreferences.Run = mbOK then begin
+ FPreferences.SaveSettings;
+ WriteMainGUISettings;
+ ApplySettings(FPreferences.RebuildListViews, FPreferences.RebuildIcons, False);
+ end;
+ finally
+ FPreferences.Free;
+ Application.ProcessMessages;
+ InternalLockInit(False);
+ end;
+end;
+
+procedure TFMain.ApplySettings(RebuildListViews, RebuildIcons, Startup: boolean);
+var i: integer;
+begin
+ InactiveItemsTimer.Enabled := False;
+
+ ButtonsBox.Visible := ConfShowFuncButtons;
+ ButtonBoxSeparator.Visible := ConfShowFuncButtons;
+ ButtonBoxSpace.Visible := not ConfShowFuncButtons;
+
+ // Rebuild Icons
+ if RebuildIcons then begin
+ if ConfRowHeight > 0 then ConfRowHeightReal := ConfRowHeight
+ else ConfRowHeightReal := ConfDefaultRowHeight;
+ FolderIcon.Free;
+ FileIcon.Free;
+ UpDirIcon.Free;
+ SymLinkEmblem.Free;
+ FolderIconLnk.Free;
+ FileIconLnk.Free;
+ LoadIcons;
+ RecreateIcons(AssocList, False);
+ end;
+
+ // Rebuild ListViews
+ if RebuildListViews then FMain.RebuildListViews(False);
+ InactiveItemsTimer.Enabled := False;
+
+ // Colors Section
+ SetupColors;
+ gtk_widget_modify_base(LeftListView.FWidget, GTK_STATE_NORMAL, NormalItemGDKBackground);
+ gtk_widget_modify_base(RightListView.FWidget, GTK_STATE_NORMAL, NormalItemGDKBackground);
+ gtk_widget_modify_base(LeftListView.FWidget, GTK_STATE_SELECTED, ActiveItemGDKBackground);
+ gtk_widget_modify_base(RightListView.FWidget, GTK_STATE_SELECTED, ActiveItemGDKBackground);
+// if Application.GTKVersion_2_6_0_Up then begin
+ gtk_widget_modify_base(LeftListView.FWidget, GTK_STATE_ACTIVE, InactiveItemGDKBackground);
+ gtk_widget_modify_base(RightListView.FWidget, GTK_STATE_ACTIVE, InactiveItemGDKBackground);
+
+ gtk_widget_modify_text(LeftListView.FWidget, GTK_STATE_NORMAL, NormalItemGDKColor);
+ gtk_widget_modify_text(RightListView.FWidget, GTK_STATE_NORMAL, NormalItemGDKColor);
+ gtk_widget_modify_text(LeftListView.FWidget, GTK_STATE_SELECTED, ActiveItemGDKColor);
+ gtk_widget_modify_text(RightListView.FWidget, GTK_STATE_SELECTED, ActiveItemGDKColor);
+ gtk_widget_modify_text(LeftListView.FWidget, GTK_STATE_ACTIVE, InactiveItemGDKColor);
+ gtk_widget_modify_text(RightListView.FWidget, GTK_STATE_ACTIVE, InactiveItemGDKColor);
+// end;
+
+ // Resize commandline history
+ if ConfNumHistoryItems < CommandLineHistory.Count then begin
+ try
+ for i := CommandLineHistory.Count downto ConfNumHistoryItems + 1 do
+ CommandLineHistory.Delete(i - 1);
+ if CommandLineCombo.Items.Count > 0 then
+ for i := CommandLineCombo.Items.Count - 1 downto 0 do
+ CommandLineCombo.Items.Delete(i);
+ if CommandLineHistory.Count > 0 then
+ for i := 0 to CommandLineHistory.Count - 1 do
+ CommandLineCombo.Items.Append(CommandLineHistory[i]);
+ except end;
+ CommandLineCombo.Entry.Text := '';
+ end;
+
+ // Refresh the lists
+ if not Startup then begin
+ DoRefresh(True, True, True);
+ DoRefresh(False, True, True);
+ if RebuildListViews then begin
+ LeftListView.SetSortInfo(ConfMainWindowLeftSortColumn, TGTKTreeViewSortOrder(ConfMainWindowLeftSortType));
+ RightListView.SetSortInfo(ConfMainWindowRightSortColumn, TGTKTreeViewSortOrder(ConfMainWindowRightSortType));
+ end;
+ end;
+end;
+
+(********************************************************************************************************************************)
+procedure TFMain.RefreshBookmarksMenu;
+const ShortcutKeys = '1234567890';
+var i: integer;
+ Item: TGTKMenuItem;
+begin
+ if mnuBookmarks.Count > 4 then
+ for i := mnuBookmarks.Count - 1 downto 4 do begin
+ mnuBookmarks.Items[i].Free;
+ mnuBookmarks.Delete(i);
+ end;
+ miAddBookmark.Visible := True;
+ miEditBookmarks.Visible := False;
+ miBookmarksSeparator.Visible := False;
+
+ if Bookmarks.Count > 0 then begin
+ miBookmarksSeparator.Visible := True;
+ for i := 0 to Bookmarks.Count - 1 do begin
+ Item := TGTKMenuItem.CreateTyped(Self, itLabel);
+ Item.Caption := Format('_%s %s', [Chr(Ord('a') + i), ANSIToUTF8(QuoteMarkupStr(Bookmarks[i]))]);
+ Item.Data := Pointer(i);
+ Item.OnClick := miBookmarkClick;
+ Item.OnMouseUp := BookmarkItemMouseUp;
+ if i < Length(ShortcutKeys) - 1 then Item.ShortCuts.AddName(Format('<Alt>%s', [ShortcutKeys[i + 1]]));
+ mnuBookmarks.Add(Item);
+ end;
+ end;
+end;
+
+procedure TFMain.miAddBookmarkClick(Sender: TObject);
+var LeftPanel: boolean;
+ s: string;
+begin
+ try
+ InternalLock;
+ if LeftListView.Focused then LeftPanel := True else
+ if RightListView.Focused then LeftPanel := False else
+ LeftPanel := LeftLastFocused;
+ if LeftPanel then s := LeftPanelEngine.Path
+ else s := RightPanelEngine.Path;
+ s := ExcludeTrailingPathDelimiter(s);
+ if Bookmarks.IndexOf(s) > -1 then begin
+ Application.MessageBox(LANGTheCurrentDirectoryAlreadyExistsInTheBookmarksList, [mbOK], mbError);
+ Exit;
+ end;
+ Bookmarks.Add(s);
+ WriteBookmarks;
+ RefreshBookmarksMenu;
+ finally
+ Application.ProcessMessages;
+ InternalLockInit(False);
+ end;
+end;
+
+procedure TFMain.miBookmarkClick(Sender: TObject);
+var LeftPanel: boolean;
+begin
+ if LeftListView.Focused then LeftPanel := True else
+ if RightListView.Focused then LeftPanel := False else
+ LeftPanel := LeftLastFocused;
+
+ // Close VFS connections
+ if LeftPanel then while (LeftPanelEngine is TVFSEngine) do CloseVFS(LeftPanel, True)
+ else while (RightPanelEngine is TVFSEngine) do CloseVFS(LeftPanel, True);
+
+ ChangingDir(LeftPanel, Bookmarks[Integer((Sender as TGTKMenuItem).Data)]);
+end;
+
+procedure TFMain.BookmarkPopupDeleteClick(Sender: TObject);
+begin
+ try
+ Bookmarks.Delete(Integer((Sender as TGTKMenuItem).Data));
+ WriteBookmarks;
+ RefreshBookmarksMenu;
+ except
+ on E: Exception do
+ DebugMsg(['*** Error deleting item: ', E.Message]);
+ end;
+end;
+
+procedure TFMain.BookmarkItemMouseUp(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean);
+begin
+ if Button = mbRight then begin
+ Accept := False;
+ BookmarkPopup.PopUp;
+ BookmarkPopupDelete.Data := (Sender as TGTKMenuItem).Data;
+ end;
+end;
+
+(********************************************************************************************************************************)
+function form_event_handler(widget: PGtkWidget; event: PGdkEvent; user_data: gpointer): gboolean; cdecl;
+begin
+ Result := False;
+ if event^._type = GDK_FOCUS_CHANGE then
+ if event^.focus_change._in = 1 then FMain.HandleFormFocusIn
+ else FileListTipsHide;
+end;
+
+procedure TFMain.HandleFormFocusIn;
+var ChangedMainGUI, ChangedAssoc, ChangedBookmarks, ChangedMounter, ChangedConnMgr, APerformRefresh: boolean;
+begin
+ try
+ if (csDestroying in ComponentState) or (not Assigned(FMain)) then Exit;
+ if InternalLockUnlocked then begin
+ APerformRefresh := ConfFocusRefresh;
+
+ if CheckConfFilesMod(ChangedMainGUI, ChangedAssoc, ChangedBookmarks, ChangedMounter, ChangedConnMgr) then begin
+ if ChangedBookmarks then begin
+ DebugMsg(['Bookmark file changed ---> performing refresh']);
+ ReadBookmarks;
+ RefreshBookmarksMenu;
+ end;
+ if ChangedConnMgr then begin
+ DebugMsg(['Connection manager file changed ---> performing refresh']);
+ ReadConnections;
+ end;
+ try
+ InternalLock;
+ if (ChangedMainGUI or ChangedAssoc or ChangedMounter) and (Application.MessageBox(LANGSomeOtherInstanceChanged,
+ [mbYes, mbNo], mbWarning) = mbNo) then Exit;
+ if ChangedMounter then begin
+ DebugMsg(['Mounter file changed ---> performing refresh']);
+ ReadMounter;
+ FillMounterBar;
+ end;
+ if ChangedMainGUI then begin
+ DebugMsg(['GUI file changed ---> performing refresh']);
+ ReadMainGUISettings;
+ ApplySettings(True, True, False);
+ APerformRefresh := True;
+ end;
+ if ChangedAssoc then begin
+ DebugMsg(['Assoc file changed ---> performing refresh']);
+ ReadAssoc;
+ LoadIcons;
+ RemoveIconRefs(AssocList, False);
+ RecreateIcons(AssocList);
+ APerformRefresh := True;
+ end;
+ finally
+ Application.ProcessMessages;
+ InternalLockInit(False);
+ end;
+ end;
+ if APerformRefresh then begin
+ DebugMsg(['ANN: Form Focus ---> refresh']);
+ DoRefresh(True, True, True);
+ DoRefresh(False, True, True);
+ if ConfFocusRefresh and ParamDebug then Beep;
+ end;
+ end;
+ except
+ on E: Exception do DebugMsg(['*** Exception raised in TFMain.HandleFormFocusIn (', E.ClassName, '): ', E.Message]);
+ end;
+end;
+
+(********************************************************************************************************************************)
+function Max(Int1, Int2: integer): integer;
+begin
+ if Int1 > Int2 then Result := Int1
+ else Result := Int2;
+end;
+
+procedure menu_position_cb(menu: PGtkMenu; x, y: Pgint; push_in: pgboolean; user_data: gpointer); cdecl;
+var menu_requisition: TGtkRequisition;
+ max_x, max_y: integer;
+begin
+ (* Calculate our preferred position. *)
+ gdk_window_get_origin(PGtkWidget(user_data).Window, x, y);
+ x^ := x^ + PGtkWidget(user_data).allocation.x + PGtkWidget(user_data).allocation.width;
+ y^ := y^ + PGtkWidget(user_data).allocation.y + PGtkWidget(user_data).allocation.height;
+
+ (* Now make sure we are on the screen. *)
+ gtk_widget_size_request(PGtkWidget(menu), @menu_requisition);
+ max_x := Max(0, gdk_screen_width () - menu_requisition.width);
+ max_y := Max(0, gdk_screen_height () - menu_requisition.height);
+ x^ := x^ - menu_requisition.width;
+
+ x^ := CLAMP(x^, 0, max_x);
+ y^ := CLAMP(y^, 0, max_y);
+end;
+
+procedure TFMain.BookmarkButtonClick(Sender: TObject);
+begin
+ miAddBookmark.Visible := True;
+ miEditBookmarks.Visible := False;
+ miBookmarksSeparator.Visible := mnuBookmarks.Count > 3;
+ gtk_menu_popup(PGtkMenu(mnuBookmarks.FMenu), nil, nil, menu_position_cb, (Sender as TGTKControl).FWidget, 1, GDK_CURRENT_TIME);
+ if (Sender = LeftBookmarkButton) {and (not LeftLastFocused)} then LeftListView.SetFocus else
+ if (Sender = RightBookmarkButton) {and LeftLastFocused} then RightListView.SetFocus;
+end;
+
+(********************************************************************************************************************************)
+procedure file_popup_position_cb(menu: PGtkMenu; x, y: Pgint; push_in: pgboolean; user_data: gpointer); cdecl;
+var menu_requisition: TGtkRequisition;
+ max_x, max_y: integer;
+ TreePath: PGtkTreePath;
+ Iter: TGtkTreeIter;
+ Rect: TGdkRectangle;
+ TreeView: PGtkTreeView;
+begin
+ TreeView := PGtkTreeView(TGTKListView(user_data).FWidget);
+ if not gtk_tree_selection_get_selected(gtk_tree_view_get_selection(TreeView), nil, @Iter) then Exit;
+ TreePath := gtk_tree_model_get_path(gtk_tree_view_get_model(TreeView), @iter);
+ if not Assigned(TreePath) then Exit;
+ gtk_tree_view_get_background_area(TreeView, TreePath, nil, @Rect);
+
+ gdk_window_get_origin(gtk_tree_view_get_bin_window(TreeView), x, y);
+ y^ := y^ + Rect.y + Rect.height;
+
+ gtk_widget_size_request(PGtkWidget(menu), @menu_requisition);
+ if y^ > gdk_screen_height - menu_requisition.height then begin
+ gdk_window_get_origin(gtk_tree_view_get_bin_window(TreeView), x, y);
+ y^ := y^ + Rect.y - menu_requisition.height;
+ end;
+
+ max_x := Max(0, gdk_screen_width () - menu_requisition.width);
+ max_y := Max(0, gdk_screen_height () - menu_requisition.height);
+
+ x^ := CLAMP(x^, 0, max_x);
+ y^ := CLAMP(y^, 0, max_y);
+end;
+
+procedure TFMain.PopupFileMenuPos;
+var AListView: TGTKListView;
+ LeftPanel: boolean;
+begin
+ if LeftListView.Focused then LeftPanel := True else
+ if RightListView.Focused then LeftPanel := False else
+ LeftPanel := LeftLastFocused;
+ if LeftPanel then AListView := LeftListView
+ else AListView := RightListView;
+ FilePopupMenuPopup(AListView);
+ if not Application.GTKVersion_2_0_5_Up then FilePopupMenu.PopUp else
+ gtk_menu_popup(PGtkMenu(FilePopupMenu.FMenu), nil, nil, file_popup_position_cb, AListView, 0, gtk_get_current_event_time());
+end;
+
+(********************************************************************************************************************************)
+procedure TFMain.miShowDirectorySizesClick(Sender: TObject);
+begin
+ DoGetDirSize(True);
+end;
+
+procedure TFMain.miTargetSourceClick(Sender: TObject);
+begin
+ if Sender = LeftEqualButton then SwitchOtherPanel(True, True) else
+ if Sender = RightEqualButton then SwitchOtherPanel(False, True) else
+ SwitchOtherPanel(LeftLastFocused, True);
+end;
+
+procedure TFMain.SwitchPanelCtrlLeftRight(LeftPanel, LeftArrowPressed: boolean);
+var AListView: TGTKListView;
+ SrcEngine, OrigSrcEngine, TargetEngine: TPanelEngine;
+ s: string;
+ DontShowAgain: boolean;
+begin
+ if LeftPanel then begin
+ AListView := LeftListView;
+ SrcEngine := LeftPanelEngine;
+ TargetEngine := RightPanelEngine;
+ end else begin
+ AListView := RightListView;
+ SrcEngine := RightPanelEngine;
+ TargetEngine := LeftPanelEngine;
+ end;
+ OrigSrcEngine := SrcEngine;
+
+ if ((not (SrcEngine is TLocalTreeEngine)) and (LeftPanel <> LeftArrowPressed)) or
+ ((not (TargetEngine is TLocalTreeEngine)) and (LeftPanel = LeftArrowPressed)) then
+ begin
+ if ConfSwitchOtherPanelBehaviour < 0 then begin
+ MessageBoxShowOnce(LANGSwitchOtherPanelWarning, LANGDontShowAgain, DontShowAgain, [mbOK], mbWarning, mbOK, mbOK);
+ if DontShowAgain then begin
+ ConfSwitchOtherPanelBehaviour := 1;
+ WriteMainGUISettings;
+ end;
+ end;
+ end;
+
+ // don't change dir in VFS engines
+ while not (SrcEngine is TLocalTreeEngine) do SrcEngine := SrcEngine.ParentEngine;
+ while not (TargetEngine is TLocalTreeEngine) do TargetEngine := TargetEngine.ParentEngine;
+
+ if LeftPanel <> LeftArrowPressed then begin
+ s := ExcludeTrailingPathDelimiter(SrcEngine.Path);
+ if (OrigSrcEngine = SrcEngine) and Assigned(AListView.Selected) and Assigned(AListView.Selected.Data) and
+ (not PDataItem(AListView.Selected.Data)^.UpDir) and PDataItem(AListView.Selected.Data)^.IsDir
+ then s := IncludeTrailingPathDelimiter(IncludeTrailingPathDelimiter(s) + PDataItem(AListView.Selected.Data)^.AName);
+ if IncludeTrailingPathDelimiter(TargetEngine.Path) <> s then begin
+ if LeftPanel then RightPanelEngine := TargetEngine
+ else LeftPanelEngine := TargetEngine;
+ ChangingDir(not LeftPanel, s);
+ end;
+ end else begin
+ // Close opened VFS engines
+ if LeftPanel then begin
+ while (LeftPanelEngine is TVFSEngine) do CloseVFS(LeftPanel, True);
+ end else
+ while (RightPanelEngine is TVFSEngine) do CloseVFS(LeftPanel, True);
+ ChangingDir(LeftPanel, TargetEngine.Path);
+ end;
+end;
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure TFMain.FillMounterBar;
+
+ procedure ClearButtons(List: TList; Table: TGTKTable);
+ var i: integer;
+ begin
+ if List.Count > 0 then
+ for i := List.Count - 1 downto 0 do
+ Table.RemoveControl(TGTKControl(List[i]));
+ List.Clear;
+ end;
+
+ procedure FillTableButtons(List: TList; Table: TGTKTable);
+ var i: integer;
+ Button: TGTKButton;
+ Pixmap: TGDKPixbuf;
+ b: boolean;
+ Sep: TGTKVSeparator;
+ begin
+ if MounterList.Count > 0 then
+ for i := 0 to MounterList.Count - 1 do
+ with TMounterItem(MounterList[i]) do begin
+ if ConfMounterPushDown then begin
+ Button := TGTKImageToggleButton.Create(Self);
+ if Length(DisplayText) > 0 then (Button as TGTKImageToggleButton).Caption := DisplayText else
+ (Button as TGTKImageToggleButton).Caption := Copy(MountPath, LastDelimiter(PathDelim, ExcludeTrailingPathDelimiter(MountPath)) + 1,
+ Length(ExcludeTrailingPathDelimiter(MountPath)) - LastDelimiter(PathDelim, ExcludeTrailingPathDelimiter(MountPath)));
+ end else begin
+ Button := TGTKImageButton.Create(Self);
+ if Length(DisplayText) > 0 then (Button as TGTKImageButton).Caption := DisplayText else
+ (Button as TGTKImageButton).Caption := Copy(MountPath, LastDelimiter(PathDelim, ExcludeTrailingPathDelimiter(MountPath)) + 1,
+ Length(ExcludeTrailingPathDelimiter(MountPath)) - LastDelimiter(PathDelim, ExcludeTrailingPathDelimiter(MountPath)));
+ end;
+ Button.CanFocus := False;
+// DebugMsg(['Int64(MounterList[i]) = ', Int64(MounterList[i])]);
+// DebugMsg(['Integer(MounterList[i]) = ', Integer(MounterList[i])]);
+{$IFDEF CPU64}
+ Button.Tag := QWORD(MounterList[i]);
+{$ELSE}
+ Button.Tag := Longint(MounterList[i]);
+{$ENDIF}
+ Button.Tooltip := Format(LANGMountPointDevice, [ANSIToUTF8(MountPath), ANSIToUTF8(Device)]);
+ Button.BorderStyle := bsNone;
+ Button.PopupMenu := MounterButtonPopupMenu;
+ Button.OnMouseDown := MounterButtonMouseDown;
+
+ // Check the icon
+ b := FileExists(IconPath);
+ Pixmap := nil;
+ if b then begin
+ Pixmap := TGDKPixbuf.Create(Self);
+ Pixmap.LoadFromFile(IconPath);
+ b := Pixmap.FPixbuf <> nil;
+ if b then Pixmap.ScaleSimple(16, 16);
+ end;
+ if not b then
+ case DeviceType of
+ 0 : Pixmap := MounterHDD;
+ 1 : Pixmap := MounterRemovable;
+ 2 : Pixmap := MounterCD;
+ 3 : Pixmap := MounterFloppy;
+ 4 : Pixmap := MounterNetwork;
+ end;
+ if ConfMounterPushDown then begin
+ (Button as TGTKImageToggleButton).Icon := Pixmap;
+ (Button as TGTKImageToggleButton).Checked := Mounted;
+ end else (Button as TGTKImageButton).Icon := Pixmap;
+
+ Button.OnClick := MounterButtonClick; // It has to be here because setting the Checked property causes the signal emitting
+
+ Table.AddControlEx(2*i + 1, 0, 1, 1, Button, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 0, 1);
+ List.Add(Button);
+ if i < MounterList.Count - 1 then begin
+ Sep := TGTKVSeparator.Create(Self);
+ Table.AddControlEx(2*(i + 1), 0, 1, 1, Sep, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 2, 6);
+ List.Add(Sep);
+ end;
+ end;
+ end;
+
+
+var Lab: TGTKLabel;
+begin
+ if ConfMounterUseFSTab then FillDefaultFstabMounterItems;
+
+ // Clean all items
+ ClearButtons(MounterTableList, MounterBarTable);
+ ClearButtons(MounterTableListLeft, LeftMounterTable);
+ ClearButtons(MounterTableListRight, RightMounterTable);
+
+ // Fill the new items
+ Lab := TGTKLabel.Create(Self);
+ Lab.Caption := Format('<span weight="bold">%s</span>', [LANGMountSC]);
+ Lab.UseMarkup := True;
+ MounterTableList.Add(Lab);
+ MounterBarTable.AddControlEx(0, 0, 1, 1, Lab, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 5, 1);
+ case ConfShowMounterBar of
+ 1: FillTableButtons(MounterTableList, MounterBarTable);
+ 2: begin
+ FillTableButtons(MounterTableListLeft, LeftMounterTable);
+ FillTableButtons(MounterTableListRight, RightMounterTable);
+ end;
+ end;
+end;
+
+procedure TFMain.MounterButtonClick(Sender: TObject);
+var Item: TMounterItem;
+ LeftPanel, b: boolean;
+ Engine: TPanelEngine;
+begin
+ if not (Sender is TGTKButton) then Exit;
+ try
+ Item := Pointer((Sender as TGTKButton).Tag);
+ if (not Assigned(Item)) or (Item.MountPath = '') then DebugMsg(['*** Error in mounter button: incorrect data']) else begin
+ if MounterTableListLeft.IndexOf(Sender) > -1 then LeftPanel := True else
+ if MounterTableListRight.IndexOf(Sender) > -1 then LeftPanel := False else LeftPanel := LeftLastFocused;
+ if LeftPanel then Engine := LeftPanelEngine
+ else Engine := RightPanelEngine;
+ try
+ b := Item.Mounted;
+ except
+ b := False;
+ end;
+
+ if ConfMounterPushDown then begin
+ if not b then b := Item.Mount else
+ if Pos(Item.MountPath, Engine.Path) = 1 then b := Item.Eject;
+ (Sender as TGTKToggleButton).OnClick := nil;
+ (Sender as TGTKToggleButton).Checked := Item.Mounted;
+ (Sender as TGTKToggleButton).OnClick := MounterButtonClick;
+ end else if not b then b := Item.Mount;
+
+ if b then begin
+ if Engine is TVFSEngine then CloseVFS(LeftPanel, True);
+ ChangingDir(LeftPanel, Item.MountPath);
+ DoRefresh(LeftPanel, True, True);
+ end;
+ if LeftPanel then LeftListView.SetFocus
+ else RightListView.SetFocus;
+ end;
+ except
+ on E: Exception do DebugMsg(['*** Exception raised in FMain.MounterButtonClick: (', E.ClassName, '): ', E.Message]);
+ end;
+end;
+
+procedure TFMain.MounterButtonPopupMenuPopup(Sender: TObject);
+begin
+// DebugMsg(['aaaa']);
+ try
+// DebugMsg(['aaaa']);
+ if (not Assigned(LastMounterButton)) or (LastMounterButton.Tag = 0) then begin
+// DebugMsg(['aaaa']);
+ MounterButtonPopupMenu.PopDown;
+// DebugMsg(['aaaa']);
+ Exit;
+ end;
+// DebugMsg(['aaaaX']);
+// DebugMsg(['sizeof(LastMounterButton.Tag) = ', sizeof(LastMounterButton.Tag)]);
+// DebugMsg(['LastMounterButton.Tag = ', Int64(LastMounterButton.Tag)]);
+// DebugMsg(['TMounterItem(Pointer(QWord(LastMounterButton.Tag))).Device = ', TMounterItem(Pointer(QWord(LastMounterButton.Tag))).Device]);
+
+// DebugMsg(['TMounterItem(LastMounterButton.Tag).ClassName = ', TMounterItem(LastMounterButton.Tag).ClassName]);
+
+ miMount.Enabled := not TMounterItem(LastMounterButton.Tag).Mounted;
+// DebugMsg(['aaaaX']);
+ miUmount.Enabled := not miMount.Enabled;
+// DebugMsg(['aaaaX']);
+ miEject.Enabled := not miMount.Enabled;
+ except
+ on E: Exception do begin
+ DebugMsg(['*** Exception raised in FMain.MounterButtonClick: (', E.ClassName, '): ', E.Message]);
+ MounterButtonPopupMenu.PopDown;
+ end;
+ end;
+end;
+
+procedure TFMain.MounterButtonMouseDown(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean);
+begin
+ LastMounterButton := nil;
+ if (not (Sender is TGTKButton)) or ((Sender as TGTKButton).Tag = 0) then Exit;
+ LastMounterButton := Sender as TGTKButton;
+end;
+
+procedure TFMain.miMountClick(Sender: TObject);
+begin
+ if Assigned(LastMounterButton) then TMounterItem(LastMounterButton.Tag).Mount;
+ DoRefresh(LeftLastFocused, True, True);
+ DoRefresh(not LeftLastFocused, True, True);
+ if ConfMounterPushDown then begin
+ (LastMounterButton as TGTKToggleButton).OnClick := nil;
+ (LastMounterButton as TGTKToggleButton).Checked := TMounterItem(LastMounterButton.Tag).Mounted;
+ (LastMounterButton as TGTKToggleButton).OnClick := MounterButtonClick;
+ end;
+end;
+
+procedure TFMain.miUmountClick(Sender: TObject);
+begin
+ if Assigned(LastMounterButton) then TMounterItem(LastMounterButton.Tag).Umount;
+ DoRefresh(LeftLastFocused, True, True);
+ DoRefresh(not LeftLastFocused, True, True);
+ if ConfMounterPushDown then begin
+ (LastMounterButton as TGTKToggleButton).OnClick := nil;
+ (LastMounterButton as TGTKToggleButton).Checked := TMounterItem(LastMounterButton.Tag).Mounted;
+ (LastMounterButton as TGTKToggleButton).OnClick := MounterButtonClick;
+ end;
+end;
+
+procedure TFMain.miEjectClick(Sender: TObject);
+begin
+ if Assigned(LastMounterButton) then TMounterItem(LastMounterButton.Tag).Eject;
+ DoRefresh(LeftLastFocused, True, True);
+ DoRefresh(not LeftLastFocused, True, True);
+ if ConfMounterPushDown then begin
+ (LastMounterButton as TGTKToggleButton).OnClick := nil;
+ (LastMounterButton as TGTKToggleButton).Checked := TMounterItem(LastMounterButton.Tag).Mounted;
+ (LastMounterButton as TGTKToggleButton).OnClick := MounterButtonClick;
+ end;
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure TFMain.miMounterSettingsClick(Sender: TObject);
+var x: TList;
+begin
+ try
+ InternalLock;
+ FMounterPrefs := TFMounterPrefs.Create(Self);
+ ReadMounter;
+ FMounterPrefs.AssignAssocList(MounterList);
+ FMounterPrefs.FillList;
+ if FMounterPrefs.Run = mbOK then begin
+ FMounterPrefs.CleanItems;
+ x := MounterList;
+ MounterList := FMounterPrefs.InternalMounterList;
+ FMounterPrefs.InternalMounterList := x;
+ ConfMounterUseFSTab := FMounterPrefs.UseFSTabDefaultsCheckBox.Checked;
+ ConfMounterPushDown := FMounterPrefs.ToggleModeCheckBox.Checked;
+ WriteMounter;
+ FillMounterBar;
+ end;
+ finally
+ FMounterPrefs.Free;
+ Application.ProcessMessages;
+ InternalLockInit(False);
+ end;
+end;
+
+procedure TFMain.miShowMounterBarClick(Sender: TObject);
+begin
+ if miShowOneMounterBar.Checked then ConfShowMounterBar := 1 else
+ if miShowTwoMounterBar.Checked then ConfShowMounterBar := 2 else ConfShowMounterBar := 0;
+ MounterBarHandleBox.Visible := ConfShowMounterBar = 1;
+ LeftMounterTable.Visible := ConfShowMounterBar = 2;
+ RightMounterTable.Visible := ConfShowMounterBar = 2;
+ FillMounterBar;
+end;
+
+procedure TFMain.miColumnsClick(Sender: TObject);
+begin
+ try
+ InternalLock;
+ FColumns := TFColumns.Create(Self);
+// FColumns.Show;
+ if FColumns.Run = mbOK then begin
+ FColumns.ApplyColumnList;
+ RebuildListViews(True);
+ end;
+ finally
+ FColumns.Free;
+ Application.ProcessMessages;
+ InternalLockInit(False);
+ end;
+end;
+
+procedure TFMain.ListViewColumnsChanged(Sender: TObject);
+var SourceListView: TGTKListView;
+ i, j, k, ColIdx, ColumnID: integer;
+ Column: PGtkTreeViewColumn;
+ TempIDs, TempArrayI: array[1..ConstNumPanelColumns] of integer;
+ TempArrayB: array[1..ConstNumPanelColumns] of boolean;
+begin
+ DebugMsg(['*** Columns reordered ---> performing listview rebuild']);
+ LeftListView.OnMouseUp := nil;
+ RightListView.OnMouseUp := nil;
+ LeftListView.OnColumnsChanged := nil;
+ RightListView.OnColumnsChanged := nil;
+ SourceListView := Sender as TGTKListView;
+
+ // Copy the old items
+ for i := 1 to ConstNumPanelColumns do begin
+ TempIDs[i] := ConfColumnIDs[i];
+ TempArrayI[i] := ConfColumnSizes[i];
+ TempArrayB[i] := ConfColumnVisible[i];
+ end;
+
+ ColIdx := 1;
+ // Search for moved columns
+ for i := 0 to SourceListView.Columns.Count - 1 do begin
+ Column := gtk_tree_view_get_column(PGtkTreeView(SourceListView.FWidget), i);
+ ColumnID := ColumnSortIDs[gtk_tree_view_column_get_sort_column_id(column) + 1];
+ for j := ColIdx to ConstNumPanelColumns do
+ if TempArrayB[j] then begin
+ for k := 1 to ConstNumPanelColumns do
+ if ColumnID = TempIDs[k] then begin
+ DebugMsg(['moving from ', k, ' to ', j]);
+ ConfColumnIDs[j] := TempIDs[k];
+ ConfColumnSizes[j] := TempArrayI[k];
+ ConfColumnVisible[j] := TempArrayB[k];
+ Break;
+ end;
+ ColIdx := j + 1;
+ Break;
+ end;
+ end;
+
+ RebuildListViewsTimer.Interval := 100;
+ RebuildListViewsTimer.Enabled := True;
+end;
+
+procedure TFMain.RebuildListViews(DoRefresh: boolean);
+begin
+ LeftListView.OnColumnsChanged := nil;
+ RightListView.OnColumnsChanged := nil;
+ ConfMainWindowLeftSortColumn := LeftListView.SortColumnID;
+ ConfMainWindowLeftSortType := Integer(LeftListView.SortOrder);
+ ConfMainWindowRightSortColumn := RightListView.SortColumnID;
+ ConfMainWindowRightSortType := Integer(RightListView.SortOrder);
+ LeftListView.Items.Clear;
+ RightListView.Items.Clear;
+ LeftListView.Columns.Clear;
+ RightListView.Columns.Clear;
+ ConstructColumns(LeftListView);
+ ConstructColumns(RightListView);
+ InactiveItemsTimer.Enabled := False;
+ if DoRefresh then begin
+ FMain.DoRefresh(True, True, True);
+ FMain.DoRefresh(False, True, True);
+ LeftListView.SetSortInfo(ConfMainWindowLeftSortColumn, TGTKTreeViewSortOrder(ConfMainWindowLeftSortType));
+ RightListView.SetSortInfo(ConfMainWindowRightSortColumn, TGTKTreeViewSortOrder(ConfMainWindowRightSortType));
+ end;
+ LeftListView.OnColumnsChanged := ListViewColumnsChanged;
+ RightListView.OnColumnsChanged := ListViewColumnsChanged;
+end;
+
+procedure TFMain.RebuildListViewsTimerTimer(Sender: TObject);
+begin
+ RebuildListViewsTimer.Enabled := False;
+ RebuildListViews(True);
+ LeftListView.OnMouseUp := ListViewMouseUp;
+ RightListView.OnMouseUp := ListViewMouseUp;
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure TFMain.FillPluginMenu;
+var i: integer;
+ MenuItem1, MenuItem2: TGTKMenuItem;
+begin
+ if PluginList.Count = 0 then begin
+ MenuItem1 := TGTKMenuItem.CreateTyped(Self, itLabel);
+ MenuItem1.Caption := LANGNoPluginsFound;
+ MenuItem1.Enabled := False;
+ mnuPlugins.Add(MenuItem1);
+ end else
+ for i := 0 to PluginList.Count - 1 do begin
+ MenuItem1 := TGTKMenuItem.CreateTyped(Self, itImageText);
+ MenuItem1.Caption := ANSIToUTF8(TVFSPlugin(PluginList[i]).VFSName);
+ MenuItem2 := TGTKMenuItem.CreateTyped(Self, itImageText);
+ MenuItem2.Caption := LANGPluginAbout;
+ MenuItem2.Tag := i;
+ MenuItem2.OnClick := miPluginAboutClick;
+ mnuPlugins.Add(MenuItem1);
+ MenuItem1.Add(MenuItem2);
+ end;
+end;
+
+procedure TFMain.miTestPluginClick(Sender: TObject);
+var Engine: TVFSEngine;
+ b: boolean;
+begin
+ try
+ InternalLock;
+ FTestPlugin := TFTestPlugin.Create(Self);
+ if (FTestPlugin.Run = mbOK) and (PluginList.Count > 0) then begin
+ Engine := TVFSEngine.Create(PluginList[FTestPlugin.PluginOptionMenu.ItemIndex]);
+ if not Engine.VFSOpenURI(UTF8ToANSI(FTestPlugin.CommandEntry.Text)) then begin
+ Application.MessageBox(LANGCouldntOpenURI, [mbOK], mbError, mbOK, mbOK);
+ Exit;
+ end;
+ b := True;
+ if not FTestPlugin.AnonymousCheckButton.Checked then
+ b := HandleLogin(FTestPlugin, Engine, FTestPlugin.UserEntry.Text, FTestPlugin.PasswordEntry.Text);
+ if b then begin
+ if LeftLastFocused then LeftPanelEngine := Engine
+ else RightPanelEngine := Engine;
+ DoRefresh(LeftLastFocused, False, False);
+ end;
+ end;
+ finally
+ FTestPlugin.Free;
+ Application.ProcessMessages;
+ InternalLockInit(False);
+ end;
+end;
+
+procedure TFMain.miPluginAboutClick(Sender: TObject);
+const Authors : array[0..1] of PChar = ('', nil);
+var AboutBox: PGtkWidget;
+ VFSItem: TVFSPlugin;
+begin
+ VFSItem := PluginList[(Sender as TGTKMenuItem).Tag];
+ InternalLock;
+ if (libGnomeUI2Handle = nil) or (@gnome_about_new = nil) then
+ Application.MessageBox(Format(LANGPluginAboutInside, [VFSItem.VFSName, VFSItem.VFSAbout, VFSItem.VFSCopyright]))
+ else begin
+ AboutBox := gnome_about_new(VFSItem.VFSName, nil, VFSItem.VFSCopyright, VFSItem.VFSAbout, @Authors, nil, nil, nil);
+ gtk_window_set_transient_for(GTK_WINDOW(AboutBox), GTK_WINDOW(FMain.FWidget));
+ gtk_dialog_run(GTK_DIALOG(AboutBox));
+ end;
+ Application.ProcessMessages;
+ InternalLockInit(False);
+end;
+
+procedure TFMain.miSavePositionClick(Sender: TObject);
+begin
+ WriteMainSettings;
+end;
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure TFMain.NewTabInternal(LeftPanel: boolean; _Engine: TPanelEngine; _Path: string; NewTabPosition: integer);
+var AListView: TGTKListView;
+ AEngine: TPanelEngine;
+ ANotebook: TEphyNotebook;
+ ATabList: TStringList;
+ AVBoxList: TList;
+ APath, APathSave: string;
+ VBox: TGTKVBox;
+ DockedToNotebook: boolean;
+ PathsHighlight: TStringList;
+ TabEngines: TList;
+ TabSortIDs: TList;
+ TabSortTypes: TList;
+ i, InsertPos: integer;
+begin
+ if LeftPanel then begin
+ AListView := LeftListView;
+ AEngine := LeftPanelEngine;
+ ANotebook := LeftPanelNotebook;
+ ATabList := LeftPanelTabs;
+ AVBoxList := LeftNotebookBoxList;
+ PathsHighlight := LeftPathsHighlight;
+ TabEngines := LeftTabEngines;
+ TabSortIDs := LeftTabSortIDs;
+ TabSortTypes := LeftTabSortTypes;
+ end else begin
+ AListView := RightListView;
+ AEngine := RightPanelEngine;
+ ANotebook := RightPanelNotebook;
+ ATabList := RightPanelTabs;
+ AVBoxList := RightNotebookBoxList;
+ PathsHighlight := RightPathsHighlight;
+ TabEngines := RightTabEngines;
+ TabSortIDs := RightTabSortIDs;
+ TabSortTypes := RightTabSortTypes;
+ end;
+
+ DockedToNotebook := ANotebook.Visible;
+
+ VBox := nil;
+ for i := 0 to 0 + Ord(not DockedToNotebook) do begin
+ InsertPos := 0;
+ if (i = 1) or DockedToNotebook then begin
+ APath := _Path;
+ AEngine := _Engine;
+ InsertPos := NewTabPosition;
+ if (i = 1) and (InsertPos > 1) then InsertPos := 1;
+ end else APath := AEngine.Path;
+
+ ATabList.Insert(InsertPos, APath);
+ APath := ExtractFileName(ExcludeTrailingPathDelimiter(APath));
+ if APath = '' then APath := '/';
+ if i = 0 then APathSave := APath;
+ VBox := TGTKVBox.Create(Self);
+ AVBoxList.Insert(InsertPos, VBox);
+ PathsHighlight.Insert(InsertPos, PDataItem(AListView.Selected.Data)^.AName);
+ TabSortIDs.Insert(InsertPos, Pointer(AListView.SortColumnID));
+ TabSortTypes.Insert(InsertPos, Pointer(Integer(AListView.SortOrder)));
+ TabEngines.Insert(InsertPos, AEngine);
+ end;
+
+ if not DockedToNotebook then begin
+ ANotebook.InsertPage(0, AVBoxList[0], APathSave);
+ SetTabLabel(ANotebook, 0, APathSave, ATabList[0]);
+ end;
+
+ InsertPos := NewTabPosition;
+ if InsertPos > ATabList.Count then InsertPos := ATabList.Count;
+ if not ANotebook.Visible then ANotebook.Visible := True;
+ i := ANotebook.InsertPage(InsertPos, VBox, APath);
+ SetTabLabel(ANotebook, i, APath, ATabList[InsertPos]);
+ ANotebook.PageIndex := i;
+end;
+
+procedure TFMain.NewTab(LeftPanel: boolean);
+var AEngine: TPanelEngine;
+ ATabList: TStringList;
+ APath: string;
+ DontShowAgain: boolean;
+begin
+ if LeftPanel then begin
+ AEngine := LeftPanelEngine;
+ ATabList := LeftPanelTabs;
+ end else begin
+ AEngine := RightPanelEngine;
+ ATabList := RightPanelTabs;
+ end;
+
+ APath := AEngine.Path;
+ if AEngine is TVFSEngine then begin
+ while AEngine is TVFSEngine do begin
+ APath := AEngine.SavePath;
+ AEngine := AEngine.ParentEngine;
+ end;
+ // Show warning that we couldn't duplicate the VFS location
+ if ConfDuplicateTabWarning then begin
+ MessageBoxShowOnce(LANGDuplicateTabWarning, LANGDontShowAgain, DontShowAgain, [mbOK], mbInfo, mbOK, mbOK);
+ if DontShowAgain then begin
+ ConfDuplicateTabWarning := False;
+ WriteMainGUISettings;
+ end;
+ end;
+ end;
+
+ NewTabInternal(LeftPanel, AEngine, APath, ATabList.Count + Ord(ATabList.Count = 0));
+end;
+
+procedure TFMain.SwitchTab(TabNo: integer; LeftPanel, SetFocus: boolean);
+var ANotebook: TEphyNotebook;
+ AListView: TGTKListView;
+ AVBoxList: TList;
+ ListBox: TGTKVBox;
+ AScrolledWindow: TGTKScrolledWindow;
+ i: integer;
+begin
+ if LeftPanel then begin
+ ANotebook := LeftPanelNotebook;
+ AVBoxList := LeftNotebookBoxList;
+ ListBox := LeftListBox;
+ AScrolledWindow := LeftScrolledWindow;
+ AListView := LeftListView;
+ end else begin
+ ANotebook := RightPanelNotebook;
+ AVBoxList := RightNotebookBoxList;
+ ListBox := RightListBox;
+ AScrolledWindow := RightScrolledWindow;
+ AListView := RightListView;
+ end;
+
+ if (AVBoxList.Count < TabNo) or (TabNo < -1) then Exit;
+
+ // Remove any objects
+ g_object_ref(AScrolledWindow.FWidget);
+ if ListBox.ChildrenCount > 0 then ListBox.RemoveControl(AScrolledWindow);
+ if AVBoxList.Count > 0 then
+ for i := 0 to AVBoxList.Count - 1 do
+ if TGTKVBox(AVBoxList[i]).ChildrenCount > 0 then TGTKVBox(AVBoxList[i]).RemoveControl(AScrolledWindow);
+
+ if TabNo >= 0 then begin // Reparent to the tab
+ TGTKVBox(AVBoxList[TabNo]).AddControlEx(AScrolledWindow, True, True, 0);
+ ListBox.Visible := False;
+ ANotebook.Visible := True;
+ end else begin // Reparent back to the panel
+ ListBox.AddControlEx(AScrolledWindow, True, True, 0);
+ ListBox.Visible := True;
+ ANotebook.Visible := False;
+ end;
+ g_object_unref(AScrolledWindow.FWidget);
+ if SetFocus then AListView.SetFocus;
+end;
+
+procedure TFMain.TabNotebookSwitchPage(Sender: TObject; const NewTabNum: integer; const ShouldFocus: boolean);
+var LeftPanel: boolean;
+ ATabList: TStringList;
+ PathsHighlight: TStringList;
+ TabEngines: TList;
+ AListView: TGTKListView;
+ TabSortIDs: TList;
+ TabSortTypes: TList;
+begin
+ DebugMsg(['Switch page']);
+ LeftPanel := (Sender as TEphyNotebook) = LeftPanelNotebook;
+ if LeftPanel then begin
+ ATabList := LeftPanelTabs;
+ PathsHighlight := LeftPathsHighlight;
+ TabEngines := LeftTabEngines;
+ TabSortIDs := LeftTabSortIDs;
+ TabSortTypes := LeftTabSortTypes;
+ AListView := LeftListView;
+ end else begin
+ ATabList := RightPanelTabs;
+ PathsHighlight := RightPathsHighlight;
+ TabEngines := RightTabEngines;
+ TabSortIDs := RightTabSortIDs;
+ TabSortTypes := RightTabSortTypes;
+ AListView := RightListView;
+ end;
+ SwitchTab(NewTabNum, LeftPanel, ShouldFocus);
+ if LeftPanel then LeftPanelEngine := TabEngines[NewTabNum]
+ else RightPanelEngine := TabEngines[NewTabNum];
+ ChangingDir(LeftPanel, ATabList[NewTabNum], PathsHighlight[NewTabNum]);
+ AListView.SetSortInfo(Integer(TabSortIDs[NewTabNum]),
+ TGTKTreeViewSortOrder(Integer(TabSortTypes[NewTabNum])));
+end;
+
+procedure TFMain.miDuplicateTabClick(Sender: TObject);
+begin
+ if not CommandLineCombo.Entry.Focused then
+ if LeftListView.Focused then NewTab(True) else
+ if RightListView.Focused then NewTab(False) else
+ if (Sender is TGTKMenuItem) and LeftTabPopup then NewTab(True) else
+ if (Sender is TGTKMenuItem) and (not LeftTabPopup) then NewTab(False) else
+ DebugMsg(['Couldn''t duplicate tab: No listview focused.']);
+end;
+
+procedure TFMain.miCloseTabClick(Sender: TObject);
+begin
+ if not CommandLineCombo.Entry.Focused then
+ if LeftListView.Focused then CloseTab(LeftPanelNotebook.PageIndex, True) else
+ if RightListView.Focused then CloseTab(RightPanelNotebook.PageIndex, False) else
+ if (Sender is TGTKMenuItem) and LeftTabPopup then CloseTab(LeftPanelNotebook.PageIndex, True) else
+ if (Sender is TGTKMenuItem) and (not LeftTabPopup) then CloseTab(RightPanelNotebook.PageIndex, False) else
+ DebugMsg(['Couldn''t close tab: No listview focused.']);
+end;
+
+procedure TFMain.miCloseAllTabsClick(Sender: TObject);
+begin
+ if Application.MessageBox(LANGAreYouSureCloseAllTabs, [mbYes, mbNo], mbQuestion, mbYes, mbNo) = mbYes then
+ if (Sender is TGTKMenuItem) and LeftTabPopup then CloseTab(-1, True) else
+ if (Sender is TGTKMenuItem) and (not LeftTabPopup) then CloseTab(-1, False) else
+ DebugMsg(['Couldn''t close all tabs: No listview focused.']);
+end;
+
+procedure TFMain.CloseTab(TabNo: integer; LeftPanel: boolean);
+var ATabList: TStringList;
+ PathsHighlight: TStringList;
+ ANotebook: TEphyNotebook;
+ AVBoxList: TList;
+ i, NewPageIndex: integer;
+ TabEngines: TList;
+ Engine: TPanelEngine;
+ TabSortIDs: TList;
+ TabSortTypes: TList;
+ AListView: TGTKListView;
+begin
+ if LeftPanel then begin
+ ATabList := LeftPanelTabs;
+ PathsHighlight := LeftPathsHighlight;
+ ANotebook := LeftPanelNotebook;
+ AVBoxList := LeftNotebookBoxList;
+ TabEngines := LeftTabEngines;
+ TabSortIDs := LeftTabSortIDs;
+ TabSortTypes := LeftTabSortTypes;
+ AListView := LeftListView;
+ end else begin
+ ATabList := RightPanelTabs;
+ PathsHighlight := RightPathsHighlight;
+ ANotebook := RightPanelNotebook;
+ AVBoxList := RightNotebookBoxList;
+ TabEngines := RightTabEngines;
+ TabSortIDs := RightTabSortIDs;
+ TabSortTypes := RightTabSortTypes;
+ AListView := RightListView;
+ end;
+ DebugMsg(['Close tab, TabNo = ', TabNo, ', PageIndex = ', ANotebook.PageIndex]);
+
+ if (ANotebook.ChildrenCount < TabNo) or (TabNo < -1) or (not ANotebook.Visible) then begin
+ DebugMsg(['Couldn''t close tab: wrong TabNo']);
+ Exit;
+ end;
+ if (ANotebook.ChildrenCount > 2) and (TabNo >= 0) then begin
+ // Close one tab, leave tab bar visible
+ Engine := TabEngines[TabNo];
+// !!!!!!!!
+ NewPageIndex := ANotebook.PageIndex - Ord((TabNo = ANotebook.PageIndex) and (TabNo = ANotebook.ChildrenCount - 1))
+ + Ord((TabNo = ANotebook.PageIndex) and (ANotebook.ChildrenCount > TabNo + 1));
+// if (ANotebook.PageIndex = 0) and (NewPageIndex = 0) then NewPageIndex := 1;
+ ANotebook.PageIndex := NewPageIndex;
+ // Before remove, ensure some other page is active
+ ANotebook.RemovePage(TabNo);
+ ATabList.Delete(TabNo);
+ PathsHighlight.Delete(TabNo);
+ TabEngines.Delete(TabNo);
+// g_object_unref(TGTKVBox(AVBoxList[TabNo]).FWidget);
+ AVBoxList.Delete(TabNo);
+ TabSortIDs.Delete(TabNo);
+ TabSortTypes.Delete(TabNo);
+ // Try to close the VFS engine
+ if Engine is TVFSEngine then
+ try
+ if not TVFSEngine(Engine).VFSClose then DebugMsg(['Error closing the engine...']);
+ Engine.Free;
+ except end;
+
+ end else begin // Close last/all tabs, hide the tab bar
+ // Change dir to the opposite
+ if (TabNo >= 0) and (TabNo = ANotebook.PageIndex) then begin // we should not change directory while closing all tabs...
+ i := Ord(not Boolean(ANotebook.PageIndex));
+ if LeftPanel then LeftPanelEngine := TabEngines[i]
+ else RightPanelEngine := TabEngines[i];
+ ChangingDir(LeftPanel, ATabList[i], PathsHighlight[i]);
+ end;
+ // Remove the tabs
+ SwitchTab(-1, LeftPanel, False);
+ for i := ANotebook.ChildrenCount - 1 downto 0 do ANotebook.RemovePage(i);
+ ATabList.Clear;
+ PathsHighlight.Clear;
+ for i := 0 to TabEngines.Count - 1 do
+ if (TPanelEngine(TabEngines[i]) is TVFSEngine) and ((LeftPanel and (LeftPanelEngine <> TabEngines[i])) or
+ ((not LeftPanel) and (RightPanelEngine <> TabEngines[i]))) then
+ try
+ Engine := TabEngines[i];
+ if not TVFSEngine(Engine).VFSClose then DebugMsg(['Error closing the engine...']);
+ Engine.Free;
+ except end;
+
+ TabEngines.Clear;
+{ for i := 0 to AVBoxList.Count - 1 do
+ g_object_unref(TGTKVBox(AVBoxList[i]).FWidget); }
+ AVBoxList.Clear;
+ TabSortIDs.Clear;
+ TabSortTypes.Clear;
+ AListView.SetFocus;
+ end;
+end;
+
+procedure TFMain.TabPopupMenuPopup(Sender: TObject);
+begin
+ LeftTabPopup := Sender = LeftPanelNotebook;
+end;
+
+procedure TFMain.AddTabs(LeftPanel: boolean; TabList: TStringList; TabSortIDs, TabSortTypes: TList; SetTabActive: integer);
+var ANotebook: TEphyNotebook;
+ ATabList: TStringList;
+ AVBoxList: TList;
+ APath: string;
+ VBox: TGTKVBox;
+ PathsHighlight: TStringList;
+ TabEngines: TList;
+ i: integer;
+ ATabSortIDs: TList;
+ ATabSortTypes: TList;
+begin
+ if LeftPanel then begin
+ ANotebook := LeftPanelNotebook;
+ ATabList := LeftPanelTabs;
+ AVBoxList := LeftNotebookBoxList;
+ PathsHighlight := LeftPathsHighlight;
+ TabEngines := LeftTabEngines;
+ ATabSortIDs := LeftTabSortIDs;
+ ATabSortTypes := LeftTabSortTypes;
+ end else begin
+ ANotebook := RightPanelNotebook;
+ ATabList := RightPanelTabs;
+ AVBoxList := RightNotebookBoxList;
+ PathsHighlight := RightPathsHighlight;
+ TabEngines := RightTabEngines;
+ ATabSortIDs := RightTabSortIDs;
+ ATabSortTypes := RightTabSortTypes;
+ end;
+
+ if (not Assigned(TabList)) or (TabList.Count < 1) or (not Assigned(TabSortIDs)) or (TabSortIDs.Count < 1) or
+ (not Assigned(TabSortTypes)) or (TabSortTypes.Count < 1) then Exit;
+
+ for i := 0 to TabList.Count - 1 do begin
+ ATabList.Add(TabList[i]);
+ APath := ExtractFileName(ExcludeTrailingPathDelimiter(TabList[i]));
+ if APath = '' then APath := '/';
+ VBox := TGTKVBox.Create(Self);
+ AVBoxList.Add(VBox);
+ PathsHighlight.Add('');
+ ATabSortIDs.Add(TabSortIDs[i]);
+ ATabSortTypes.Add(TabSortTypes[i]);
+ if LeftPanel then TabEngines.Add(LeftPanelEngine)
+ else TabEngines.Add(RightPanelEngine);
+ ANotebook.AppendPage(VBox, APath);
+ SetTabLabel(ANotebook, ANotebook.ChildrenCount - 1, APath, TabList[i]);
+ end;
+
+ if not ANotebook.Visible then ANotebook.Visible := True;
+ ANotebook.PageIndex := SetTabActive;
+ TabNotebookSwitchPage(ANotebook, SetTabActive, True);
+end;
+
+procedure TFMain.SetTabLabel(Notebook: TEphyNotebook; PageIndex: integer; ALabel, Tooltip: string);
+begin
+ if (ConfTabMaxLength > 0) and (Length(ALabel) > ConfTabMaxLength) then
+ ALabel := Copy(ALabel, 1, ConfTabMaxLength) + '...';
+ Notebook.SetTabCaption(PageIndex, ALabel);
+ Notebook.SetTabTooltip(PageIndex, Tooltip);
+end;
+
+procedure TFMain.NotebookReordered(Sender: TObject; const Source, Dest: integer);
+var ANotebook: TEphyNotebook;
+ ATabList: TStringList;
+ AVBoxList: TList;
+ PathsHighlight: TStringList;
+ TabEngines: TList;
+ ATabSortIDs: TList;
+ ATabSortTypes: TList;
+begin
+ ANotebook := Sender as TEphyNotebook;
+ if ANotebook = LeftPanelNotebook then begin
+ ATabList := LeftPanelTabs;
+ AVBoxList := LeftNotebookBoxList;
+ PathsHighlight := LeftPathsHighlight;
+ TabEngines := LeftTabEngines;
+ ATabSortIDs := LeftTabSortIDs;
+ ATabSortTypes := LeftTabSortTypes;
+ end else begin
+ ATabList := RightPanelTabs;
+ AVBoxList := RightNotebookBoxList;
+ PathsHighlight := RightPathsHighlight;
+ TabEngines := RightTabEngines;
+ ATabSortIDs := RightTabSortIDs;
+ ATabSortTypes := RightTabSortTypes;
+ end;
+
+ ATabList.Move(Source, Dest);
+ AVBoxList.Move(Source, Dest);
+ PathsHighlight.Move(Source, Dest);
+ TabEngines.Move(Source, Dest);
+ ATabSortIDs.Move(Source, Dest);
+ ATabSortTypes.Move(Source, Dest);
+end;
+
+procedure TFMain.NotebookTabClosed(Sender: TObject; const TabNum: integer; var CanClose: boolean);
+begin
+ CloseTab(TabNum, Sender = LeftPanelNotebook);
+ CanClose := False;
+end;
+
+procedure TFMain.NotebookTabDoubleClick(Sender: TObject; const TabNum: integer);
+begin
+ CloseTab(TabNum, Sender = LeftPanelNotebook);
+end;
+
+function TFMain.NotebookFindNotebookAtPointerEvent(Sender: TObject; const AbsX, AbsY: integer): TEphyNotebook;
+var wx, wy: Integer;
+begin
+// DebugMsg([' *** NotebookFindNotebookAtPointerEvent(AbsX = ', AbsX, ', AbsY = ', AbsY, ')']);
+ Result := nil;
+
+ if LeftPanelNotebook.Visible then begin
+ gtk_widget_get_pointer(LeftPanelNotebook.FWidget, @wx, @wy);
+ if (wx > 0) and (wy > 0) and (wx < LeftPanelNotebook.FWidget^.allocation.width) and
+ (wy < LeftPanelNotebook.FWidget^.allocation.height) then Result := LeftPanelNotebook;
+ end else begin
+ gtk_widget_get_pointer(LeftScrolledWindow.FWidget, @wx, @wy);
+ if (wx > 0) and (wy > 0) and (wx < LeftScrolledWindow.FWidget^.allocation.width) and
+ (wy < LeftScrolledWindow.FWidget^.allocation.height) then Result := LeftPanelNotebook;
+ end;
+
+ if Result = nil then begin
+ if RightPanelNotebook.Visible then begin
+ gtk_widget_get_pointer(RightPanelNotebook.FWidget, @wx, @wy);
+ if (wx > 0) and (wy > 0) and (wx < RightPanelNotebook.FWidget^.allocation.width) and
+ (wy < RightPanelNotebook.FWidget^.allocation.height) then Result := RightPanelNotebook;
+ end else begin
+ gtk_widget_get_pointer(RightScrolledWindow.FWidget, @wx, @wy);
+ if (wx > 0) and (wy > 0) and (wx < RightScrolledWindow.FWidget^.allocation.width) and
+ (wy < RightScrolledWindow.FWidget^.allocation.height) then Result := RightPanelNotebook;
+ end;
+ end;
+
+{
+ if Result = LeftPanelNotebook then DebugMsg([' *** NotebookFindNotebookAtPointerEvent: inside LeftPanelNotebook']) else
+ if Result = RightPanelNotebook then DebugMsg([' *** NotebookFindNotebookAtPointerEvent: inside RightPanelNotebook']);
+ }
+end;
+
+function TFMain.NotebookMoveTabToAnotherNotebook(Sender: TObject; Destination: TEphyNotebook; const SourceTabNo, DestTabNo: integer): boolean;
+var LeftPanel: boolean;
+ ATargetEngine, ASrcEngine: TPanelEngine;
+ ATargetTabList, ASrcTabList: TStringList;
+ ATargetPathsHighlight, ASrcPathsHighlight: TStringList;
+ ATargetTabEngines, ASrcTabEngines: TList;
+ ATargetTabSortIDs, ASrcTabSortIDs: TList;
+ ATargetTabSortTypes, ASrcTabSortTypes: TList;
+ APath: string;
+ DontShowAgain: boolean;
+ dst_no: integer;
+begin
+ DontShowAgain := False;
+ DebugMsg([' *** NotebookMoveTabToAnotherNotebook(SourceTabNo = ', SourceTabNo, ', DestTabNo = ', DestTabNo, ')']);
+ LeftPanel := Sender = LeftPanelNotebook;
+ if LeftPanel then begin
+ ATargetEngine := RightPanelEngine;
+ ATargetTabList := RightPanelTabs;
+ ASrcEngine := LeftPanelEngine;
+ ASrcTabList := LeftPanelTabs;
+ ATargetPathsHighlight := RightPathsHighlight;
+ ATargetTabEngines := RightTabEngines;
+ ATargetTabSortIDs := RightTabSortIDs;
+ ATargetTabSortTypes := RightTabSortTypes;
+ ASrcPathsHighlight := LeftPathsHighlight;
+ ASrcTabEngines := LeftTabEngines;
+ ASrcTabSortIDs := LeftTabSortIDs;
+ ASrcTabSortTypes := LeftTabSortTypes;
+ end else begin
+ ATargetEngine := LeftPanelEngine;
+ ATargetTabList := LeftPanelTabs;
+ ASrcEngine := RightPanelEngine;
+ ASrcTabList := RightPanelTabs;
+ ATargetPathsHighlight := LeftPathsHighlight;
+ ATargetTabEngines := LeftTabEngines;
+ ATargetTabSortIDs := LeftTabSortIDs;
+ ATargetTabSortTypes := LeftTabSortTypes;
+ ASrcPathsHighlight := RightPathsHighlight;
+ ASrcTabEngines := RightTabEngines;
+ ASrcTabSortIDs := RightTabSortIDs;
+ ASrcTabSortTypes := RightTabSortTypes;
+ end;
+
+ if (SourceTabNo < 0) or (SourceTabNo > ASrcTabList.Count - 1) then begin
+ DebugMsg([' *** NotebookMoveTabToAnotherNotebook: invalid SourceTabNo']);
+ Exit;
+ end;
+
+ APath := TPanelEngine(ASrcTabEngines[SourceTabNo]).Path;
+ if TPanelEngine(ASrcTabEngines[SourceTabNo]) is TVFSEngine then begin
+ while TPanelEngine(ASrcTabEngines[SourceTabNo]) is TVFSEngine do begin
+ APath := TPanelEngine(ASrcTabEngines[SourceTabNo]).SavePath;
+ ASrcTabEngines[SourceTabNo] := TPanelEngine(ASrcTabEngines[SourceTabNo]).ParentEngine;
+ end;
+ // Show warning that we couldn't duplicate the VFS location
+ if ConfDuplicateTabWarning then begin
+ MessageBoxShowOnce(LANGDuplicateTabWarning, LANGDontShowAgain, DontShowAgain, [mbOK], mbInfo, mbOK, mbOK);
+ if DontShowAgain then begin
+ ConfDuplicateTabWarning := False;
+ WriteMainGUISettings;
+ end;
+ end;
+ end;
+
+ while ATargetEngine is TVFSEngine do
+ ATargetEngine := ATargetEngine.ParentEngine;
+
+ dst_no := DestTabNo;
+ if dst_no < 0 then dst_no := ATargetTabList.Count + Ord(ATargetTabList.Count = 0);
+ CloseTab(SourceTabNo, LeftPanel);
+ NewTabInternal(not LeftPanel, ATargetEngine, APath, dst_no);
+
+ Result := True;
+end;
+
+procedure TFMain.NotebookTabFocusOnlyEvent(Sender: TObject; const TabNum: integer);
+begin
+ if Sender = LeftPanelNotebook then LeftListView.SetFocus else
+ if Sender = RightPanelNotebook then RightListView.SetFocus
+ else Exit;
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+function TFMain.HandleVFSArchive(const Ext, FullPath, HighlightItem, TargetPath: string): boolean;
+var i, j: integer;
+ Plugin: TVFSPlugin;
+begin
+ Result := False;
+ Plugin := nil;
+
+ // Try to find a plugin which can handle open the archive type
+ if PluginList.Count > 0 then
+ for i := 0 to PluginList.Count - 1 do begin
+ Plugin := TVFSPlugin(PluginList[i]);
+ if Length(Plugin.Extensions) > 0 then
+ for j := 0 to Length(Plugin.Extensions) - 1 do begin
+// DebugMsg(['Extension = "', Plugin.Extensions[j], '", Ext = "', Ext, '"']);
+ if AnsiCompareText(Plugin.Extensions[j], Ext) = 0 then begin
+ Result := True;
+ Break;
+ end;
+ end;
+ if Result then Break;
+ end;
+ if not Result then Exit; // we didn't find appropriate plugin
+ DebugMsg(['Found plugin ''', Plugin.VFSName, ''', trying to open the file ''', FullPath, '''']);
+
+ ChangingDir(LeftLastFocused, TargetPath, FullPath, HighlightItem, False, False, Plugin);
+end;
+
+procedure TFMain.CloseVFS(LeftPanel, SurpressRefresh: boolean);
+var Engine: TPanelEngine;
+begin
+ if LeftPanel then Engine := LeftPanelEngine
+ else Engine := RightPanelEngine;
+ if not Assigned(Engine.ParentEngine) or (not (Engine is TVFSEngine)) then Exit;
+ if LeftPanel then LeftPanelEngine := Engine.ParentEngine
+ else RightPanelEngine := Engine.ParentEngine;
+ if not SurpressRefresh then ChangingDir(LeftPanel, Engine.SavePath, Engine.ParentEngine.LastHighlightItem, '', False, True);
+
+ if not TVFSEngine(Engine).VFSClose then DebugMsg(['Error closing the engine...']);
+ Engine.Free;
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure TFMain.ShowBookmarkQuick(LeftPanel: boolean);
+var SenderControl: TGTKControl;
+begin
+ if LeftPanel then SenderControl := LeftBookmarkButton
+ else SenderControl := RightBookmarkButton;
+ miAddBookmark.Visible := False;
+ miEditBookmarks.Visible := False;
+ miBookmarksSeparator.Visible := False;
+
+ gtk_menu_popup(PGtkMenu(mnuBookmarks.FMenu), nil, nil, menu_position_cb, SenderControl.FWidget, 1, GDK_CURRENT_TIME);
+ if LeftPanel then LeftListView.SetFocus else RightListView.SetFocus;
+end;
+
+procedure TFMain.mnuBookmarksPopup(Sender: TObject);
+begin
+ miAddBookmark.Visible := True;
+ miEditBookmarks.Visible := False;
+ miBookmarksSeparator.Visible := mnuBookmarks.Count > 3;
+end;
+
+
+(********************************************************************************************************************************)
+procedure TFMain.miSearchClick(Sender: TObject);
+var Engine: TPanelEngine;
+ DataList: TList;
+ AListView: TGTKListView;
+ Ext: string;
+ i: integer;
+begin
+ if LeftLastFocused then Engine := LeftPanelEngine
+ else Engine := RightPanelEngine;
+
+ try
+ FSearch := TFSearch.Create(Self);
+ FSearch.ParentForm := FMain;
+ FSearch.Engine := Engine;
+ FSearch.SearchInEntry.Text := ANSIToUTF8(ExcludeTrailingPathDelimiter(Engine.Path));
+ if Length(FSearch.SearchInEntry.Text) < 1 then FSearch.SearchInEntry.Text := '/';
+ case FSearch.Run of
+ mbOK: ;
+ mbApply: begin
+ if Length(FSearch.GoToFileArchive) > 0 then begin
+ Ext := ANSIUpperCase(Trim(Copy(FSearch.GoToFileArchive, LastDelimiter('.', FSearch.GoToFileArchive) + 1, Length(FSearch.GoToFileArchive) - LastDelimiter('.', FSearch.GoToFileArchive))));
+ HandleVFSArchive(Ext, FSearch.GoToFileArchive, ExtractFileName(FSearch.GoToFileArchive), ExtractFilePath(FSearch.GoToFile));
+
+ if LeftLastFocused then begin
+ Engine := LeftPanelEngine;
+ DataList := LeftPanelData;
+ AListView := LeftListView;
+ end else begin
+ Engine := RightPanelEngine;
+ DataList := RightPanelData;
+ AListView := RightListView;
+ end;
+
+ if Engine is TVFSEngine then begin
+ Engine.SavePath := ExtractFilePath(FSearch.GoToFileArchive);
+// (Engine as TVFSEngine).ParentEngine.LastHighlightItem := ExtractFileName(FSearch.GoToFileArchive);
+ for i := 0 to DataList.Count - 1 do
+ if ANSICompareText(string(PDataItem(DataList[i])^.AName), ExtractFileName(FSearch.GoToFile)) = 0 then begin
+ AListView.Items[i].Selected := True;
+ AListView.Items[i].SetCursor(0, False, not Application.GTKVersion_2_2_0_Up, 0.5, 0);
+ Break;
+ end;
+ end;
+ end else ChangingDir(LeftLastFocused, ExtractFilePath(FSearch.GoToFile), ExtractFileName(FSearch.GoToFile));
+ end;
+ end;
+ finally
+ FSearch.Free;
+ Application.ProcessMessages;
+ InternalLockInit(False);
+ end;
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure TFMain.miOpenConnectionClick(Sender: TObject);
+var Engine: TVFSEngine;
+ SourceEngine: TPanelEngine;
+ i, j: integer;
+ VFSPlugin: TVFSPlugin;
+ ConnInfo: TConnMgrItem;
+ b: boolean;
+begin
+ try
+ InternalLock;
+ FConnectionManager := TFConnectionManager.Create(Self);
+ b := FConnectionManager.Run = mbOK;
+ WriteConnections; // Save the list to the file
+
+ if b then begin
+ if PluginList.Count = 0 then begin
+ Application.MessageBox(LANGThereIsNoModuleAvailable, [mbOK], mbError, mbOK, mbOK);
+ Exit;
+ end;
+ if FConnectionManager.ListView.Selected = nil then Exit;
+ ConnInfo := FConnectionManager.ListView.Selected.AsPointer(0);
+ if ConnInfo = nil then Exit;
+
+ // Find the VFS module to use for this connection
+ VFSPlugin := nil;
+ if Length(ConnInfo.PluginID) > 0 then
+ for i := 0 to PluginList.Count - 1 do
+ if TVFSPlugin(PluginList[i]).VFSName = ConnInfo.PluginID then begin
+ VFSPlugin := PluginList[i];
+ Break;
+ end;
+ if VFSPlugin = nil then begin
+ for i := 0 to PluginList.Count - 1 do begin
+ if Length(TVFSPlugin(PluginList[i]).Services) > 0 then
+ for j := 0 to Length(TVFSPlugin(PluginList[i]).Services) - 1 do
+ if AnsiCompareText(TVFSPlugin(PluginList[i]).Services[j], ConnInfo.ServiceType) = 0 then begin
+ VFSPlugin := PluginList[i];
+ Break;
+ end;
+ if VFSPlugin <> nil then Break;
+ end;
+ if VFSPlugin = nil then VFSPlugin := PluginList[0]; // Fallback in hope something else could handle it
+ end;
+
+ if (LeftLastFocused and (LeftPanelEngine is TVFSEngine)) or ((not LeftLastFocused) and (RightPanelEngine is TVFSEngine)) then
+ begin
+ if Application.MessageBox(LANGCloseOpenConnection, [mbYes, mbNo], mbWarning, mbYes, mbNo) <> mbYes then Exit;
+ CloseVFS(LeftLastFocused, True);
+ end;
+
+ // Construct the VFS Engine and try to open the connection
+ if LeftLastFocused then SourceEngine := LeftPanelEngine
+ else SourceEngine := RightPanelEngine;
+ Engine := TVFSEngine.Create(VFSPlugin);
+ Engine.ParentEngine := SourceEngine;
+ Engine.SavePath := SourceEngine.Path;
+ if not Engine.VFSOpenURI(ConnInfo.URI) then begin
+ Application.MessageBox(LANGCouldntOpenURI, [mbOK], mbError, mbOK, mbOK);
+ Exit;
+ end;
+ if LeftLastFocused then LeftPanelEngine := Engine
+ else RightPanelEngine := Engine;
+ DoRefresh(LeftLastFocused, False, False);
+ end;
+ finally
+ FConnectionManager.Free;
+ Application.ProcessMessages;
+ InternalLockInit(False);
+ end;
+end;
+
+procedure TFMain.miDisconnectClick(Sender: TObject);
+begin
+ CloseVFS(LeftLastFocused, False);
+end;
+
+procedure TFMain.DisconnectButtonClick(Sender: TObject);
+begin
+ CloseVFS(Sender = LeftDisconnectButton, False);
+ if (Sender = LeftDisconnectButton) and (not LeftListView.Focused) then LeftListView.SetFocus else
+ if (Sender = RightDisconnectButton) and (not RightListView.Focused) then RightListView.SetFocus;
+end;
+
+procedure TFMain.LeaveArchiveButtonClick(Sender: TObject);
+begin
+ CloseVFS(Sender = LeftLeaveArchiveButton, False);
+ if (Sender = LeftLeaveArchiveButton) and (not LeftListView.Focused) then LeftListView.SetFocus else
+ if (Sender = RightLeaveArchiveButton) and (not RightListView.Focused) then RightListView.SetFocus;
+end;
+
+procedure TFMain.OpenTerminalButtonClick(Sender: TObject);
+var CurrentPath: string;
+ AEngine: TPanelEngine;
+ Error: integer;
+begin
+ Error := 0;
+ if LeftLastFocused then AEngine := LeftPanelEngine
+ else AEngine := RightPanelEngine;
+ while not (AEngine is TLocalTreeEngine) do AEngine := AEngine.ParentEngine;
+ CurrentPath := AEngine.Path;
+ ChDir(CurrentPath);
+ ExecuteProgram('bash', CurrentPath, False, True, Error);
+ ChDir('/');
+end;
+
+
+(********************************************************************************************************************************)
+procedure TFMain.miFilePropertiesClick(Sender: TObject);
+var LeftPanel: boolean;
+ AListView: TGTKListView;
+ Engine: TPanelEngine;
+ DataList: TList;
+ i: integer;
+ SelCount: longint;
+ AFile, NextItem1, NextItem2: string;
+ Stat: PDataItemSL;
+{ AWorkingThread: TWorkerThread;
+ AFProgress: TFProgress; }
+begin
+ try
+ InternalLock;
+ if LeftListView.Focused then LeftPanel := True else
+ if RightListView.Focused then LeftPanel := False else
+ LeftPanel := LeftLastFocused;
+ if LeftPanel then begin
+ AListView := LeftListView;
+ Engine := LeftPanelEngine;
+ DataList := LeftPanelData;
+ end else begin
+ AListView := RightListView;
+ Engine := RightPanelEngine;
+ DataList := RightPanelData;
+ end;
+
+ SelCount := 0;
+ if DataList.Count > 0 then
+ for i := 0 to DataList.Count - 1 do
+ with PDataItem(DataList[i])^ do
+ if Selected and (not UpDir) then Inc(SelCount);
+ if (SelCount = 0) and ((not Assigned(AListView.Selected)) {or PDataItem(AListView.Selected.Data)^.UpDir}) then begin
+ Application.MessageBox(LANGNoFilesSelected, [mbOK], mbInfo, mbNone, mbOK);
+ Exit;
+ end;
+
+ AFile := '';
+ if SelCount = 0 then AFile := PDataItem(AListView.Selected.Data)^.AName else
+ for i := 0 to DataList.Count - 1 do
+ with PDataItem(DataList[i])^ do
+ if Selected and (not UpDir) then begin
+ AFile := AName;
+ Break;
+ end;
+
+ if AFile <> '' then
+ try
+ FProperties := TFProperties.Create(Self);
+ Stat := Engine.GetFileInfoSL(IncludeTrailingPathDelimiter(Engine.Path) + AFile);
+ if not Assigned(Stat) then Exit;
+// FProperties.AssignMode(Stat^.Mode, AFile, Stat^.UID, Stat^.GID);
+ FProperties.DisplayFileName := AFile;
+ if FProperties.Run = mbOK then begin
+{ FindNextSelected(AListView, DataList, NextItem1, NextItem2);
+
+ AWorkingThread := TWorkerThread.Create;
+ AFProgress := TFProgress.Create(Self);
+ try
+ AFProgress.SetNumBars(False);
+ AFProgress.ProgressBar.Value := 0;
+ AFProgress.Label1.Caption := LANGChownProgress;
+ AWorkingThread.ProgressForm := AFProgress;
+ if Assigned(AListView.Selected) then AWorkingThread.SelectedItem := AListView.Selected.Data;
+ AWorkingThread.ParamBool1 := FChown.RecursiveCheckButton.Checked;
+ AWorkingThread.ParamCardinal1 := FChown.LastUID;
+ AWorkingThread.ParamCardinal2 := FChown.LastGID;
+ AWorkingThread.Engine := Engine;
+ AWorkingThread.LeftPanel := LeftPanel;
+ AWorkingThread.DataList := DataList;
+ AWorkingThread.WorkerProcedure := ChownFilesWorker;
+ AWorkingThread.Resume;
+ AFProgress.ParentForm := FMain;
+ if (SelCount > 1) or FChown.RecursiveCheckButton.Checked then AFProgress.ShowModal;
+ ProcessProgressThread(AWorkingThread, AFProgress);
+ AFProgress.Close;
+ finally
+ AFProgress.Free;
+ AWorkingThread.Free;
+ end; }
+
+ NextItem1 := '';
+ NextItem2 := '';
+ ChangingDir(LeftPanel, Engine.Path, NextItem1, NextItem2);
+ DoRefresh(not LeftPanel, True, True);
+ end;
+ finally
+ FProperties.Free;
+ end;
+ finally
+ Application.ProcessMessages;
+ InternalLockInit(False);
+ end;
+end;
+
+(********************************************************************************************************************************)
+procedure TFMain.CopyFilenamesToClipboard(FullPaths, LeftPanel: boolean);
+var DataList: TList;
+ Engine: TPanelEngine;
+ AListView: TGTKListView;
+ i, x: longint;
+ SelCount: longint;
+ clip: PGtkClipboard;
+ s: string;
+begin
+ if LeftPanel then begin
+ AListView := LeftListView;
+ Engine := LeftPanelEngine;
+ DataList := LeftPanelData;
+ end else begin
+ AListView := RightListView;
+ Engine := RightPanelEngine;
+ DataList := RightPanelData;
+ end;
+
+ SelCount := 0;
+ if DataList.Count > 0 then
+ for i := 0 to DataList.Count - 1 do
+ with PDataItem(DataList[i])^ do
+ if Selected and (not UpDir) then Inc(SelCount);
+ if (SelCount = 0) and ((not Assigned(AListView.Selected)) or PDataItem(AListView.Selected.Data)^.UpDir)
+ then Exit; // Silently do nothing
+
+ if SelCount = 0 then begin
+ s := PDataItem(AListView.Selected.Data)^.AName;
+ if FullPaths then s := IncludeTrailingPathDelimiter(Engine.GetPath) + s;
+ end else begin
+ s := '';
+ if DataList.Count > 0 then
+ for i := 0 to DataList.Count - 1 do begin
+ x := AListView.ConvertFromSorted(i);
+ if (x >= 0) and (x < DataList.Count) and PDataItem(DataList[x])^.Selected then begin
+ if FullPaths then s := s + IncludeTrailingPathDelimiter(Engine.GetPath);
+ s := s + PDataItem(DataList[x])^.AName + #10;
+ end;
+ end;
+ end;
+
+ clip := gtk_clipboard_get(gdk_atom_intern('CLIPBOARD', False));
+ gtk_clipboard_set_text(clip, StringToPgchar(s), Length(s));
+end;
+
+
+(********************************************************************************************************************************)
+function TFMain.HandleRunFromArchive(var APath: string; Engine: TPanelEngine; Command, FileTypeDesc: string; BypassDialog: boolean): boolean;
+var Res: TMessageButton;
+ Stat: PDataItemSl;
+ s: string;
+ AWorkingThread: TWorkerThread;
+ AFProgress: TFProgress;
+ tmp: PChar;
+ LocalEngine: TLocalTreeEngine;
+ AListView: TGTKListView;
+ DataList: TList;
+ err: integer;
+begin
+ Result := False;
+ try
+ if not BypassDialog then begin
+ Stat := Engine.GetFileInfoSL(APath);
+ FRunFromVFS := TFRunFromVFS.Create(Self);
+ FRunFromVFS.FileNameLabel2.Caption := Format('%s<span weight="ultrabold"> </span>', [APath]);
+ if FileTypeDesc = '' then FileTypeDesc := LANGHandleRunFromArchive_FileTypeDesc_Unknown;
+ FRunFromVFS.FileTypeLabel2.Caption := Format('%s<span weight="ultrabold"> </span>', [FileTypeDesc]);
+ if Assigned(Stat) then begin
+ if (ConfSizeFormat < 5) or (Stat^.Size < 1024) then s := Format(' %s', [LANGHandleRunFromArchive_Bytes]);
+ FRunFromVFS.SizeLabel2.Caption := Format('%s%s<span weight="ultrabold"> </span>', [ANSIToUTF8(FormatSize(Stat^.Size, 0)), s]);
+ if (ConfSizeFormat < 5) or (Stat^.Size < 1024) then s := Format(' %s', [LANGHandleRunFromArchive_Bytes]);
+ FRunFromVFS.PackedSizeLabel2.Caption := Format('%s%s<span weight="ultrabold"> </span>', [ANSIToUTF8(FormatSize(Stat^.Size, 0)), s]);
+ FRunFromVFS.DateLabel2.Caption := Format('%s<span weight="ultrabold"> </span>', [FormatDateTime('ddddd tt', Stat^.ModifyTime)]);
+ if (Command = '') and (not Stat^.IsExecutable) then begin
+ FRunFromVFS.OpensWithLabel2.Caption := Format('%s<span weight="ultrabold"> </span>', [LANGHandleRunFromArchive_NotAssociated]);
+ FRunFromVFS.ExecuteButton.Enabled := False;
+ FRunFromVFS.ExecuteAllButton.Enabled := False;
+ end else begin
+ if Command = '' then Command := LANGHandleRunFromArchive_SelfExecutable;
+ FRunFromVFS.OpensWithLabel2.Caption := Format('%s<span weight="ultrabold"> </span>', [Command]);
+ end;
+ end else begin
+ FRunFromVFS.SizeLabel2.Caption := Format('%s<span weight="ultrabold"> </span>', ['??']);
+ FRunFromVFS.PackedSizeLabel2.Caption := Format('%s<span weight="ultrabold"> </span>', ['??']);
+ FRunFromVFS.DateLabel2.Caption := Format('%s<span weight="ultrabold"> </span>', ['??']);
+ FRunFromVFS.OpensWithLabel2.Caption := Format('%s<span weight="ultrabold"> </span>', [Command]);
+ end;
+ FRunFromVFS.FileNameLabel2.UseMarkup := True;
+ FRunFromVFS.FileTypeLabel2.UseMarkup := True;
+ FRunFromVFS.SizeLabel2.UseMarkup := True;
+ FRunFromVFS.PackedSizeLabel2.UseMarkup := True;
+ FRunFromVFS.DateLabel2.UseMarkup := True;
+ FRunFromVFS.OpensWithLabel2.UseMarkup := True;
+
+ FreeDataItem(Stat);
+
+ Res := FRunFromVFS.Run;
+ FRunFromVFS.Close;
+ FRunFromVFS.Free;
+ Application.ProcessMessages;
+ end else Res := mbYes;
+ if Res in [mbYes, mbNo] then begin
+ Result := False;
+ // Handle password
+ if (Engine is TVFSEngine) and TVFSEngine(Engine).GetPasswordRequired and (Length(TVFSEngine(Engine).Password) < 1) then
+ if not HandleSetPassword(Engine) then Exit;
+
+ if Res = mbYes then DebugMsg(['(II) HandleRunFromArchive: Selected extract and execute single item'])
+ else DebugMsg(['(II) HandleRunFromArchive: Selected extract all and execute']);
+ s := ConfTempPath + '-XXXXXX';
+ tmp := strdup(PChar(s));
+ tmp := mkdtemp(tmp);
+ if tmp = nil then begin
+ err := errno;
+ DebugMsg(['(EE) HandleRunFromArchive: Couldn''t create temporary directory: ', strerror(err)]);
+ Application.MessageBox(PChar(Format(LANGHandleRunFromArchive_CouldntCreateTemporaryDirectory, [s, string(strerror(err))])), [mbOK], mbError, mbOK, mbOK);
+ Result := False;
+ Exit;
+ end;
+ DebugMsg(['(II) HandleRunFromArchive: Using temporary directory: ', tmp]);
+ UsedTempPaths.Add(string(tmp));
+
+ Engine.Path := ExtractFilePath(APath);
+ // Extract the files
+ try
+ AWorkingThread := TWorkerThread.Create;
+ DebugMsg(['TFMain.HandleRunFromArchive: Creating thread...']);
+ AFProgress := TFProgress.Create(Self);
+ AFProgress.Label1.Caption := LANGCopySC;
+ AFProgress.SetNumBars(True);
+ AFProgress.ProgressBar.Value := 0;
+ AWorkingThread.ProgressForm := AFProgress;
+ LocalEngine := TLocalTreeEngine.Create;
+ LocalEngine.SetPath(tmp);
+ AWorkingThread.ExtractFromVFSMode := True;
+ AWorkingThread.DestEngine := LocalEngine;
+ AWorkingThread.SrcEngine := Engine;
+ if LeftLastFocused then begin
+ AListView := LeftListView;
+ DataList := LeftPanelData;
+ end else begin
+ AListView := RightListView;
+ DataList := RightPanelData;
+ end;
+ if Assigned(AListView.Selected) then AWorkingThread.SelectedItem := AListView.Selected.Data;
+ AWorkingThread.ExtractFromVFSAll := Res = mbNo;
+ AWorkingThread.LeftPanel := LeftLastFocused;
+ AWorkingThread.DataList := DataList;
+ AWorkingThread.WorkerProcedure := CopyFilesWorker;
+ AWorkingThread.ParamBool3 := True;
+ AWorkingThread.ParamBool4 := False;
+ AWorkingThread.ParamBool5 := True;
+ AWorkingThread.ParamString1 := string(tmp);
+ AWorkingThread.ParamString2 := APath;
+ AWorkingThread.ParamDataItem1 := nil;
+ DebugMsg(['*** Copy: AWorkingThread.Resume']);
+ AWorkingThread.Resume;
+ DebugMsg(['*** Copy: AWorkingThread.Resumed.']);
+ AFProgress.ParentForm := FMain;
+ AFProgress.ShowModal;
+ ProcessProgressThread(AWorkingThread, AFProgress);
+ AFProgress.Close;
+ Result := {(not AWorkingThread.Cancelled) and} (not AWorkingThread.ErrorHappened);
+ finally
+ AFProgress.Free;
+ DebugMsg(['TFMain.HandleRunFromArchive: Freeing thread...']);
+ AWorkingThread.Free;
+ LocalEngine.Free;
+ end;
+
+ DebugMsg(['(II) HandleRunFromArchive: Old path = ', APath]);
+ if Result then begin
+ if Res = mbYes then APath := IncludeTrailingPathDelimiter(string(tmp)) + ExtractFileName(APath)
+ else APath := ExcludeTrailingPathDelimiter(string(tmp)) + APath;
+ end;
+ DebugMsg(['(II) HandleRunFromArchive: New path = ', APath]);
+
+
+ Libc.free(tmp);
+ DebugMsg(['(II) HandleRunFromArchive: Copy OK, Result = ', Result]);
+ end;
+
+ finally
+ Application.ProcessMessages;
+ end;
+end;
+
+procedure TFMain.PasswordButtonClick(Sender: TObject);
+begin
+ if Sender = LeftPasswordButton then HandleSetPassword(LeftPanelEngine) else
+ if Sender = RightPasswordButton then HandleSetPassword(RightPanelEngine);
+end;
+
+function TFMain.HandleSetPassword(Engine: TPanelEngine): boolean;
+begin
+ if not (Engine is TVFSEngine) then Exit;
+ try
+ FSetPassword := TFSetPassword.Create(Self);
+ FSetPassword.Entry.Text := TVFSEngine(Engine).Password;
+ if Length(FSetPassword.Entry.Text) > 0 then FSetPassword.Entry.SelectAll;
+ Result := FSetPassword.Run = mbOK;
+ if Result then TVFSEngine(Engine).Password := FSetPassword.Entry.Text;
+ FSetPassword.Free;
+ except
+ on E: Exception do DebugMsg(['*** Exception raised in FMain.HandleSetPassword: (', E.ClassName, '): ', E.Message]);
+ end;
+end;
+
+
+
+
+
+end.
+
diff --git a/UMounterPrefs.pas b/UMounterPrefs.pas
new file mode 100644
index 0000000..6a08454
--- /dev/null
+++ b/UMounterPrefs.pas
@@ -0,0 +1,565 @@
+(*
+ Tux Commander - UMounterPrefs - Mounter Preferences dialog
+ Copyright (C) 2004 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit UMounterPrefs;
+
+interface
+
+uses
+ glib2, gdk2, gtk2, pango, SysUtils, Types, Classes, Variants, GTKControls, GTKForms, GTKStdCtrls, GTKExtCtrls, GTKConsts,
+ GTKView, GTKUtils, GTKDialogs, GTKPixbuf, GTKClasses, GTKMenus,
+ UCoreClasses, UGnome;
+
+type
+ TFMounterPrefs = class(TGTKDialog)
+ TitleFrame: TGTKFrame;
+ TitleLabel: TGTKLabel;
+ TitleEventBox: TGTKEventBox;
+ TitleIcon: TGTKImage;
+ TitleHBox: TGTKHBox;
+ ListView: TGTKListView;
+ ListViewScrolledWindow: TGTKScrolledWindow;
+ ListViewFrame, PropertiesFrame: TGTKFrame;
+ MounterListTable, PropertiesTable: TGTKTable;
+ AddItemButton, RemoveItemButton: TGTKButton;
+ MoveUpButton, MoveDownButton: TGTKImageButton;
+ HBox1: TGTKHBox;
+ DisplayTextLabel, MountPointLabel, MountDeviceLabel, MountCommandLabel, UmountCommandLabel, IconLabel, DeviceTypeLabel: TGTKLabel;
+ DisplayTextEntry, MountPointEntry, MountDeviceEntry, MountCommandEntry, UmountCommandEntry: TGTKEntry;
+ IconEntry: TGnomeIconEntry;
+ IconEntry2: TGTKButton;
+ DeviceTypeOptionMenu: TGTKOptionMenu;
+ miLocalDisk, miRemovable, miCD, miFloppy, miNetwork: TGTKMenuItem;
+ UseFSTabDefaultsCheckBox: TGTKCheckButton;
+ ToggleModeCheckBox: TGTKCheckButton;
+ procedure FormCreate(Sender: TObject); override;
+ procedure FormDestroy(Sender: TObject);
+ procedure ListViewSelectionChanged(Sender: TObject);
+ procedure UseFSTabDefaultsCheckBoxToggled(Sender: TObject);
+ procedure AddItemButtonClick(Sender: TObject);
+ procedure RemoveItemButtonClick(Sender: TObject);
+ procedure MoveUpDownButtonButtonClick(Sender: TObject);
+ procedure DisplayTextEntryChanged(Sender: TObject);
+ procedure MountPointEntryChanged(Sender: TObject);
+ procedure MountDeviceEntryChanged(Sender: TObject);
+ procedure MountCommandEntryChanged(Sender: TObject);
+ procedure UmountCommandEntryChanged(Sender: TObject);
+ procedure DeviceTypeOptionMenuChanged(Sender: TObject);
+ procedure IconEntryChanged(Sender: TObject);
+ procedure IconEntry2Click(Sender: TObject);
+ private
+ FUseGnomeIconEntry: boolean;
+ procedure RefreshIcon(ItemIndex: integer);
+ public
+ InternalMounterList: TList;
+ procedure AssignAssocList(List: TList);
+ procedure FillList;
+ procedure CleanItems;
+ end;
+
+var
+ FMounterPrefs: TFMounterPrefs;
+
+implementation
+
+uses ULocale, UFileAssoc, UCoreUtils, UConfig, UCore;
+
+function TGTKListView_drag_end(widget: PGtkWidget; drag_context: PGdkDragContext; user_data: gpointer): gboolean; cdecl; forward;
+
+procedure TFMounterPrefs.FormCreate(Sender: TObject);
+const row_targets: TGtkTargetEntry = (target:'GTK_TREE_MODEL_ROW'; flags:GTK_TARGET_SAME_APP; info:100);
+var Column: TGTKTreeViewColumn;
+begin
+ FUseGnomeIconEntry := Assigned(gnome_icon_entry_new) and Assigned(gnome_icon_entry_get_filename) and Assigned(gnome_icon_entry_set_filename);
+// FUseGnomeIconEntry := False;
+ SetDefaultSize(500, 520);
+ Caption := LANGMounterPrefs_Caption;
+ Buttons := [mbOK, mbCancel];
+ ShowSeparator := False;
+ TitleEventBox := TGTKEventBox.Create(Self);
+ TitleLabel := TGTKLabel.Create(Self);
+ TitleLabel.Caption := Format('<span size="x-large" weight="ultrabold">%s</span>', [LANGMounterPrefs_TitleLabelCaption]);
+ TitleLabel.UseMarkup := True;
+ TitleLabel.XAlign := 0;
+ TitleLabel.XPadding := 0;
+ TitleLabel.YPadding := 3;
+ TitleEventBox.ControlState := csPrelight;
+ TitleFrame := TGTKFrame.CreateWithoutLabel(Self);
+ TitleFrame.ShadowType := stShadowOut;
+ TitleIcon := TGTKImage.Create(Self);
+ TitleIcon.SetFromStock('gtk-cdrom', isLargeToolbar);
+ TitleHBox := TGTKHBox.Create(Self);
+ TitleHBox.Homogeneous := False;
+ TitleHBox.AddControlEx(TGTKEventBox.Create(Self), False, False, 5);
+ TitleHBox.AddControlEx(TitleIcon, False, False, 0);
+ TitleHBox.AddControlEx(TitleLabel, True, True, 10);
+ TitleEventBox.AddControl(TitleHBox);
+ TitleFrame.AddControl(TitleEventBox);
+ ClientArea.AddControlEx(TitleFrame, False, True, 0);
+
+ ListViewFrame := TGTKFrame.Create(Self);
+ ListViewFrame.Caption := LANGMounterPrefs_ListViewFrameCaption;
+ ListViewFrame.BorderWidth := 7;
+ ClientArea.AddControlEx(ListViewFrame, True, True, 0);
+ MounterListTable := TGTKTable.Create(Self);
+ ListViewFrame.AddControl(MounterListTable);
+ MounterListTable.BorderWidth := 7;
+
+ ListView := TGTKListView.CreateTyped(Self, False, [lcText, lcText, lcText, lcPointer, lcPixbuf]);
+ g_signal_connect(ListView.FWidget, 'drag-end', G_CALLBACK(@TGTKListView_drag_end), nil);
+ gtk_tree_view_enable_model_drag_source(GTK_TREE_VIEW(ListView.FWidget), GDK_BUTTON1_MASK, @row_targets, 1, GDK_ACTION_MOVE or GDK_ACTION_COPY);
+ gtk_tree_view_enable_model_drag_dest(GTK_TREE_VIEW(ListView.FWidget), @row_targets, 1, GDK_ACTION_MOVE or GDK_ACTION_COPY);
+ ListView.RulesHint := True;
+// ListView.Reorderable := True;
+ Column := ListView.Columns.AddTyped(ctImageText);
+ Column.Caption := LANGMounterPrefs_MountName;
+ Column.AddImageAttribute('pixbuf', 4);
+ Column.AddAttribute('text', 0);
+ Column.Resizable := True;
+ Column.FixedWidth := 150;
+ Column.SizingMode := smFixed;
+// Column.Clickable := True;
+ Column := ListView.Columns.Add;
+ Column.Caption := LANGMounterPrefs_MountPoint;
+ Column.AddAttribute('text', 1);
+ Column.Resizable := True;
+ Column.FixedWidth := 200;
+ Column.SizingMode := smFixed;
+// Column.Clickable := True;
+ Column := ListView.Columns.Add;
+ Column.Caption := LANGMounterPrefs_Device;
+ Column.AddAttribute('text', 2);
+ Column.Resizable := True;
+ Column.FixedWidth := 150;
+ Column.SizingMode := smFixed;
+// Column.Clickable := True;
+ ListViewScrolledWindow := TGTKScrolledWindow.Create(Self);
+ ListViewScrolledWindow.AddControl(ListView);
+ ListViewScrolledWindow.HorizScrollBarPolicy := sbAutomatic;
+ ListViewScrolledWindow.VertScrollBarPolicy := sbAutomatic;
+ ListViewScrolledWindow.ShadowType := stShadowIn;
+
+ AddItemButton := TGTKButton.CreateFromStock(Self, 'gtk-add');
+ RemoveItemButton := TGTKButton.CreateFromStock(Self, 'gtk-remove');
+ HBox1 := TGTKHBox.Create(Self);
+ HBox1.Homogeneous := True;
+ HBox1.AddControlEx(AddItemButton, True, True, 2);
+ HBox1.AddControlEx(RemoveItemButton, True, True, 2);
+ MoveUpButton := TGTKImageButton.CreateWithoutLabel(Self);
+ MoveUpButton.SetFromStock('gtk-go-up', isSmallToolbar);
+ MoveUpButton.Tooltip := LANGMounterPrefs_MoveUpButtonTooltip;
+ MoveUpButton.CanFocus := False;
+ MoveDownButton := TGTKImageButton.CreateWithoutLabel(Self);
+ MoveDownButton.SetFromStock('gtk-go-down', isSmallToolbar);
+ MoveDownButton.Tooltip := LANGMounterPrefs_MoveDownButtonTooltip;
+ MoveDownButton.CanFocus := False;
+
+ UseFSTabDefaultsCheckBox := TGTKCheckButton.CreateWithLabel(Self, LANGMounterPrefs_UseFSTabDefaultsCheckBox);
+ UseFSTabDefaultsCheckBox.Tooltip := LANGMounterPrefs_UseFSTabDefaultsCheckBoxTooltip;
+ ToggleModeCheckBox := TGTKCheckButton.CreateWithLabel(Self, LANGMounterPrefs_ToggleModeCheckBox);
+ ToggleModeCheckBox.Tooltip := LANGMounterPrefs_ToggleModeCheckBoxTooltip;
+
+ MounterListTable.AddControlEx(0, 0, 3, 1, UseFSTabDefaultsCheckBox, [taoExpand, taoFill], [taoShrink, taoFill], 0, 2);
+ MounterListTable.AddControlEx(0, 1, 3, 1, ToggleModeCheckBox, [taoExpand, taoFill], [taoShrink, taoFill], 0, 2);
+ MounterListTable.AddControlEx(0, 2, 3, 4, ListViewScrolledWindow, [taoExpand, taoFill], [taoExpand, taoFill], 0, 5);
+ MounterListTable.AddControlEx(0, 6, 1, 1, TGTKLabel.Create(Self), [taoExpand, taoFill], [taoShrink, taoFill], 0, 2);
+ MounterListTable.AddControlEx(2, 6, 1, 1, HBox1, [taoShrink, taoFill], [taoShrink, taoFill], 0, 2);
+ MounterListTable.AddControlEx(3, 3, 1, 1, MoveUpButton, [taoShrink, taoFill], [taoShrink], 5, 5);
+ MounterListTable.AddControlEx(3, 4, 1, 1, MoveDownButton, [taoShrink, taoFill], [taoShrink], 5, 5);
+ MounterListTable.AddControlEx(3, 2, 1, 1, TGTKLabel.Create(Self), [taoShrink, taoFill], [taoExpand, taoFill], 0, 2);
+ MounterListTable.AddControlEx(3, 5, 1, 1, TGTKLabel.Create(Self), [taoShrink, taoFill], [taoExpand, taoFill], 0, 2);
+
+ PropertiesFrame := TGTKFrame.Create(Self);
+ PropertiesFrame.Caption := LANGMounterPrefs_PropertiesFrameCaption;
+ PropertiesFrame.BorderWidth := 7;
+ PropertiesTable := TGTKTable.Create(Self);
+ PropertiesFrame.AddControl(PropertiesTable);
+ ClientArea.AddControlEx(PropertiesFrame, False, False, 0);
+ DisplayTextLabel := TGTKLabel.Create(Self);
+ DisplayTextLabel.Caption := LANGMounterPrefs_DisplayTextLabelCaption;
+ DisplayTextLabel.XAlign := 0;
+ DisplayTextLabel.UseUnderline := True;
+ MountPointLabel := TGTKLabel.Create(Self);
+ MountPointLabel.Caption := LANGMounterPrefs_MountPointLabelCaption;
+ MountPointLabel.XAlign := 0;
+ MountPointLabel.UseUnderline := True;
+ MountDeviceLabel := TGTKLabel.Create(Self);
+ MountDeviceLabel.Caption := LANGMounterPrefs_MountDeviceLabelCaption;
+ MountDeviceLabel.XAlign := 0;
+ MountDeviceLabel.UseUnderline := True;
+ DeviceTypeLabel := TGTKLabel.Create(Self);
+ DeviceTypeLabel.Caption := LANGMounterPrefs_DeviceTypeLabelCaption;
+ DeviceTypeLabel.XAlign := 0;
+ DeviceTypeLabel.UseUnderline := True;
+ DisplayTextEntry := TGTKEntry.Create(Self);
+ DisplayTextLabel.FocusControl := DisplayTextEntry;
+ MountPointEntry := TGTKEntry.Create(Self);
+ MountPointLabel.FocusControl := MountPointEntry;
+ MountDeviceEntry := TGTKEntry.Create(Self);
+ MountDeviceLabel.FocusControl := MountDeviceEntry;
+ DeviceTypeOptionMenu := TGTKOptionMenu.Create(Self);
+ DeviceTypeLabel.FocusControl := DeviceTypeOptionMenu;
+ miLocalDisk := TGTKMenuItem.CreateTyped(Self, itImageText);
+ miLocalDisk.Caption := LANGMounterPrefs_miLocalDiskCaption;
+ miLocalDisk.Icon := MounterHDD;
+ miRemovable := TGTKMenuItem.CreateTyped(Self, itImageText);
+ miRemovable.Caption := LANGMounterPrefs_miRemovableCaption;
+ miRemovable.Icon := MounterRemovable;
+ miCD := TGTKMenuItem.CreateTyped(Self, itImageText);
+ miCD.Caption := LANGMounterPrefs_miCDCaption;
+ miCD.Icon := MounterCD;
+ miFloppy := TGTKMenuItem.CreateTyped(Self, itImageText);
+ miFloppy.Caption := LANGMounterPrefs_miFloppyCaption;
+ miFloppy.Icon := MounterFloppy;
+ miNetwork := TGTKMenuItem.CreateTyped(Self, itImageText);
+ miNetwork.Caption := LANGMounterPrefs_miNetworkCaption;
+ miNetwork.Icon := MounterNetwork;
+ DeviceTypeOptionMenu.Items.Add(miLocalDisk);
+ DeviceTypeOptionMenu.Items.Add(miRemovable);
+ DeviceTypeOptionMenu.Items.Add(miCD);
+ DeviceTypeOptionMenu.Items.Add(miFloppy);
+ DeviceTypeOptionMenu.Items.Add(miNetwork);
+
+ MountCommandLabel := TGTKLabel.Create(Self);
+ MountCommandLabel.Caption := LANGMounterPrefs_MountCommandLabelCaption;
+ MountCommandLabel.XAlign := 0;
+ MountCommandLabel.UseUnderline := True;
+ UmountCommandLabel := TGTKLabel.Create(Self);
+ UmountCommandLabel.Caption := LANGMounterPrefs_UmountCommandLabelCaption;
+ UmountCommandLabel.XAlign := 0;
+ UmountCommandLabel.UseUnderline := True;
+ MountCommandEntry := TGTKEntry.Create(Self);
+ MountCommandEntry.Tooltip := LANGMounterPrefs_MountCommandEntryTooltip;
+ MountCommandLabel.FocusControl := MountCommandEntry;
+ UmountCommandEntry := TGTKEntry.Create(Self);
+ UmountCommandEntry.Tooltip := LANGMounterPrefs_UmountCommandEntryTooltip;
+ UmountCommandLabel.FocusControl := UmountCommandEntry;
+ PropertiesTable.AddControlEx(0, 0, 1, 1, DisplayTextLabel, [taoShrink, taoFill], [taoShrink, taoFill], 10, 2);
+ PropertiesTable.AddControlEx(1, 0, 2, 1, DisplayTextEntry, [taoExpand, taoFill], [taoShrink, taoFill], 10, 2);
+ PropertiesTable.AddControlEx(0, 1, 1, 1, MountPointLabel, [taoShrink, taoFill], [taoShrink, taoFill], 10, 2);
+ PropertiesTable.AddControlEx(1, 1, 2, 1, MountPointEntry, [taoExpand, taoFill], [taoShrink, taoFill], 10, 2);
+ PropertiesTable.AddControlEx(0, 2, 1, 1, MountDeviceLabel, [taoShrink, taoFill], [taoShrink, taoFill], 10, 2);
+ PropertiesTable.AddControlEx(1, 2, 1, 1, MountDeviceEntry, [taoExpand, taoFill], [taoShrink, taoFill], 10, 2);
+ PropertiesTable.AddControlEx(2, 2, 1, 1, DeviceTypeLabel, [taoShrink, taoFill], [taoShrink, taoFill], 0, 2);
+ PropertiesTable.AddControlEx(3, 2, 2, 1, DeviceTypeOptionMenu, [taoExpand, taoFill], [taoShrink, taoFill], 10, 2);
+ PropertiesTable.AddControlEx(0, 3, 1, 1, MountCommandLabel, [taoShrink, taoFill], [taoShrink, taoFill], 10, 2);
+ PropertiesTable.AddControlEx(1, 3, 1, 1, MountCommandEntry, [taoExpand, taoFill], [taoShrink, taoFill], 10, 2);
+ PropertiesTable.AddControlEx(2, 3, 1, 1, UmountCommandLabel, [taoShrink, taoFill], [taoShrink, taoFill], 0, 2);
+ PropertiesTable.AddControlEx(3, 3, 2, 1, UmountCommandEntry, [taoExpand, taoFill], [taoShrink, taoFill], 10, 2);
+
+ IconLabel := TGTKLabel.Create(Self);
+ IconLabel.Caption := LANGMounterPrefs_IconLabelCaption;
+ IconLabel.XAlign := 1;
+ IconLabel.UseUnderline := True;
+ PropertiesTable.AddControlEx(3, 0, 1, 2, IconLabel, [taoExpand, taoFill], [taoShrink, taoFill], 0, 2);
+ if FUseGnomeIconEntry then begin
+ IconEntry := TGnomeIconEntry.Create(Self);
+ IconLabel.FocusControl := IconEntry;
+ PropertiesTable.AddControlEx(4, 0, 1, 2, IconEntry, [taoExpand, taoFill], [taoExpand, taoFill], 0, 0);
+ end else begin
+ IconEntry2 := TGTKButton.Create(Self);
+ IconEntry2.Caption := LANGBrowseButton_Caption;
+ PropertiesTable.AddControlEx(4, 0, 1, 2, IconEntry2, [taoExpand, taoFill], [taoExpand, taoFill], 10, 4);
+ end;
+
+
+
+ OnDestroy := FormDestroy;
+ ListView.OnSelectionChanged := ListViewSelectionChanged;
+ UseFSTabDefaultsCheckBox.OnToggled := UseFSTabDefaultsCheckBoxToggled;
+ AddItemButton.OnClick := AddItemButtonClick;
+ RemoveItemButton.OnClick := RemoveItemButtonClick;
+ MoveUpButton.OnClick := MoveUpDownButtonButtonClick;
+ MoveDownButton.OnClick := MoveUpDownButtonButtonClick;
+ DisplayTextEntry.OnChanged := DisplayTextEntryChanged;
+ MountPointEntry.OnChanged := MountPointEntryChanged;
+ MountDeviceEntry.OnChanged := MountDeviceEntryChanged;
+ MountCommandEntry.OnChanged := MountCommandEntryChanged;
+ UmountCommandEntry.OnChanged := UmountCommandEntryChanged;
+ DeviceTypeOptionMenu.OnChanged := DeviceTypeOptionMenuChanged;
+ if FUseGnomeIconEntry then IconEntry.OnIconChanged := IconEntryChanged
+ else IconEntry2.OnClick := IconEntry2Click;
+
+ ListViewSelectionChanged(Self);
+ ListView.SetFocus;
+end;
+
+procedure TFMounterPrefs.ListViewSelectionChanged(Sender: TObject);
+var b: boolean;
+ Item: TMounterItem;
+begin
+ b := Assigned(ListView.Selected) and Assigned(ListView.Selected.AsPointer(3)) and ListViewScrolledWindow.Enabled;
+ RemoveItemButton.Enabled := b;
+ MoveUpButton.Enabled := b and (ListView.Selected.Index > 0);
+ MoveDownButton.Enabled := b and (ListView.Selected.Index < ListView.Items.Count - 1);
+ PropertiesTable.Enabled := b;
+ if not b then begin
+ DisplayTextEntry.Text := '';
+ MountPointEntry.Text := '';
+ MountDeviceEntry.Text := '';
+ MountCommandEntry.Text := '';
+ UmountCommandEntry.Text := '';
+ DeviceTypeOptionMenu.ItemIndex := 0;
+ if FUseGnomeIconEntry then IconEntry.Filename := '';
+ Exit;
+ end;
+ Item := ListView.Selected.AsPointer(3);
+ DisplayTextEntry.Text := Item.DisplayText;
+ MountPointEntry.Text := AnsiToUTF8(Item.MountPath);
+ MountDeviceEntry.Text := AnsiToUTF8(Item.Device);
+ MountCommandEntry.Text := AnsiToUTF8(Item.MountCommand);
+ UmountCommandEntry.Text := AnsiToUTF8(Item.UmountCommand);
+ DeviceTypeOptionMenu.ItemIndex := Item.DeviceType;
+ if FUseGnomeIconEntry then IconEntry.Filename := Item.IconPath;
+end;
+
+procedure TFMounterPrefs.UseFSTabDefaultsCheckBoxToggled(Sender: TObject);
+begin
+ ListViewScrolledWindow.Enabled := not UseFSTabDefaultsCheckBox.Checked;
+ AddItemButton.Enabled := not UseFSTabDefaultsCheckBox.Checked;
+ RemoveItemButton.Enabled := not UseFSTabDefaultsCheckBox.Checked;
+ MoveUpButton.Enabled := not UseFSTabDefaultsCheckBox.Checked;
+ MoveDownButton.Enabled := not UseFSTabDefaultsCheckBox.Checked;
+ ListViewSelectionChanged(Self);
+end;
+
+procedure TFMounterPrefs.AddItemButtonClick(Sender: TObject);
+var Item: TMounterItem;
+ ListItem: TGTKListItem;
+begin
+ Item := TMounterItem.Create;
+ InternalMounterList.Add(Item);
+ ListItem := ListView.Items.Add;
+ ListItem.SetValue(3, Item);
+ ListItem.Selected := True;
+ ListItem.SetCursor(0, False, not Application.GTKVersion_2_2_0_Up, 0.5, 0);
+ ListViewSelectionChanged(Self);
+ DisplayTextEntry.SetFocus;
+ RefreshIcon(ListView.Selected.Index);
+end;
+
+procedure TFMounterPrefs.RemoveItemButtonClick(Sender: TObject);
+var Item: TMounterItem;
+begin
+ if Assigned(ListView.Selected) and Assigned(ListView.Selected.AsPointer(3)) then begin
+ Item := ListView.Selected.AsPointer(3);
+ Item.Free;
+ InternalMounterList.Remove(Item);
+ ListView.Items.Delete(ListView.Selected.Index);
+ end;
+end;
+
+procedure TFMounterPrefs.MoveUpDownButtonButtonClick(Sender: TObject);
+var i, Old, New: integer;
+ s: string;
+ p: pointer;
+begin
+ if Assigned(ListView.Selected) and Assigned(ListView.Selected.AsPointer(3)) then begin
+ Old := InternalMounterList.IndexOf(ListView.Selected.AsPointer(3));
+ if (Sender = MoveUpButton) and (Old > 0) then New := Old - 1 else
+ if (Sender = MoveDownButton) and (Old < InternalMounterList.Count - 1) then New := Old + 1 else Exit;
+ InternalMounterList.Move(Old, New);
+ for i := 0 to 2 do begin
+ s := ListView.Items[New].AsString(i);
+ ListView.Items[New].SetValue(i, ListView.Items[Old].AsString(i));
+ ListView.Items[Old].SetValue(i, s);
+ end;
+ for i := 3 to 4 do begin
+ p := ListView.Items[New].AsPointer(i);
+ ListView.Items[New].SetValue(i, ListView.Items[Old].AsPointer(i));
+ ListView.Items[Old].SetValue(i, p);
+ end;
+ ListView.Items[New].Selected := True;
+ ListView.Items[New].SetCursor(0, False, not Application.GTKVersion_2_2_0_Up, 0.5, 0);
+ end;
+end;
+
+procedure TFMounterPrefs.DisplayTextEntryChanged(Sender: TObject);
+begin
+ if Assigned(ListView.Selected) and Assigned(ListView.Selected.AsPointer(3)) and (not UseFSTabDefaultsCheckBox.Checked) then begin
+ TMounterItem(ListView.Selected.AsPointer(3)).DisplayText := DisplayTextEntry.Text;
+ ListView.Selected.SetValue(0, DisplayTextEntry.Text);
+ end;
+end;
+
+procedure TFMounterPrefs.MountPointEntryChanged(Sender: TObject);
+begin
+ if Assigned(ListView.Selected) and Assigned(ListView.Selected.AsPointer(3)) and (not UseFSTabDefaultsCheckBox.Checked) then begin
+ TMounterItem(ListView.Selected.AsPointer(3)).MountPath := UTF8ToANSI(MountPointEntry.Text);
+ ListView.Selected.SetValue(1, MountPointEntry.Text);
+ end;
+end;
+
+procedure TFMounterPrefs.MountDeviceEntryChanged(Sender: TObject);
+begin
+ if Assigned(ListView.Selected) and Assigned(ListView.Selected.AsPointer(3)) and (not UseFSTabDefaultsCheckBox.Checked) then begin
+ TMounterItem(ListView.Selected.AsPointer(3)).Device := UTF8ToANSI(MountDeviceEntry.Text);
+ ListView.Selected.SetValue(2, MountDeviceEntry.Text);
+ end;
+end;
+
+procedure TFMounterPrefs.MountCommandEntryChanged(Sender: TObject);
+begin
+ if Assigned(ListView.Selected) and Assigned(ListView.Selected.AsPointer(3)) and (not UseFSTabDefaultsCheckBox.Checked) then begin
+ TMounterItem(ListView.Selected.AsPointer(3)).MountCommand := UTF8ToANSI(MountCommandEntry.Text);
+ end;
+end;
+
+procedure TFMounterPrefs.UmountCommandEntryChanged(Sender: TObject);
+begin
+ if Assigned(ListView.Selected) and Assigned(ListView.Selected.AsPointer(3)) and (not UseFSTabDefaultsCheckBox.Checked) then begin
+ TMounterItem(ListView.Selected.AsPointer(3)).UmountCommand := UTF8ToANSI(UmountCommandEntry.Text);
+ end;
+end;
+
+procedure TFMounterPrefs.DeviceTypeOptionMenuChanged(Sender: TObject);
+begin
+ if Assigned(ListView.Selected) and Assigned(ListView.Selected.AsPointer(3)) and (not UseFSTabDefaultsCheckBox.Checked) then begin
+ TMounterItem(ListView.Selected.AsPointer(3)).DeviceType := DeviceTypeOptionMenu.ItemIndex;
+ RefreshIcon(ListView.Selected.Index);
+ end;
+end;
+
+procedure TFMounterPrefs.IconEntryChanged(Sender: TObject);
+begin
+ if Assigned(ListView.Selected) and Assigned(ListView.Selected.AsPointer(3)) and (not UseFSTabDefaultsCheckBox.Checked) then begin
+ TMounterItem(ListView.Selected.AsPointer(3)).IconPath := IconEntry.Filename;
+ RefreshIcon(ListView.Selected.Index);
+ end;
+end;
+
+procedure TFMounterPrefs.RefreshIcon(ItemIndex: integer);
+var Pixmap: TGDKPixbuf;
+ b: boolean;
+ Data: TMounterItem;
+begin
+ Data := InternalMounterList[ItemIndex];
+ b := FileExists(Data.IconPath);
+ Pixmap := nil;
+ if b then begin
+ Pixmap := TGDKPixbuf.Create(Self);
+ Pixmap.LoadFromFile(Data.IconPath);
+ b := Pixmap.FPixbuf <> nil;
+ if b then Pixmap.ScaleSimple(16, 16);
+ end;
+ if not b then
+ case Data.DeviceType of
+ 0 : Pixmap := MounterHDD;
+ 1 : Pixmap := MounterRemovable;
+ 2 : Pixmap := MounterCD;
+ 3 : Pixmap := MounterFloppy;
+ 4 : Pixmap := MounterNetwork;
+ end;
+ ListView.Items[ItemIndex].SetValue(4, Pixmap.FPixbuf);
+end;
+
+procedure TFMounterPrefs.IconEntry2Click(Sender: TObject);
+var Dialog: TGTKFileSelectionDialog;
+begin
+ if (not Assigned(ListView.Selected)) or (not Assigned(ListView.Selected.AsPointer(3))) then Exit;
+ Dialog := TGTKFileSelectionDialog.CreateWithTitle(Self, LANGBrowseForIcon);
+ try
+ Dialog.ShowFileOpButtons := False;
+ Dialog.FileName := TMounterItem(ListView.Selected.AsPointer(3)).IconPath;
+ if Byte(Dialog.Run) = 251 then TMounterItem(ListView.Selected.AsPointer(3)).IconPath := Dialog.FileName;
+ RefreshIcon(ListView.Selected.Index);
+ finally
+ Dialog.Free;
+ end;
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure TFMounterPrefs.AssignAssocList(List: TList);
+var i: integer;
+ Item: TMounterItem;
+begin
+ InternalMounterList := TList.Create;
+ if List.Count > 0 then
+ for i := 0 to List.Count - 1 do begin
+ Item := TMounterItem.Create;
+ with Item do begin
+ DisplayText := TMounterItem(List[i]).DisplayText;
+ MountPath := TMounterItem(List[i]).MountPath;
+ Device := TMounterItem(List[i]).Device;
+ IconPath := TMounterItem(List[i]).IconPath;
+ MountCommand := TMounterItem(List[i]).MountCommand;
+ UmountCommand := TMounterItem(List[i]).UmountCommand;
+ DeviceType := TMounterItem(List[i]).DeviceType;
+ end;
+ InternalMounterList.Add(Item);
+ end;
+end;
+
+procedure TFMounterPrefs.FillList;
+var i: integer;
+ ListItem: TGTKListItem;
+begin
+ if Assigned(InternalMounterList) and (InternalMounterList.Count > 0) then begin
+ for i := 0 to InternalMounterList.Count - 1 do
+ with TMounterItem(InternalMounterList[i]) do begin
+ ListItem := ListView.Items.Add;
+ ListItem.SetValue(0, DisplayText);
+ ListItem.SetValue(1, ANSIToUTF8(MountPath));
+ ListItem.SetValue(2, ANSIToUTF8(Device));
+ ListItem.SetValue(3, InternalMounterList[i]);
+ RefreshIcon(i);
+ end;
+ end;
+ UseFSTabDefaultsCheckBox.Checked := ConfMounterUseFSTab;
+ ToggleModeCheckBox.Checked := ConfMounterPushDown;
+end;
+
+procedure TFMounterPrefs.CleanItems;
+var i: integer;
+begin
+ try
+ if InternalMounterList.Count > 0 then
+ for i := InternalMounterList.Count - 1 downto 0 do
+ with TMounterItem(InternalMounterList[i]) do begin
+ if Length(Trim(Device)) = 0 then begin
+ TMounterItem(InternalMounterList[i]).Free;
+ InternalMounterList.Delete(i);
+ end;
+ end;
+ except end;
+end;
+
+procedure TFMounterPrefs.FormDestroy(Sender: TObject);
+var i: integer;
+begin
+ if Assigned(InternalMounterList) then begin
+ if InternalMounterList.Count > 0 then
+ for i := 0 to InternalMounterList.Count - 1 do
+ if Assigned(InternalMounterList[i]) then TMounterItem(InternalMounterList[i]).Free;
+ InternalMounterList.Clear;
+ InternalMounterList.Free;
+ end;
+end;
+
+function TGTKListView_drag_end(widget: PGtkWidget; drag_context: PGdkDragContext; user_data: gpointer): gboolean; cdecl;
+var i: integer;
+begin
+ Result := False;
+ for i := 0 to FMounterPrefs.ListView.Items.Count - 1 do
+ FMounterPrefs.InternalMounterList[i] := FMounterPrefs.ListView.Items[i].AsPointer(3);
+end;
+(********************************************************************************************************************************)
+end.
+
diff --git a/UNewDir.pas b/UNewDir.pas
new file mode 100644
index 0000000..a644b30
--- /dev/null
+++ b/UNewDir.pas
@@ -0,0 +1,80 @@
+(*
+ Tux Commander - UNewDir - New Directory form and related functions
+ Copyright (C) 2004 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit UNewDir;
+
+interface
+
+uses
+ SysUtils, Types, Classes, Variants, GTKControls, GTKForms, GTKStdCtrls, GTKExtCtrls, GTKConsts;
+
+type
+ TFNewDir = class(TGTKDialog)
+ Label1: TGTKLabel;
+ Entry: TGTKEntry;
+ Box: TGTKVBox;
+ procedure FormCreate(Sender: TObject); override;
+ procedure FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+ private
+ { Private declarations }
+ public
+ { Public declarations }
+ end;
+
+var
+ FNewDir: TFNewDir;
+
+implementation
+
+uses ULocale;
+
+
+procedure TFNewDir.FormCreate(Sender: TObject);
+begin
+ SetDefaultSize(350, -1);
+ Caption := LANGCreateANewDirectory;
+ Buttons := [mbOK, mbCancel];
+ Box := TGTKVBox.Create(Self);
+ Label1 := TGTKLabel.Create(Self);
+ Label1.Caption := LANGEnterDirectoryName;
+ Label1.UseUnderline := True;
+ Label1.XAlign := 0;
+ Label1.XPadding := 0;
+ Label1.LineWrap := True;
+ Entry := TGTKEntry.Create(Self);
+ Label1.FocusControl := Entry;
+ Box.AddControlEx(Label1, False, False, 2);
+ Box.AddControlEx(Entry, False, False, 0);
+ Box.BorderWidth := 6;
+ ClientArea.AddControlEx(Box, True, True, 0);
+ OnKeyDown := FormKeyDown;
+ Entry.SetFocus;
+end;
+
+procedure TFNewDir.FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+begin
+ case Key of
+ GDK_RETURN, GDK_KP_ENTER: ModalResult := mbOK;
+ GDK_ESCAPE: ModalResult := mbCancel;
+ end;
+end;
+
+
+end.
+
diff --git a/UOverwrite.pas b/UOverwrite.pas
new file mode 100644
index 0000000..04cbd1c
--- /dev/null
+++ b/UOverwrite.pas
@@ -0,0 +1,173 @@
+(*
+ Tux Commander - UOverwrite - Overwrite dialog form and related funcions
+ Copyright (C) 2004 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit UOverwrite;
+
+interface
+
+uses
+ SysUtils, Types, Classes, Variants, GTKControls, GTKForms, GTKStdCtrls, GTKExtCtrls, GTKConsts;
+
+type
+ TFOverwrite = class(TGTKDialog)
+ FromLabel, FromInfoLabel, ToLabel, ToInfoLabel: TGTKLabel;
+ ButtonTable: TGTKTable;
+ FromVBox, ToVBox: TGTKVBox;
+ OverwriteButton, OverwriteAllButton, SkipButton, CancelButton, OverwriteAllOlderButton, SkipAllButton, RenameButton, AppendButton : TGTKButton;
+ procedure FormCreate(Sender: TObject); override;
+ procedure FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+ procedure ButtonClick(Sender: TObject);
+ public
+ RenameStr, SourceFile, DestFile: string;
+ procedure AddButtons(Sel: integer);
+ procedure DoRename;
+ procedure DoAppend;
+ end;
+
+var
+ FOverwrite: TFOverwrite;
+
+implementation
+
+uses ULocale, UCopyMove;
+
+
+procedure TFOverwrite.FormCreate(Sender: TObject);
+begin
+ Caption := LANGOverwriteQuestion;
+ FromLabel := TGTKLabel.Create(Self);
+ FromLabel.XAlign := 0; FromLabel.XPadding := 10;
+ FromInfoLabel := TGTKLabel.Create(Self);
+ FromInfoLabel.XAlign := 0; FromInfoLabel.XPadding := 40;
+ ToLabel := TGTKLabel.Create(Self);
+ ToLabel.XAlign := 0; ToLabel.XPadding := 10;
+ ToInfoLabel := TGTKLabel.Create(Self);
+ ToInfoLabel.XAlign := 0; ToInfoLabel.XPadding := 40;
+ OverwriteButton := TGTKButton.Create(Self);
+ OverwriteButton.Caption := LANGOverwriteButton_Caption;
+ OverwriteButton.OnClick := ButtonClick;
+ OverwriteAllButton := TGTKButton.Create(Self);
+ OverwriteAllButton.Caption := LANGOverwriteAllButton_Caption;
+ OverwriteAllButton.OnClick := ButtonClick;
+ SkipButton := TGTKButton.Create(Self);
+ SkipButton.Caption := LANGSkipButton_Caption;
+ SkipButton.OnClick := ButtonClick;
+ CancelButton := TGTKButton.Create(Self);
+ CancelButton.Caption := LANGCancel;
+ CancelButton.OnClick := ButtonClick;
+ OverwriteAllOlderButton := TGTKButton.Create(Self);
+ OverwriteAllOlderButton.Caption := LANGOverwriteAllOlderButton_Caption;
+ OverwriteAllOlderButton.OnClick := ButtonClick;
+ SkipAllButton := TGTKButton.Create(Self);
+ SkipAllButton.Caption := LANGSkipAllButton_Caption;
+ SkipAllButton.OnClick := ButtonClick;
+ RenameButton := TGTKButton.Create(Self);
+ RenameButton.Caption := LANGRenameButton_Caption;
+ RenameButton.OnClick := ButtonClick;
+ AppendButton := TGTKButton.Create(Self);
+ AppendButton.Caption := LANGAppendButton_Caption;
+ AppendButton.OnClick := ButtonClick;
+ ButtonTable := TGTKTable.Create(Self);
+ ButtonTable.RowCount := 3;
+ ButtonTable.ColCount := 3;
+ ButtonTable.RowSpacing := 3;
+ ButtonTable.ColSpacing := 3;
+ ButtonTable.Homogeneous := True;
+ FromVBox := TGTKVBox.Create(Self);
+ FromVBox.AddControlEx(FromLabel, True, True, 0);
+ FromVBox.AddControlEx(FromInfoLabel, True, True, 0);
+ ToVBox := TGTKVBox.Create(Self);
+ ToVBox.AddControlEx(ToLabel, True, True, 0);
+ ToVBox.AddControlEx(ToInfoLabel, True, True, 0);
+ ClientArea.AddControlEx(FromVBox, True, True, 5);
+ ClientArea.AddControlEx(ToVBox, True, True, 5);
+ ActionArea.AddControlEx(ButtonTable, True, True, 0);
+ OnKeyDown := FormKeyDown;
+end;
+
+procedure TFOverwrite.FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+begin
+ case Key of
+ GDK_O : ModalResult := TMessageButton(1);
+ GDK_A : ModalResult := TMessageButton(2);
+ GDK_S : ModalResult := TMessageButton(3);
+ GDK_C, GDK_ESCAPE : ModalResult := TMessageButton(4);
+ GDK_D : ModalResult := TMessageButton(5);
+ GDK_K : ModalResult := TMessageButton(6);
+ GDK_R : DoRename;
+ GDK_P : DoAppend;
+ end;
+end;
+
+procedure TFOverwrite.AddButtons(Sel: integer);
+begin
+ ButtonTable.AddControl(0, 0, 1, 1, OverwriteButton, 0, 0);
+ ButtonTable.AddControl(1, 0, 1, 1, OverwriteAllButton, 0, 0);
+ ButtonTable.AddControl(2, 0, 1, 1, SkipButton, 0, 0);
+ ButtonTable.AddControl(0, 1, 1, 1, CancelButton, 0, 0);
+ ButtonTable.AddControl(1, 1, 1, 1, OverwriteAllOlderButton, 0, 0);
+ ButtonTable.AddControl(2, 1, 1, 1, SkipAllButton, 0, 0);
+ ButtonTable.AddControl(0, 2, 1, 1, RenameButton, 0, 0);
+ case Sel of
+ 2 : ButtonTable.AddControl(1, 2, 1, 1, AppendButton, 0, 0);
+ end;
+end;
+
+procedure TFOverwrite.ButtonClick(Sender: TObject);
+begin
+ if Sender = OverwriteButton then ModalResult := TMessageButton(1) else
+ if Sender = OverwriteAllButton then ModalResult := TMessageButton(2) else
+ if Sender = SkipButton then ModalResult := TMessageButton(3) else
+ if Sender = CancelButton then ModalResult := TMessageButton(4) else
+ if Sender = OverwriteAllOlderButton then ModalResult := TMessageButton(5) else
+ if Sender = SkipAllButton then ModalResult := TMessageButton(6) else
+ if Sender = RenameButton then DoRename else
+ if Sender = AppendButton then DoAppend;
+end;
+
+procedure TFOverwrite.DoRename;
+var AFCopyMove: TFCopyMove;
+begin
+ AFCopyMove := TFCopyMove.Create(Self);
+ try
+ AFCopyMove.Entry.Text := RenameStr;
+ AFCopyMove.Caption := LANGRename;
+ AFCopyMove.Label1.Caption := Format(LANGRenameFile, [RenameStr]);
+ AFCopyMove.Entry.SelectRegion(0, Length(AFCopyMove.Entry.Text));
+ if AFCopyMove.Run = mbOK then begin
+ RenameStr := AFCopyMove.Entry.Text;
+ ModalResult := TMessageButton(7);
+ end;
+ finally
+ AFCopyMove.Free;
+ end;
+end;
+
+procedure TFOverwrite.DoAppend;
+begin
+ if Application.MessageBox(Format(LANGAppendQuestion, [ANSIToUTF8(SourceFile), ANSIToUTF8(DestFile)]), [mbYes, mbNo], mbQuestion, mbNone, mbNo) = mbYes
+ then ModalResult := TMessageButton(8);
+end;
+
+
+
+
+end.
+
+
diff --git a/UPreferences.pas b/UPreferences.pas
new file mode 100644
index 0000000..ca4733f
--- /dev/null
+++ b/UPreferences.pas
@@ -0,0 +1,822 @@
+(*
+ Tux Commander - UPreferences - The Preferences dialog
+ Copyright (C) 2006 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit UPreferences;
+
+interface
+
+uses
+ glib2, gtk2, pango, SysUtils, Types, Classes, Variants, GTKControls, GTKForms, GTKStdCtrls, GTKExtCtrls, GTKConsts, GTKView,
+ GTKUtils, GTKDialogs, GTKPixbuf, GTKClasses, GTKMenus,
+ UCoreClasses, UGnome;
+
+type
+ TFPreferences = class(TGTKDialog)
+ TitleFrame, ListFontFrame: TGTKFrame;
+ TitleLabel: TGTKLabel;
+ TitleEventBox: TGTKEventBox;
+ TitleIcon: TGTKImage;
+ TitleHBox: TGTKHBox;
+ Notebook: TGTKNotebook;
+ GeneralPage, ColorsPage, FontsPage, PanelsPage, ApplicationsPage, ExperimentalPage: TGTKVBox;
+ RowHeightLabel, NumHistoryItemsLabel, ViewerLabel, EditorLabel, TerminalLabel, GeneralLabel2, ExternalAppsLabel, FontsLabel2,
+ ListFontLabel, ListFontPreview, ColorsLabel2, ForegroundLabel, BackgroundLabel, PanelsLabel2, ApplicationsLabel2,
+ ExperimentalLabel2, PanelsLabel3, PanelsLabel4: TGTKLabel;
+ NormalItemFGColorLabel, ActiveItemFGColorLabel, InactiveItemFGColorLabel, SelectedItemFGColorLabel, LinkItemFGColorLabel,
+ DotFileItemFGColorLabel: TGTKLabel;
+ ExperimentalWarningLabel: TGTKLabel;
+ ExperimentalWarningIcon: TGTKImage;
+ ClearROAttr, DisableMouseRename, ShowFiletypeIcons, DefaultFontCheckBox, DefaultRowHeightCheckBox, LynxLikeMotionCheckBox,
+ DirsInBoldCheckBox, NewStyleAltOCheckBox, WMCompatModeCheckBox, DisableFileTipsCheckBox, DisableDirectoryBracketsCheckBox,
+ InsertMovesDownCheckBox, SpaceMovesDownCheckBox, SelectAllDirectoriesCheckBox, ShowFuncButtonsCheckBox,
+ OctalPermissionsCheckBox, FocusRefreshCheckBox, CompatUseLibcSystemCheckBox: TGTKCheckButton;
+ NormalItemFGColorDefault, ActiveItemFGColorDefault, InactiveItemFGColorDefault,
+ LinkItemFGColorDefault, DotFileItemFGColorDefault: TGTKCheckButton;
+ HBox1, HBox2, HBox3, HBox4: TGTKHBox;
+ VBox1: TGTKVBox;
+ ViewerCombo, EditorCombo, TerminalCombo: TGTKCombo;
+ ViewerBrowseButton, EditorBrowseButton, TerminalBrowseButton, ChangeFontButton: TGTKButton;
+ NormalItemFGColorButton, ActiveItemFGColorButton, InactiveItemFGColorButton, SelectedItemFGColorButton, LinkItemFGColorButton,
+ DotFileItemFGColorButton, NormalItemBGColorButton, ActiveItemBGColorButton, InactiveItemBGColorButton: TGnomeColorButton;
+ Table1, Table2, Table3, Table4, Table5, Table6: TGTKTable;
+ RowHeightSpinEdit, NumHistoryItemsSpinEdit: TGTKSpinEdit;
+ SizeFormatLabel: TGTKLabel;
+ SizeFormatOptionMenu: TGTKOptionMenu;
+ miSizeFormat1, miSizeFormat2, miSizeFormat3, miSizeFormat4, miSizeFormat5, miSizeFormat6: TGTKMenuItem;
+ UseInternalViewerCheckBox: TGTKCheckButton;
+ ViewerLabel2, EditorLabel2, TerminalLabel2, CmdLineBehaviourLabel: TGTKLabel;
+ ViewerOptionMenu, EditorOptionMenu, TerminalOptionMenu: TGTKOptionMenu;
+ miViewerTerminalDetect, miViewerAlwaysTerminal, miViewerNoTerminal,
+ miEditorTerminalDetect, miEditorAlwaysTerminal, miEditorNoTerminal,
+ miTerminalDetect, miAlwaysTerminal, miNoTerminal: TGTKMenuItem;
+ ShowTextUIDsCheckBox: TGTKCheckButton;
+ procedure FormCreate(Sender: TObject); override;
+ procedure FormDestroy(Sender: TObject);
+ procedure FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+ procedure ViewerBrowseButtonClick(Sender: TObject);
+ procedure DefaultFontCheckBoxToggled(Sender: TObject);
+ procedure ChangeFontButtonClick(Sender: TObject);
+ procedure ColorButtonDefaultsToggled(Sender: TObject);
+ procedure DefaultRowHeightCheckBoxToggled(Sender: TObject);
+ procedure UseInternalViewerCheckBoxToggled(Sender: TObject);
+ private
+ DefaultGTKFont, LocalListFont: string;
+ public
+ RebuildListViews, RebuildIcons: boolean;
+ procedure AssignDefaultValues;
+ procedure SaveSettings;
+ end;
+
+var
+ FPreferences: TFPreferences;
+
+implementation
+
+uses ULocale, UFileAssoc, UCoreUtils, UConfig;
+
+
+procedure TFPreferences.FormCreate(Sender: TObject);
+var i: integer;
+begin
+ SetDefaultSize(450, 500);
+ Caption := LANGPreferences_Caption;
+ Buttons := [mbOK, mbCancel];
+ ShowSeparator := False;
+ TitleEventBox := TGTKEventBox.Create(Self);
+ TitleLabel := TGTKLabel.Create(Self);
+ TitleLabel.Caption := LANGPreferences_TitleLabel_Caption;
+ TitleLabel.UseMarkup := True;
+ TitleLabel.XAlign := 0;
+ TitleLabel.XPadding := 0;
+ TitleLabel.YPadding := 3;
+ TitleEventBox.ControlState := csPrelight;
+ TitleFrame := TGTKFrame.CreateWithoutLabel(Self);
+ TitleFrame.ShadowType := stShadowOut;
+ TitleIcon := TGTKImage.Create(Self);
+ TitleIcon.SetFromStock('gtk-preferences', isLargeToolbar);
+ TitleHBox := TGTKHBox.Create(Self);
+ TitleHBox.Homogeneous := False;
+ TitleHBox.AddControlEx(TGTKVBox.Create(Self), False, False, 5);
+ TitleHBox.AddControlEx(TitleIcon, False, False, 0);
+ TitleHBox.AddControlEx(TitleLabel, True, True, 10);
+ TitleEventBox.AddControl(TitleHBox);
+ TitleFrame.AddControl(TitleEventBox);
+ ClientArea.AddControlEx(TitleFrame, False, True, 0);
+
+ Notebook := TGTKNotebook.Create(Self);
+ Notebook.BorderWidth := 10;
+ ClientArea.AddControlEx(Notebook, True, True, 0);
+
+ GeneralPage := TGTKVBox.Create(Notebook);
+ Notebook.AppendPage(GeneralPage, LANGPreferences_GeneralPage);
+
+ PanelsPage := TGTKVBox.Create(Notebook);
+ Notebook.AppendPage(PanelsPage, LANGPreferencesPanelsPage);
+
+ ApplicationsPage := TGTKVBox.Create(Notebook);
+ Notebook.AppendPage(ApplicationsPage, LANGPreferencesApplicationsPage);
+
+ FontsPage := TGTKVBox.Create(Notebook);
+ Notebook.AppendPage(FontsPage, LANGPreferences_FontsPage);
+
+ ColorsPage := TGTKVBox.Create(Notebook);
+ Notebook.AppendPage(ColorsPage, LANGPreferences_ColorsPage);
+
+ ExperimentalPage := TGTKVBox.Create(Notebook);
+ Notebook.AppendPage(ExperimentalPage, LANGPreferencesExperimentalPage);
+
+
+ // ********* PAGE General
+
+ GeneralPage.AddControlEx(TGTKVBox.Create(Self), False, False, 5);
+ GeneralLabel2 := TGTKLabel.Create(Self);
+ GeneralLabel2.XAlign := 0;
+ GeneralLabel2.XPadding := 10;
+ GeneralLabel2.Caption := Format('<span weight="ultrabold">%s</span>', [LANGPreferences_GeneralPage]);
+ GeneralLabel2.UseMarkup := True;
+ GeneralPage.AddControlEx(GeneralLabel2, False, False, 5);
+ Table2 := TGTKTable.Create(Self);
+ Table2.SetRowColCount(8, 5);
+ GeneralPage.AddControlEx(Table2, False, False, 0);
+
+ ClearROAttr := TGTKCheckButton.CreateWithLabel(Self, LANGPreferences_ClearReadonlyAttribute);
+ Table2.AddControlEx(1, 0, 3, 1, ClearROAttr, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 0, 2);
+ SelectAllDirectoriesCheckBox := TGTKCheckButton.CreateWithLabel(Self, LANGPreferencesSelectAllDirectoriesCheckBox_Caption);
+ Table2.AddControlEx(1, 1, 3, 1, SelectAllDirectoriesCheckBox, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 0, 2);
+ NewStyleAltOCheckBox := TGTKCheckButton.CreateWithLabel(Self, LANGPreferencesNewStyleAltOCheckBox_Caption);
+ NewStyleAltOCheckBox.Tooltip := LANGPreferencesNewStyleAltOCheckBox_Tooltip;
+ Table2.AddControlEx(1, 2, 3, 1, NewStyleAltOCheckBox, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 0, 2);
+ ShowFuncButtonsCheckBox := TGTKCheckButton.CreateWithLabel(Self, LANGPreferencesShowFuncButtonsCheckBox_Caption);
+ Table2.AddControlEx(1, 3, 3, 1, ShowFuncButtonsCheckBox, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 0, 2);
+
+ NumHistoryItemsLabel := TGTKLabel.Create(Self);
+ NumHistoryItemsLabel.Caption := LANGPreferences_NumHistoryItems;
+ NumHistoryItemsLabel.XAlign := 0;
+ NumHistoryItemsSpinEdit := TGTKSpinEdit.Create(Self);
+ NumHistoryItemsSpinEdit.Digits := 0;
+ NumHistoryItemsLabel.FocusControl := NumHistoryItemsSpinEdit;
+ NumHistoryItemsLabel.UseUnderline := True;
+ Table2.AddControlEx(0, 4, 1, 1, TGTKVBox.Create(Self), [taoShrink], [taoShrink, taoExpand, taoFill], 15, 2);
+ Table2.AddControlEx(1, 4, 1, 1, NumHistoryItemsLabel, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 0, 2);
+ Table2.AddControlEx(2, 4, 1, 1, NumHistoryItemsSpinEdit, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 10, 2);
+
+ RowHeightLabel := TGTKLabel.Create(Self);
+ RowHeightLabel.Caption := LANGPreferences_RowHeight;
+ RowHeightLabel.XAlign := 0;
+ RowHeightSpinEdit := TGTKSpinEdit.Create(Self);
+ RowHeightSpinEdit.Digits := 0;
+ RowHeightLabel.FocusControl := RowHeightSpinEdit;
+ RowHeightLabel.UseUnderline := True;
+ DefaultRowHeightCheckBox := TGTKCheckButton.CreateWithLabel(Self, LANGPreferences_Default);
+ DefaultRowHeightCheckBox.OnToggled := DefaultRowHeightCheckBoxToggled;
+ Table2.AddControlEx(1, 5, 1, 1, RowHeightLabel, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 0, 2);
+ Table2.AddControlEx(2, 5, 1, 1, RowHeightSpinEdit, [taoFill, taoExpand], [taoShrink, taoExpand, taoFill], 10, 2);
+ Table2.AddControlEx(3, 5, 1, 1, DefaultRowHeightCheckBox, [taoFill, taoExpand], [taoShrink, taoExpand, taoFill], 10, 2);
+ Table2.AddControlEx(4, 5, 1, 1, TGTKVBox.Create(Self), [taoShrink], [taoShrink, taoExpand, taoFill], 8, 2);
+
+ SizeFormatLabel := TGTKLabel.Create(Self);
+ SizeFormatLabel.Caption := LANGPreferencesSizeFormatLabel_Caption;
+ SizeFormatLabel.XAlign := 0;
+ SizeFormatLabel.UseUnderline := True;
+ SizeFormatOptionMenu := TGTKOptionMenu.Create(Self);
+ SizeFormatLabel.FocusControl := SizeFormatOptionMenu;
+ miSizeFormat1 := TGTKMenuItem.CreateTyped(Self, itLabel);
+ miSizeFormat1.Caption := Format('%s %s', [LANGPreferencesmiSizeFormat1, ANSIToUTF8(FormatFloat('(###,###,###)', 123456))]);
+ miSizeFormat2 := TGTKMenuItem.CreateTyped(Self, itLabel);
+ miSizeFormat2.Caption := '123456';
+ miSizeFormat3 := TGTKMenuItem.CreateTyped(Self, itLabel);
+ miSizeFormat3.Caption := '123,456';
+ miSizeFormat4 := TGTKMenuItem.CreateTyped(Self, itLabel);
+ miSizeFormat4.Caption := '123 456';
+ miSizeFormat5 := TGTKMenuItem.CreateTyped(Self, itLabel);
+ miSizeFormat5.Caption := '123''456';
+ miSizeFormat6 := TGTKMenuItem.CreateTyped(Self, itLabel);
+ miSizeFormat6.Caption := LANGPreferencesmiSizeFormat6;
+ SizeFormatOptionMenu.Items.Add(miSizeFormat1);
+ SizeFormatOptionMenu.Items.Add(miSizeFormat2);
+ SizeFormatOptionMenu.Items.Add(miSizeFormat3);
+ SizeFormatOptionMenu.Items.Add(miSizeFormat4);
+ SizeFormatOptionMenu.Items.Add(miSizeFormat5);
+ SizeFormatOptionMenu.Items.Add(miSizeFormat6);
+ Table2.AddControlEx(1, 6, 1, 1, SizeFormatLabel, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 0, 2);
+ Table2.AddControlEx(2, 6, 2, 1, SizeFormatOptionMenu, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 10, 2);
+
+ TerminalOptionMenu := TGTKOptionMenu.Create(Self);
+ miTerminalDetect := TGTKMenuItem.CreateTyped(Self, itLabel);
+ miTerminalDetect.Caption := LANGPreferencesAutodetectXApp;
+ miAlwaysTerminal := TGTKMenuItem.CreateTyped(Self, itLabel);
+ miAlwaysTerminal.Caption := LANGPreferencesAlwaysRunInTerminal;
+ miNoTerminal := TGTKMenuItem.CreateTyped(Self, itLabel);
+ miNoTerminal.Caption := LANGPreferencesNeverRunInTerminal;
+ TerminalOptionMenu.Items.Add(miTerminalDetect);
+ TerminalOptionMenu.Items.Add(miAlwaysTerminal);
+ TerminalOptionMenu.Items.Add(miNoTerminal);
+ CmdLineBehaviourLabel := TGTKLabel.Create(Self);
+ CmdLineBehaviourLabel.Caption := LANGPreferencesCmdLineBehaviourLabel_Caption;
+ CmdLineBehaviourLabel.XAlign := 0;
+ CmdLineBehaviourLabel.FocusControl := TerminalOptionMenu;
+ CmdLineBehaviourLabel.UseUnderline := True;
+ Table2.AddControlEx(1, 7, 1, 1, CmdLineBehaviourLabel, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 0, 2);
+ Table2.AddControlEx(2, 7, 2, 1, TerminalOptionMenu, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 10, 2);
+
+
+ // ********* PAGE Panels
+
+ PanelsPage.AddControlEx(TGTKVBox.Create(Self), False, False, 5);
+ PanelsLabel2 := TGTKLabel.Create(Self);
+ PanelsLabel2.XAlign := 0;
+ PanelsLabel2.XPadding := 10;
+ PanelsLabel2.Caption := Format('<span weight="ultrabold">%s</span>', [LANGPreferencesFeatures]);
+ PanelsLabel2.UseMarkup := True;
+ PanelsPage.AddControlEx(PanelsLabel2, False, False, 5);
+
+ Table5 := TGTKTable.Create(Self);
+ Table5.SetRowColCount(14, 1);
+ PanelsPage.AddControlEx(Table5, False, False, 0);
+
+ DisableMouseRename := TGTKCheckButton.CreateWithLabel(Self, LANGPreferences_DisableMouseRenaming);
+ DisableMouseRename.Tooltip := LANGPreferencesDisableMouseRename_Tooltip;
+ Table5.AddControl(0, 0, 1, 1, DisableMouseRename, 30, 2);
+ DisableFileTipsCheckBox := TGTKCheckButton.CreateWithLabel(Self, LANGPreferencesDisableFileTipsCheckBox_Caption);
+ DisableFileTipsCheckBox.Tooltip := LANGPreferencesDisableFileTipsCheckBox_Tooltip;
+ Table5.AddControl(0, 1, 1, 1, DisableFileTipsCheckBox, 30, 2);
+ Table5.AddControl(0, 2, 1, 1, TGTKVBox.Create(Self), 0, 7);
+
+ PanelsLabel3 := TGTKLabel.Create(Self);
+ PanelsLabel3.XAlign := 0;
+ PanelsLabel3.XPadding := 0;
+ PanelsLabel3.Caption := Format('<span weight="ultrabold">%s</span>', [LANGPreferencesShow]);
+ PanelsLabel3.UseMarkup := True;
+ Table5.AddControl(0, 3, 1, 1, PanelsLabel3, 10, 2);
+
+ ShowFiletypeIcons := TGTKCheckButton.CreateWithLabel(Self, LANGPreferences_ShowFiletypeIconsInList);
+ Table5.AddControl(0, 4, 1, 1, ShowFiletypeIcons, 30, 2);
+ DirsInBoldCheckBox := TGTKCheckButton.CreateWithLabel(Self, LANGPreferencesDirsInBoldCheckBox_Caption);
+ Table5.AddControl(0, 5, 1, 1, DirsInBoldCheckBox, 30, 2);
+ DisableDirectoryBracketsCheckBox := TGTKCheckButton.CreateWithLabel(Self, LANGPreferencesDisableDirectoryBracketsCheckBox_Caption);
+ Table5.AddControl(0, 6, 1, 1, DisableDirectoryBracketsCheckBox, 30, 2);
+ OctalPermissionsCheckBox := TGTKCheckButton.CreateWithLabel(Self, LANGPreferencesOctalPermissionsCheckBox_Caption);
+ OctalPermissionsCheckBox.Tooltip := LANGPreferencesOctalPermissionsCheckBox_Tooltip;
+ Table5.AddControl(0, 7, 1, 1, OctalPermissionsCheckBox, 30, 2);
+ ShowTextUIDsCheckBox := TGTKCheckButton.CreateWithLabel(Self, LANGShowTextUIDsCheckBox_Caption);
+ ShowTextUIDsCheckBox.Tooltip := LANGShowTextUIDsCheckBox_Tooltip;
+ Table5.AddControl(0, 8, 1, 1, ShowTextUIDsCheckBox, 30, 2);
+ Table5.AddControl(0, 9, 1, 1, TGTKVBox.Create(Self), 0, 7);
+
+ PanelsLabel4 := TGTKLabel.Create(Self);
+ PanelsLabel4.XAlign := 0;
+ PanelsLabel4.XPadding := 0;
+ PanelsLabel4.Caption := Format('<span weight="ultrabold">%s</span>', [LANGPreferencesMovement]);
+ PanelsLabel4.UseMarkup := True;
+ Table5.AddControl(0, 10, 1, 1, PanelsLabel4, 10, 2);
+
+ LynxLikeMotionCheckBox := TGTKCheckButton.CreateWithLabel(Self, LANGPreferencesLynxLikeMotionCheckBox_Caption);
+ Table5.AddControl(0, 11, 1, 1, LynxLikeMotionCheckBox, 30, 2);
+ InsertMovesDownCheckBox := TGTKCheckButton.CreateWithLabel(Self, LANGPreferencesInsertMovesDownCheckBox_Caption);
+ Table5.AddControl(0, 12, 1, 1, InsertMovesDownCheckBox, 30, 2);
+ SpaceMovesDownCheckBox := TGTKCheckButton.CreateWithLabel(Self, LANGPreferencesSpaceMovesDownCheckBox_Caption);
+ Table5.AddControl(0, 13, 1, 1, SpaceMovesDownCheckBox, 30, 2);
+
+
+ // ********* PAGE Applications
+
+ ApplicationsPage.AddControlEx(TGTKVBox.Create(Self), False, False, 5);
+ Table1 := TGTKTable.Create(Self);
+ Table1.SetRowColCount(5, 5);
+ ApplicationsPage.AddControlEx(Table1, False, True, 5);
+
+ ViewerLabel := TGTKLabel.Create(Self);
+ ViewerLabel.XAlign := 0;
+ ViewerLabel.XPadding := 10;
+ ViewerLabel.Caption := Format('<span weight="ultrabold">%s</span>', [LANGPreferencesViewer]);
+ ViewerLabel.UseMarkup := True;
+ Table1.AddControlEx(0, 0, 5, 1, ViewerLabel, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 0, 0);
+ Table1.AddControlEx(0, 1, 5, 1, TGTKVBox.Create(Self), [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 0, 2);
+
+ ViewerCombo := TGTKCombo.Create(Self);
+ for i := 1 to Length(ConfViewersApps) do
+ ViewerCombo.Items.Append(ConfViewersApps[i]);
+ ViewerBrowseButton := TGTKButton.Create(Self);
+ ViewerBrowseButton.Caption := LANGBrowseButton_Caption;
+ ViewerBrowseButton.OnClick := ViewerBrowseButtonClick;
+ ViewerLabel2 := TGTKLabel.Create(Self);
+ ViewerLabel2.Caption := LANGPreferencesCommandSC;
+ ViewerLabel2.XAlign := 0;
+ ViewerLabel2.FocusControl := ViewerCombo.Entry;
+ ViewerLabel2.UseUnderline := True;
+ UseInternalViewerCheckBox := TGTKCheckButton.CreateWithLabel(Self, LANGPreferencesUseInternalViewer);
+ UseInternalViewerCheckBox.OnToggled := UseInternalViewerCheckBoxToggled;
+ ViewerOptionMenu := TGTKOptionMenu.Create(Self);
+ miViewerTerminalDetect := TGTKMenuItem.CreateTyped(Self, itLabel);
+ miViewerTerminalDetect.Caption := LANGPreferencesAutodetectXApp;
+ miViewerAlwaysTerminal := TGTKMenuItem.CreateTyped(Self, itLabel);
+ miViewerAlwaysTerminal.Caption := LANGPreferencesAlwaysRunInTerminal;
+ miViewerNoTerminal := TGTKMenuItem.CreateTyped(Self, itLabel);
+ miViewerNoTerminal.Caption := LANGPreferencesNeverRunInTerminal;
+ ViewerOptionMenu.Items.Add(miViewerTerminalDetect);
+ ViewerOptionMenu.Items.Add(miViewerAlwaysTerminal);
+ ViewerOptionMenu.Items.Add(miViewerNoTerminal);
+
+ Table1.AddControlEx(0, 2, 1, 1, TGTKVBox.Create(Self), [taoShrink], [taoShrink, taoExpand, taoFill], 12, 2);
+ Table1.AddControlEx(1, 2, 1, 1, ViewerLabel2, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 0, 2);
+ Table1.AddControlEx(2, 2, 3, 1, ViewerCombo, [taoExpand, taoFill], [taoShrink, taoExpand, taoFill], 10, 2);
+ Table1.AddControlEx(4, 3, 1, 1, ViewerBrowseButton, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 10, 2);
+ Table1.AddControlEx(3, 3, 1, 1, ViewerOptionMenu, [taoExpand, taoFill], [taoShrink, taoExpand, taoFill], 10, 2);
+ Table1.AddControlEx(0, 4, 5, 1, UseInternalViewerCheckBox, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 30, 2);
+
+ EditorLabel := TGTKLabel.Create(Self);
+ EditorLabel.XAlign := 0;
+ EditorLabel.XPadding := 10;
+ EditorLabel.Caption := Format('<span weight="ultrabold">%s</span>', [LANGPreferencesEditor]);
+ EditorLabel.UseMarkup := True;
+ Table1.AddControlEx(0, 5, 5, 1, TGTKVBox.Create(Self), [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 0, 13);
+ Table1.AddControlEx(0, 6, 5, 1, EditorLabel, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 0, 0);
+ Table1.AddControlEx(0, 7, 5, 1, TGTKVBox.Create(Self), [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 0, 2);
+
+ EditorCombo := TGTKCombo.Create(Self);
+ for i := 1 to Length(ConfEditorApps) do
+ EditorCombo.Items.Append(ConfEditorApps[i]);
+ EditorBrowseButton := TGTKButton.Create(Self);
+ EditorBrowseButton.Caption := LANGBrowseButton_Caption;
+ EditorBrowseButton.OnClick := ViewerBrowseButtonClick;
+ EditorLabel2 := TGTKLabel.Create(Self);
+ EditorLabel2.Caption := LANGPreferencesCommandSC;
+ EditorLabel2.XAlign := 0;
+ EditorLabel2.FocusControl := EditorCombo.Entry;
+ EditorLabel2.UseUnderline := True;
+ EditorOptionMenu := TGTKOptionMenu.Create(Self);
+ miEditorTerminalDetect := TGTKMenuItem.CreateTyped(Self, itLabel);
+ miEditorTerminalDetect.Caption := LANGPreferencesAutodetectXApp;
+ miEditorAlwaysTerminal := TGTKMenuItem.CreateTyped(Self, itLabel);
+ miEditorAlwaysTerminal.Caption := LANGPreferencesAlwaysRunInTerminal;
+ miEditorNoTerminal := TGTKMenuItem.CreateTyped(Self, itLabel);
+ miEditorNoTerminal.Caption := LANGPreferencesNeverRunInTerminal;
+ EditorOptionMenu.Items.Add(miEditorTerminalDetect);
+ EditorOptionMenu.Items.Add(miEditorAlwaysTerminal);
+ EditorOptionMenu.Items.Add(miEditorNoTerminal);
+
+ Table1.AddControlEx(0, 8, 1, 1, TGTKVBox.Create(Self), [taoShrink], [taoShrink, taoExpand, taoFill], 12, 2);
+ Table1.AddControlEx(1, 8, 1, 1, EditorLabel2, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 0, 2);
+ Table1.AddControlEx(2, 8, 3, 1, EditorCombo, [taoExpand, taoFill], [taoShrink, taoExpand, taoFill], 10, 2);
+ Table1.AddControlEx(4, 9, 1, 1, EditorBrowseButton, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 10, 2);
+ Table1.AddControlEx(3, 9, 1, 1, EditorOptionMenu, [taoExpand, taoFill], [taoShrink, taoExpand, taoFill], 10, 2);
+
+ TerminalLabel := TGTKLabel.Create(Self);
+ TerminalLabel.XAlign := 0;
+ TerminalLabel.XPadding := 10;
+ TerminalLabel.Caption := Format('<span weight="ultrabold">%s</span>', [LANGPreferencesTerminal]);
+ TerminalLabel.UseMarkup := True;
+ Table1.AddControlEx(0, 10, 5, 1, TGTKVBox.Create(Self), [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 0, 13);
+ Table1.AddControlEx(0, 11, 5, 1, TerminalLabel, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 0, 0);
+ Table1.AddControlEx(0, 12, 5, 1, TGTKVBox.Create(Self), [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 0, 2);
+
+ TerminalCombo := TGTKCombo.Create(Self);
+ for i := 1 to Length(ConfTerminalApps) do
+ TerminalCombo.Items.Append(ConfTerminalApps[i]);
+ TerminalBrowseButton := TGTKButton.Create(Self);
+ TerminalBrowseButton.Caption := LANGBrowseButton_Caption;
+ TerminalBrowseButton.OnClick := ViewerBrowseButtonClick;
+ TerminalLabel2 := TGTKLabel.Create(Self);
+ TerminalLabel2.Caption := LANGPreferencesCommandSC;
+ TerminalLabel2.XAlign := 0;
+ TerminalLabel2.FocusControl := TerminalCombo.Entry;
+ TerminalLabel2.UseUnderline := True;
+
+ Table1.AddControlEx(0, 13, 1, 1, TGTKVBox.Create(Self), [taoShrink], [taoShrink, taoExpand, taoFill], 12, 2);
+ Table1.AddControlEx(1, 13, 1, 1, TerminalLabel2, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 0, 2);
+ Table1.AddControlEx(2, 13, 3, 1, TerminalCombo, [taoExpand, taoFill], [taoShrink, taoExpand, taoFill], 10, 2);
+ Table1.AddControlEx(4, 14, 1, 1, TerminalBrowseButton, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 10, 2);
+
+
+ // ********* PAGE Fonts
+
+ FontsPage.AddControlEx(TGTKVBox.Create(Self), False, False, 5);
+ FontsLabel2 := TGTKLabel.Create(Self);
+ FontsLabel2.XAlign := 0;
+ FontsLabel2.XPadding := 10;
+ FontsLabel2.Caption := Format('<span weight="ultrabold">%s</span>', [LANGPreferences_FontsPage]);
+ FontsLabel2.UseMarkup := True;
+ FontsPage.AddControlEx(FontsLabel2, False, False, 5);
+
+ Table3 := TGTKTable.Create(Self);
+ Table3.SetRowColCount(2, 4);
+ FontsPage.AddControlEx(Table3, False, False, 0);
+ ListFontLabel := TGTKLabel.Create(Self);
+ ListFontLabel.Caption := LANGPreferences_ListFont;
+ ListFontLabel.XAlign := 0;
+ ListFontFrame := TGTKFrame.CreateWithoutLabel(Self);
+ ListFontFrame.ShadowType := stEtchedIn;
+ ListFontPreview := TGTKLabel.Create(Self);
+ ListFontPreview.Caption := 'Luxi Sans, 10';
+ ListFontFrame.AddControl(ListFontPreview);
+ ChangeFontButton := TGTKButton.Create(Self);
+ ChangeFontButton.Caption := LANGPreferences_Change;
+ ChangeFontButton.OnClick := ChangeFontButtonClick;
+ DefaultFontCheckBox := TGTKCheckButton.CreateWithLabel(Self, LANGPreferences_UseDefaultFont);
+ DefaultFontCheckBox.OnToggled := DefaultFontCheckBoxToggled;
+
+ Table3.AddControlEx(0, 0, 1, 1, TGTKVBox.Create(Self), [taoShrink], [taoShrink, taoExpand, taoFill], 12, 2);
+ Table3.AddControlEx(1, 0, 1, 1, ListFontLabel, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 5, 2);
+ Table3.AddControlEx(2, 0, 1, 1, ListFontFrame, [taoExpand, taoFill], [taoShrink, taoExpand, taoFill], 2, 2);
+ Table3.AddControlEx(3, 0, 1, 1, ChangeFontButton, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 10, 2);
+ Table3.AddControlEx(1, 1, 3, 1, DefaultFontCheckBox, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 10, 4);
+
+
+ // ********* PAGE Colors
+
+ ColorsPage.AddControlEx(TGTKVBox.Create(Self), False, False, 5);
+ ColorsLabel2 := TGTKLabel.Create(Self);
+ ColorsLabel2.XAlign := 0;
+ ColorsLabel2.XPadding := 10;
+ ColorsLabel2.Caption := Format('<span weight="ultrabold">%s</span>', [LANGPreferences_ColorsPage]);
+ ColorsLabel2.UseMarkup := True;
+ ColorsPage.AddControlEx(ColorsLabel2, False, False, 5);
+
+ Table4 := TGTKTable.Create(Self);
+ Table4.SetRowColCount(7, 8);
+ ColorsPage.AddControlEx(Table4, False, False, 0);
+ ForegroundLabel := TGTKLabel.Create(Self);
+ ForegroundLabel.Caption := LANGPreferences_Foreground;
+ BackgroundLabel := TGTKLabel.Create(Self);
+ BackgroundLabel.Caption := LANGPreferences_Background;
+ Table4.AddControl(1, 0, 3, 1, ForegroundLabel, 5, 2);
+ Table4.AddControl(4, 0, 3, 1, BackgroundLabel, 5, 2);
+
+ NormalItemFGColorLabel := TGTKLabel.Create(Self);
+ NormalItemFGColorLabel.XAlign := 0;
+ NormalItemFGColorLabel.Caption := LANGPreferences_NormalItem;
+ NormalItemFGColorButton := TGnomeColorButton.Create(Self);
+ NormalItemFGColorButton.SetSizeRequest(30, -1);
+ NormalItemBGColorButton := TGnomeColorButton.Create(Self);
+ NormalItemBGColorButton.SetSizeRequest(30, -1);
+ NormalItemFGColorDefault := TGTKCheckButton.CreateWithLabel(Self, LANGPreferences_Default);
+ NormalItemFGColorDefault.Tooltip := LANGPreferences_SetToDefaultToUseGTKThemeColors;
+ NormalItemFGColorDefault.OnToggled := ColorButtonDefaultsToggled;
+ Table4.AddControl(0, 1, 1, 1, NormalItemFGColorLabel, 30, 2);
+ Table4.AddControl(2, 1, 1, 1, NormalItemFGColorButton, 5, 2);
+ Table4.AddControl(5, 1, 1, 1, NormalItemBGColorButton, 5, 2);
+ Table4.AddControl(7, 1, 1, 1, NormalItemFGColorDefault, 10, 2);
+
+ ActiveItemFGColorLabel := TGTKLabel.Create(Self);
+ ActiveItemFGColorLabel.Caption := LANGPreferences_Cursor;
+ ActiveItemFGColorLabel.XAlign := 0;
+ ActiveItemFGColorButton := TGnomeColorButton.Create(Self);
+ ActiveItemBGColorButton := TGnomeColorButton.Create(Self);
+ ActiveItemFGColorDefault := TGTKCheckButton.CreateWithLabel(Self, LANGPreferences_Default);
+ ActiveItemFGColorDefault.Tooltip := LANGPreferences_SetToDefaultToUseGTKThemeColors;
+ ActiveItemFGColorDefault.OnToggled := ColorButtonDefaultsToggled;
+ Table4.AddControl(0, 2, 1, 1, ActiveItemFGColorLabel, 30, 2);
+ Table4.AddControl(2, 2, 1, 1, ActiveItemFGColorButton, 5, 2);
+ Table4.AddControl(5, 2, 1, 1, ActiveItemBGColorButton, 5, 2);
+ Table4.AddControl(7, 2, 1, 1, ActiveItemFGColorDefault, 10, 2);
+
+ InactiveItemFGColorLabel := TGTKLabel.Create(Self);
+ InactiveItemFGColorLabel.Caption := LANGPreferences_InactiveItem;
+ InactiveItemFGColorLabel.XAlign := 0;
+ InactiveItemFGColorButton := TGnomeColorButton.Create(Self);
+ InactiveItemBGColorButton := TGnomeColorButton.Create(Self);
+ InactiveItemFGColorDefault := TGTKCheckButton.CreateWithLabel(Self, LANGPreferences_Default);
+ InactiveItemFGColorDefault.Tooltip := LANGPreferences_SetToDefaultToUseGTKThemeColors;
+ InactiveItemFGColorDefault.OnToggled := ColorButtonDefaultsToggled;
+ Table4.AddControl(0, 3, 1, 1, InactiveItemFGColorLabel, 30, 2);
+ Table4.AddControl(2, 3, 1, 1, InactiveItemFGColorButton, 5, 2);
+ Table4.AddControl(5, 3, 1, 1, InactiveItemBGColorButton, 5, 2);
+ Table4.AddControl(7, 3, 1, 1, InactiveItemFGColorDefault, 10, 2);
+
+ SelectedItemFGColorLabel := TGTKLabel.Create(Self);
+ SelectedItemFGColorLabel.Caption := LANGPreferences_SelectedItem;
+ SelectedItemFGColorLabel.XAlign := 0;
+ SelectedItemFGColorButton := TGnomeColorButton.Create(Self);
+ Table4.AddControl(0, 4, 1, 1, SelectedItemFGColorLabel, 30, 2);
+ Table4.AddControl(2, 4, 1, 1, SelectedItemFGColorButton, 5, 2);
+
+ LinkItemFGColorLabel := TGTKLabel.Create(Self);
+ LinkItemFGColorLabel.Caption := LANGPreferences_LinkItem;
+ LinkItemFGColorLabel.XAlign := 0;
+ LinkItemFGColorButton := TGnomeColorButton.Create(Self);
+ LinkItemFGColorDefault := TGTKCheckButton.CreateWithLabel(Self, LANGPreferences_Default);
+ LinkItemFGColorDefault.Tooltip := LANGPreferences_LinkItemHint;
+ LinkItemFGColorDefault.OnToggled := ColorButtonDefaultsToggled;
+ Table4.AddControl(0, 5, 1, 1, LinkItemFGColorLabel, 30, 2);
+ Table4.AddControl(2, 5, 1, 1, LinkItemFGColorButton, 5, 2);
+ Table4.AddControl(7, 5, 1, 1, LinkItemFGColorDefault, 10, 2);
+
+ DotFileItemFGColorLabel := TGTKLabel.Create(Self);
+ DotFileItemFGColorLabel.Caption := LANGPreferences_DotFileItem;
+ DotFileItemFGColorLabel.XAlign := 0;
+ DotFileItemFGColorButton := TGnomeColorButton.Create(Self);
+ DotFileItemFGColorDefault := TGTKCheckButton.CreateWithLabel(Self, LANGPreferences_Default);
+ DotFileItemFGColorDefault.Tooltip := LANGPreferences_DotFileItemHint;
+ DotFileItemFGColorDefault.OnToggled := ColorButtonDefaultsToggled;
+ Table4.AddControl(0, 6, 1, 1, DotFileItemFGColorLabel, 30, 2);
+ Table4.AddControl(2, 6, 1, 1, DotFileItemFGColorButton, 5, 2);
+ Table4.AddControl(7, 6, 1, 1, DotFileItemFGColorDefault, 10, 2);
+
+ Table4.AddControl(1, 6, 1, 1, TGTKVBox.Create(Self), 2, 2);
+ Table4.AddControl(3, 6, 1, 1, TGTKVBox.Create(Self), 2, 2);
+ Table4.AddControl(4, 6, 1, 1, TGTKVBox.Create(Self), 2, 2);
+ Table4.AddControl(6, 6, 1, 1, TGTKVBox.Create(Self), 2, 2);
+
+
+ // ********* PAGE Experimental
+
+ ExperimentalPage.AddControlEx(TGTKVBox.Create(Self), False, False, 5);
+ ExperimentalLabel2 := TGTKLabel.Create(Self);
+ ExperimentalLabel2.XAlign := 0;
+ ExperimentalLabel2.XPadding := 10;
+ ExperimentalLabel2.Caption := Format('<span weight="ultrabold">%s</span>', [LANGPreferencesExperimentalFeatures]);
+ ExperimentalLabel2.UseMarkup := True;
+ ExperimentalPage.AddControlEx(ExperimentalLabel2, False, False, 5);
+
+ HBox4 := TGTKHBox.Create(Self);
+ HBox4.Homogeneous := False;
+ ExperimentalWarningLabel := TGTKLabel.Create(Self);
+ ExperimentalWarningLabel.Caption := LANGPreferencesExperimentalWarningLabel_Caption;
+ ExperimentalWarningLabel.UseMarkup := True;
+ ExperimentalWarningLabel.LineWrap := True;
+ ExperimentalWarningLabel.SetSizeRequest(300, -1);
+ ExperimentalWarningIcon := TGTKImage.Create(Self);
+ ExperimentalWarningIcon.SetFromStock('gtk-dialog-warning', isDialog);
+ HBox4.AddControlEx(TGTKVBox.Create(Self), False, False, 12);
+ HBox4.AddControlEx(ExperimentalWarningIcon, False, False, 7);
+ HBox4.AddControlEx(ExperimentalWarningLabel, True, True, 7);
+ HBox4.AddControlEx(TGTKVBox.Create(Self), False, False, 8);
+ ExperimentalPage.AddControlEx(HBox4, False, False, 5);
+ ExperimentalPage.AddControlEx(TGTKVBox.Create(Self), False, False, 10);
+
+ Table6 := TGTKTable.Create(Self);
+ Table6.SetRowColCount(3, 1);
+ ExperimentalPage.AddControlEx(Table6, False, False, 0);
+
+ FocusRefreshCheckBox := TGTKCheckButton.CreateWithLabel(Self, LANGPreferencesFocusRefreshCheckBox_Caption);
+ FocusRefreshCheckBox.Tooltip := LANGPreferencesFocusRefreshCheckBox_Tooltip;
+ Table6.AddControl(0, 0, 1, 1, FocusRefreshCheckBox, 30, 2);
+ WMCompatModeCheckBox := TGTKCheckButton.CreateWithLabel(Self, LANGPreferencesWMCompatModeCheckBox_Caption);
+ WMCompatModeCheckBox.Tooltip := LANGPreferencesWMCompatModeCheckBox_Tooltip;
+ Table6.AddControl(0, 1, 1, 1, WMCompatModeCheckBox, 30, 2);
+ CompatUseLibcSystemCheckBox := TGTKCheckButton.CreateWithLabel(Self, LANGPreferencesCompatUseLibcSystemCheckBox_Caption);
+ CompatUseLibcSystemCheckBox.Tooltip := LANGPreferencesCompatUseLibcSystemCheckBox_Tooltip;
+ Table6.AddControl(0, 2, 1, 1, CompatUseLibcSystemCheckBox, 30, 2);
+
+ // ******************
+
+ OnKeyDown := FormKeyDown;
+ OnDestroy := FormDestroy;
+end;
+
+procedure TFPreferences.FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+begin
+// if Key = GDK_ESCAPE then ModalResult := mbCancel;
+end;
+
+procedure TFPreferences.FormDestroy(Sender: TObject);
+begin
+
+end;
+
+(********************************************************************************************************************************)
+procedure TFPreferences.ViewerBrowseButtonClick(Sender: TObject);
+
+ procedure BrowseForFile(ToControl: TGTKEntry);
+ var Dialog: TGTKFileSelectionDialog;
+ begin
+ Dialog := TGTKFileSelectionDialog.CreateWithTitle(Self, LANGPreferences_BrowseForApplication);
+ try
+ Dialog.ShowFileOpButtons := False;
+ Dialog.FileName := ToControl.Text;
+ if Byte(Dialog.Run) = 251 then ToControl.Text := Dialog.FileName;
+ finally
+ Dialog.Free;
+ end;
+ end;
+
+begin
+ if Sender = ViewerBrowseButton then BrowseForFile(ViewerCombo.Entry)
+ else if Sender = EditorBrowseButton then BrowseForFile(EditorCombo.Entry)
+ else if Sender = TerminalBrowseButton then BrowseForFile(TerminalCombo.Entry);
+end;
+
+procedure TFPreferences.DefaultFontCheckBoxToggled(Sender: TObject);
+var FontDesc: PPangoFontDescription;
+begin
+ ListFontLabel.Enabled := not DefaultFontCheckBox.Checked;
+ ChangeFontButton.Enabled := not DefaultFontCheckBox.Checked;
+ ListFontFrame.Enabled := not DefaultFontCheckBox.Checked;
+ if DefaultFontCheckBox.Checked then begin
+ gtk_widget_modify_font(ListFontPreview.FWidget, nil);
+ ListFontPreview.Caption := Format(LANGPreferences_DefaultS, [DefaultGTKFont]);
+ end else begin
+ FontDesc := pango_font_description_from_string(StringToPgchar(LocalListFont));
+ gtk_widget_modify_font(ListFontPreview.FWidget, FontDesc);
+ ListFontPreview.Caption := LocalListFont;
+ end;
+end;
+
+procedure TFPreferences.ChangeFontButtonClick(Sender: TObject);
+
+ procedure ChangeFont(ToControl: TGTKLabel);
+ var Dialog: TGTKFontSelectionDialog;
+ FontDesc: PPangoFontDescription;
+ begin
+ Dialog := TGTKFontSelectionDialog.CreateWithTitle(Self, LANGPreferences_SelectFont);
+ try
+ Dialog.FontName := ToControl.Caption;
+ if Byte(Dialog.Run) = 251 then begin
+ ToControl.Caption := Dialog.FontName;
+ FontDesc := pango_font_description_from_string(StringToPgchar(Dialog.FontName));
+ gtk_widget_modify_font(ToControl.FWidget, FontDesc);
+// g_object_unref(FontDesc); // *** - cannot unref, causes SIGSEGV
+ LocalListFont := Dialog.FontName;
+ end;
+ finally
+ Dialog.Free;
+ end;
+ end;
+
+begin
+ if Sender = ChangeFontButton then ChangeFont(ListFontPreview);
+end;
+
+procedure TFPreferences.ColorButtonDefaultsToggled(Sender: TObject);
+begin
+ if NormalItemFGColorDefault.Checked then NormalItemFGColorButton.SetDefaultColor
+ else NormalItemFGColorButton.UnsetDefaultColor;
+ if NormalItemFGColorDefault.Checked then NormalItemBGColorButton.SetDefaultColor
+ else NormalItemBGColorButton.UnsetDefaultColor;
+ if ActiveItemFGColorDefault.Checked then ActiveItemFGColorButton.SetDefaultColor
+ else ActiveItemFGColorButton.UnsetDefaultColor;
+ if ActiveItemFGColorDefault.Checked then ActiveItemBGColorButton.SetDefaultColor
+ else ActiveItemBGColorButton.UnsetDefaultColor;
+ if InactiveItemFGColorDefault.Checked then InactiveItemFGColorButton.SetDefaultColor
+ else InactiveItemFGColorButton.UnsetDefaultColor;
+ if InactiveItemFGColorDefault.Checked then InactiveItemBGColorButton.SetDefaultColor
+ else InactiveItemBGColorButton.UnsetDefaultColor;
+ if LinkItemFGColorDefault.Checked then LinkItemFGColorButton.SetDefaultColor
+ else LinkItemFGColorButton.UnsetDefaultColor;
+ if DotFileItemFGColorDefault.Checked then DotFileItemFGColorButton.SetDefaultColor
+ else DotFileItemFGColorButton.UnsetDefaultColor;
+end;
+
+procedure TFPreferences.DefaultRowHeightCheckBoxToggled(Sender: TObject);
+begin
+ RowHeightLabel.Enabled := not DefaultRowHeightCheckBox.Checked;
+ RowHeightSpinEdit.Enabled := not DefaultRowHeightCheckBox.Checked;
+end;
+
+procedure TFPreferences.UseInternalViewerCheckBoxToggled(Sender: TObject);
+begin
+ ViewerCombo.Enabled := not UseInternalViewerCheckBox.Checked;
+ ViewerLabel2.Enabled := not UseInternalViewerCheckBox.Checked;
+ ViewerBrowseButton.Enabled := not UseInternalViewerCheckBox.Checked;
+ ViewerOptionMenu.Enabled := not UseInternalViewerCheckBox.Checked;
+end;
+
+(********************************************************************************************************************************)
+procedure TFPreferences.AssignDefaultValues;
+var AColor: TGDKColor;
+begin
+ DefaultGTKFont := pango_font_description_to_string(pango_context_get_font_description(gtk_widget_get_pango_context(FWidget)));
+ LocalListFont := ConfPanelFont;
+
+ RowHeightSpinEdit.Min := 6;
+ RowHeightSpinEdit.Max := 128;
+ RowHeightSpinEdit.AsInteger := ConfRowHeightReal;
+ DefaultRowHeightCheckBox.Checked := ConfRowHeight < 0;
+ NumHistoryItemsSpinEdit.Min := 1;
+ NumHistoryItemsSpinEdit.Max := 512;
+ NumHistoryItemsSpinEdit.AsInteger := ConfNumHistoryItems;
+ ClearROAttr.Checked := ConfClearReadOnlyAttr;
+ DisableMouseRename.Checked := ConfDisableMouseRename;
+ ShowFiletypeIcons.Checked := ConfUseFileTypeIcons;
+ ViewerCombo.Entry.Text := ANSIToUTF8(ConfViewer);
+ EditorCombo.Entry.Text := ANSIToUTF8(ConfEditor);
+ TerminalCombo.Entry.Text := ANSIToUTF8(ConfTerminalCommand);
+ DefaultFontCheckBox.Checked := ConfUseSystemFont;
+
+ if not StringToGDKColor(ConfNormalItemFGColor, AColor) then StringToGDKColor(ConfDefaultNormalItemFGColor, AColor);
+ NormalItemFGColorButton.Color := AColor;
+ if not StringToGDKColor(ConfNormalItemBGColor, AColor) then StringToGDKColor(ConfDefaultNormalItemBGColor, AColor);
+ NormalItemBGColorButton.Color := AColor;
+ if not StringToGDKColor(ConfActiveItemFGColor, AColor) then StringToGDKColor(ConfDefaultActiveItemFGColor, AColor);
+ ActiveItemFGColorButton.Color := AColor;
+ if not StringToGDKColor(ConfActiveItemBGColor, AColor) then StringToGDKColor(ConfDefaultActiveItemBGColor, AColor);
+ ActiveItemBGColorButton.Color := AColor;
+ if not StringToGDKColor(ConfInactiveItemFGColor, AColor) then StringToGDKColor(ConfDefaultInactiveItemFGColor, AColor);
+ InactiveItemFGColorButton.Color := AColor;
+ if not StringToGDKColor(ConfInactiveItemBGColor, AColor) then StringToGDKColor(ConfDefaultInactiveItemBGColor, AColor);
+ InactiveItemBGColorButton.Color := AColor;
+ if not StringToGDKColor(ConfSelectedItemFGColor, AColor) then StringToGDKColor(ConfDefaultSelectedItemFGColor, AColor);
+ SelectedItemFGColorButton.Color := AColor;
+ if not StringToGDKColor(ConfLinkItemFGColor, AColor) then StringToGDKColor(ConfDefaultLinkItemFGColor, AColor);
+ LinkItemFGColorButton.Color := AColor;
+ if not StringToGDKColor(ConfDotFileItemFGColor, AColor) then StringToGDKColor(ConfDefaultDotFileItemFGColor, AColor);
+ DotFileItemFGColorButton.Color := AColor;
+
+ NormalItemFGColorDefault.Checked := ConfNormalItemDefaultColors;
+ ActiveItemFGColorDefault.Checked := ConfCursorDefaultColors;
+ InactiveItemFGColorDefault.Checked := ConfInactiveItemDefaultColors;
+ LinkItemFGColorDefault.Checked := ConfLinkItemDefaultColors;
+ DotFileItemFGColorDefault.Checked := ConfDotFileItemDefaultColors;
+
+ SelectAllDirectoriesCheckBox.Checked := ConfSelectAllDirs;
+ NewStyleAltOCheckBox.Checked := ConfNewStyleAltO;
+ ShowFuncButtonsCheckBox.Checked := ConfShowFuncButtons;
+ SizeFormatOptionMenu.ItemIndex := ConfSizeFormat;
+ TerminalOptionMenu.ItemIndex := ConfCmdLineTerminalBehaviour;
+ DisableFileTipsCheckBox.Checked := ConfDisableFileTips;
+ DirsInBoldCheckBox.Checked := ConfDirsInBold;
+ DisableDirectoryBracketsCheckBox.Checked := ConfDisableDirectoryBrackets;
+ OctalPermissionsCheckBox.Checked := ConfOctalPerm;
+ ShowTextUIDsCheckBox.Checked := ConfShowTextUIDs;
+ LynxLikeMotionCheckBox.Checked := ConfLynxLikeMotion;
+ InsertMovesDownCheckBox.Checked := ConfInsMoveDown;
+ SpaceMovesDownCheckBox.Checked := ConfSpaceMovesDown;
+ UseInternalViewerCheckBox.Checked := ConfUseInternalViewer;
+ ViewerOptionMenu.ItemIndex := ConfViewerTerminalBehaviour;
+ EditorOptionMenu.ItemIndex := ConfEditorTerminalBehaviour;
+ FocusRefreshCheckBox.Checked := ConfFocusRefresh;
+ WMCompatModeCheckBox.Checked := ConfWMCompatMode;
+ CompatUseLibcSystemCheckBox.Checked := ConfUseLibcSystem;
+
+ DefaultFontCheckBoxToggled(Self);
+ ColorButtonDefaultsToggled(Self);
+ UseInternalViewerCheckBoxToggled(Self);
+end;
+
+procedure TFPreferences.SaveSettings;
+var x: integer;
+begin
+ if not DefaultRowHeightCheckBox.Checked then x := RowHeightSpinEdit.AsInteger
+ else x := -1;
+ RebuildListViews := (ConfRowHeight <> x) or (ConfUseFileTypeIcons <> ShowFiletypeIcons.Checked) or
+ (ConfUseSystemFont <> DefaultFontCheckBox.Checked) or
+ ((not DefaultFontCheckBox.Checked) and (ConfPanelFont <> ListFontPreview.Caption));
+ RebuildIcons := ConfRowHeight <> x;
+
+ ConfRowHeight := x;
+ ConfNumHistoryItems := NumHistoryItemsSpinEdit.AsInteger;
+ ConfClearReadOnlyAttr := ClearROAttr.Checked;
+ ConfDisableMouseRename := DisableMouseRename.Checked;
+ ConfUseFileTypeIcons := ShowFiletypeIcons.Checked;
+ ConfViewer := UTF8ToANSI(ViewerCombo.Entry.Text);
+ ConfEditor := UTF8ToANSI(EditorCombo.Entry.Text);
+ ConfTerminalCommand := UTF8ToANSI(TerminalCombo.Entry.Text);
+ ConfUseSystemFont := DefaultFontCheckBox.Checked;
+ if not ConfUseSystemFont then ConfPanelFont := ListFontPreview.Caption;
+
+ ConfNormalItemFGColor := GDKColorToString(NormalItemFGColorButton.Color);
+ ConfNormalItemBGColor := GDKColorToString(NormalItemBGColorButton.Color);
+ ConfActiveItemFGColor := GDKColorToString(ActiveItemFGColorButton.Color);
+ ConfActiveItemBGColor := GDKColorToString(ActiveItemBGColorButton.Color);
+ ConfInactiveItemFGColor := GDKColorToString(InactiveItemFGColorButton.Color);
+ ConfInactiveItemBGColor := GDKColorToString(InactiveItemBGColorButton.Color);
+ ConfSelectedItemFGColor := GDKColorToString(SelectedItemFGColorButton.Color);
+ ConfLinkItemFGColor := GDKColorToString(LinkItemFGColorButton.Color);
+ ConfDotFileItemFGColor := GDKColorToString(DotFileItemFGColorButton.Color);
+
+ ConfNormalItemDefaultColors := NormalItemFGColorDefault.Checked;
+ ConfCursorDefaultColors := ActiveItemFGColorDefault.Checked;
+ ConfInactiveItemDefaultColors := InactiveItemFGColorDefault.Checked;
+ ConfLinkItemDefaultColors := LinkItemFGColorDefault.Checked;
+ ConfDotFileItemDefaultColors := DotFileItemFGColorDefault.Checked;
+
+ ConfSelectAllDirs := SelectAllDirectoriesCheckBox.Checked;
+ ConfNewStyleAltO := NewStyleAltOCheckBox.Checked;
+ ConfSizeFormat := SizeFormatOptionMenu.ItemIndex;
+ ConfCmdLineTerminalBehaviour := TerminalOptionMenu.ItemIndex;
+ ConfDirsInBold := DirsInBoldCheckBox.Checked;
+ ConfDisableDirectoryBrackets := DisableDirectoryBracketsCheckBox.Checked;
+ ConfOctalPerm := OctalPermissionsCheckBox.Checked;
+ ConfShowTextUIDs := ShowTextUIDsCheckBox.Checked;
+ ConfLynxLikeMotion := LynxLikeMotionCheckBox.Checked;
+ ConfInsMoveDown := InsertMovesDownCheckBox.Checked;
+ ConfSpaceMovesDown := SpaceMovesDownCheckBox.Checked;
+ ConfUseInternalViewer := UseInternalViewerCheckBox.Checked;
+ ConfViewerTerminalBehaviour := ViewerOptionMenu.ItemIndex;
+ ConfEditorTerminalBehaviour := EditorOptionMenu.ItemIndex;
+ ConfFocusRefresh := FocusRefreshCheckBox.Checked;
+ ConfWMCompatMode := WMCompatModeCheckBox.Checked;
+ ConfUseLibcSystem := CompatUseLibcSystemCheckBox.Checked;
+ ConfDisableFileTips := DisableFileTipsCheckBox.Checked;
+ ConfShowFuncButtons := ShowFuncButtonsCheckBox.Checked;
+end;
+
+(********************************************************************************************************************************)
+end.
+
diff --git a/UProgress.pas b/UProgress.pas
new file mode 100644
index 0000000..fad5268
--- /dev/null
+++ b/UProgress.pas
@@ -0,0 +1,142 @@
+(*
+ Tux Commander - UProgress - Progress dialog controlling various operations and related funcions
+ Copyright (C) 2004 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit UProgress;
+
+interface
+
+uses
+ SysUtils, Types, Classes, Variants, GTKControls, GTKForms, GTKStdCtrls, GTKExtCtrls, GTKConsts, GTKView,
+ UEngines;
+
+type
+ TFProgress = class(TGTKDialog)
+ Label1, Label2, Label3: TGTKLabel;
+ {VBox,} Space, Space2, BarBox, LabelBox: TGTKVBox;
+ HBox, Bar1HBox, Bar2HBox: TGTKHBox;
+ ProgressBar, ProgressBar2: TGTKProgressBar;
+ CancelButton: TGTKButton;
+ procedure FormCreate(Sender: TObject); override;
+ procedure FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+ procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
+ procedure CancelButtonClick(Sender: TObject);
+ public
+ Cancelled: boolean;
+ FTwoBars: boolean;
+ procedure SetNumBars(TwoBars: boolean);
+ end;
+
+var
+ FProgress: TFProgress;
+
+implementation
+
+uses ULocale;
+
+
+procedure TFProgress.FormCreate(Sender: TObject);
+begin
+ WindowPosition := wpCenter;
+ Cancelled := False;
+ Buttons := [];
+ ShowSeparator := False;
+ ActionArea.SetSizeRequest(0, 4);
+ Caption := LANGProgress;
+ CancelButton := TGTKButton.Create(Self);
+ CancelButton.Caption := LANGCancel;
+ CancelButton.SetSizeRequest(90, -1);
+ Label1 := TGTKLabel.Create(Self);
+ Label1.Caption := LANGDelete;
+ Label2 := TGTKLabel.Create(Self);
+ Label3 := TGTKLabel.Create(Self);
+ Label2.Caption := LANGPreparingList;
+ ProgressBar := TGTKProgressBar.Create(Self);
+ ProgressBar.SetSizeRequest(420, 23);
+ ProgressBar2 := TGTKProgressBar.Create(Self);
+ ProgressBar2.SetSizeRequest(420, 23);
+ Bar1HBox := TGTKHBox.Create(Self);
+ Bar1HBox.AddControlEx(ProgressBar, False, False, 0);
+ Bar2HBox := TGTKHBox.Create(Self);
+ Bar2HBox.AddControlEx(ProgressBar2, False, False, 0);
+ BarBox := TGTKVBox.Create(Self);
+ HBox := TGTKHBox.Create(Self);
+ HBox.AddControlEx(CancelButton, False, False, 0);
+ Space := TGTKVBox.Create(Self);
+ Space.SetSizeRequest(-1, 7);
+ Space2 := TGTKVBox.Create(Self);
+ Space2.SetSizeRequest(-1, 5);
+ LabelBox := TGTKVBox.Create(Self);
+// VBox := TGTKVBox.Create(Self);
+ ClientArea.AddControlEx(LabelBox, True, True, 5);
+ ClientArea.AddControlEx(BarBox, False, False, 10);
+ ClientArea.AddControlEx(HBox, False, False, 0);
+// ClientArea.AddControlEx(Space, False, False, 0);
+// ClientArea.AddControlEx(VBox, True, True, 0);
+// AddControl(VBox);
+ OnKeyDown := FormKeyDown;
+ OnCloseQuery := FormCloseQuery;
+ CancelButton.OnClick := CancelButtonClick;
+ CancelButton.Default := True;
+end;
+
+procedure TFProgress.FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+begin
+ if Key = GDK_ESCAPE then begin
+ Accept := False;
+ CancelButtonClick(Sender);
+ end;
+end;
+
+procedure TFProgress.CancelButtonClick(Sender: TObject);
+begin
+ Cancelled := True;
+end;
+
+procedure TFProgress.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
+begin
+ CancelButtonClick(Sender);
+ CanClose := False;
+end;
+
+procedure TFProgress.SetNumBars(TwoBars: boolean);
+begin
+ FTwoBars := TwoBars;
+ if not TwoBars then begin
+ LabelBox.AddControlEx(Label1, True, True, 5);
+ LabelBox.AddControlEx(Label2, True, True, 0);
+ BarBox.AddControlEx(Bar1HBox, False, False, 0);
+ SetDefaultSize(480, -1);
+ SetSizeRequest(480, -1);
+ end else begin
+ LabelBox.AddControlEx(Label1, True, True, 0);
+ LabelBox.AddControlEx(Label2, True, True, 0);
+ LabelBox.AddControlEx(Label3, True, True, 0);
+ Label2.XAlign := 0; Label2.XPadding := 20;
+ Label3.XAlign := 0; Label3.XPadding := 20;
+ BarBox.AddControlEx(Bar1HBox, False, False, 0);
+ BarBox.AddControlEx(Space2, False, False, 0);
+ BarBox.AddControlEx(Bar2HBox, False, False, 0);
+ SetDefaultSize(480, -1);
+ SetSizeRequest(480, -1);
+ end;
+end;
+
+
+end.
+
diff --git a/UProperties.pas b/UProperties.pas
new file mode 100644
index 0000000..371f7a6
--- /dev/null
+++ b/UProperties.pas
@@ -0,0 +1,144 @@
+(*
+ Tux Commander - UProeprties - File properties dialog
+ Copyright (C) 2006 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit UProperties;
+
+interface
+
+uses
+ glib2, gtk2, pango, SysUtils, Types, Classes, Variants, GTKControls, GTKForms, GTKStdCtrls, GTKExtCtrls, GTKConsts, GTKView,
+ GTKUtils, GTKDialogs, GTKPixbuf, GTKClasses, GTKMenus,
+ UCoreClasses, UGnome;
+
+type
+ TFProperties = class(TGTKDialog)
+ TitleFrame, ListFontFrame: TGTKFrame;
+ TitleLabel: TGTKLabel;
+ TitleEventBox: TGTKEventBox;
+ TitleIcon: TGTKImage;
+ TitleHBox: TGTKHBox;
+ Notebook: TGTKNotebook;
+ BasicPage, PermissionsPage, OpenWithPage: TGTKVBox;
+
+ Table2: TGTKTable;
+ NameLabel: TGTKLabel;
+ NameEdit: TGTKEntry;
+
+ procedure FormCreate(Sender: TObject); override;
+ procedure FormDestroy(Sender: TObject);
+ procedure FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+ public
+ DisplayFileName: string;
+ end;
+
+var
+ FProperties: TFProperties;
+
+implementation
+
+uses ULocale, UFileAssoc, UCoreUtils, UConfig;
+
+
+procedure TFProperties.FormCreate(Sender: TObject);
+var i: integer;
+begin
+ SetDefaultSize(450, 500);
+ Caption := Format('%s Properties', [DisplayFileName]);
+ Buttons := [mbOK, mbCancel];
+ ShowSeparator := False;
+ TitleEventBox := TGTKEventBox.Create(Self);
+ TitleLabel := TGTKLabel.Create(Self);
+ TitleLabel.Caption := Format('<span size="x-large" weight="ultrabold">%s</span>', [Format('%s Properties', [DisplayFileName])]);
+ TitleLabel.UseMarkup := True;
+ TitleLabel.XAlign := 0;
+ TitleLabel.XPadding := 0;
+ TitleLabel.YPadding := 3;
+ TitleEventBox.ControlState := csPrelight;
+ TitleFrame := TGTKFrame.CreateWithoutLabel(Self);
+ TitleFrame.ShadowType := stShadowOut;
+ TitleIcon := TGTKImage.Create(Self);
+ TitleIcon.SetFromStock('gtk-properties', isLargeToolbar);
+ TitleHBox := TGTKHBox.Create(Self);
+ TitleHBox.Homogeneous := False;
+ TitleHBox.AddControlEx(TGTKVBox.Create(Self), False, False, 5);
+ TitleHBox.AddControlEx(TitleIcon, False, False, 0);
+ TitleHBox.AddControlEx(TitleLabel, True, True, 10);
+ TitleEventBox.AddControl(TitleHBox);
+ TitleFrame.AddControl(TitleEventBox);
+ ClientArea.AddControlEx(TitleFrame, False, True, 0);
+
+ Notebook := TGTKNotebook.Create(Self);
+ Notebook.BorderWidth := 10;
+ ClientArea.AddControlEx(Notebook, True, True, 0);
+
+ BasicPage := TGTKVBox.Create(Notebook);
+ Notebook.AppendPage(BasicPage, 'Basic');
+
+ PermissionsPage := TGTKVBox.Create(Notebook);
+ Notebook.AppendPage(PermissionsPage, 'Permissions');
+
+ OpenWithPage := TGTKVBox.Create(Notebook);
+ Notebook.AppendPage(OpenWithPage, 'Open With');
+
+
+ // ********* PAGE Basic
+
+ BasicPage.AddControlEx(TGTKVBox.Create(Self), False, False, 5);
+ Table2 := TGTKTable.Create(Self);
+ Table2.SetRowColCount(8, 5);
+ BasicPage.AddControlEx(Table2, False, False, 0);
+
+ NameLabel := TGTKLabel.Create(Self);
+ NameLabel.Caption := Format('<span weight="ultrabold">%s</span>', ['_Name:']);
+ NameLabel.XAlign := 0;
+ NameLabel.UseMarkup := True;
+ NameEdit := TGTKEntry.Create(Self);
+ NameLabel.FocusControl := NameEdit;
+ NameLabel.UseUnderline := True;
+ Table2.AddControlEx(0, 0, 1, 1, NameLabel, [taoShrink, taoFill], [taoShrink], 2, 5);
+ Table2.AddControlEx(1, 0, 1, 1, NameEdit, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 2, 5);
+
+
+
+ // ********* PAGE Permissions
+
+
+
+ // ********* PAGE Applications
+
+
+ // ******************
+
+ OnKeyDown := FormKeyDown;
+ OnDestroy := FormDestroy;
+end;
+
+procedure TFProperties.FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+begin
+ if Key = GDK_ESCAPE then ModalResult := mbCancel;
+end;
+
+procedure TFProperties.FormDestroy(Sender: TObject);
+begin
+
+end;
+
+(********************************************************************************************************************************)
+end.
+
diff --git a/URemoteWait.pas b/URemoteWait.pas
new file mode 100644
index 0000000..e4a2c13
--- /dev/null
+++ b/URemoteWait.pas
@@ -0,0 +1,106 @@
+(*
+ Tux Commander - URemoteWait - Dialog shown while doing some remote actions
+ Copyright (C) 2004 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit URemoteWait;
+
+interface
+
+uses
+ glib2, gdk2, gtk2, pango,
+ SysUtils, Types, Classes, Variants, GTKControls, GTKForms, GTKStdCtrls, GTKExtCtrls, GTKConsts;
+
+type
+ TFRemoteWait = class(TGTKDialog)
+ Label1{, Label2}: TGTKLabel;
+ Entry: TGTKEntry;
+ Box: TGTKVBox;
+ CancelButton: TGTKButton;
+ procedure FormCreate(Sender: TObject); override;
+ procedure FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+ procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
+ procedure CancelButtonClick(Sender: TObject);
+ private
+ { Private declarations }
+ public
+ Cancelled: boolean;
+ end;
+
+var
+ FRemoteWait: TFRemoteWait;
+
+implementation
+
+uses ULocale;
+
+
+procedure TFRemoteWait.FormCreate(Sender: TObject);
+begin
+ SetDefaultSize(350, -1);
+ WindowPosition := wpCenterAlways;
+// WindowTypeHint := whDialog;
+ Caption := LANGRemoteWait_Caption;
+ Buttons := [];
+ Box := TGTKVBox.Create(Self);
+ Label1 := TGTKLabel.Create(Self);
+ Label1.Caption := Format('<span weight="ultrabold">%s</span>', [LANGRemoteWait_OperationInProgress]);
+ Label1.UseUnderline := True;
+ Label1.UseMarkup := True;
+ Label1.XAlign := 0;
+ Label1.XPadding := 0;
+ Label1.LineWrap := True;
+ Box.AddControlEx(Label1, False, False, 2);
+{
+ Label2 := TGTKLabel.Create(Self);
+ Label2.Caption := LANGRemoteWait_ItemsFound;
+ Label2.XAlign := 0;
+ Label2.XPadding := 20;
+ Label2.LineWrap := True;
+ Box.AddControlEx(Label2, False, False, 7);
+}
+ Box.BorderWidth := 6;
+ ClientArea.AddControlEx(Box, True, True, 0);
+ CancelButton := TGTKButton.CreateFromStock(Self, 'gtk-cancel');
+ CancelButton.Default := True;
+ ActionArea.AddControlEndEx(CancelButton, False, False, 2);
+ OnKeyDown := FormKeyDown;
+ OnCloseQuery := FormCloseQuery;
+ CancelButton.OnClick := CancelButtonClick;
+ Cancelled := False;
+end;
+
+procedure TFRemoteWait.FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+begin
+ case Key of
+ GDK_RETURN, GDK_KP_ENTER, GDK_ESCAPE: Cancelled := True;
+ end;
+end;
+
+procedure TFRemoteWait.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
+begin
+ CanClose := False;
+ Cancelled := True;
+end;
+
+procedure TFRemoteWait.CancelButtonClick(Sender: TObject);
+begin
+ Cancelled := True;
+end;
+
+end.
+
diff --git a/URunFromVFS.pas b/URunFromVFS.pas
new file mode 100644
index 0000000..393fbb9
--- /dev/null
+++ b/URunFromVFS.pas
@@ -0,0 +1,260 @@
+(*
+ Tux Commander - URunFromVFS - The file properties dialog for VFS filesystems
+ Copyright (C) 2007 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit URunFromVFS;
+
+interface
+
+uses
+ glib2, gtk2, pango, SysUtils, Types, Classes, GTKControls, GTKForms, GTKStdCtrls, GTKExtCtrls, GTKConsts, GTKView,
+ GTKUtils, GTKDialogs, GTKPixbuf, GTKClasses, UCoreClasses;
+
+type
+ TFRunFromVFS = class(TGTKDialog)
+ TitleFrame, ListFontFrame: TGTKFrame;
+ TitleLabel: TGTKLabel;
+ TitleEventBox: TGTKEventBox;
+ TitleIcon: TGTKImage;
+ TitleHBox: TGTKHBox;
+ ButtonBox: TGTKHButtonBox;
+ CloseButton: TGTKButton;
+
+ Table: TGTKTable;
+ ExecuteButton, ExecuteAllButton: TGTKImageButton;
+
+ FileNameLabel, FileNameLabel2, FileTypeLabel, FileTypeLabel2, SizeLabel, SizeLabel2, PackedSizeLabel, PackedSizeLabel2,
+ DateLabel, DateLabel2: TGTKLabel;
+ OpensWithLabel, OpensWithLabel2, InfoLabel: TGTKLabel;
+ InfoIcon: TGTKImage;
+
+ HBox1, HBox2: TGTKHBox;
+ procedure FormCreate(Sender: TObject); override;
+ procedure FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+ procedure ExecuteButtonClick(Sender: TObject);
+ procedure ExecuteAllButtonClick(Sender: TObject);
+ procedure CloseButtonClick(Sender: TObject);
+ end;
+
+var
+ FRunFromVFS: TFRunFromVFS;
+
+implementation
+
+uses ULocale, UConfig;
+
+
+procedure TFRunFromVFS.FormCreate(Sender: TObject);
+var i: integer;
+begin
+// SetDefaultSize(55, 40);
+ Caption := LANGFRunFromVFS_Caption;
+ Buttons := [];
+ ShowSeparator := False;
+ TitleEventBox := TGTKEventBox.Create(Self);
+ TitleLabel := TGTKLabel.Create(Self);
+ TitleLabel.Caption := Format('<span size="x-large" weight="ultrabold">%s</span>', [LANGFRunFromVFS_TitleLabel]);
+ TitleLabel.UseMarkup := True;
+ TitleLabel.XAlign := 0;
+ TitleLabel.XPadding := 0;
+ TitleLabel.YPadding := 3;
+ TitleEventBox.ControlState := csPrelight;
+ TitleFrame := TGTKFrame.CreateWithoutLabel(Self);
+ TitleFrame.ShadowType := stShadowOut;
+ TitleIcon := TGTKImage.Create(Self);
+ TitleIcon.SetFromStock('gtk-properties', isLargeToolbar);
+ TitleHBox := TGTKHBox.Create(Self);
+ TitleHBox.Homogeneous := False;
+ TitleHBox.AddControlEx(TGTKVBox.Create(Self), False, False, 5);
+ TitleHBox.AddControlEx(TitleIcon, False, False, 0);
+ TitleHBox.AddControlEx(TitleLabel, True, True, 10);
+ TitleEventBox.AddControl(TitleHBox);
+ TitleFrame.AddControl(TitleEventBox);
+ ClientArea.AddControlEx(TitleFrame, False, True, 0);
+
+ CloseButton := TGTKButton.CreateFromStock(Self, GTK_STOCK_CLOSE);
+// CloseButton.Default := True;
+// Default := CloseButton;
+ CloseButton.OnClick := CloseButtonClick;
+ ButtonBox := TGTKHButtonBox.Create(Self);
+ ButtonBox.Layout := blEnd;
+ ButtonBox.Spacing := 0;
+ ButtonBox.BorderWidth := 0;
+
+ FileNameLabel := TGTKLabel.Create(Self);
+ FileNameLabel.XAlign := 1;
+ FileNameLabel.YAlign := 0;
+ FileNameLabel.Caption := Format('<span weight="ultrabold">%s</span>', [LANGFRunFromVFS_FileNameLabel]);
+ FileNameLabel.UseMarkup := True;
+ FileNameLabel2 := TGTKLabel.Create(Self);
+ FileNameLabel2.Caption := Format('%s<span weight="ultrabold"> </span>', ['/tmp/t/bbbbb.txt']);
+ FileNameLabel2.XAlign := 0;
+ FileNameLabel2.UseMarkup := True;
+ FileNameLabel2.Selectable := True;
+ FileNameLabel2.CanFocus := False;
+ FileNameLabel2.LineWrap := True;
+
+ FileTypeLabel := TGTKLabel.Create(Self);
+ FileTypeLabel.XAlign := 1;
+ FileTypeLabel.Caption := Format('<span weight="ultrabold">%s</span>', [LANGFRunFromVFS_FileTypeLabel]);
+ FileTypeLabel.UseMarkup := True;
+ FileTypeLabel2 := TGTKLabel.Create(Self);
+ FileTypeLabel2.Caption := Format('%s<span weight="ultrabold"> </span>', ['HTML page']);
+ FileTypeLabel2.XAlign := 0;
+ FileTypeLabel2.UseMarkup := True;
+
+ SizeLabel := TGTKLabel.Create(Self);
+ SizeLabel.XAlign := 1;
+ SizeLabel.Caption := Format('<span weight="ultrabold">%s</span>', [LANGFRunFromVFS_SizeLabel]);
+ SizeLabel.UseMarkup := True;
+ SizeLabel2 := TGTKLabel.Create(Self);
+ SizeLabel2.Caption := Format('%s<span weight="ultrabold"> </span>', ['192 168 bytes']);
+ SizeLabel2.XAlign := 0;
+ SizeLabel2.UseMarkup := True;
+
+ PackedSizeLabel := TGTKLabel.Create(Self);
+ PackedSizeLabel.XAlign := 1;
+ PackedSizeLabel.Caption := Format('<span weight="ultrabold">%s</span>', [LANGFRunFromVFS_PackedSizeLabel]);
+ PackedSizeLabel.UseMarkup := True;
+ PackedSizeLabel2 := TGTKLabel.Create(Self);
+ PackedSizeLabel2.Caption := Format('%s<span weight="ultrabold"> </span>', ['168 192 bytes']);
+ PackedSizeLabel2.XAlign := 0;
+ PackedSizeLabel2.UseMarkup := True;
+
+ DateLabel := TGTKLabel.Create(Self);
+ DateLabel.XAlign := 1;
+ DateLabel.Caption := Format('<span weight="ultrabold">%s</span>', [LANGFRunFromVFS_DateLabel]);
+ DateLabel.UseMarkup := True;
+ DateLabel2 := TGTKLabel.Create(Self);
+ DateLabel2.Caption := Format('%s<span weight="ultrabold"> </span>', ['2007-01-01']);
+ DateLabel2.XAlign := 0;
+ DateLabel2.UseMarkup := True;
+
+ HBox1 := TGTKHBox.Create(Self);
+ HBox1.Homogeneous := False;
+ InfoLabel := TGTKLabel.Create(Self);
+ InfoLabel.Caption := LANGFRunFromVFS_InfoLabel;
+ InfoLabel.UseMarkup := True;
+ InfoLabel.LineWrap := True;
+ InfoLabel.SetSizeRequest(400, -1);
+ InfoIcon := TGTKImage.Create(Self);
+ InfoIcon.SetFromStock('gtk-dialog-info', isDialog);
+ HBox1.AddControlEx(TGTKVBox.Create(Self), False, False, 12);
+ HBox1.AddControlEx(InfoIcon, False, False, 7);
+ HBox1.AddControlEx(InfoLabel, True, True, 0);
+ HBox1.AddControlEx(TGTKVBox.Create(Self), False, False, 8);
+
+ OpensWithLabel := TGTKLabel.Create(Self);
+ OpensWithLabel.XAlign := 1;
+ OpensWithLabel.YAlign := 0;
+ OpensWithLabel.Caption := Format('<span weight="ultrabold">%s</span>', [LANGFRunFromVFS_OpensWithLabel]);
+ OpensWithLabel.UseMarkup := True;
+ OpensWithLabel2 := TGTKLabel.Create(Self);
+ OpensWithLabel2.Caption := Format('%s<span weight="ultrabold"> </span>', ['galeon']);
+ OpensWithLabel2.XAlign := 0;
+ OpensWithLabel2.Selectable := True;
+ OpensWithLabel2.CanFocus := False;
+ OpensWithLabel2.UseMarkup := True;
+
+ ExecuteButton := TGTKImageButton.Create(Self);
+ ExecuteButton.SetFromStock('gtk-execute', isButton);
+ ExecuteButton.Caption := LANGFRunFromVFS_ExecuteButton;
+ ExecuteButton.OnClick := ExecuteButtonClick;
+ ExecuteButton.Spacing := 7;
+ ExecuteAllButton := TGTKImageButton.Create(Self);
+ ExecuteAllButton.Caption := LANGFRunFromVFS_ExecuteAllButton;
+ ExecuteAllButton.OnClick := ExecuteAllButtonClick;
+ ExecuteAllButton.Spacing := 7;
+
+
+ Table := TGTKTable.Create(Self);
+ Table.SetRowColCount(13, 4);
+ ClientArea.AddControlEx(Table, True, True, 12);
+ Table.AddControlEx(0, 0, 1, 1, TGTKVBox.Create(Self), [taoShrink], [taoShrink], 10, 6);
+ Table.AddControlEx(0, 1, 1, 1, TGTKVBox.Create(Self), [taoShrink], [taoShrink, taoFill], 12, 2);
+ Table.AddControlEx(1, 1, 1, 1, FileNameLabel, [taoShrink, taoFill], [taoShrink, taoFill], 10, 2);
+ Table.AddControlEx(3, 1, 2, 1, FileNameLabel2, [taoExpand, taoFill], [taoShrink, taoFill], 10, 2);
+ Table.AddControlEx(1, 2, 1, 1, FileTypeLabel, [taoShrink, taoFill], [taoShrink, taoFill], 10, 2);
+ Table.AddControlEx(3, 2, 2, 1, FileTypeLabel2, [taoExpand, taoFill], [taoShrink, taoFill], 10, 2);
+ Table.AddControlEx(1, 3, 1, 1, SizeLabel, [taoShrink, taoFill], [taoShrink, taoFill], 10, 2);
+ Table.AddControlEx(3, 3, 2, 1, SizeLabel2, [taoExpand, taoFill], [taoShrink, taoFill], 10, 2);
+ Table.AddControlEx(1, 4, 1, 1, PackedSizeLabel, [taoShrink, taoFill], [taoShrink, taoFill], 10, 2);
+ Table.AddControlEx(3, 4, 2, 1, PackedSizeLabel2, [taoExpand, taoFill], [taoShrink, taoFill], 10, 2);
+ Table.AddControlEx(1, 5, 1, 1, DateLabel, [taoShrink, taoFill], [taoShrink, taoFill], 10, 2);
+ Table.AddControlEx(3, 5, 2, 1, DateLabel2, [taoExpand, taoFill], [taoShrink, taoFill], 10, 2);
+ Table.AddControlEx(0, 6, 5, 1, TGTKHBox.Create(Self), [taoShrink], [taoShrink], 50, 17);
+ Table.AddControlEx(0, 7, 5, 1, HBox1, [taoExpand, taoFill], [taoShrink], 0, 2);
+ Table.AddControlEx(1, 8, 1, 1, OpensWithLabel, [taoShrink, taoFill], [taoShrink, taoFill], 10, 10);
+ Table.AddControlEx(3, 8, 2, 1, OpensWithLabel2, [taoExpand, taoFill], [taoShrink, taoFill], 10, 10);
+// Table.AddControlEx(3, 9, 1, 1, ExecuteButton, [taoFill], [taoShrink], 10, 2);
+// Table.AddControlEx(3, 10, 1, 1, ExecuteAllButton, [taoFill], [taoShrink], 10, 2);
+ Table.AddControlEx(4, 11, 1, 1, TGTKHBox.Create(Self), [taoExpand, taoFill], [taoShrink], 30, 2);
+ Table.AddControlEx(0, 12, 4, 1, TGTKVBox.Create(Self), [taoExpand, taoFill], [taoShrink], 30, 10);
+
+ HBox2 := TGTKHBox.Create(Self);
+ HBox2.BorderWidth := 3;
+ HBox2.Homogeneous := False;
+ HBox2.AddControlEx(ExecuteButton, False, False, 2);
+ HBox2.AddControlEx(ExecuteAllButton, False, False, 2);
+ HBox2.AddControlEx(TGTKEventBox.Create(Self), False, False, 4);
+ ButtonBox.AddControlEnd(CloseButton);
+ HBox2.AddControlEx(ButtonBox, False, False, 2);
+ ActionArea.AddControlEx(HBox2, False, False, 0);
+
+ CloseButton.SetFocus;
+ OnKeyDown := FormKeyDown;
+end;
+
+procedure TFRunFromVFS.FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+begin
+ if Key = GDK_ESCAPE then begin
+ ModalResult := mbClose;
+ Accept := False;
+ end else
+ if Key = GDK_RIGHT then begin
+ if ExecuteButton.Focused then ExecuteAllButton.SetFocus else
+ if ExecuteAllButton.Focused then CloseButton.SetFocus else
+ ExecuteButton.SetFocus;
+ Accept := False;
+ end else
+ if Key = GDK_LEFT then begin
+ if ExecuteButton.Focused then CloseButton.SetFocus else
+ if ExecuteAllButton.Focused then ExecuteButton.SetFocus else
+ ExecuteAllButton.SetFocus;
+ Accept := False;
+ end;
+end;
+
+procedure TFRunFromVFS.ExecuteButtonClick(Sender: TObject);
+begin
+ ModalResult := mbYes;
+end;
+
+procedure TFRunFromVFS.ExecuteAllButtonClick(Sender: TObject);
+begin
+ ModalResult := mbNo;
+end;
+
+procedure TFRunFromVFS.CloseButtonClick(Sender: TObject);
+begin
+ ModalResult := mbClose;
+end;
+
+
+end.
+
diff --git a/USearch.pas b/USearch.pas
new file mode 100644
index 0000000..4cd49f1
--- /dev/null
+++ b/USearch.pas
@@ -0,0 +1,1030 @@
+(*
+ Tux Commander - USearch - Search dialog
+ Copyright (C) 2008 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit USearch;
+
+interface
+
+uses
+ glib2, gdk2, gtk2, SyncObjs, SysUtils, Types, Classes, Variants, GTKControls, GTKForms, GTKStdCtrls, GTKExtCtrls, GTKConsts, GTKView,
+ GTKMenus,
+ UEngines, UGnome;
+
+type
+ TFSearch = class(TGTKDialog)
+ BottomBox: TGTKVBox;
+ HBox, HBox2: TGTKHBox;
+ ButtonBox: TGTKHButtonBox;
+ FileList: TGTKListView;
+ FileListScrolledWindow: TGTKScrolledWindow;
+
+ Notebook: TGTKNotebook;
+ Table1, Table2: TGTKTable;
+ ResultsLabel, StatusLabel: TGTKLabel;
+ Label1, Label2, Label3, Label4, Label5, Label6: TGTKLabel;
+ FileMaskEntry: TGTKCombo;
+ SearchInEntry, FindTextEntry: TGTKEntry;
+ ViewButton, NewSearchButton, GoToFileButton, FeedToListboxButton: TGTKButton;
+ SearchArchivesCheckButton, CaseSensitiveCheckButton, StayCurrentFSCheckButton, CaseSensitiveMatchCheckButton: TGTKCheckButton;
+ FindButton, StopButton, CloseButton: TGTKButton;
+ BiggerThanCheckButton, SmallerThanCheckButton: TGTKCheckButton;
+ BiggerThanEntry, SmallerThanEntry: TGTKSpinEdit;
+ BiggerThanOptionMenu, SmallerThanOptionMenu, ModifiedLastOptionMenu, ModifiedNotLastOptionMenu: TGTKOptionMenu;
+ ModifiedBetweenRadioButton, NotModifiedAfterRadioButton, ModifiedLastRadioButton, ModifiedNotLastRadionButton: TGTKCheckButton;
+ ModifiedLastSpinEdit, ModifiedNotLastSpinEdit: TGTKSpinEdit;
+ ModifiedBetweenEntry1, ModifiedBetweenEntry2, NotModifiedAfterEntry: TGTKEntry;
+ ModifiedBetweenEntry1G, ModifiedBetweenEntry2G, NotModifiedAfterEntryG: TGnomeDateEdit;
+ procedure FormCreate(Sender: TObject); override;
+ procedure FormDestroy(Sender: TObject);
+ procedure FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+ procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
+ procedure FormResponse(Sender: TObject; const ResponseID: integer);
+ procedure FileListSelectionChanged(Sender: TObject);
+ procedure FindButtonClick(Sender: TObject);
+ procedure StopButtonClick(Sender: TObject);
+ procedure CloseButtonClick(Sender: TObject);
+ procedure BiggerThanCheckButtonToggled(Sender: TObject);
+ procedure NewSearchButtonClick(Sender: TObject);
+ procedure ViewButtonClick(Sender: TObject);
+ procedure GoToFileButtonClick(Sender: TObject);
+ procedure FileListDblClick(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean);
+ procedure FileMaskEntryKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+ private
+ Processing, Stop, FUseGnomeWidgets: boolean;
+ SavedData: string;
+ procedure ConstructViews;
+ procedure DoSearch;
+ public
+ Engine: TPanelEngine;
+ AListView: TGTKListView;
+ List: TList;
+ GoToFile, GoToFileArchive: string;
+ end;
+
+ TSearchThread = class(TThread)
+ private
+ FEngine: TPanelEngine;
+ Wilds: array of string;
+ GUIMutex: TCriticalSection;
+ procedure Rekurze(StartDir: string);
+ function FindText(FileName: string): boolean;
+ protected
+ FStartPath, FFileMask, FStringFind: string;
+ FDontLeaveFS, FCaseSensitiveMask, FCaseSensitiveStrings, FSearchArchives: boolean;
+ FBiggerThan, FSmallerThan: integer; // -1 = skip
+ FModifiedBetween1, FModifiedBetween2, FNotModifiedAfter: TDateTime;
+ FModifiedLast, FModifiedNotLast: integer;
+ FList: TList;
+ procedure Execute; override;
+ public
+ Finished, CancelIt: boolean;
+ CurrentDir: string;
+ constructor Create(Engine: TPanelEngine);
+ destructor Destroy; override;
+ end;
+
+var
+ FSearch: TFSearch;
+
+implementation
+
+uses Math, UMain, ULocale, UCoreUtils, Libc, UCore, DateUtils, UViewer, UConfig, UVFSCore;
+
+type TFileListItem = class
+ CRC: LongWord;
+ MD5: string;
+ Name, FullPath: string;
+ Status: byte;
+ IsMD5: boolean;
+ Size: Int64;
+ end;
+
+var SizeUnits: array[0..2] of string;
+ DayUnits: array[0..3] of string;
+
+
+procedure TFSearch.FormCreate(Sender: TObject);
+var MenuItem: TGTKMenuItem;
+ i: integer;
+begin
+ // Set the constants
+ SizeUnits[0] := LANGSearch_Bytes;
+ SizeUnits[1] := LANGSearch_kB;
+ SizeUnits[2] := LANGSearch_MB;
+ DayUnits[0] := LANGSearch_days;
+ DayUnits[1] := LANGSearch_weeks;
+ DayUnits[2] := LANGSearch_months;
+ DayUnits[3] := LANGSearch_years;
+
+ // Initialization
+// WindowTypeHint := whNormal;
+ List := TList.Create;
+ List.Clear;
+ Processing := False;
+ Stop := False;
+ GoToFile := '';
+ GoToFileArchive := '';
+ SetDefaultSize(650, 600);
+ Caption := LANGSearch_Caption;
+ Buttons := [];
+ ShowSeparator := False;
+ FUseGnomeWidgets := Assigned(@gnome_date_edit_new) and Assigned(@gnome_date_edit_set_time) and Assigned(@gnome_date_edit_get_time);
+
+ Notebook := TGTKNotebook.Create(Self);
+ Notebook.BorderWidth := 10;
+ Table1 := TGTKTable.Create(Self);
+ Table1.BorderWidth := 10;
+ Table2 := TGTKTable.Create(Self);
+ Table2.BorderWidth := 10;
+ Notebook.AppendPage(Table1, LANGSearch_General);
+ Notebook.AppendPage(Table2, LANGSearch_Advanced);
+
+ ConstructViews;
+
+ ResultsLabel := TGTKLabel.Create(Self);
+ ResultsLabel.XAlign := 0;
+ ResultsLabel.XPadding := 0;
+ ResultsLabel.Caption := Format('<span weight="ultrabold">%s</span>', [LANGSearch_SearchResults]);
+ ResultsLabel.FocusControl := FileList;
+ ResultsLabel.UseMarkup := True;
+ ResultsLabel.UseUnderline := True;
+
+ ClientArea.AddControlEx(Notebook, False, False, 0);
+
+
+ Label1 := TGTKLabel.Create(Self);
+ Label1.XAlign := 0;
+ Label1.XPadding := 0;
+ Label1.Caption := Format('<span weight="ultrabold">%s</span>', [LANGSearch_SearchFor]);
+ FileMaskEntry := TGTKCombo.Create(Self);
+ FileMaskEntry.Tooltip := LANGSearch_FileMaskEntryTooltip;
+ FileMaskEntry.Entry.OnKeyDown := FileMaskEntryKeyDown;
+ if SearchHistory.Count > 0 then
+ for i := 0 to SearchHistory.Count - 1 do
+ FileMaskEntry.Items.Append(SearchHistory[i]);
+ FileMaskEntry.Entry.Text := '';
+ Label1.FocusControl := FileMaskEntry.Entry;
+ Label1.UseMarkup := True;
+ Label1.UseUnderline := True;
+ Label2 := TGTKLabel.Create(Self);
+ Label2.XAlign := 0;
+ Label2.XPadding := 0;
+ Label2.Caption := LANGSearch_SearchIn;
+ SearchInEntry := TGTKEntry.Create(Self);
+ Label2.FocusControl := SearchInEntry;
+ Label2.UseMarkup := True;
+ Label2.UseUnderline := True;
+ SearchArchivesCheckButton := TGTKCheckButton.CreateWithLabel(Self, LANGSearch_SearchArchivesCheckButton);
+ SearchArchivesCheckButton.Enabled := PluginList.Count > 0;
+ Label3 := TGTKLabel.Create(Self);
+ Label3.XAlign := 0;
+ Label3.XPadding := 0;
+ Label3.Caption := LANGSearch_FindText;
+ FindTextEntry := TGTKEntry.Create(Self);
+ FindTextEntry.Tooltip := LANGSearch_FindTextEntryTooltip;
+ Label3.FocusControl := FindTextEntry;
+ Label3.UseMarkup := True;
+ Label3.UseUnderline := True;
+ CaseSensitiveCheckButton := TGTKCheckButton.CreateWithLabel(Self, LANGSearch_CaseSensitiveCheckButton);
+ StayCurrentFSCheckButton := TGTKCheckButton.CreateWithLabel(Self, LANGSearch_StayCurrentFSCheckButton);
+ CaseSensitiveMatchCheckButton := TGTKCheckButton.CreateWithLabel(Self, LANGSearch_CaseSensitiveMatchCheckButton);
+
+ Table1.AddControlEx(0, 0, 1, 1, Label1, [taoShrink, taoFill], [taoShrink], 5, 2);
+ Table1.AddControlEx(1, 0, 1, 1, FileMaskEntry, [taoExpand, taoFill], [taoShrink], 5, 2);
+ Table1.AddControlEx(2, 0, 1, 1, CaseSensitiveMatchCheckButton, [taoShrink, taoFill], [taoShrink], 5, 2);
+ Table1.AddControlEx(0, 1, 1, 1, Label2, [taoShrink, taoFill], [taoShrink], 5, 2);
+ Table1.AddControlEx(1, 1, 1, 1, SearchInEntry, [taoExpand, taoFill], [taoShrink], 5, 2);
+ Table1.AddControlEx(2, 1, 1, 1, StayCurrentFSCheckButton, [taoShrink], [taoShrink], 5, 2);
+ Table1.AddControlEx(1, 2, 2, 1, SearchArchivesCheckButton, [taoShrink, taoFill], [taoShrink], 5, 2);
+ Table1.AddControlEx(0, 3, 3, 1, TGTKHSeparator.Create(Self), [taoExpand, taoFill], [taoShrink], 5, 4);
+ Table1.AddControlEx(0, 4, 1, 1, Label3, [taoShrink, taoFill], [taoShrink], 5, 2);
+ Table1.AddControlEx(1, 4, 2, 1, FindTextEntry, [taoExpand, taoFill], [taoShrink], 5, 2);
+ Table1.AddControlEx(1, 5, 2, 1, CaseSensitiveCheckButton, [taoShrink, taoFill], [taoShrink], 5, 2);
+ Table1.AddControlEx(0, 6, 3, 1, TGTKVBox.Create(Self), [taoShrink, taoFill], [taoExpand, taoFill], 5, 2);
+
+
+
+ Label4 := TGTKLabel.Create(Self);
+ Label4.XAlign := 0;
+ Label4.XPadding := 0;
+ Label4.Caption := Format('<span weight="ultrabold">%s</span>', [LANGSearch_Size]);
+ Label4.UseMarkup := True;
+ Label5 := TGTKLabel.Create(Self);
+ Label5.XAlign := 0;
+ Label5.XPadding := 0;
+ Label5.Caption := Format('<span weight="ultrabold">%s</span>', [LANGSearch_Date]);
+ Label5.UseMarkup := True;
+ BiggerThanCheckButton := TGTKCheckButton.CreateWithLabel(Self, LANGSearch_BiggerThan);
+ SmallerThanCheckButton := TGTKCheckButton.CreateWithLabel(Self, LANGSearch_SmallerThan);
+ BiggerThanEntry := TGTKSpinEdit.Create(Self);
+ BiggerThanEntry.Min := 0;
+ BiggerThanEntry.Max := 999999999;
+ BiggerThanEntry.Digits := 0;
+ BiggerThanEntry.IncrementStep := 1;
+ BiggerThanEntry.IncrementPage := 10;
+ SmallerThanEntry := TGTKSpinEdit.Create(Self);
+ SmallerThanEntry.Min := 0;
+ SmallerThanEntry.Max := 999999999;
+ SmallerThanEntry.Digits := 0;
+ SmallerThanEntry.IncrementStep := 1;
+ SmallerThanEntry.IncrementPage := 10;
+ BiggerThanOptionMenu := TGTKOptionMenu.Create(Self);
+ for i := Low(SizeUnits) to High(SizeUnits) do begin
+ MenuItem := TGTKMenuItem.Create(Self);
+ MenuItem.Caption := SizeUnits[i];
+ BiggerThanOptionMenu.Items.Add(MenuItem);
+ end;
+ SmallerThanOptionMenu := TGTKOptionMenu.Create(Self);
+ for i := Low(SizeUnits) to High(SizeUnits) do begin
+ MenuItem := TGTKMenuItem.Create(Self);
+ MenuItem.Caption := SizeUnits[i];
+ SmallerThanOptionMenu.Items.Add(MenuItem);
+ end;
+ ModifiedBetweenRadioButton := TGTKCheckButton.CreateWithLabel(Self, LANGSearch_ModifiedBetweenRadioButton);
+ NotModifiedAfterRadioButton := TGTKCheckButton.CreateWithLabel(Self, LANGSearch_NotModifiedAfterRadioButton);
+ ModifiedLastRadioButton := TGTKCheckButton.CreateWithLabel(Self, LANGSearch_ModifiedLastRadioButton);
+ ModifiedNotLastRadionButton := TGTKCheckButton.CreateWithLabel(Self, LANGSearch_ModifiedNotLastRadionButton);
+ ModifiedLastSpinEdit := TGTKSpinEdit.Create(Self);
+ ModifiedLastSpinEdit.Min := 0;
+ ModifiedLastSpinEdit.Max := 10000;
+ ModifiedLastSpinEdit.Digits := 0;
+ ModifiedLastSpinEdit.IncrementStep := 1;
+ ModifiedLastSpinEdit.IncrementPage := 10;
+ ModifiedNotLastSpinEdit := TGTKSpinEdit.Create(Self);
+ ModifiedNotLastSpinEdit.Min := 0;
+ ModifiedNotLastSpinEdit.Max := 10000;
+ ModifiedNotLastSpinEdit.Digits := 0;
+ ModifiedNotLastSpinEdit.IncrementStep := 1;
+ ModifiedNotLastSpinEdit.IncrementPage := 10;
+ ModifiedLastOptionMenu := TGTKOptionMenu.Create(Self);
+ for i := Low(DayUnits) to High(DayUnits) do begin
+ MenuItem := TGTKMenuItem.Create(Self);
+ MenuItem.Caption := DayUnits[i];
+ ModifiedLastOptionMenu.Items.Add(MenuItem);
+ end;
+ ModifiedNotLastOptionMenu := TGTKOptionMenu.Create(Self);
+ for i := Low(DayUnits) to High(DayUnits) do begin
+ MenuItem := TGTKMenuItem.Create(Self);
+ MenuItem.Caption := DayUnits[i];
+ ModifiedNotLastOptionMenu.Items.Add(MenuItem);
+ end;
+ Label6 := TGTKLabel.Create(Self);
+ Label6.XAlign := 0;
+ Label6.XPadding := 0;
+ Label6.Caption := LANGSearch_And;
+ Label6.UseMarkup := True;
+
+ if not FUseGnomeWidgets then begin
+ ModifiedBetweenEntry1 := TGTKEntry.Create(Self);
+ ModifiedBetweenEntry1.Tooltip := FormatDateTime(LANGSearch_ModifiedBetweenEntry1, Date);
+ ModifiedBetweenEntry2 := TGTKEntry.Create(Self);
+ ModifiedBetweenEntry2.Tooltip := FormatDateTime(LANGSearch_ModifiedBetweenEntry1, Date);
+ NotModifiedAfterEntry := TGTKEntry.Create(Self);
+ NotModifiedAfterEntry.Tooltip := FormatDateTime(LANGSearch_ModifiedBetweenEntry1, Date);
+ Table2.AddControlEx(2, 5, 2, 1, ModifiedBetweenEntry1, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 5, 2);
+ Table2.AddControlEx(5, 5, 2, 1, ModifiedBetweenEntry2, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 5, 2);
+ Table2.AddControlEx(2, 6, 2, 1, NotModifiedAfterEntry, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 5, 2);
+ end else begin
+ ModifiedBetweenEntry1G := TGnomeDateEdit.Create(Self);
+ ModifiedBetweenEntry2G := TGnomeDateEdit.Create(Self);
+ NotModifiedAfterEntryG := TGnomeDateEdit.Create(Self);
+ Table2.AddControlEx(2, 5, 2, 1, ModifiedBetweenEntry1G, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 5, 2);
+ Table2.AddControlEx(5, 5, 2, 1, ModifiedBetweenEntry2G, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 5, 2);
+ Table2.AddControlEx(2, 6, 2, 1, NotModifiedAfterEntryG, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 5, 2);
+ end;
+
+ Table2.AddControlEx(0, 0, 3, 1, Label4, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 5, 0);
+ Table2.AddControlEx(0, 1, 1, 1, TGTKVBox.Create(Self), [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 8, 0);
+ Table2.AddControlEx(1, 1, 1, 1, BiggerThanCheckButton, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 2, 0);
+ Table2.AddControlEx(2, 1, 1, 1, BiggerThanEntry, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 5, 0);
+ Table2.AddControlEx(3, 1, 1, 1, BiggerThanOptionMenu, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 0, 0);
+ Table2.AddControlEx(5, 1, 1, 1, SmallerThanCheckButton, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 5, 0);
+ Table2.AddControlEx(6, 1, 1, 1, SmallerThanEntry, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 5, 0);
+ Table2.AddControlEx(7, 1, 1, 1, SmallerThanOptionMenu, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 0, 0);
+ Table2.AddControlEx(1, 3, 3, 1, TGTKVBox.Create(Self), [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 0, 6);
+ Table2.AddControlEx(0, 4, 3, 1, Label5, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 5, 1);
+ Table2.AddControlEx(1, 5, 1, 1, ModifiedBetweenRadioButton, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 2, 2);
+ Table2.AddControlEx(4, 5, 1, 1, Label6, [taoShrink], [taoShrink, taoExpand, taoFill], 5, 2);
+ Table2.AddControlEx(1, 6, 1, 1, NotModifiedAfterRadioButton, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 2, 2);
+ Table2.AddControlEx(1, 7, 1, 1, ModifiedLastRadioButton, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 2, 2);
+ Table2.AddControlEx(2, 7, 1, 1, ModifiedLastSpinEdit, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 5, 2);
+ Table2.AddControlEx(3, 7, 1, 1, ModifiedLastOptionMenu, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 2, 2);
+ Table2.AddControlEx(4, 7, 2, 1, ModifiedNotLastRadionButton, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 5, 2);
+ Table2.AddControlEx(6, 7, 1, 1, ModifiedNotLastSpinEdit, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 5, 2);
+ Table2.AddControlEx(7, 7, 1, 1, ModifiedNotLastOptionMenu, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 0, 2);
+
+
+ BottomBox := TGTKVBox.Create(Self);
+ BottomBox.Homogeneous := False;
+ BottomBox.BorderWidth := 10;
+ FileListScrolledWindow := TGTKScrolledWindow.Create(Self);
+ FileListScrolledWindow.HorizScrollBarPolicy := sbAutomatic;
+ FileListScrolledWindow.VertScrollBarPolicy := sbAutomatic;
+ FileListScrolledWindow.ShadowType := stShadowIn;
+ FileListScrolledWindow.AddControl(FileList);
+ FileListScrolledWindow.SetSizeRequest(100, -1);
+ FileList.SetSizeRequest(100, -1);
+ HBox := TGTKHBox.Create(Self);
+ HBox2 := TGTKHBox.Create(Self);
+ HBox2.Homogeneous := False;
+ HBox.Homogeneous := True;
+ ViewButton := TGTKButton.Create(Self);
+ ViewButton.Caption := LANGSearch_ViewButtonCaption;
+ ViewButton.Visible := True;
+ NewSearchButton := TGTKButton.Create(Self);
+ NewSearchButton.Caption := LANGSearch_NewSearchButtonCaption;
+ GoToFileButton := TGTKButton.Create(Self);
+ GoToFileButton.Caption := LANGSearch_GoToFileButtonCaption;
+ FeedToListboxButton := TGTKButton.Create(Self);
+ FeedToListboxButton.Caption := LANGSearch_FeedToListboxButtonCaption;
+ FeedToListboxButton.Enabled := False;
+ FeedToListboxButton.Visible := True;
+ StatusLabel := TGTKLabel.Create(Self);
+ StatusLabel.XAlign := 0;
+ StatusLabel.XPadding := 0;
+ StatusLabel.Caption := Format('<span weight="ultrabold">%s</span> %s', [LANGSearch_StatusSC, LANGSearch_Ready]);
+ StatusLabel.UseMarkup := True;
+ StatusLabel.SetSizeRequest(100, -1);
+ HBox.AddControlEx(ViewButton, True, True, 3);
+ HBox.AddControlEx(NewSearchButton, True, True, 3);
+ HBox.AddControlEx(GoToFileButton, True, True, 3);
+ HBox.AddControlEx(FeedToListboxButton, True, True, 3);
+ HBox2.AddControlEx(TGTKVBox.Create(Self), True, True, 20);
+ HBox2.AddControlEx(HBox, False, False, 0);
+
+ BottomBox.AddControlEx(ResultsLabel, False, False, 5);
+ BottomBox.AddControlEx(FileListScrolledWindow, True, True, 0);
+ BottomBox.AddControlEx(StatusLabel, False, False, 5);
+ BottomBox.AddControlEx(HBox2, False, False, 2);
+ ClientArea.AddControlEx(BottomBox, True, True, 5);
+
+ FindButton := TGTKButton.CreateFromStock(Self, GTK_STOCK_FIND);
+ FindButton.Default := True;
+ StopButton := TGTKButton.CreateFromStock(Self, GTK_STOCK_STOP);
+ StopButton.Visible := False;
+ StopButton.Default := True;
+ CloseButton := TGTKButton.CreateFromStock(Self, GTK_STOCK_CLOSE);
+ CloseButton.Default := True;
+ Default := FindButton;
+ ButtonBox := TGTKHButtonBox.Create(Self);
+ ButtonBox.Layout := blEnd;
+ ButtonBox.Spacing := 10;
+ ButtonBox.BorderWidth := 10;
+ ButtonBox.AddControlEnd(FindButton);
+ ButtonBox.AddControlEnd(StopButton);
+ ButtonBox.AddControlEnd(CloseButton);
+
+ ActionArea.AddControlEx(ButtonBox, False, False, 0);
+
+ OnKeyDown := FormKeyDown;
+ OnCloseQuery := FormCloseQuery;
+ OnResponse := FormResponse;
+ OnDestroy := FormDestroy;
+ FileList.OnSelectionChanged := FileListSelectionChanged;
+ FindButton.OnClick := FindButtonClick;
+ StopButton.OnClick := StopButtonClick;
+ CloseButton.OnClick := CloseButtonClick;
+ BiggerThanCheckButton.OnToggled := BiggerThanCheckButtonToggled;
+ SmallerThanCheckButton.OnToggled := BiggerThanCheckButtonToggled;
+ ModifiedBetweenRadioButton.OnToggled := BiggerThanCheckButtonToggled;
+ NotModifiedAfterRadioButton.OnToggled := BiggerThanCheckButtonToggled;
+ ModifiedLastRadioButton.OnToggled := BiggerThanCheckButtonToggled;
+ ModifiedNotLastRadionButton.OnToggled := BiggerThanCheckButtonToggled;
+ NewSearchButton.OnClick := NewSearchButtonClick;
+ ViewButton.OnClick := ViewButtonClick;
+ GoToFileButton.OnClick := GoToFileButtonClick;
+ FileList.OnDblClick := FileListDblClick;
+
+ Notebook.PageIndex := 0;
+ FileMaskEntry.Entry.SetFocus;
+ BiggerThanCheckButtonToggled(Sender);
+ FileListSelectionChanged(Sender);
+end;
+
+procedure TFSearch.ConstructViews;
+var Column: TGTKTreeViewColumn;
+ i: integer;
+begin
+ FileList := TGTKListView.CreateTyped(Self, True, [lcPointer, lcText]);
+ FileList.SelectionMode := smSingle;
+ FileList.RulesHint := True;
+ FileList.ShowHeaders := False;
+ Column := FileList.Columns.Add;
+ Column.Caption := LANGFilenameColumnCaption;
+ Column.AddAttribute('text', 1);
+ Column.SortID := 0;
+ for i := 0 to FileList.Columns.Count - 1 do begin
+ FileList.Columns[i].SizingMode := smAutoSize;
+ FileList.Columns[i].Resizable := True;
+ FileList.Columns[i].SetProperty('ypad', 0);
+ FileList.Columns[i].SetProperty('yalign', 0.5);
+ end;
+end;
+
+procedure TFSearch.FormDestroy(Sender: TObject);
+ var i: integer;
+begin
+ Application.ProcessMessages;
+ try
+ if List.Count > 0 then
+ for i := 0 to List.Count - 1 do
+ FreeDataItem(PDataItem(List[i]));
+ List.Free;
+ except end;
+end;
+
+procedure TFSearch.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
+begin
+ Stop := True;
+end;
+
+procedure TFSearch.FormResponse(Sender: TObject; const ResponseID: integer);
+begin
+ Stop := True;
+end;
+
+procedure TFSearch.FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+begin
+ case Key of
+ GDK_F3: if FileList.Focused and Assigned(FileList.Selected) then begin
+ Accept := False;
+ ViewButtonClick(Sender);
+ end;
+ GDK_RETURN, GDK_KP_ENTER: if FileList.Focused and Assigned(FileList.Selected) then begin
+ Accept := False;
+ GoToFileButtonClick(Sender);
+ end else
+ if FindButton.Visible then begin
+ FindButtonClick(Sender);
+ Accept := False;
+ end;
+ GDK_ESCAPE: begin
+ Accept := False;
+ if Processing then Stop := True
+ else ModalResult := mbCancel;
+ end;
+ end;
+end;
+
+procedure TFSearch.FindButtonClick(Sender: TObject);
+var s: string;
+ i: integer;
+begin
+ s := Trim(FileMaskEntry.Entry.Text);
+ if Length(s) > 0 then begin
+ SaveItemToHistory(s, SearchHistory);
+ if FileMaskEntry.Items.Count > 0 then
+ for i := FileMaskEntry.Items.Count - 1 downto 0 do
+ FileMaskEntry.Items.Delete(i);
+ if SearchHistory.Count > 0 then
+ for i := 0 to SearchHistory.Count - 1 do
+ FileMaskEntry.Items.Append(SearchHistory[i]);
+ end;
+
+ DoSearch;
+end;
+
+procedure TFSearch.StopButtonClick(Sender: TObject);
+begin
+ Stop := True;
+end;
+
+procedure TFSearch.CloseButtonClick(Sender: TObject);
+begin
+ if Processing then Stop := True;
+ ModalResult := mbClose;
+end;
+
+procedure TFSearch.BiggerThanCheckButtonToggled(Sender: TObject);
+begin
+ BiggerThanEntry.Enabled := BiggerThanCheckButton.Checked;
+ BiggerThanOptionMenu.Enabled := BiggerThanCheckButton.Checked;
+ SmallerThanEntry.Enabled := SmallerThanCheckButton.Checked;
+ SmallerThanOptionMenu.Enabled := SmallerThanCheckButton.Checked;
+ Label6.Enabled := ModifiedBetweenRadioButton.Checked;
+ ModifiedLastSpinEdit.Enabled := ModifiedLastRadioButton.Checked;
+ ModifiedLastOptionMenu.Enabled := ModifiedLastRadioButton.Checked;
+ ModifiedNotLastSpinEdit.Enabled := ModifiedNotLastRadionButton.Checked;
+ ModifiedNotLastOptionMenu.Enabled := ModifiedNotLastRadionButton.Checked;
+ if not FUseGnomeWidgets then begin
+ ModifiedBetweenEntry1.Enabled := ModifiedBetweenRadioButton.Checked;
+ ModifiedBetweenEntry2.Enabled := ModifiedBetweenRadioButton.Checked;
+ NotModifiedAfterEntry.Enabled := NotModifiedAfterRadioButton.Checked;
+ end else begin
+ ModifiedBetweenEntry1G.Enabled := ModifiedBetweenRadioButton.Checked;
+ ModifiedBetweenEntry2G.Enabled := ModifiedBetweenRadioButton.Checked;
+ NotModifiedAfterEntryG.Enabled := NotModifiedAfterRadioButton.Checked;
+ end;
+end;
+
+procedure TFSearch.FileListSelectionChanged(Sender: TObject);
+begin
+ GoToFileButton.Enabled := Assigned(FileList.Selected) and Assigned(FileList.Selected.AsPointer(0));
+ ViewButton.Enabled := Assigned(FileList.Selected) and Assigned(FileList.Selected.AsPointer(0));
+end;
+
+procedure TFSearch.NewSearchButtonClick(Sender: TObject);
+var i: integer;
+begin
+ try
+ FileMaskEntry.Entry.Text := '';
+ FileMaskEntry.Entry.SetFocus;
+ FileList.Items.Clear;
+ if List.Count > 0 then
+ for i := List.Count - 1 downto 0 do
+ FreeDataItem(PDataItem(List[i]));
+ List.Clear;
+ StatusLabel.Caption := Format('<span weight="ultrabold">%s</span> %s', [LANGSearch_StatusSC, LANGSearch_Ready]);
+ StatusLabel.UseMarkup := True;
+ except
+ end;
+end;
+
+procedure TFSearch.ViewButtonClick(Sender: TObject);
+var AViewer: TViewerThread;
+ AEngine: TPanelEngine;
+ Plugin: TVFSPlugin;
+ b: boolean;
+ archive, s: string;
+ i, j: integer;
+begin
+ if not (Assigned(FileList.Selected) and Assigned(FileList.Selected.AsPointer(0))) then Exit;
+ if Assigned(PDataItem(FileList.Selected.AsPointer(0))^.LnkPointTo) then begin
+ archive := string(PDataItem(FileList.Selected.AsPointer(0))^.LnkPointTo);
+ b := False;
+ s := ANSIUpperCase(Trim(Copy(archive, LastDelimiter('.', archive) + 1, Length(archive) - LastDelimiter('.', archive))));
+ if (Length(s) > 1) and (s[1] = '.') then Delete(s, 1, 1);
+ if PluginList.Count > 0 then
+ for i := 0 to PluginList.Count - 1 do begin
+ Plugin := TVFSPlugin(PluginList[i]);
+ if Length(Plugin.Extensions) > 0 then
+ for j := 0 to Length(Plugin.Extensions) - 1 do
+ if AnsiCompareText(Plugin.Extensions[j], s) = 0 then begin
+ b := True;
+ Break;
+ end;
+ if b then Break;
+ end;
+ if b then begin
+ DebugMsg(['Found plugin ''', Plugin.VFSName, ''', trying to open the archive ''', archive, '''']);
+ AEngine := TVFSEngine.Create(Plugin);
+ (AEngine as TVFSEngine).ArchiveMode := True;
+ b := b and ((AEngine as TVFSEngine).VFSOpenEx(archive) = 0);
+ end;
+ end else begin
+ AEngine := TLocalTreeEngine.Create;
+ b := True;
+ end;
+ if b then FMain.EditViewFileInternal(Self, string(PDataItem(FileList.Selected.AsPointer(0))^.AName), AEngine, True, False)
+ else Application.MessageBox(Format(LANGCannotLoadFile, [ANSIToUTF8(string(PDataItem(FileList.Selected.AsPointer(0))^.AName))]), [mbOK], mbError, mbNone, mbOK);
+ if AEngine is TVFSEngine then (AEngine as TVFSEngine).VFSClose;
+ AEngine.Free;
+end;
+
+procedure TFSearch.GoToFileButtonClick(Sender: TObject);
+begin
+ if not (Assigned(FileList.Selected) and Assigned(FileList.Selected.AsPointer(0))) then Exit;
+ GoToFile := string(PDataItem(FileList.Selected.AsPointer(0))^.AName);
+ if Assigned(PDataItem(FileList.Selected.AsPointer(0))^.LnkPointTo) then
+ GoToFileArchive := string(PDataItem(FileList.Selected.AsPointer(0))^.LnkPointTo);
+ ModalResult := mbApply;
+end;
+
+procedure TFSearch.FileListDblClick(Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean);
+begin
+ if Assigned(FileList.Selected) and Assigned(FileList.Selected.AsPointer(0)) then GoToFileButtonClick(Sender);
+end;
+
+procedure TFSearch.FileMaskEntryKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+var Orig, s: string;
+ i: integer;
+begin
+ case Key of
+ GDK_UP, GDK_DOWN: if Shift = [] then begin
+ Accept := False;
+ if SearchHistory.Count > 0 then begin
+ Orig := Trim(FileMaskEntry.Entry.Text);
+ i := SearchHistory.IndexOf(Orig);
+
+ if Key = GDK_DOWN then begin
+ if i < 0 then begin
+ SavedData := Orig;
+ i := 0;
+ end else
+ if SearchHistory.Count > i + 1 then Inc(i);
+ s := SearchHistory[i];
+ end else begin
+ if i < 0 then Exit else
+ if i = 0 then begin
+ s := SavedData;
+ SavedData := '';
+ end else
+ if SearchHistory.Count > i then s := SearchHistory[i - 1];
+ end;
+
+ FileMaskEntry.Entry.Text := s;
+ FileMaskEntry.Entry.SetFocus;
+ FileMaskEntry.Entry.SelectAll;
+ end;
+ end;
+ end;
+end;
+
+
+
+(********************************************************************************************************************************)
+procedure TFSearch.DoSearch;
+var FSearchThread: TSearchThread;
+ i, LastItems: integer;
+ ListItem: TGTKListItem;
+ x: Pointer;
+ OldDir: string;
+begin
+ try
+ Processing := True;
+ Stop := False;
+ FindButton.Visible := False;
+ StopButton.Visible := True;
+ StopButton.SetFocus;
+ Default := StopButton;
+ StatusLabel.Caption := Format('<span weight="ultrabold">%s</span> %s', [LANGSearch_StatusSC, LANGSearch_PreparingToSearch]);
+ StatusLabel.UseMarkup := True;
+
+ // Disable the UI
+ Table1.Enabled := False;
+ Table2.Enabled := False;
+
+ // Clear the items
+ FileList.Items.Clear;
+ if List.Count > 0 then
+ for i := List.Count - 1 downto 0 do
+ FreeDataItem(PDataItem(List[i]));
+ List.Clear;
+
+ // Save current directory
+ OldDir := Engine.GetPath;
+
+ // Set the parameters
+ FSearchThread := TSearchThread.Create(Engine);
+ with FSearchThread do begin
+ FStartPath := UTF8ToANSI(SearchInEntry.Text);
+ FFileMask := UTF8ToANSI(FileMaskEntry.Entry.Text);
+ FStringFind := UTF8ToANSI(FindTextEntry.Text);
+ FDontLeaveFS := not StayCurrentFSCheckButton.Checked;
+ FCaseSensitiveMask := CaseSensitiveMatchCheckButton.Checked;
+ FCaseSensitiveStrings := CaseSensitiveCheckButton.Checked;
+ FSearchArchives := SearchArchivesCheckButton.Checked;
+ if not BiggerThanCheckButton.Checked then FBiggerThan := -1 else begin
+ i := StrToIntDef(BiggerThanEntry.Text, -1);
+ i := i * Trunc(Power(1024, BiggerThanOptionMenu.ItemIndex));
+ FBiggerThan := i;
+ end;
+ if not SmallerThanCheckButton.Checked then FSmallerThan := -1 else begin
+ i := StrToIntDef(SmallerThanEntry.Text, -1);
+ i := i * Trunc(Power(1024, SmallerThanOptionMenu.ItemIndex));
+ FSmallerThan := i;
+ end;
+ FModifiedBetween1 := -1;
+ FModifiedBetween2 := -1;
+ FNotModifiedAfter := -1;
+ if not FUseGnomeWidgets then begin
+ if ModifiedBetweenRadioButton.Checked then begin
+ FModifiedBetween1 := StrToDateDef(ModifiedBetweenEntry1.Text, -1);
+ FModifiedBetween2 := StrToDateDef(ModifiedBetweenEntry2.Text, -1);
+ end;
+ if NotModifiedAfterRadioButton.Checked then
+ FNotModifiedAfter := StrToDateDef(NotModifiedAfterEntry.Text, -1);
+ end else begin
+ if ModifiedBetweenRadioButton.Checked then begin
+ FModifiedBetween1 := ModifiedBetweenEntry1G.Time;
+ FModifiedBetween2 := ModifiedBetweenEntry2G.Time;
+ end;
+ if NotModifiedAfterRadioButton.Checked then
+ FNotModifiedAfter := NotModifiedAfterEntryG.Time;
+ end;
+ if not ModifiedLastRadioButton.Checked then FModifiedLast := -1 else begin
+ i := StrToIntDef(ModifiedLastSpinEdit.Text, -1);
+ case ModifiedLastOptionMenu.ItemIndex of
+ 1: i := i * 7; // weeks
+ 2: i := i * 30; // months
+ 3: i := i * 365; // years
+ end;
+ FModifiedLast := i;
+ end;
+ if not ModifiedNotLastRadionButton.Checked then FModifiedNotLast := -1 else begin
+ i := StrToIntDef(ModifiedNotLastSpinEdit.Text, -1);
+ case ModifiedNotLastOptionMenu.ItemIndex of
+ 1: i := i * 7; // weeks
+ 2: i := i * 30; // months
+ 3: i := i * 365; // years
+ end;
+ FModifiedNotLast := i;
+ end;
+ end;
+
+ // UI loop
+ FSearchThread.Resume;
+ LastItems := 0;
+ repeat
+ Sleep(ConstInternalProgressTimer);
+
+ FSearchThread.GUIMutex.Acquire;
+ StatusLabel.Caption := Format('<span weight="ultrabold">%s</span> %s', [LANGSearch_SearchInProgress, FSearchThread.CurrentDir]);
+ FSearchThread.GUIMutex.Release;
+
+ StatusLabel.UseMarkup := True;
+ Application.ProcessMessages;
+
+ FSearchThread.GUIMutex.Acquire;
+ if Stop then FSearchThread.CancelIt := True;
+ if LastItems < FSearchThread.FList.Count then begin
+ for i := LastItems to FSearchThread.FList.Count - 1 do begin
+ ListItem := FileList.Items.Add;
+ ListItem.SetValue(0, FSearchThread.FList[i]);
+ if PDataItem(FSearchThread.FList[i])^.LnkPointTo <> nil
+ then ListItem.SetValue(1, Format('%s%s%s', [string(PDataItem(FSearchThread.FList[i])^.LnkPointTo), ConstPathDelim, string(PDataItem(FSearchThread.FList[i])^.AName)]))
+ else ListItem.SetValue(1, string(PDataItem(FSearchThread.FList[i])^.AName));
+ if i mod 30 = 0 then Application.ProcessMessages; // Refresh UI only after some amount of items added
+ end;
+ LastItems := FSearchThread.FList.Count;
+ end;
+ FSearchThread.GUIMutex.Release;
+
+ until FSearchThread.Finished;
+
+ if not Stop then StatusLabel.Caption := Format('<span weight="ultrabold">%s</span> (' + LANGSearch_FilesFound + ')',
+ [LANGSearch_SearchFinished, FSearchThread.FList.Count])
+ else StatusLabel.Caption := Format('<span weight="ultrabold">%s</span>', [LANGSearch_UserCancelled]);
+ StatusLabel.UseMarkup := True;
+
+ // Save the list
+ x := List;
+ List := FSearchThread.FList;
+ FSearchThread.FList := x;
+ FSearchThread.Free;
+ finally
+ StopButton.Visible := False;
+ FindButton.Visible := True;
+ Default := FindButton;
+ Processing := False;
+ Stop := False;
+ if FileList.Items.Count > 0 then FileList.SetFocus;
+ if Engine.ChangeDir(OldDir, False) <> 0 then DebugMsg(['DoSearch: cannot change back to saved directory']);
+
+ // Enable the UI
+ Table1.Enabled := True;
+ Table2.Enabled := True;
+ end;
+end;
+
+
+(********************************************************************************************************************************)
+constructor TSearchThread.Create(Engine: TPanelEngine);
+begin
+ inherited Create(True);
+ FreeOnTerminate := False;
+ GUIMutex := TCriticalSection.Create;
+ CancelIt := False;
+ Finished := False;
+ CurrentDir := '';
+ FSearchArchives := False;
+
+ FEngine := Engine;
+ FList := TList.Create;
+end;
+
+destructor TSearchThread.Destroy;
+begin
+ FList.Free;
+ GUIMutex.Free;
+ inherited Destroy;
+end;
+
+procedure TSearchThread.Execute;
+var i: integer;
+ s: string;
+begin
+ try
+ // Prepare the wildcards
+ SetLength(Wilds, 0);
+ if Length(FFileMask) > 0 then begin
+ while LastDelimiter(ConfSelItemsDelim, FFileMask) > 0 do begin
+ i := LastDelimiter(ConfSelItemsDelim, FFileMask);
+ if i < Length(FFileMask) then begin
+ s := Copy(FFileMask, i + 1, Length(FFileMask) - i);
+ Delete(FFileMask, i, Length(FFileMask) - i + 1);
+ SetLength(Wilds, Length(Wilds) + 1);
+ Wilds[Length(Wilds) - 1] := s;
+ end;
+ end;
+ if Length(FFileMask) > 0 then begin
+ SetLength(Wilds, Length(Wilds) + 1);
+ Wilds[Length(Wilds) - 1] := FFileMask;
+ end;
+ // Check for strings with no jokers ---> allow searching by partial names
+ if Length(Wilds) > 0 then
+ for i := 0 to Length(Wilds) - 1 do
+ if (Pos('*', Wilds[i]) < 1) and (Pos('?', Wilds[i]) < 1) then
+ Wilds[i] := Format('*%s*', [Wilds[i]]);
+ end;
+
+ Rekurze(ExcludeTrailingPathDelimiter(FStartPath));
+ SetLength(Wilds, 0);
+ finally
+ Finished := True;
+ end;
+end;
+
+procedure TSearchThread.Rekurze(StartDir: string);
+var LocalList: TList;
+ i, j, k: integer;
+ Matches, b: boolean;
+ FileName, s: string;
+ Data: PDataItem;
+ Plugin: TVFSPlugin;
+ xEngine: TVFSEngine;
+ VFSOpenResult: integer;
+begin
+ try
+ if CancelIt then Exit;
+ Plugin := nil;
+ if Length(StartDir) < 1 then StartDir := '/';
+ DebugMsg(['++ Entering directory ', StartDir]);
+
+ GUIMutex.Acquire;
+ CurrentDir := StartDir;
+ GUIMutex.Release;
+
+ if FEngine.ChangeDir(StartDir, False) <> 0 then Exit;
+ LocalList := TList.Create;
+ if FEngine.GetListing(LocalList, True, StartDir) = 0 then begin
+
+ // Processing...
+ StartDir := IncludeTrailingPathDelimiter(StartDir);
+ if LocalList.Count > 0 then
+ for i := 0 to LocalList.Count - 1 do begin
+ if CancelIt then Break;
+ Data := LocalList[i];
+// DebugMsg([' --- found ', Data^.AName]);
+
+ FileName := Data^.AName;
+
+ Matches := True;
+ // Test if the file is on the same FS
+ if Matches and FDontLeaveFS then
+ Matches := Matches and FEngine.IsOnSameFS(FStartPath, StartDir + FileName);
+ // File mask test
+ if Matches and (Length(Wilds) > 0) then begin
+ b := False;
+ for j := 0 to Length(Wilds) - 1 do
+ b := b or IsWild(FileName, Wilds[j], not FCaseSensitiveMask);
+ Matches := Matches and b;
+ end;
+ if not Data^.IsDir then begin // Stop matching if file is directory
+ // Size limiting
+ if Matches and (FSmallerThan > 0) then Matches := Matches and (Data^.Size <= FSmallerThan);
+ if Matches and (FBiggerThan > 0) then Matches := Matches and (Data^.Size >= FBiggerThan);
+ // Date limiting
+ if Matches and (FModifiedLast > 0) then
+ Matches := Matches and (Data^.ModifyTime <= Now) and (Data^.ModifyTime >= Now - FModifiedLast);
+ if Matches and (FModifiedNotLast > 0) then
+ Matches := Matches and ((Data^.ModifyTime > Now) or (Data^.ModifyTime <= Now - FModifiedNotLast));
+ if Matches and (FNotModifiedAfter > 0) then
+ Matches := Matches and (Data^.ModifyTime <= FNotModifiedAfter);
+ if Matches and (FModifiedBetween1 > 0) and (FModifiedBetween2 > 0) then
+ Matches := Matches and (Data^.ModifyTime >= FModifiedBetween1) and (Data^.ModifyTime <= FModifiedBetween2);
+ // Find text in file
+ if Matches and (Length(FStringFind) > 0) and (not (FEngine is TVFSEngine)) then begin
+ GUIMutex.Acquire;
+ CurrentDir := IncludeTrailingPathDelimiter(StartDir) + FileName;
+ Matches := Matches and FindText(CurrentDir);
+ CurrentDir := ExcludeTrailingPathDelimiter(StartDir);
+ GUIMutex.Release;
+ end;
+ end else
+ if (Length(FStringFind) > 0) then Matches := False; // When searching text in files, do not include directories
+
+ // Add the record to the list
+ if Matches then begin
+ GUIMutex.Acquire;
+ FList.Add(LocalList[i]);
+ Libc.free(Data^.AName);
+ PDataItem(LocalList[i])^.AName := strdup(PChar(StartDir + FileName));
+ if Assigned(PDataItem(LocalList[i])^.LnkPointTo) then begin
+ Libc.free(PDataItem(LocalList[i])^.LnkPointTo);
+ PDataItem(LocalList[i])^.LnkPointTo := nil;
+ end;
+ if FEngine is TVFSEngine then PDataItem(LocalList[i])^.LnkPointTo := strdup(PChar((FEngine as TVFSEngine).SavePath));
+ GUIMutex.Release;
+ end;
+
+ if Data^.IsDir and ((not FDontLeaveFS) or (FDontLeaveFS and FEngine.IsOnSameFS(FStartPath, StartDir + FileName)))
+ then Rekurze(IncludeTrailingPathDelimiter(StartDir) + FileName);
+
+ // Handle archives
+ if (not Data^.IsDir) and FSearchArchives and (not (FEngine is TVFSEngine)) then begin
+ b := False;
+ s := ANSIUpperCase(Trim(Copy(FileName, LastDelimiter('.', FileName) + 1, Length(FileName) - LastDelimiter('.', FileName))));
+ if (Length(s) > 1) and (s[1] = '.') then Delete(s, 1, 1);
+ if PluginList.Count > 0 then
+ for k := 0 to PluginList.Count - 1 do begin
+ Plugin := TVFSPlugin(PluginList[k]);
+ if Length(Plugin.Extensions) > 0 then
+ for j := 0 to Length(Plugin.Extensions) - 1 do
+ if AnsiCompareText(Plugin.Extensions[j], s) = 0 then begin
+ b := True;
+ Break;
+ end;
+ if b then Break;
+ end;
+ if b then begin
+ DebugMsg(['Found plugin ''', Plugin.VFSName, ''', trying to open the archive ''', FileName, '''']);
+ xEngine := TVFSEngine.Create(Plugin);
+ xEngine.ParentEngine := FEngine;
+ xEngine.ArchiveMode := True;
+ xEngine.SavePath := StartDir + FileName;
+ FEngine := xEngine;
+ VFSOpenResult := (FEngine as TVFSEngine).VFSOpenEx(IncludeTrailingPathDelimiter(StartDir) + FileName);
+ if (VFSOpenResult = 0) and (not CancelIt) then Rekurze('/');
+ FEngine := FEngine.ParentEngine;
+ if not (xEngine as TVFSEngine).VFSClose then DebugMsg(['Error closing the engine...']);
+ xEngine.Free;
+ end;
+ end;
+
+ if not Matches then Libc.free(LocalList[i]);
+ end;
+ end;
+ LocalList.Free;
+ finally
+// DebugMsg(['-- Leaving directory ', StartDir]);
+ end;
+end;
+
+function TSearchThread.FindText(FileName: string): boolean;
+const BlockSize = 65536;
+var fd: TEngineFileDes;
+ i, Error, Read, Pos: integer;
+ Buffer: PByteArray;
+ x: boolean;
+begin
+ Result := False;
+ try
+ Error := 0;
+ Buffer := Libc.malloc(BlockSize);
+ if Buffer = nil then Exit;
+ Libc.memset(Buffer, 0, BlockSize);
+ fd := FEngine.OpenFile(FileName, omRead, Error);
+ if (fd = nil) or (Error <> 0) then Exit;
+
+ Pos := 1;
+ repeat
+ Read := FEngine.ReadFile(fd, Buffer, BlockSize, Error);
+ if Read > 0 then
+ for i := 0 to Read - 1 do begin
+ if FCaseSensitiveStrings then x := Buffer^[i] = byte(FStringFind[Pos])
+ else x := ANSIUpperCase(char(Buffer^[i])) = ANSIUpperCase(FStringFind[Pos]);
+ if x then begin
+ Inc(Pos);
+ if Pos > Length(FStringFind) then begin
+ Result := True;
+ FEngine.CloseFile(fd);
+ Libc.free(Buffer);
+ Exit;
+ end;
+ end else Pos := 1;
+ end;
+
+ DebugMsg(['Read : ', Read, ' bytes.']);
+ if CancelIt then Break;
+ until Read < BlockSize;
+ FEngine.CloseFile(fd);
+ Libc.free(Buffer);
+ except
+ end;
+end;
+
+
+
+
+
+
+
+end.
+
diff --git a/USelect.pas b/USelect.pas
new file mode 100644
index 0000000..f9edccf
--- /dev/null
+++ b/USelect.pas
@@ -0,0 +1,151 @@
+(*
+ Tux Commander - USelect - Select pattern dialog and related funcions
+ Copyright (C) 2008 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit USelect;
+
+interface
+
+uses
+ glib2, gtk2, pango, SysUtils, Types, Classes, GTKControls, GTKForms, GTKStdCtrls, GTKExtCtrls, GTKConsts, GTKView,
+ GTKUtils, GTKDialogs, GTKPixbuf, GTKClasses;
+
+type
+ TFSelect = class(TGTKDialog)
+{ TitleFrame, ListFontFrame: TGTKFrame;
+ TitleLabel: TGTKLabel;
+ TitleEventBox: TGTKEventBox;
+ TitleIcon: TGTKImage;
+ TitleHBox: TGTKHBox; }
+
+ Label1: TGTKLabel;
+ ComboBox: TGTKCombo;
+ Box: TGTKVBox;
+ procedure FormCreate(Sender: TObject); override;
+ procedure FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+ procedure ComboBoxKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+ private
+ SavedData: string;
+ end;
+
+var
+ FSelect: TFSelect;
+
+implementation
+
+uses ULocale, UCore;
+
+
+procedure TFSelect.FormCreate(Sender: TObject);
+var i: integer;
+begin
+ SetDefaultSize(300, 50);
+ Buttons := [mbOK, mbCancel];
+
+{ TitleEventBox := TGTKEventBox.Create(Self);
+ TitleLabel := TGTKLabel.Create(Self);
+ TitleLabel.Caption := '<span size="large" weight="ultrabold">File Properties</span>';
+ TitleLabel.UseMarkup := True;
+ TitleLabel.XAlign := 0;
+ TitleLabel.XPadding := 0;
+ TitleLabel.YPadding := 3;
+ TitleEventBox.ControlState := csPrelight;
+ TitleFrame := TGTKFrame.CreateWithoutLabel(Self);
+ TitleFrame.ShadowType := stShadowOut;
+ TitleIcon := TGTKImage.Create(Self);
+ TitleIcon.SetFromStock('gtk-edit', isSmallToolbar);
+ TitleHBox := TGTKHBox.Create(Self);
+ TitleHBox.Homogeneous := False;
+ TitleHBox.AddControlEx(TGTKVBox.Create(Self), False, False, 5);
+ TitleHBox.AddControlEx(TitleIcon, False, False, 0);
+ TitleHBox.AddControlEx(TitleLabel, True, True, 10);
+ TitleEventBox.AddControl(TitleHBox);
+ TitleFrame.AddControl(TitleEventBox);
+ ClientArea.AddControlEx(TitleFrame, False, True, 0);
+ ClientArea.AddControlEx(TGTKHBox.Create(Self), False, False, 5); }
+
+
+ Box := TGTKVBox.Create(Self);
+ Label1 := TGTKLabel.Create(Self);
+ Label1.Caption := LANGSpecifyFileType;
+ Label1.UseUnderline := True;
+ Label1.XAlign := 0;
+ Label1.XPadding := 0;
+ ComboBox := TGTKCombo.Create(Self);
+ ComboBox.DisableActivate;
+ if SelectHistory.Count > 0 then
+ for i := 0 to SelectHistory.Count - 1 do
+ ComboBox.Items.Append(SelectHistory[i]);
+ ComboBox.Entry.Text := '*.*';
+ ComboBox.Entry.OnKeyDown := ComboBoxKeyDown;
+ Label1.FocusControl := ComboBox.Entry;
+ Box.AddControlEx(Label1, False, False, 0);
+ Box.AddControlEx(ComboBox, False, False, 3);
+ Box.BorderWidth := 12;
+ ClientArea.AddControlEx(Box, True, True, 0);
+ OnKeyDown := FormKeyDown;
+ ComboBox.SetFocus;
+end;
+
+procedure TFSelect.FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+begin
+ case Key of
+ GDK_RETURN, GDK_KP_ENTER: ModalResult := mbOK;
+ GDK_ESCAPE: ModalResult := mbCancel;
+ end;
+end;
+
+procedure TFSelect.ComboBoxKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+var Orig, s: string;
+ i: integer;
+begin
+ case Key of
+ GDK_UP, GDK_DOWN: if Shift = [] then begin
+ Accept := False;
+ if SelectHistory.Count > 0 then begin
+ Orig := Trim(ComboBox.Entry.Text);
+ i := SelectHistory.IndexOf(Orig);
+
+ if Key = GDK_DOWN then begin
+ if i < 0 then begin
+ SavedData := Orig;
+ i := 0;
+ end else
+ if SelectHistory.Count > i + 1 then Inc(i);
+ s := SelectHistory[i];
+ end else begin
+ if i < 0 then Exit else
+ if i = 0 then begin
+ s := SavedData;
+ SavedData := '';
+ end else
+ if SelectHistory.Count > i then s := SelectHistory[i - 1];
+ end;
+
+ ComboBox.Entry.Text := s;
+ ComboBox.Entry.SetFocus;
+ ComboBox.Entry.SelectAll;
+ end;
+ end;
+ end;
+end;
+
+
+
+end.
+
diff --git a/USetPassword.pas b/USetPassword.pas
new file mode 100644
index 0000000..b64d079
--- /dev/null
+++ b/USetPassword.pas
@@ -0,0 +1,105 @@
+(*
+ Tux Commander - USetPassword - Password prompt dialog
+ Copyright (C) 2008 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit USetPassword;
+
+interface
+
+uses
+ glib2, gtk2, pango, SysUtils, Types, Classes, GTKControls, GTKForms, GTKStdCtrls, GTKExtCtrls, GTKConsts, GTKView,
+ GTKUtils, GTKDialogs, GTKPixbuf, GTKClasses;
+
+type
+ TFSetPassword = class(TGTKDialog)
+ Label1, Label2: TGTKLabel;
+ DialogIcon: TGTKImage;
+ Entry: TGTKEntry;
+ Table: TGTKTable;
+ ShowPasswordCheckButton: TGTKCheckButton;
+ procedure FormCreate(Sender: TObject); override;
+ procedure FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+ procedure ShowPasswordCheckButtonClick(Sender: TObject);
+ end;
+
+var
+ FSetPassword: TFSetPassword;
+
+implementation
+
+uses ULocale, UFileAssoc;
+
+
+procedure TFSetPassword.FormCreate(Sender: TObject);
+begin
+ SetDefaultSize(400, -1);
+ Buttons := [mbOK, mbCancel];
+ Caption := LANGFSetPassword_Caption;
+
+ Table := TGTKTable.Create(Self);
+ DialogIcon := TGTKImage.Create(Self);
+ DialogIcon.CopyFromPixbuf(StockLock48);
+
+ Label1 := TGTKLabel.Create(Self);
+ Label1.Caption := Format('<span size="x-large" weight="bold">%s</span>', [LANGFSetPassword_Label1_Caption]);
+ Label1.UseMarkup := True;
+ Label1.XAlign := 0;
+ Label2 := TGTKLabel.Create(Self);
+ Label2.Caption := LANGFSetPassword_Label2_Caption;
+ Label2.LineWrap := True;
+ Label2.XAlign := 0;
+ Label2.SetSizeRequest(270, -1);
+ Entry := TGTKEntry.Create(Self);
+ Entry.Visibility := False;
+ ShowPasswordCheckButton := TGTKCheckButton.CreateWithLabel(Self, LANGFSetPassword_ShowPasswordCheckButton);
+ ShowPasswordCheckButton.OnToggled := ShowPasswordCheckButtonClick;
+
+ Table.AddControlEx(0, 0, 2, 1, Label1, [taoExpand, taoFill], [taoShrink], 20, 3);
+ Table.AddControlEx(0, 1, 1, 1, DialogIcon, [taoShrink], [taoShrink], 10, 5);
+ Table.AddControlEx(1, 1, 1, 1, Label2, [taoExpand, taoFill], [taoShrink], 5, 0);
+ Table.AddControlEx(0, 2, 1, 1, TGTKVBox.Create(Self), [taoShrink], [taoShrink, taoExpand, taoFill], 2, 6);
+ Table.AddControlEx(0, 3, 2, 1, Entry, [taoExpand, taoFill], [taoShrink], 5, 0);
+ Table.AddControlEx(0, 4, 2, 1, ShowPasswordCheckButton, [taoExpand, taoFill], [taoShrink], 15, 5);
+ Table.BorderWidth := 10;
+ ClientArea.AddControlEx(Table, True, True, 0);
+ OnKeyDown := FormKeyDown;
+ Entry.SetFocus;
+end;
+
+procedure TFSetPassword.FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+begin
+ case Key of
+ GDK_RETURN, GDK_KP_ENTER: ModalResult := mbOK;
+ GDK_ESCAPE: ModalResult := mbCancel;
+ GDK_M, GDK_Capital_M: if (Shift = [ssAlt]) then begin
+ ShowPasswordCheckButton.Checked := not ShowPasswordCheckButton.Checked;
+ Accept := False;
+ end;
+ end;
+end;
+
+procedure TFSetPassword.ShowPasswordCheckButtonClick(Sender: TObject);
+begin
+ Entry.Visibility := ShowPasswordCheckButton.Checked;
+end;
+
+
+
+
+end.
+
diff --git a/USplitFile.pas b/USplitFile.pas
new file mode 100644
index 0000000..ad57017
--- /dev/null
+++ b/USplitFile.pas
@@ -0,0 +1,115 @@
+(*
+ Tux Commander - USplitFile - Split File dialog
+ Copyright (C) 2004 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit USplitFile;
+
+interface
+
+uses
+ SysUtils, Types, Classes, Variants, GTKControls, GTKForms, GTKStdCtrls, GTKExtCtrls, GTKConsts;
+
+type
+ TFSplitFile = class(TGTKDialog)
+ Label1, Label2: TGTKLabel;
+ Entry: TGTKEntry;
+ Box: TGTKVBox;
+ SizeBox: TGTKHBox;
+ SizeCombo: TGTKCombo;
+ DeleteTargetCheckBox: TGTKCheckButton;
+ procedure FormCreate(Sender: TObject); override;
+ procedure FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+ private
+ { Private declarations }
+ public
+ { Public declarations }
+ end;
+
+var
+ FSplitFile: TFSplitFile;
+
+type TSplitRecord = record
+ Title: string;
+ PartSize: Int64;
+ end;
+const SplitConsts: array[1..8] of TSplitRecord = (
+ (Title: '100 MB (ZIP)'; PartSize: 100431872),
+ (Title: '250 MB (ZIP)'; PartSize: 250331136),
+ (Title: '1.44 MB (3.5")'; PartSize: 1457664),
+ (Title: '1.2 MB (5.25")'; PartSize: 1213952),
+ (Title: '720 kB (3.5")'; PartSize: 730112),
+ (Title: '360 kB (5.25")'; PartSize: 362496),
+ (Title: '650 MB (CD-R)'; PartSize: 681574400),
+ (Title: '700 MB (CD-R)'; PartSize: 734003200));
+
+implementation
+
+uses ULocale;
+
+
+procedure TFSplitFile.FormCreate(Sender: TObject);
+var i: integer;
+begin
+ SetDefaultSize(400, -1);
+ Caption := LANGSplitFile;
+ Buttons := [mbOK, mbCancel];
+ Box := TGTKVBox.Create(Self);
+ Label1 := TGTKLabel.Create(Self);
+ Label1.XAlign := 0;
+ Label1.XPadding := 0;
+ Entry := TGTKEntry.Create(Self);
+ Label1.FocusControl := Entry;
+ Box.AddControlEx(Label1, False, False, 0);
+ Box.AddControlEx(Entry, False, False, 0);
+ Box.BorderWidth := 8;
+ ClientArea.AddControlEx(Box, True, True, 0);
+ SizeBox := TGTKHBox.Create(Self);
+ SizeBox.Homogeneous := False;
+ Label2 := TGTKLabel.Create(Self);
+ Label2.XAlign := 0;
+ Label2.XPadding := 10;
+ Label2.Caption := LANGBytesPerFile;
+ SizeCombo := TGTKCombo.Create(Self);
+ Label2.FocusControl := SizeCombo.Entry;
+ Label2.UseUnderline := True;
+ SizeCombo.Items.Append(LANGAutomatic);
+ for i := 1 to Length(SplitConsts) do
+ SizeCombo.Items.Append(SplitConsts[i].Title);
+ SizeCombo.Entry.Text := LANGAutomatic;
+ SizeBox.AddControlEx(Label2, False, False, 0);
+ SizeBox.AddControlEx(SizeCombo, False, False, 5);
+ SizeBox.AddControlEx(TGTKLabel.Create(Self), True, True, 0);
+ Box.AddControlEx(TGTKVBox.Create(Self), False, False, 3);
+ Box.AddControlEx(SizeBox, False, False, 0);
+ DeleteTargetCheckBox := TGTKCheckButton.CreateWithLabel(Self, LANGDeleteFilesOnTargetDisk);
+ Box.AddControlEx(DeleteTargetCheckBox, False, False, 3);
+ OnKeyDown := FormKeyDown;
+ Entry.SetFocus;
+end;
+
+procedure TFSplitFile.FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+begin
+ case Key of
+ GDK_RETURN, GDK_KP_ENTER: ModalResult := mbOK;
+ GDK_ESCAPE: ModalResult := mbCancel;
+ end;
+end;
+
+
+end.
+
diff --git a/USymlink.pas b/USymlink.pas
new file mode 100644
index 0000000..704b500
--- /dev/null
+++ b/USymlink.pas
@@ -0,0 +1,89 @@
+(*
+ Tux Commander - USymlink - Symbolic link
+ Copyright (C) 2004 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit USymlink;
+
+interface
+
+uses
+ SysUtils, Types, Classes, Variants, GTKControls, GTKForms, GTKStdCtrls, GTKExtCtrls, GTKConsts;
+
+type
+ TFSymlink = class(TGTKDialog)
+ Label1, Label2: TGTKLabel;
+ FromEntry, ToEntry: TGTKEntry;
+ Box: TGTKVBox;
+ procedure FormCreate(Sender: TObject); override;
+ procedure FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+ private
+ { Private declarations }
+ public
+ { Public declarations }
+ end;
+
+var
+ FSymlink: TFSymlink;
+
+implementation
+
+uses ULocale;
+
+
+procedure TFSymlink.FormCreate(Sender: TObject);
+begin
+ SetDefaultSize(500, -1);
+ Caption := LANGFSymlink_Caption;
+ Buttons := [mbOK, mbCancel];
+ Box := TGTKVBox.Create(Self);
+ Label1 := TGTKLabel.Create(Self);
+ Label1.Caption := LANGFSymlink_ExistingFilename;
+ Label1.UseUnderline := True;
+ Label1.XAlign := 0;
+ Label1.XPadding := 0;
+ FromEntry := TGTKEntry.Create(Self);
+ Label1.FocusControl := FromEntry;
+ Label2 := TGTKLabel.Create(Self);
+ Label2.Caption := LANGFSymlink_SymlinkFilename;
+ Label2.UseUnderline := True;
+ Label2.XAlign := 0;
+ Label2.XPadding := 0;
+ ToEntry := TGTKEntry.Create(Self);
+ Label2.FocusControl := ToEntry;
+ Box.AddControlEx(Label1, False, False, 2);
+ Box.AddControlEx(FromEntry, False, False, 0);
+ Box.AddControlEx(TGTKHSeparator.Create(Self), False, False, 5);
+ Box.AddControlEx(Label2, False, False, 2);
+ Box.AddControlEx(ToEntry, False, False, 0);
+ Box.BorderWidth := 10;
+ ClientArea.AddControlEx(Box, True, True, 0);
+ OnKeyDown := FormKeyDown;
+ ToEntry.SetFocus;
+end;
+
+procedure TFSymlink.FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+begin
+ case Key of
+ GDK_RETURN, GDK_KP_ENTER: ModalResult := mbOK;
+ GDK_ESCAPE: ModalResult := mbCancel;
+ end;
+end;
+
+
+end.
+
diff --git a/UTestPlugin.pas b/UTestPlugin.pas
new file mode 100644
index 0000000..d30301a
--- /dev/null
+++ b/UTestPlugin.pas
@@ -0,0 +1,181 @@
+(*
+ Tux Commander - UTestPlugin - Plugin testing
+ Copyright (C) 2004 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit UTestPlugin;
+
+interface
+
+uses
+ glib2, gdk2, gtk2, pango, SysUtils, Types, Classes, Variants, GTKControls, GTKForms, GTKStdCtrls, GTKExtCtrls, GTKConsts, GTKView,
+ GTKUtils, GTKDialogs, GTKPixbuf, GTKClasses, GTKMenus,
+ UCoreClasses;
+
+type
+ TFTestPlugin = class(TGTKDialog)
+ TitleFrame: TGTKFrame;
+ TitleLabel: TGTKLabel;
+ TitleEventBox: TGTKEventBox;
+ TitleIcon: TGTKImage;
+ TitleHBox: TGTKHBox;
+ Table: TGTKTable;
+ Label1, Label2, Label3, Label4: TGTKLabel;
+ PluginOptionMenu: TGTKOptionMenu;
+ CommandEntry, UserEntry, PasswordEntry: TGTKEntry;
+ ExperimentalWarningLabel: TGTKLabel;
+ ExperimentalWarningIcon: TGTKImage;
+ AnonymousCheckButton: TGTKCheckButton;
+ HBox4: TGTKHBox;
+ procedure FormCreate(Sender: TObject); override;
+ procedure FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+ procedure AnonymousCheckButtonToggled(Sender: TObject);
+ end;
+
+var
+ FTestPlugin: TFTestPlugin;
+
+implementation
+
+uses UVFSCore, ULocale;
+
+
+
+procedure TFTestPlugin.FormCreate(Sender: TObject);
+var i: integer;
+ MenuItem: TGTKMenuItem;
+begin
+ SetDefaultSize(400, 200);
+ Caption := LANGTestPlugin_Caption;
+ Buttons := [mbOK, mbCancel];
+ DefaultButton := mbOK;
+ ShowSeparator := False;
+ TitleEventBox := TGTKEventBox.Create(Self);
+ TitleLabel := TGTKLabel.Create(Self);
+ TitleLabel.Caption := Format('<span size="x-large" weight="ultrabold">%s</span>', [LANGTestPlugin_Title]);
+ TitleLabel.UseMarkup := True;
+ TitleLabel.XAlign := 0;
+ TitleLabel.XPadding := 0;
+ TitleLabel.YPadding := 3;
+ TitleEventBox.ControlState := csPrelight;
+ TitleFrame := TGTKFrame.CreateWithoutLabel(Self);
+ TitleFrame.ShadowType := stShadowOut;
+ TitleIcon := TGTKImage.Create(Self);
+ TitleIcon.SetFromStock('gtk-justify-center', isLargeToolbar);
+ TitleHBox := TGTKHBox.Create(Self);
+ TitleHBox.Homogeneous := False;
+ TitleHBox.AddControlEx(TGTKEventBox.Create(Self), False, False, 5);
+ TitleHBox.AddControlEx(TitleIcon, False, False, 0);
+ TitleHBox.AddControlEx(TitleLabel, True, True, 10);
+ TitleEventBox.AddControl(TitleHBox);
+ TitleFrame.AddControl(TitleEventBox);
+ ClientArea.AddControlEx(TitleFrame, False, True, 0);
+
+ HBox4 := TGTKHBox.Create(Self);
+ HBox4.Homogeneous := False;
+ ExperimentalWarningLabel := TGTKLabel.Create(Self);
+ ExperimentalWarningLabel.Caption := LANGTestPlugin_ExperimentalWarningLabelCaption;
+ ExperimentalWarningLabel.UseMarkup := True;
+ ExperimentalWarningLabel.LineWrap := True;
+ ExperimentalWarningLabel.SetSizeRequest(300, -1);
+ ExperimentalWarningIcon := TGTKImage.Create(Self);
+ ExperimentalWarningIcon.SetFromStock('gtk-dialog-warning', isDialog);
+ HBox4.AddControlEx(TGTKEventBox.Create(Self), False, False, 5);
+ HBox4.AddControlEx(ExperimentalWarningIcon, False, False, 7);
+ HBox4.AddControlEx(ExperimentalWarningLabel, True, True, 7);
+ HBox4.AddControlEx(TGTKEventBox.Create(Self), False, False, 8);
+
+ Table := TGTKTable.Create(Self);
+ Table.BorderWidth := 20;
+ ClientArea.AddControlEx(Table, True, True, 0);
+ Table.AddControlEx(0, 0, 2, 1, HBox4, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 5, 2);
+ Table.AddControlEx(0, 1, 2, 1, TGTKEventBox.Create(Self), [taoShrink, taoFill], [taoShrink], 5, 10);
+ Label1 := TGTKLabel.Create(Self);
+ Label1.XAlign := 0;
+ Label1.Caption := LANGTestPlugin_Plugin;
+ Label2 := TGTKLabel.Create(Self);
+ Label2.XAlign := 0;
+ Label2.Caption := LANGTestPlugin_Command;
+ PluginOptionMenu := TGTKOptionMenu.Create(Self);
+ Label1.FocusControl := PluginOptionMenu;
+ Label1.UseUnderline := True;
+ CommandEntry := TGTKEntry.Create(Self);
+ Label2.FocusControl := CommandEntry;
+ Label2.UseUnderline := True;
+ Table.AddControlEx(0, 2, 1, 1, Label1, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 5, 2);
+ Table.AddControlEx(0, 3, 1, 1, Label2, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 5, 2);
+ Table.AddControlEx(1, 2, 1, 1, PluginOptionMenu, [taoExpand, taoFill], [taoShrink], 5, 2);
+ Table.AddControlEx(1, 3, 1, 1, CommandEntry, [taoExpand, taoFill], [taoShrink], 5, 2);
+ Label3 := TGTKLabel.Create(Self);
+ Label3.XAlign := 0;
+ Label3.Caption := LANGTestPlugin_Username;
+ UserEntry := TGTKEntry.Create(Self);
+ Label3.FocusControl := UserEntry;
+ Label3.UseUnderline := True;
+ Label4 := TGTKLabel.Create(Self);
+ Label4.XAlign := 0;
+ Label4.Caption := LANGTestPlugin_Password;
+ PasswordEntry := TGTKEntry.Create(Self);
+ Label4.FocusControl := PasswordEntry;
+ Label4.UseUnderline := True;
+ AnonymousCheckButton := TGTKCheckButton.CreateWithLabel(Self, LANGTestPlugin_AnonymousCheckButton);
+ AnonymousCheckButton.OnToggled := AnonymousCheckButtonToggled;
+ AnonymousCheckButton.Checked := True;
+ Table.AddControlEx(0, 4, 2, 1, TGTKEventBox.Create(Self), [taoShrink, taoFill], [taoExpand, taoFill], 5, 4);
+ Table.AddControlEx(0, 5, 1, 1, Label3, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 5, 2);
+ Table.AddControlEx(1, 5, 1, 1, UserEntry, [taoExpand, taoFill], [taoShrink], 5, 2);
+ Table.AddControlEx(0, 6, 1, 1, Label4, [taoShrink, taoFill], [taoShrink, taoExpand, taoFill], 5, 2);
+ Table.AddControlEx(1, 6, 1, 1, PasswordEntry, [taoExpand, taoFill], [taoShrink], 5, 2);
+ Table.AddControlEx(0, 7, 2, 1, AnonymousCheckButton, [taoExpand, taoFill], [taoShrink], 20, 2);
+
+
+
+ if PluginList.Count = 0 then begin
+ MenuItem := TGTKMenuItem.CreateTyped(Self, itLabel);
+ MenuItem.Caption := LANGTestPlugin_NoPluginsFound;
+ MenuItem.Enabled := False;
+ PluginOptionMenu.Items.Add(MenuItem);
+ end else
+ for i := 0 to PluginList.Count - 1 do begin
+ MenuItem := TGTKMenuItem.CreateTyped(Self, itImageText);
+ MenuItem.SetCaptionPlain(Format('%s [%s]', [TVFSPlugin(PluginList[i]).VFSName,
+ ANSIToUTF8(ExtractFileName(TVFSPlugin(PluginList[i]).FullPath))]));
+ PluginOptionMenu.Items.Add(MenuItem);
+ end;
+
+ OnKeyDown := FormKeyDown;
+end;
+
+procedure TFTestPlugin.FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+begin
+ case Key of
+ GDK_RETURN, GDK_KP_ENTER: ModalResult := mbOK;
+ GDK_ESCAPE: ModalResult := mbCancel;
+ end;
+end;
+
+procedure TFTestPlugin.AnonymousCheckButtonToggled(Sender: TObject);
+begin
+ Label3.Enabled := not AnonymousCheckButton.Checked;
+ Label4.Enabled := not AnonymousCheckButton.Checked;
+ UserEntry.Enabled := not AnonymousCheckButton.Checked;
+ PasswordEntry.Enabled := not AnonymousCheckButton.Checked;
+end;
+
+
+end.
+
diff --git a/UToolTips.pas b/UToolTips.pas
new file mode 100644
index 0000000..7a79075
--- /dev/null
+++ b/UToolTips.pas
@@ -0,0 +1,401 @@
+(*
+ Tux Commander - UToolTips - ToolTips utils and classes (used as the tree hints)
+ Copyright (C) 2008 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ This unit is based on an idea from Gnome File Manager by Miroslav Bajtos <mirco@matfyz.cz>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit UToolTips;
+
+interface
+
+uses glib2, gdk2, gtk2, pango;
+
+procedure FileListTipsInstall(ATreeView: PGtkTreeView);
+procedure FileListTipsEnable;
+procedure FileListTipsDisable;
+procedure FileListTipsHide;
+
+implementation
+
+uses SysUtils, DateUtils, Classes, GTKForms, GTKView, GTKControls, UMain, UEngines, UCore, UConfig,
+ UCoreUtils;
+
+var tip_window: PGtkWindow;
+ tip_label: PGtkLabel;
+ timer_id: gint;
+ tips_enabled: boolean;
+ data_row: PGtkTreePath;
+ data_column: PGtkTreeViewColumn;
+ data_panel: PGtkTreeView;
+ tips_timer: PGTimer;
+
+
+function event_handler(widget: PGtkWidget; event: PGdkEvent; user_data: gpointer): gboolean; cdecl; forward;
+function on_leave_notify(widget: PGtkWidget; event: PGdkEventCrossing; user_data: gpointer): gboolean; cdecl; forward;
+function show_tip_widget(user_data: gpointer): gboolean; cdecl; forward;
+procedure create_widgets; forward;
+function tip_event_handler(widget: PGtkWidget; event: PGdkEvent; user_data: gpointer): gboolean; cdecl; forward;
+function tips_button_press_event(widget: PGtkWidget; event: PGdkEventButton; user_data: gpointer):gboolean; cdecl; forward;
+
+
+
+procedure FileListTipsInstall(ATreeView: PGtkTreeView);
+begin
+ g_signal_connect_after(ATreeView, 'event-after', G_CALLBACK(@event_handler), nil);
+ g_signal_connect(ATreeView, 'leave-notify-event', G_CALLBACK(@on_leave_notify), nil);
+end;
+
+procedure file_list_tips_show_tip(AListView: PGtkTreeView; row: PGtkTreePath; column: PGtkTreeViewColumn);
+var Timeout: integer;
+ is_active: gboolean;
+ ms: gulong;
+ sec: gdouble;
+begin
+ if not tips_enabled then Exit;
+ FileListTipsHide;
+ g_object_get(G_OBJECT(FMain.FWidget), 'is-active', @is_active, nil);
+ if not is_active then Exit;
+ if Assigned(data_row) and (data_row <> row) then gtk_tree_path_free(data_row);
+ data_panel := AListView;
+ data_row := row;
+ data_column := column;
+ Timeout := ConstFileListTipsDelay;
+ if tips_timer <> nil then begin
+ sec := g_timer_elapsed(tips_timer, @ms);
+ if (sec < 1) and (ms < ConstFileListTipsDelayNeighbour * 1000) then Timeout := 1;
+// DebugMsg(['Time elapsed = ', Double(sec), ':', integer(ms div 1000)]);
+ end;
+ timer_id := gtk_timeout_add(Timeout, show_tip_widget, nil);
+end;
+
+
+function event_handler(widget: PGtkWidget; event: PGdkEvent; user_data: gpointer): gboolean; cdecl;
+var view: PGtkTreeView;
+ column: PGtkTreeViewColumn;
+ path: PGtkTreePath;
+begin
+ Result := False;
+ view := GTK_TREE_VIEW(widget);
+ if event^.any.window <> gtk_tree_view_get_bin_window(view) then Exit;
+ case event^._type of
+ GDK_KEY_PRESS, GDK_SCROLL:
+ begin
+ FileListTipsHide;
+ if tips_timer <> nil then begin
+ g_timer_destroy(tips_timer);
+ tips_timer := nil;
+ end;
+ Result := True;
+ end;
+ GDK_FOCUS_CHANGE: begin
+ Result := True;
+ if event^.focus_change._in <> 1 then FileListTipsHide;
+ end;
+ GDK_MOTION_NOTIFY: begin
+ Result := True;
+ if not gtk_tree_view_get_path_at_pos(view, Trunc(event^.motion.x), Trunc(event^.motion.y), path, column, nil, nil)
+ then begin
+ FileListTipsHide;
+ if tips_timer <> nil then begin
+ g_timer_destroy(tips_timer);
+ tips_timer := nil;
+ end;
+ Exit;
+ end;
+ if Assigned(path) and Assigned(column) then file_list_tips_show_tip(view, path, column);
+ end;
+ end;
+end;
+
+procedure draw_tip_widget(panel: PGtkTreeView; const text: Pgchar; x, y: integer);
+var requisition: TGtkRequisition;
+ widget: PGtkWidget;
+ w, scr_w, wx, wy: Integer;
+ FontDesc: PPangoFontDescription;
+ hadjustment: PGtkAdjustment;
+begin
+ try
+
+ if not Assigned(tip_window) then create_widgets;
+ if not ConfUseSystemFont then begin
+ FontDesc := pango_font_description_from_string(PChar(ConfPanelFont));
+ gtk_widget_modify_font(PGtkWidget(tip_label), FontDesc);
+ end else gtk_widget_modify_font(PGtkWidget(tip_label), nil);
+
+ gtk_label_set_markup(GTK_LABEL(tip_label), Text);
+ widget := GTK_WIDGET(panel);
+ hadjustment := gtk_tree_view_get_hadjustment(panel);
+ x := x - Trunc(gtk_adjustment_get_value(hadjustment));
+
+ gdk_window_get_origin(widget^.window, @wx, @wy);
+ x := x + wx;
+ y := y + wy;
+ scr_w := gdk_screen_width;
+
+ gtk_label_set_line_wrap(tip_label, False);
+ gtk_widget_size_request(GTK_WIDGET(tip_window), @requisition);
+ if x + requisition.width > scr_w {PGtkWidget(panel)^.allocation.width} then begin
+ gtk_label_set_line_wrap(tip_label, True);
+ gtk_widget_size_request(GTK_WIDGET(tip_window), @requisition);
+ end;
+
+ w := requisition.width;
+ if (x + w) > scr_w then x := scr_w - w
+ else if x < 0 then x := 0;
+ gtk_window_move(tip_window, x, y);
+ except
+ on E: Exception do DebugMsg(['*** Exception raised in function draw_tip_widget: (', E.ClassName, '): ', E.Message]);
+ end;
+end;
+
+function gtk_tooltips_paint_window(tip_window: PGtkWidget): gboolean; cdecl;
+begin
+ gtk_paint_flat_box(tip_window^.style, tip_window^.window, GTK_STATE_NORMAL, GTK_SHADOW_OUT,
+ nil, GTK_WIDGET(tip_window), 'tooltip', 0, 0, -1, -1);
+ Result := False;
+end;
+
+
+procedure create_widgets;
+begin
+ if Assigned(tip_window) then Exit;
+ tip_window := GTK_WINDOW(gtk_window_new(GTK_WINDOW_POPUP));
+ gtk_widget_set_app_paintable(GTK_WIDGET(tip_window), True);
+ gtk_window_set_resizable(tip_window, False);
+ gtk_widget_set_name(GTK_WIDGET(tip_window), 'gtk-tooltips');
+ gtk_container_set_border_width(GTK_CONTAINER(tip_window), 4);
+ gtk_widget_set_events(GTK_WIDGET(tip_window), GDK_POINTER_MOTION_MASK or GDK_BUTTON_PRESS_MASK or GDK_KEY_PRESS_MASK or GDK_FOCUS_CHANGE_MASK or GDK_SCROLL_MASK);
+ g_signal_connect(tip_window, 'event', G_CALLBACK(@tip_event_handler), nil);
+ g_signal_connect_swapped(tip_window, 'expose_event', G_CALLBACK(@gtk_tooltips_paint_window), tip_window);
+ g_signal_connect_swapped(tip_window, 'button-press-event', G_CALLBACK(@tips_button_press_event), tip_window);
+
+ tip_label := GTK_LABEL(gtk_label_new(nil));
+ gtk_misc_set_alignment(GTK_MISC(tip_label), 0, 0.5);
+ gtk_widget_show(GTK_WIDGET(tip_label));
+
+ gtk_container_add(GTK_CONTAINER(tip_window), GTK_WIDGET(tip_label));
+end;
+
+procedure FileListTipsHide;
+begin
+ if not Assigned(tip_window) then Exit;
+ if Assigned(data_row) then gtk_tree_path_free(data_row);
+ data_row := nil;
+ data_column := nil;
+
+ if GTK_WIDGET_VISIBLE(tip_window) then begin
+ gtk_widget_hide(GTK_WIDGET(tip_window));
+ if tips_timer = nil then tips_timer := g_timer_new;
+ g_timer_start(tips_timer);
+// gdk_beep();
+// DebugMsg(['FileListTipsHide, Setting last_hide_time to ', last_hide_time]);
+ end;
+
+ if timer_id <> 0 then begin
+ gtk_timeout_remove(timer_id);
+ timer_id := 0;
+ end;
+end;
+
+function show_tip_widget(user_data: gpointer): gboolean; cdecl;
+var Text: PChar;
+ Data: PDataItem;
+ AListView: TGTKListView;
+
+ function ColumnFits(ColNo, ColumnWidth: integer): boolean;
+ var Layout: PPangoLayout;
+ FontDesc: PPangoFontDescription;
+ w, h: Integer;
+ begin
+ Text := Data^.ColumnData[FMain.ColumnSortIDs[ColNo + 1] - 1];
+ Layout := gtk_widget_create_pango_layout(AListView.FWidget, Text);
+ if ConfDirsInBold and Data^.IsDir then begin
+ Text := PChar(Format('<span weight="bold">%s</span>', [QuoteMarkupStr(Text)]));
+ pango_layout_set_markup(Layout, Text, Length(Text));
+ end;
+ if not ConfUseSystemFont then begin
+ FontDesc := pango_font_description_from_string(PChar(ConfPanelFont));
+ pango_layout_set_font_description(Layout, FontDesc);
+ end;
+ pango_layout_get_pixel_size(Layout, @w, @h);
+ g_object_unref(Layout);
+ Result := ColumnWidth > w;
+ end;
+
+var Col, ColID: Integer;
+ Rect: TGdkRectangle;
+ iter: TGtkTreeIter;
+ DataList: TList;
+ TreePath: PGtkTreePath;
+ IsFNameExtColumn, b: boolean;
+begin
+ Result := False;
+ try
+
+ if not gtk_tree_model_get_iter(gtk_tree_view_get_model(data_panel), @iter, data_row) then Exit;
+ if Pointer(data_panel) = Pointer(FMain.LeftListView.FWidget) then begin
+ DataList := LeftPanelData;
+ AListView := FMain.LeftListView;
+ end else begin
+ DataList := RightPanelData;
+ AListView := FMain.RightListView;
+ end;
+
+ if not Application.GTKVersion_2_0_5_Up then gtk_tree_model_get(gtk_tree_view_get_model(data_panel), @iter, 0, @Data, -1)
+ else begin
+ TreePath := gtk_tree_path_new_from_string(PChar(IntToStr(gtk_tree_path_get_indices(data_row)^)));
+ if not Assigned(TreePath) then Exit;
+ AListView.ConvertPathToChild(TreePath);
+ if (TreePath = nil) or (gtk_tree_path_get_indices(TreePath)^ > DataList.Count - 1) then begin
+ FileListTipsHide;
+ Exit;
+ end;
+ Data := DataList[gtk_tree_path_get_indices(TreePath)^];
+ gtk_tree_path_free(TreePath);
+ end;
+ if (Data = nil) or Data^.UpDir then begin
+ FileListTipsHide;
+ Exit;
+ end;
+
+ Col := gtk_tree_view_column_get_sort_column_id(data_column);
+ ColID := FMain.ColumnSortIDs[Col + 1];
+ IsFNameExtColumn := ((ColID = 1) and (ColID < AListView.Columns.Count - 1) and (FMain.ColumnSortIDs[Col + 2] = 3)) or
+ ((ColID = 3) and (ColID > 0) and (FMain.ColumnSortIDs[Col] = 1));
+ gtk_tree_view_get_cell_area(data_panel, data_row, data_column, @rect);
+ if (Col = 0) and ConfUseFileTypeIcons then begin
+ Inc(Rect.x, ConfRowHeightReal + 2);
+ Dec(Rect.width, ConfRowHeightReal + 2);
+ end;
+
+ // Determine if the text fits into the cell area
+ b := ColumnFits(Col, Rect.width - 10);
+ if IsFNameExtColumn then begin
+ gtk_tree_view_get_cell_area(data_panel, data_row, gtk_tree_view_get_column(data_panel, Col - Ord(ColID = 3) + Ord(ColID = 1)), @rect);
+ if ((Col - Ord(ColID = 3) + Ord(ColID = 1)) = 0) and ConfUseFileTypeIcons then begin
+ Inc(Rect.x, ConfRowHeightReal + 2);
+ Dec(Rect.width, ConfRowHeightReal + 2);
+ end;
+ b := b and ColumnFits(Col - Ord(ColID = 3) + Ord(ColID = 1), Rect.width - 10);
+ end;
+
+ if b then begin
+ FileListTipsHide;
+ Exit;
+ end;
+
+ if IsFNameExtColumn then begin
+ Text := PChar(ANSIToUTF8(Data^.AName));
+ gtk_tree_view_get_cell_area(data_panel, data_row, gtk_tree_view_get_column(data_panel, Col - Ord(ColID = 3)), @rect);
+ if ((Col - Ord(ColID = 3)) = 0) and ConfUseFileTypeIcons then begin
+ Inc(Rect.x, ConfRowHeightReal + 2);
+ Dec(Rect.width, ConfRowHeightReal + 2);
+ end;
+ end else Text := Data^.ColumnData[FMain.ColumnSortIDs[Col + 1] - 1];
+ Text := PChar(QuoteMarkupStr(Text));
+
+ if ConfDirsInBold and Data^.IsDir then Text := PChar(Format('<span weight="bold">%s</span>', [Text]));
+ draw_tip_widget(data_panel, Text, Rect.x, Rect.y + Rect.height + 2);
+// if Assigned(text) then g_free(text);
+ if not GTK_WIDGET_VISIBLE(GTK_WIDGET(tip_window)) then gtk_widget_show(GTK_WIDGET(tip_window));
+
+ except
+ on E: Exception do DebugMsg(['*** Exception raised in function show_tip_widget(user_data: gpointer): gboolean (', E.ClassName, '): ', E.Message]);
+ end;
+end;
+
+procedure FileListTipsEnable;
+begin
+ tips_enabled := True and (not ConfDisableFileTips);
+end;
+
+procedure FileListTipsDisable;
+begin
+ tips_enabled := True;
+ FileListTipsHide;
+end;
+
+procedure file_list_tips_hide_tip;
+begin
+ FileListTipsHide;
+end;
+
+function tip_event_handler(widget: PGtkWidget; event: PGdkEvent; user_data: gpointer): gboolean; cdecl;
+begin
+ Result := True;
+ case event^._type of
+ GDK_KEY_PRESS, {GDK_BUTTON_PRESS, }GDK_SCROLL, GDK_FOCUS_CHANGE{, GDK_MOTION_NOTIFY}:
+ begin
+ FileListTipsHide;
+ if tips_timer <> nil then begin
+ g_timer_destroy(tips_timer);
+ tips_timer := nil;
+ end;
+ Exit;
+ end;
+ end;
+ Result := False;
+end;
+
+function on_leave_notify(widget: PGtkWidget; event: PGdkEventCrossing; user_data: gpointer): gboolean; cdecl;
+begin
+ if Assigned(tip_window) and (not GTK_WIDGET_VISIBLE(tip_window))
+ then begin
+ FileListTipsHide;
+ if tips_timer <> nil then begin
+ g_timer_destroy(tips_timer);
+ tips_timer := nil;
+ end;
+ end;
+ Result := False;
+end;
+
+function tips_button_press_event(widget: PGtkWidget; event: PGdkEventButton; user_data: gpointer): gboolean; cdecl;
+var FSelection: PGtkTreeSelection;
+begin
+ if not Assigned(data_panel) then Exit;
+ if not Assigned(data_row) then begin
+ FileListTipsHide;
+ if tips_timer <> nil then begin
+ g_timer_destroy(tips_timer);
+ tips_timer := nil;
+ end;
+ Exit;
+ end;
+
+ FMain.LastClick := Now;
+ gtk_tree_view_set_cursor(data_panel, data_row, nil, False);
+ FSelection := gtk_tree_view_get_selection(data_panel);
+ gtk_tree_selection_select_path(FSelection, data_row);
+ Result := False;
+
+ FileListTipsHide;
+ if tips_timer <> nil then begin
+ g_timer_destroy(tips_timer);
+ tips_timer := nil;
+ end;
+
+ gtk_widget_grab_focus(PGtkWidget(data_panel));
+end;
+
+
+
+initialization
+ timer_id := 0;
+ data_row := nil;
+ tips_timer := nil;
+end.
diff --git a/UViewer.pas b/UViewer.pas
new file mode 100644
index 0000000..d7d1c4c
--- /dev/null
+++ b/UViewer.pas
@@ -0,0 +1,451 @@
+(*
+ Tux Commander - UViewer - Internal viewer
+ Copyright (C) 2008 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+
+ WARNING: This is highly experimental feature, use with caution!
+*)
+unit UViewer;
+
+interface
+
+uses
+ glib2, gdk2, gtk2, pango,
+ SysUtils, Types, Classes, Variants, GTKControls, GTKForms, GTKUtils, GTKDialogs, GTKPixbuf, GTKClasses, GTKExtCtrls, GTKConsts,
+ GTKText;
+
+type
+ TFViewer = class(TGTKForm)
+// FDrawingArea: TGTKControl;
+ TextView: TGTKTextView;
+ ScrolledWindow: TGTKScrolledWindow;
+ procedure FormCreate(Sender: TObject); override;
+ procedure FormDestroy(Sender: TObject);
+ procedure FormClose(Sender: TObject; var Action: TCloseAction);
+ procedure FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+// procedure DrawingAreaKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+ procedure TextViewKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+ private
+// LineHeight, NumLines: integer;
+ LineBuffer: TStringList;
+ protected
+ AThread: TThread;
+ public
+ function LoadFile(FileName: string): boolean;
+ end;
+
+ TViewerThread = class(TThread)
+ private
+// procedure DoIt;
+ protected
+ procedure Execute; override;
+ public
+ AViewer: TFViewer;
+ constructor Create(Parent: TComponent);
+ destructor Destroy; override;
+ function LoadFile(FileName: string): boolean;
+ end;
+
+var
+ FViewer: TFViewer;
+
+implementation
+
+uses UCoreUtils, UCoreClasses, UConfig, DateUtils, Libc;
+
+
+
+// function expose_event_callback(AWidget: PGtkWidget; event: PGdkEventExpose; data: gpointer): gboolean; cdecl; forward;
+function scroll_event_callback(widget: PGtkWidget; event: PGdkEventScroll; user_data: gpointer): gboolean; cdecl; forward;
+
+
+procedure TFViewer.FormCreate(Sender: TObject);
+begin
+ SetDefaultSize(700, 500);
+ Caption := 'TuxView';
+ BorderWidth := 5;
+ AThread := nil;
+
+ ScrolledWindow := TGTKScrolledWindow.Create(Self);
+ ScrolledWindow.HorizScrollBarPolicy := sbAutomatic;
+ ScrolledWindow.VertScrollBarPolicy := sbAutomatic;
+ ScrolledWindow.ShadowType := stShadowIn;
+ g_signal_connect(G_OBJECT(ScrolledWindow.FWidget), 'scroll-event', G_CALLBACK (@scroll_event_callback), Self);
+ AddControl(ScrolledWindow);
+// ClientArea.AddControl(ScrolledWindow);
+
+(*
+ FDrawingArea := TGTKControl.Create(Self);
+ FDrawingArea.FWidget := gtk_drawing_area_new;
+ gtk_widget_set_events(FDrawingArea.FWidget, GDK_EXPOSURE_MASK or GDK_BUTTON_PRESS_MASK or GDK_POINTER_MOTION_MASK or GDK_KEY_PRESS_MASK);
+ gtk_widget_set_size_request(FDrawingArea.FWidget, 10000, 40000);
+ g_signal_connect(G_OBJECT(FDrawingArea.FWidget), 'expose_event', G_CALLBACK (@expose_event_callback), Self);
+// g_signal_connect_after(G_OBJECT(FDrawingArea.FWidget), 'key_press_event', G_CALLBACK (@key_press_event_callback), NULL);
+ gtk_widget_set(FDrawingArea.FWidget, 'can_focus', TRUE, 0);
+ gtk_widget_set(FDrawingArea.FWidget, 'can_default', TRUE, 0);
+ gtk_widget_show(FDrawingArea.FWidget);
+ FDrawingArea.OnKeyDown := DrawingAreaKeyDown;
+
+ ScrolledWindow.AddWithViewPort(FDrawingArea);
+ FDrawingArea.SetFocus;
+*)
+
+ TextView := TGTKTextView.Create(Self);
+ TextView.CursorVisible := False;
+ TextView.ReadOnly := True;
+ TextView.OnKeyDown := TextViewKeyDown;
+
+ ScrolledWindow.AddControl(TextView);
+ TextView.SetFocus;
+
+ // ******************
+
+ OnKeyDown := FormKeyDown;
+ OnDestroy := FormDestroy;
+ OnClose := FormClose;
+end;
+
+procedure TFViewer.FormKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+begin
+ if Key = GDK_ESCAPE then Close;
+end;
+
+procedure TFViewer.FormClose(Sender: TObject; var Action: TCloseAction);
+begin
+ Action := caFree;
+ SetParent(nil);
+ if Assigned(FWidget) and GTK_IS_WIDGET(FWidget) then gtk_widget_destroy(PGtkWidget(FWidget));
+// AThread.Terminate;
+// ModalResult := mbOK;
+end;
+
+procedure TFViewer.FormDestroy(Sender: TObject);
+begin
+ try
+ LineBuffer.Free;
+ except end;
+end;
+
+
+procedure smooth_scroll(adj: PGtkAdjustment; dest_value: Double; PageScroll: boolean);
+var increment, val: Double;
+ i, x: integer;
+ timer: PGTimer;
+ microseconds: gulong;
+ dur, st: integer;
+begin
+ if gtk_adjustment_get_value(adj) = dest_value then Exit;
+ if not ConfUseSmoothScrolling then begin
+ gtk_adjustment_set_value(adj, dest_value);
+ Exit;
+ end;
+
+ if not PageScroll then begin
+ dur := SMOOTH_SCROLL_DURATION;
+ st := SMOOTH_SCROLL_STEPS;
+ end else begin
+ dur := SMOOTH_SCROLL_DURATION_PAGE;
+ st := SMOOTH_SCROLL_STEPS_PAGE;
+ end;
+
+ timer := g_timer_new;
+ increment := (dest_value - gtk_adjustment_get_value(adj)) / st;
+ val := gtk_adjustment_get_value(adj);
+
+// DebugMsg(['Start value ', val]);
+ i := 1;
+ x := 0;
+ g_timer_start(timer);
+ repeat
+ g_timer_elapsed(timer, @microseconds);
+ if (microseconds > i*1000*dur / st) and (i < st) then begin
+ val := val + increment;
+ gtk_adjustment_set_value(adj, val);
+// DebugMsg(['Setting value to ', val]);
+ Inc(i);
+ end;
+ gdk_window_process_all_updates;
+ Inc(x);
+ usleep(100);
+ until (microseconds div 1000) > dur;
+ gtk_adjustment_set_value(adj, dest_value);
+ gdk_window_process_all_updates;
+// DebugMsg(['End value ', dest_value]);
+ g_timer_stop(timer);
+
+{ g_timer_elapsed(timer, @microseconds);
+ DebugMsg(['Smooth scroll: required = ', dur, 'ms, elapsed = ', Integer(microseconds div 1000), 'ms, iterations = ', x]); }
+ g_timer_destroy(timer);
+end;
+
+
+procedure TFViewer.TextViewKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+var vadj, hadj: PGtkAdjustment;
+ x: Double;
+begin
+ vadj := gtk_scrolled_window_get_vadjustment(PGtkScrolledWindow(ScrolledWindow.FWidget));
+ hadj := gtk_scrolled_window_get_hadjustment(PGtkScrolledWindow(ScrolledWindow.FWidget));
+// debugmsg(['lower = ', adj^.lower, ', upper = ', adj^.upper, ', value = ', x, ', page_size = ', adj^.page_size]);
+ Accept := False;
+
+ case Key of
+ GDK_HOME: begin
+ smooth_scroll(vadj, 0, True);
+ smooth_scroll(hadj, 0, True);
+ end;
+ GDK_END: begin
+ smooth_scroll(vadj, vadj^.upper - vadj^.page_size, True);
+ end;
+ GDK_Page_Down, GDK_SPACE: begin
+ x := gtk_adjustment_get_value(vadj) + vadj^.page_increment;
+ if x + vadj^.page_size > vadj^.upper then x := vadj^.upper - vadj^.page_size;
+ smooth_scroll(vadj, x, True);
+ end;
+ GDK_Page_Up: begin
+ x := gtk_adjustment_get_value(vadj) - vadj^.page_increment;
+ if x < 0 then x := 0;
+ smooth_scroll(vadj, x, True);
+ end;
+ GDK_Down: begin
+ x := gtk_adjustment_get_value(vadj) + vadj^.step_increment;
+ if x + vadj^.page_size > vadj^.upper then x := vadj^.upper - vadj^.page_size;
+ smooth_scroll(vadj, x, False);
+ end;
+ GDK_Up: begin
+ x := gtk_adjustment_get_value(vadj) - vadj^.step_increment;
+ if x < 0 then x := 0;
+ smooth_scroll(vadj, x, False);
+ end;
+ GDK_Right: begin
+ x := gtk_adjustment_get_value(hadj) + hadj^.step_increment;
+ if x + hadj^.page_size > hadj^.upper then x := hadj^.upper - hadj^.page_size;
+ smooth_scroll(hadj, x, False);
+ end;
+ GDK_Left: begin
+ x := gtk_adjustment_get_value(hadj) - hadj^.step_increment;
+ if x < 0 then x := 0;
+ smooth_scroll(hadj, x, False);
+ end;
+ GDK_W, GDK_Capital_W: if TextView.WrapMode = wmWrapNone then TextView.WrapMode := wmWrapWord
+ else TextView.WrapMode := wmWrapNone;
+ GDK_C, GDK_Capital_C, GDK_Insert: if (ssCtrl in Shift) then Accept := True;
+ GDK_S, GDK_Capital_S: gtk_widget_modify_font(TextView.FWidget, pango_font_description_from_string('Monospace'));
+ GDK_A, GDK_Capital_A: gtk_widget_modify_font(TextView.FWidget, nil);
+
+ end;
+end;
+
+function scroll_event_callback(widget: PGtkWidget; event: PGdkEventScroll; user_data: gpointer): gboolean; cdecl;
+var vadj: PGtkAdjustment;
+ x: Double;
+begin
+ vadj := gtk_scrolled_window_get_vadjustment(PGtkScrolledWindow(TFViewer(user_data).ScrolledWindow.FWidget));
+ Result := True;
+
+ case event^.direction of
+ GDK_SCROLL_UP: begin
+ x := gtk_adjustment_get_value(vadj) - 1.5*vadj^.step_increment;
+ if x < 0 then x := 0;
+ smooth_scroll(vadj, x, False);
+ end;
+ GDK_SCROLL_DOWN: begin
+ x := gtk_adjustment_get_value(vadj) + 1.5*vadj^.step_increment;
+ if x + vadj^.page_size > vadj^.upper then x := vadj^.upper - vadj^.page_size;
+ smooth_scroll(vadj, x, False);
+ end;
+ end;
+end;
+
+
+(*
+procedure TFViewer.DrawingAreaKeyDown(Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean);
+var adj: PGtkAdjustment;
+ x: integer;
+begin
+ Accept := True;
+ adj := gtk_scrolled_window_get_vadjustment(PGtkScrolledWindow(ScrolledWindow.FWidget));
+ case Key of
+ GDK_ESCAPE: Close;
+ GDK_Down: begin
+ x := Trunc(gtk_adjustment_get_value(adj)) + LineHeight;
+ if x + Trunc(adj^.page_size) > LineHeight * NumLines then x := LineHeight * NumLines - Trunc(adj^.page_size);
+ gtk_adjustment_set_value(adj, x);
+ end;
+ GDK_Up: begin
+ x := Trunc(gtk_adjustment_get_value(adj)) - LineHeight;
+ if x < 0 then x := 0;
+ gtk_adjustment_set_value(adj, x);
+ end;
+ GDK_space: begin
+ x := Trunc(gtk_adjustment_get_value(adj) + adj^.page_increment);
+ if x + Trunc(adj^.page_size) > LineHeight * NumLines then x := LineHeight * NumLines - Trunc(adj^.page_size);
+ gtk_adjustment_set_value(adj, x);
+ end;
+ end;
+{ if event^.keyval = 65364 then begin // Down
+ adj := gtk_scrolled_window_get_vadjustment(PGtkScrolledWindow(scrolledWindow));
+ x := Trunc(gtk_adjustment_get_value(adj)) + LineHeight;
+ if x + Trunc(adj^.page_size) > LineHeight * NumLines then x := LineHeight * NumLines - Trunc(adj^.page_size);
+ gtk_adjustment_set_value(adj, x);
+ end;
+ if event^.keyval = 65362 then begin // Up
+ adj := gtk_scrolled_window_get_vadjustment(PGtkScrolledWindow(scrolledWindow));
+ x := Trunc(gtk_adjustment_get_value(adj)) - LineHeight;
+ if x < 0 then x := 0;
+ gtk_adjustment_set_value(adj, x);
+ end;
+ if (event^.keyval = 65366) or (event^.keyval = 32) then begin // PageDown, Space
+ adj := gtk_scrolled_window_get_vadjustment(PGtkScrolledWindow(scrolledWindow));
+ x := Trunc(gtk_adjustment_get_value(adj) + adj^.page_increment);
+ if x + Trunc(adj^.page_size) > LineHeight * NumLines then x := LineHeight * NumLines - Trunc(adj^.page_size);
+ gtk_adjustment_set_value(adj, x);
+ end;
+ if event^.keyval = 65365 then begin // PageUp
+ adj := gtk_scrolled_window_get_vadjustment(PGtkScrolledWindow(scrolledWindow));
+ x := Trunc(gtk_adjustment_get_value(adj) - adj^.page_increment);
+ if x < 0 then x := 0;
+ gtk_adjustment_set_value(adj, x);
+ end;
+ if event^.keyval = 65360 then begin // Home
+ adj := gtk_scrolled_window_get_vadjustment(PGtkScrolledWindow(scrolledWindow));
+ gtk_adjustment_set_value(adj, 0);
+ end;
+ if event^.keyval = 65367 then begin // End
+ adj := gtk_scrolled_window_get_vadjustment(PGtkScrolledWindow(scrolledWindow));
+ gtk_adjustment_set_value(adj, LineHeight * NumLines - adj^.page_size);
+ end; }
+end;
+*)
+
+(********************************************************************************************************************************)
+(*
+function expose_event_callback(AWidget: PGtkWidget; event: PGdkEventExpose; data: gpointer): gboolean; cdecl;
+var Layout: PPangoLayout;
+ s: string;
+ i, LineFrom, LineTo: integer;
+var Cursor: PGdkCursor;
+begin
+ // Count the visible lines
+ LineFrom := (event^.area.y div TFViewer(data).LineHeight) - 1;
+ if LineFrom < 0 then LineFrom := 0;
+ LineTo := ((event^.area.y + event^.area.height) div TFViewer(data).LineHeight) + 1;
+// if LineTo > MaxLineNum then LineTo := MaxLineNum;
+
+// DebugMsg(['Rendering lines ', LineFrom, ' - ', LineTo, '; expose_area: [', event^.area.x, ', ', event^.area.y, '] - ', event^.area.width, 'x', event^.area.height]);
+
+
+
+ gdk_draw_rectangle(PGdkDrawable(Awidget^.window), Awidget^.style^.white_gc, Integer(TRUE),
+ event^.area.x, event^.area.y, event^.area.width, event^.area.height);
+
+
+
+ Layout := pango_layout_new(gtk_widget_get_pango_context(Awidget));
+ for i := LineFrom to LineTo do begin
+// s := Format('This is the text on the line %d. Hope the rendering will be fast', [i]);
+ if i < TFViewer(data).LineBuffer.Count
+ then s := {ANSIToUTF8(}TFViewer(data).LineBuffer[i]
+ else s := '';
+ pango_layout_set_text(Layout, PChar(s), Length(PChar(s)));
+ gdk_draw_layout(PGdkDrawable(Awidget^.window), Awidget^.style^.fg_gc[GTK_WIDGET_STATE (Awidget)], 5, i * TFViewer(data).LineHeight, Layout);
+ end;
+ g_object_unref(Layout);
+
+
+( * gdk_draw_arc(PGdkDrawable(Awidget^.window),
+ Awidget^.style^.fg_gc[GTK_WIDGET_STATE (Awidget)],
+ Integer(TRUE),
+ 0, 0, 500, 500, {Awidget^.allocation.width, Awidget^.allocation.height,}
+ 0, 64 * 360);
+* )
+
+ // !!!!!!!!!!!! Toto oddelat (musi se volat asi po Application.ProcessMessages (se mne nechtelo s tim drbat tady))
+ cursor := gdk_cursor_new(152);
+ gdk_window_set_cursor(AWidget^.window, cursor);
+ gdk_cursor_unref(cursor);
+
+ Result := True;
+end;
+*)
+
+function TFViewer.LoadFile(FileName: string): boolean;
+var Valid: boolean;
+ i: integer;
+begin
+ Result := False;
+ try
+ LineBuffer := TStringList.Create;
+ LineBuffer.LoadFromFile(FileName);
+
+ Valid := True;
+ for i := 0 to LineBuffer.Count - 1 do begin
+ Valid := Valid and g_utf8_validate(PChar(LineBuffer[i]), -1, nil);
+ if not Valid then Break;
+ end;
+
+ if Valid then TextView.Lines.SetText(LineBuffer.Text)
+ else
+ for i := 0 to LineBuffer.Count - 1 do
+ TextView.Lines.InsertText(AnsiToUtf8(LineBuffer[i]) + #10);
+
+
+{ LineHeight := 16;
+ NumLines := LineBuffer.Count; }
+ Caption := Format('TuxView [%s]', [ANSIToUTF8(FileName)]);
+// FDrawingArea.SetSizeRequest(-1, NumLines * LineHeight);
+ Result := True;
+ except
+ Exit;
+ end;
+end;
+
+(********************************************************************************************************************************)
+procedure TViewerThread.Execute;
+begin
+ gdk_threads_enter;
+// DoIt;
+ AViewer.Show;
+// AViewer.Run;
+ gdk_threads_leave;
+end;
+
+constructor TViewerThread.Create(Parent: TComponent);
+begin
+ AViewer := TFViewer.Create(Parent);
+ AViewer.AThread := Self;
+ FreeOnTerminate := True;
+ inherited Create(True);
+end;
+
+destructor TViewerThread.Destroy;
+begin
+{ AViewer.Free;
+ inherited Destroy; }
+end;
+
+function TViewerThread.LoadFile(FileName: string): boolean;
+begin
+ Result := AViewer.LoadFile(FileName);
+end;
+
+{procedure TViewerThread.DoIt;
+begin
+ Application.MessageBox('ddd')
+end; }
+
+
+end.
diff --git a/libgtk_kylix/GTKClasses.pas b/libgtk_kylix/GTKClasses.pas
new file mode 100644
index 0000000..af61b66
--- /dev/null
+++ b/libgtk_kylix/GTKClasses.pas
@@ -0,0 +1,174 @@
+(*
+ GTK-Kylix Library: GTKClasses - Non-visual objects
+ Version 0.6.4 (last updated 2003-04-03)
+ Copyright (C) 2003 Tomas Bzatek <tbzatek@users.sourceforge.net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library 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 Library General Public
+ License along with this library; if not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307 USA.
+
+*)
+
+unit GTKClasses;
+{ $WEAKPACKAGEUNIT}
+
+interface
+
+uses gtk2, gdk2, glib2, Classes, SysUtils;
+
+
+type
+ TGDKColor = record
+ pixel: Cardinal;
+ red, green, blue: Word;
+ end;
+
+(****************************************** TGLIST ******************************************************************************)
+ TGList = class(TComponent)
+ private
+ FNotify: TNotifyEvent;
+ public
+ FList: PGList;
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ procedure Append(Data: Pointer); overload;
+ procedure Append(Data: string); overload;
+ procedure Delete(Index: integer);
+ function Count: integer;
+ published
+ property Notify: TNotifyEvent read FNotify write FNotify;
+ end;
+
+(****************************************** TGTKTIMER ***************************************************************************)
+ TGTKTimer = class(TComponent)
+ private
+ FOnTimer: TNotifyEvent;
+ FHandlerID: guint;
+ FEnabled: boolean;
+ FInterval: Cardinal;
+ procedure SetEnabled(Value: boolean);
+ procedure SetInterval(Value: Cardinal);
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ procedure Start;
+ procedure Stop;
+ published
+ property OnTimer: TNotifyEvent read FOnTimer write FOnTimer;
+ property Enabled: boolean read FEnabled write SetEnabled default False;
+ property Interval: Cardinal read FInterval write SetInterval;
+ end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+implementation
+
+uses GTKUtils;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGList.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FList := nil;
+ FNotify := nil;
+end;
+
+destructor TGList.Destroy;
+begin
+ g_list_free(FList);
+ inherited Destroy;
+end;
+
+procedure TGList.Append(Data: Pointer);
+begin
+ FList := g_list_append(FList, Data);
+ if Assigned(FNotify) then FNotify(Self);
+end;
+
+procedure TGList.Append(Data: string);
+begin
+ Append(Pointer(StringToPgchar(Data)));
+end;
+
+procedure TGList.Delete(Index: integer);
+var El: PGSList;
+begin
+ El := g_list_nth_data(FList, Index);
+ if El <> nil then FList := g_list_remove(FList, El);
+end;
+
+function TGList.Count: integer;
+begin
+ Result := 0;
+ if FList <> nil then Result := g_list_length(FList);
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKTimer.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FOnTimer := nil;
+ FEnabled := False;
+ FInterval := 0;
+ FHandlerID := 0;
+end;
+
+destructor TGTKTimer.Destroy;
+begin
+ SetEnableD(False);
+ inherited Destroy;
+end;
+
+procedure TGTKTimer.SetEnabled(Value: boolean);
+begin
+ if Value <> FEnabled then begin
+ FEnabled := Value;
+ if Value then Start
+ else Stop;
+ end;
+end;
+
+procedure TGTKTimer.SetInterval(Value: Cardinal);
+begin
+ if FInterval <> Value then begin
+ FInterval := Value;
+ Stop;
+ Start;
+ end;
+end;
+
+function TGTKTimer_Timeout(data: gpointer): gboolean; cdecl;
+begin
+ if Assigned(TGTKTimer(data).FOnTimer) then TGTKTimer(data).FOnTimer(TGTKTimer(data));
+ Result := True;
+end;
+
+procedure TGTKTimer.Start;
+begin
+ if FHandlerID > 0 then Stop;
+ if FEnabled then FHandlerID := gtk_timeout_add(FInterval, TGTKTimer_Timeout, Self);
+end;
+
+procedure TGTKTimer.Stop;
+begin
+ if FHandlerID > 0 then gtk_timeout_remove(FHandlerID);
+ FHandlerID := 0;
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+
+end.
diff --git a/libgtk_kylix/GTKConsts.pas b/libgtk_kylix/GTKConsts.pas
new file mode 100644
index 0000000..b839b23
--- /dev/null
+++ b/libgtk_kylix/GTKConsts.pas
@@ -0,0 +1,259 @@
+(*
+ GTK-Kylix Library: GTKConsts - Various constants, mainly key codes
+ Version 0.5.20 (last updated 2003-01-25)
+ Copyright (C) 2003 Tomas Bzatek <tbzatek@users.sourceforge.net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library 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 Library General Public
+ License along with this library; if not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307 USA.
+
+*)
+
+unit GTKConsts;
+{ $WEAKPACKAGEUNIT}
+
+interface
+
+uses glib2, gdk2, gtk2;
+
+const // copied from gdkkeysyms
+ GDK_BackSpace = $FF08;
+ GDK_Tab = $FF09;
+ GDK_Linefeed = $FF0A;
+ GDK_Clear_Key = $FF0B;
+ GDK_Return = $FF0D;
+ GDK_Pause = $FF13;
+ GDK_Scroll_Lock = $FF14;
+ GDK_Sys_Req = $FF15;
+ GDK_Escape = $FF1B;
+ GDK_Delete_Key = $FFFF;
+ GDK_Home = $FF50;
+ GDK_Left = $FF51;
+ GDK_Up = $FF52;
+ GDK_Right = $FF53;
+ GDK_Down = $FF54;
+ GDK_Prior = $FF55;
+ GDK_Page_Up = $FF55;
+ GDK_Next = $FF56;
+ GDK_Page_Down = $FF56;
+ GDK_End = $FF57;
+ GDK_Insert = $FF63;
+ GDK_Num_Lock = $FF7F;
+ GDK_KP_Space = $FF80;
+ GDK_KP_Tab = $FF89;
+ GDK_KP_Enter = $FF8D;
+ GDK_KP_F1 = $FF91;
+ GDK_KP_F2 = $FF92;
+ GDK_KP_F3 = $FF93;
+ GDK_KP_F4 = $FF94;
+ GDK_KP_Home = $FF95;
+ GDK_KP_Left = $FF96;
+ GDK_KP_Up = $FF97;
+ GDK_KP_Right = $FF98;
+ GDK_KP_Down = $FF99;
+ GDK_KP_Prior = $FF9A;
+ GDK_KP_Page_Up = $FF9A;
+ GDK_KP_Next = $FF9B;
+ GDK_KP_Page_Down = $FF9B;
+ GDK_KP_End = $FF9C;
+ GDK_KP_PLUS = 65451;
+ GDK_KP_MINUS = 65453;
+ GDK_KP_ASTERISK = 65450;
+ GDK_KP_SLASH = 65455;
+ GDK_KP_0 = $FFB0;
+ GDK_KP_1 = $FFB1;
+ GDK_KP_2 = $FFB2;
+ GDK_KP_3 = $FFB3;
+ GDK_KP_4 = $FFB4;
+ GDK_KP_5 = $FFB5;
+ GDK_KP_6 = $FFB6;
+ GDK_KP_7 = $FFB7;
+ GDK_KP_8 = $FFB8;
+ GDK_KP_9 = $FFB9;
+ GDK_F1 = $FFBE;
+ GDK_F2 = $FFBF;
+ GDK_F3 = $FFC0;
+ GDK_F4 = $FFC1;
+ GDK_F5 = $FFC2;
+ GDK_F6 = $FFC3;
+ GDK_F7 = $FFC4;
+ GDK_F8 = $FFC5;
+ GDK_F9 = $FFC6;
+ GDK_F10 = $FFC7;
+ GDK_F11 = $FFC8;
+ GDK_L1 = $FFC8;
+ GDK_F12 = $FFC9;
+ GDK_L2 = $FFC9;
+ GDK_F13 = $FFCA;
+ GDK_L3 = $FFCA;
+ GDK_F14 = $FFCB;
+ GDK_L4 = $FFCB;
+ GDK_F15 = $FFCC;
+ GDK_L5 = $FFCC;
+ GDK_F16 = $FFCD;
+ GDK_L6 = $FFCD;
+ GDK_F17 = $FFCE;
+ GDK_L7 = $FFCE;
+ GDK_F18 = $FFCF;
+ GDK_L8 = $FFCF;
+ GDK_F19 = $FFD0;
+ GDK_L9 = $FFD0;
+ GDK_F20 = $FFD1;
+ GDK_L10 = $FFD1;
+ GDK_F21 = $FFD2;
+ GDK_R1 = $FFD2;
+ GDK_F22 = $FFD3;
+ GDK_R2 = $FFD3;
+ GDK_F23 = $FFD4;
+ GDK_R3 = $FFD4;
+ GDK_F24 = $FFD5;
+ GDK_R4 = $FFD5;
+ GDK_F25 = $FFD6;
+ GDK_R5 = $FFD6;
+ GDK_F26 = $FFD7;
+ GDK_R6 = $FFD7;
+ GDK_F27 = $FFD8;
+ GDK_R7 = $FFD8;
+ GDK_F28 = $FFD9;
+ GDK_R8 = $FFD9;
+ GDK_F29 = $FFDA;
+ GDK_R9 = $FFDA;
+ GDK_F30 = $FFDB;
+ GDK_R10 = $FFDB;
+ GDK_F31 = $FFDC;
+ GDK_R11 = $FFDC;
+ GDK_F32 = $FFDD;
+ GDK_R12 = $FFDD;
+ GDK_F33 = $FFDE;
+ GDK_R13 = $FFDE;
+ GDK_F34 = $FFDF;
+ GDK_R14 = $FFDF;
+ GDK_F35 = $FFE0;
+ GDK_R15 = $FFE0;
+ GDK_space = $020;
+ GDK_exclam = $021;
+ GDK_quotedbl = $022;
+ GDK_numbersign = $023;
+ GDK_dollar = $024;
+ GDK_percent = $025;
+ GDK_ampersand = $026;
+ GDK_apostrophe = $027;
+ GDK_quoteright = $027;
+ GDK_parenleft = $028;
+ GDK_parenright = $029;
+ GDK_asterisk = $02a;
+ GDK_plus_key = $02b;
+ GDK_comma = $02c;
+ GDK_minus = $02d;
+ GDK_period = $02e;
+ GDK_slash = $02f;
+ GDK_0 = $030;
+ GDK_1 = $031;
+ GDK_2 = $032;
+ GDK_3 = $033;
+ GDK_4 = $034;
+ GDK_5 = $035;
+ GDK_6 = $036;
+ GDK_7 = $037;
+ GDK_8 = $038;
+ GDK_9 = $039;
+ GDK_colon = $03a;
+ GDK_semicolon = $03b;
+ GDK_less = $03c;
+ GDK_equal = $03d;
+ GDK_greater = $03e;
+ GDK_question = $03f;
+ GDK_at = $040;
+ GDK_Capital_A = $041;
+ GDK_Capital_B = $042;
+ GDK_Capital_C = $043;
+ GDK_Capital_D = $044;
+ GDK_Capital_E = $045;
+ GDK_Capital_F = $046;
+ GDK_Capital_G = $047;
+ GDK_Capital_H = $048;
+ GDK_Capital_I = $049;
+ GDK_Capital_J = $04a;
+ GDK_Capital_K = $04b;
+ GDK_Capital_L = $04c;
+ GDK_Capital_M = $04d;
+ GDK_Capital_N = $04e;
+ GDK_Capital_O = $04f;
+ GDK_Capital_P = $050;
+ GDK_Capital_Q = $051;
+ GDK_Capital_R = $052;
+ GDK_Capital_S = $053;
+ GDK_Capital_T = $054;
+ GDK_Capital_U = $055;
+ GDK_Capital_V = $056;
+ GDK_Capital_W = $057;
+ GDK_Capital_X = $058;
+ GDK_Capital_Y = $059;
+ GDK_Capital_Z = $05a;
+ GDK_bracketleft = $05b;
+ GDK_backslash = $05c;
+ GDK_bracketright = $05d;
+ GDK_quoteleft = $060;
+ GDK_a = $061;
+ GDK_b = $062;
+ GDK_c = $063;
+ GDK_d = $064;
+ GDK_e = $065;
+ GDK_f = $066;
+ GDK_g = $067;
+ GDK_h = $068;
+ GDK_i = $069;
+ GDK_j = $06a;
+ GDK_k = $06b;
+ GDK_l = $06c;
+ GDK_m = $06d;
+ GDK_n = $06e;
+ GDK_o = $06f;
+ GDK_p = $070;
+ GDK_q = $071;
+ GDK_r = $072;
+ GDK_s = $073;
+ GDK_t = $074;
+ GDK_u = $075;
+ GDK_v = $076;
+ GDK_w = $077;
+ GDK_x = $078;
+ GDK_y = $079;
+ GDK_z = $07a;
+ GDK_aacute = $0e1;
+ GDK_leftarrow = $8fb;
+ GDK_uparrow = $8fc;
+ GDK_rightarrow = $8fd;
+ GDK_downarrow = $8fe;
+ GDK_WIN_POPUP = $FF67;
+
+ NumMessageButtons = 12;
+ MessageButtonID : array[1..NumMessageButtons] of Pgchar =
+ (GTK_STOCK_YES, GTK_STOCK_NO, GTK_STOCK_OK, GTK_STOCK_CANCEL, GTK_STOCK_APPLY, GTK_STOCK_CLOSE, GTK_STOCK_HELP,
+ GTK_STOCK_PRINT, GTK_STOCK_QUIT, GTK_STOCK_STOP, GTK_STOCK_GO_BACK, GTK_STOCK_GO_FORWARD);
+
+resourcestring
+ SCDefaultMenuItemCaption = 'MenuItem';
+ SCDefaultButtonCaption = 'Button';
+ SCDefaultLabelCaption = 'Label';
+ SCDefaultToggleButtonCaption = 'ToggleButton';
+ SCDefaultCheckButtonCaption = 'CheckButton';
+ SCDefaultRadioButtonCaption = 'RadioButton';
+ SCDefaultFrameCaption = 'Frame';
+
+
+implementation
+
+
+end.
diff --git a/libgtk_kylix/GTKControls.pas b/libgtk_kylix/GTKControls.pas
new file mode 100644
index 0000000..8004857
--- /dev/null
+++ b/libgtk_kylix/GTKControls.pas
@@ -0,0 +1,1050 @@
+(*
+ GTK-Kylix Library: GTKControls - Basic objects
+ Version 0.6.22 (last updated 2007-12-19)
+ Copyright (C) 2007 Tomas Bzatek <tbzatek@users.sourceforge.net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library 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 Library General Public
+ License along with this library; if not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307 USA.
+
+*)
+
+unit GTKControls;
+{ $WEAKPACKAGEUNIT}
+
+interface
+
+uses gtk2, gdk2, glib2, Classes;
+ // Quick jump: QForms QControls
+
+const
+
+ { TModalResult values }
+ mrNone = 0;
+ mrOk = mrNone + 1;
+ mrCancel = mrOk + 1;
+ mrYes = mrCancel + 1;
+ mrNo = mrYes + 1;
+ mrAbort = mrNo + 1;
+ mrRetry = mrAbort + 1;
+ mrIgnore = mrRetry + 1;
+ mrAll = mrIgnore + 1;
+ mrNoToAll = mrAll + 1;
+ mrYesToAll = mrNoToAll + 1;
+
+type
+{$IFNDEF CPU64} // 32-bit platform
+ TComponent64 = class(TComponent);
+{$ELSE} // 64-bit platform
+ TComponent64 = class(TComponent)
+ private
+ FTag: QWORD;
+ published
+ property Tag: QWORD read FTag write FTag default 0;
+ end;
+{$ENDIF}
+
+
+
+type
+ TGTKShadowType = (stNone, stShadowIn, stShadowOut, stEtchedIn, stEtchedOut);
+ TGTKPosition = (poLeft, poRight, poTop, poBottom);
+
+(****************************************** TGTKCONTROL *************************************************************************)
+ TGDKMouseButton = (mbLeft, mbMiddle, mbRight);
+ TGDKKeyEvent = procedure (Sender: TObject; Key: Word; Shift: TShiftState; var Accept: boolean) of object;
+ TGDKMouseEvent = procedure (Sender: TObject; Button: TGDKMouseButton; Shift: TShiftState; X, Y: Integer; var Accept: boolean) of object;
+ TGDKFocusEvent = procedure (Sender: TObject; var Accept: boolean) of object;
+ TGDKExposeEvent = procedure (Sender: TObject; const Rect: PGdkRectangle; var Accept: boolean) of object;
+ TGTKControlState = (csNormal, csActive, csPrelight, csSelected, csInsensitive);
+ TGTKControl = class(TComponent64)
+ private
+ FVisible: Boolean;
+ FParent: TGTKControl;
+ FPopupMenu: TGTKControl;
+ FButtonPressSignalHandler, FButtonReleaseSignalHandler, FKeyDownSignalHandler, FKeyUpSignalHandler,
+ FFocusInSignalHandler, FFocusOutSignalHandler, FExposeSignalHandler: gulong;
+ FOnKeyDown: TGDKKeyEvent;
+ FOnKeyUp: TGDKKeyEvent;
+ FOnEnter: TGDKFocusEvent;
+ FOnExit: TGDKFocusEvent;
+ FOnMouseDown: TGDKMouseEvent;
+ FOnMouseUp: TGDKMouseEvent;
+ FOnDblClick: TGDKMouseEvent;
+ FOnExpose: TGDKExposeEvent;
+ function GetWidth: Integer;
+ function GetHeight: Integer;
+ function GetLeft: Integer;
+ function GetTop: Integer;
+ function GetEnabled: boolean;
+ function GetTooltip: string;
+ function GetCanFocus: boolean;
+ function GetFocused: boolean;
+ function GetDefault: boolean;
+ function GetControlState: TGTKControlState;
+ procedure SetHeight(const Value: Integer);
+ procedure SetVisible(const Value: Boolean);
+ procedure SetWidth(const Value: Integer);
+ procedure SetEnabled(const Value: boolean);
+ procedure SetPopupMenu(Value: TGTKControl);
+ procedure SetTooltip(Value: string);
+ procedure SetFocused(Value: boolean);
+ procedure SetOnKeyDown(Value: TGDKKeyEvent);
+ procedure SetOnKeyUp(Value: TGDKKeyEvent);
+ procedure SetOnEnter(Value: TGDKFocusEvent);
+ procedure SetOnExit(Value: TGDKFocusEvent);
+ procedure SetOnMouseDown(Value: TGDKMouseEvent);
+ procedure SetOnMouseUp(Value: TGDKMouseEvent);
+ procedure SetDefault(Value: boolean);
+ procedure SetOnDblClick(Value: TGDKMouseEvent);
+ procedure SetCanFocus(Value: boolean);
+ procedure SetOnExpose(Value: TGDKExposeEvent);
+ procedure SetControlState(Value: TGTKControlState);
+ protected
+ procedure SetParent(const Value: TGTKControl); virtual;
+ public
+ FWidget: PGtkWidget;
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ procedure Hide;
+ procedure HideAll;
+ procedure Show;
+ procedure ShowAll;
+ procedure SetSizeRequest(const Width, Height: Integer);
+ property Parent: TGTKControl read FParent write SetParent;
+ property Visible: Boolean read FVisible write SetVisible default True;
+ property Enabled: Boolean read GetEnabled write SetEnabled default True;
+ property PopupMenu: TGTKControl read FPopupMenu write SetPopupMenu;
+ procedure SetFocus;
+ procedure SetForegroundColor(Red, Green, Blue: word); overload;
+ procedure SetForegroundColor(State: integer; Red, Green, Blue: word); overload;
+ procedure SetForegroundColor(State: integer; Color: PGdkColor); overload;
+ procedure SetForegroundColor(Color: PGdkColor); overload;
+ procedure SetBackgroundColor(Red, Green, Blue: word); overload;
+ procedure SetBackgroundColor(State: integer; Red, Green, Blue: word); overload;
+ procedure SetBackgroundColor(State: integer; Color: PGdkColor); overload;
+ procedure SetBackgroundColor(Color: PGdkColor); overload;
+ procedure SetTextColor(Red, Green, Blue: word); overload;
+ procedure SetTextColor(State: integer; Red, Green, Blue: word); overload;
+ procedure SetBaseColor(Red, Green, Blue: word); overload;
+ procedure SetBaseColor(State: integer; Red, Green, Blue: word); overload;
+ procedure Invalidate;
+ procedure SetAlignment(XAlign, YAlign: Double);
+ procedure SetPadding(XPad, YPad: integer);
+ function GetData(Key: string): Pointer;
+ procedure SetData(Key: string; Value: Pointer);
+ published
+ property Width: Integer read GetWidth write SetWidth;
+ property Height: Integer read GetHeight write SetHeight;
+ property Left: Integer read GetLeft;
+ property Top: Integer read GetTop;
+ property Tooltip: string read GetTooltip write SetTooltip;
+ property CanFocus: boolean read GetCanFocus write SetCanFocus;
+ property Focused: boolean read GetFocused write SetFocused;
+ property Default: boolean read GetDefault write SetDefault;
+ property OnKeyDown: TGDKKeyEvent read FOnKeyDown write SetOnKeyDown;
+ property OnKeyUp: TGDKKeyEvent read FOnKeyUp write SetOnKeyUp;
+ property OnEnter: TGDKFocusEvent read FOnEnter write SetOnEnter;
+ property OnExit: TGDKFocusEvent read FOnExit write SetOnExit;
+ property OnMouseDown: TGDKMouseEvent read FOnMouseDown write SetOnMouseDown;
+ property OnMouseUp: TGDKMouseEvent read FOnMouseUp write SetOnMouseUp;
+ property OnDblClick: TGDKMouseEvent read FOnDblClick write SetOnDblClick;
+ property OnExpose: TGDKExposeEvent read FOnExpose write SetOnExpose;
+ property ComponentState;
+ property ControlState: TGTKControlState read GetControlState write SetControlState;
+ end;
+
+(****************************************** TGTKCONTAINER ***********************************************************************)
+ TGTKContainer = class(TGTKControl)
+ private
+ function GetBorderWidth: integer;
+ procedure SetBorderWidth(Value: integer);
+ function GetChildrenCount: integer;
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ procedure AddControl(AControl: TGTKControl);
+ procedure RemoveControl(AControl: TGTKControl);
+ published
+ property BorderWidth: integer read GetBorderWidth write SetBorderWidth;
+ property ChildrenCount: integer read GetChildrenCount;
+ end;
+
+(****************************************** TGTKBIN *****************************************************************************)
+ TGTKBin = class(TGTKContainer)
+ private
+ function GetChildControl: PGtkWidget;
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ property ChildControl: PGtkWidget read GetChildControl;
+ end;
+
+(****************************************** TGTKBOX *****************************************************************************)
+ TGTKBox = class(TGTKContainer)
+ private
+ FLinked: boolean;
+ function GetHomogeneous: boolean;
+ function GetSpacing: integer;
+ procedure SetHomogeneous(Value: boolean);
+ procedure SetSpacing(Value: integer);
+ public
+ constructor Create(AOwner: TComponent); override;
+ constructor CreateLinked(AOwner: TComponent; Widget: PGtkWidget);
+ destructor Destroy; override;
+ procedure AddControl(Control: TGTKControl);
+ procedure AddControlEnd(Control: TGTKControl);
+ procedure AddControlEx(Control: TGTKControl; Expand, Fill: boolean; Padding: integer);
+ procedure AddControlEndEx(Control: TGTKControl; Expand, Fill: boolean; Padding: integer);
+ published
+ property Homogeneous: boolean read GetHomogeneous write SetHomogeneous;
+ property Spacing: integer read GetSpacing write SetSpacing;
+ end;
+
+(****************************************** TGTKHBOX ****************************************************************************)
+ TGTKHBox = class(TGTKBox)
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ end;
+
+(****************************************** TGTKVBOX ****************************************************************************)
+ TGTKVBox = class(TGTKBox)
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ end;
+
+(****************************************** TGTKEVENTBOX ************************************************************************)
+ TGTKEventBox = class(TGTKBin)
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ end;
+
+(****************************************** TGTKTOOLTIPS ************************************************************************)
+ TGTKTooltips = class(TComponent)
+ private
+ function GetEnabled: boolean;
+ procedure SetEnabled(Value: boolean);
+ public
+ FObject: PGtkTooltips;
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ published
+ property Enabled: boolean read GetEnabled write SetEnabled;
+ end;
+
+(****************************************** TGTKTABLE ***************************************************************************)
+ TGTKTableAttachOptions = set of (taoExpand, taoShrink, taoFill);
+ TGTKTable = class(TGTKContainer)
+ private
+ function GetRowCount: integer;
+ procedure SetRowCount(Value: integer);
+ function GetColCount: integer;
+ procedure SetColCount(Value: integer);
+ function GetRowSpacing: integer;
+ procedure SetRowSpacing(Value: integer);
+ function GetColSpacing: integer;
+ procedure SetColSpacing(Value: integer);
+ function GetHomogeneous: boolean;
+ procedure SetHomogeneous(Value: boolean);
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ procedure SetRowColCount(Rows, Cols: integer);
+ procedure AddControl(Column, Row, NumCols, NumRows: integer; Control: TGTKControl; XPadding, YPadding: integer);
+ procedure AddControlEx(Column, Row, NumCols, NumRows: integer; Control: TGTKControl; XAttachOptions,
+ YAttachOptions: TGTKTableAttachOptions; XPadding, YPadding: integer);
+ published
+ property RowCount: integer read GetRowCount write SetRowCount;
+ property ColCount: integer read GetColCount write SetColCount;
+ property RowSpacing: integer read GetRowSpacing write SetRowSpacing;
+ property ColSpacing: integer read GetColSpacing write SetColSpacing;
+ property Homogeneous: boolean read GetHomogeneous write SetHomogeneous;
+ end;
+
+
+procedure Beep;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+implementation
+
+uses GTKMenus, GTKForms, GTKUtils;
+
+procedure Beep;
+begin
+ gdk_beep;
+end;
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKControl.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ if AOwner is TGTKControl then FParent := AOwner as TGTKControl;
+ FButtonPressSignalHandler := 0;
+ FButtonReleaseSignalHandler := 0;
+ FKeyDownSignalHandler := 0;
+ FKeyUpSignalHandler := 0;
+ FFocusInSignalHandler := 0;
+ FFocusOutSignalHandler := 0;
+ FExposeSignalHandler := 0;
+ FVisible := True;
+ FWidget := nil;
+ FPopupMenu := nil;
+ FOnKeyDown := nil;
+ FOnKeyUp := nil;
+ FOnEnter := nil;
+ FOnExit := nil;
+ FOnExpose := nil;
+end;
+
+destructor TGTKControl.Destroy;
+begin
+ try
+// SetParent(nil);
+// if Assigned(FWidget) {and GTK_IS_WIDGET(FWidget)} then gtk_widget_destroy(PGtkWidget(FWidget));
+ except end;
+ inherited Destroy;
+end;
+
+procedure TGTKControl.Hide;
+begin
+ FVisible := False;
+ gtk_widget_hide(FWidget);
+end;
+
+procedure TGTKControl.HideAll;
+begin
+ if Parent <> nil then Parent.HideAll;
+ FVisible := False;
+ gtk_widget_hide_all(FWidget);
+end;
+
+procedure TGTKControl.Show;
+begin
+ FVisible := True;
+ gtk_widget_show(FWidget);
+end;
+
+procedure TGTKControl.ShowAll;
+begin
+ if Parent <> nil then Parent.ShowAll;
+ FVisible := True;
+ gtk_widget_show_all(FWidget);
+end;
+
+procedure TGTKControl.SetParent(const Value: TGTKControl);
+begin
+ if (csDestroying in ComponentState) then Exit;
+ if FParent <> Value then begin
+ if Value = Self then
+ raise EInvalidOperation.Create('Invalid Operation');
+ FParent := Value;
+ try
+ if Assigned(FWidget) and GTK_IS_WIDGET(FWidget) then
+ if Assigned(Value)
+ then gtk_widget_set_parent(FWidget, Value.FWidget)
+ else gtk_widget_unparent(FWidget);
+ except end;
+ end;
+end;
+
+procedure TGTKControl.SetVisible(const Value: Boolean);
+begin
+ if Value then Show
+ else Hide;
+end;
+
+function TGTKControl.GetWidth: Integer;
+begin
+ Result := FWidget^.allocation.width;
+end;
+
+function TGTKControl.GetHeight: Integer;
+begin
+ Result := FWidget^.allocation.height;
+end;
+
+procedure TGTKControl.SetWidth(const Value: Integer);
+begin
+ SetSizeRequest(Value, GetHeight);
+end;
+
+procedure TGTKControl.SetHeight(const Value: Integer);
+begin
+ SetSizeRequest(GetWidth, Value);
+end;
+
+procedure TGTKControl.SetSizeRequest(const Width, Height: Integer);
+begin
+ gtk_widget_set_size_request(FWidget, Width, Height);
+end;
+
+function TGTKControl.GetLeft: Integer;
+begin
+ Result := FWidget^.allocation.x;
+end;
+
+function TGTKControl.GetTop: Integer;
+begin
+ Result := FWidget^.allocation.y;
+end;
+
+function TGTKControl.GetEnabled: boolean;
+begin
+ Result := False;
+ if (csDestroying in ComponentState) then Exit;
+ Result := GTK_WIDGET_SENSITIVE(FWidget);
+end;
+
+procedure TGTKControl.SetEnabled(const Value: boolean);
+begin
+ gtk_widget_set_sensitive(FWidget, Value);
+end;
+
+function TGTKControl_button_press_event(widget: PGtkWidget; event: PGdkEventButton; user_data: gpointer):gboolean; cdecl;
+var Shift: TShiftState;
+ Accept: boolean;
+begin
+ Shift := [];
+ if event^.state and GDK_SHIFT_MASK = GDK_SHIFT_MASK then Include(Shift, ssShift);
+ if event^.state and GDK_CONTROL_MASK = GDK_CONTROL_MASK then Include(Shift, ssCtrl);
+ if event^.state and GDK_MOD1_MASK = GDK_MOD1_MASK then Include(Shift, ssAlt);
+ Accept := True;
+ if Assigned(TGTKControl(widget).FOnMouseDown) and (event^._type = GDK_BUTTON_PRESS)
+ then TGTKControl(widget).FOnMouseDown(TGTKControl(widget), TGDKMouseButton(event^.button - 1), Shift, Trunc(event^.x), Trunc(event^.y), Accept);
+ if Assigned(TGTKControl(widget).FOnDblClick) and (event^._type = GDK_2BUTTON_PRESS)
+ then TGTKControl(widget).FOnDblClick(TGTKControl(widget), TGDKMouseButton(event^.button - 1), Shift, Trunc(event^.x), Trunc(event^.y), Accept);
+ Result := not Accept;
+ if Accept then
+ if (Event^.button = 3) and Assigned(TGTKControl(widget).FPopupMenu) then begin
+// if Assigned(TGTKMenuItem(TGTKControl(widget).FPopupMenu).OnPopup) then TGTKMenuItem(TGTKControl(widget).FPopupMenu).OnPopup(TGTKMenuItem(TGTKControl(widget).FPopupMenu));
+ if Assigned(TGTKMenuItem(TGTKControl(widget).FPopupMenu).OnPopup) then TGTKMenuItem(TGTKControl(widget).FPopupMenu).OnPopup(TGTKControl(widget));
+ gtk_menu_popup(PGtkMenu(TGTKMenuItem(TGTKControl(widget).FPopupMenu).FMenu), nil, nil, nil, nil, event^.button, event^.time);
+ Result := True;
+ end;
+end;
+
+procedure TGTKControl.SetPopupMenu(Value: TGTKControl);
+begin
+ if FPopupMenu <> Value then begin
+ FPopupMenu := Value;
+ if not Assigned(Value) then begin
+ if not Assigned(FOnMouseDown) then begin
+ g_signal_handler_disconnect(PGtkObject(FWidget), FButtonPressSignalHandler);
+ FButtonPressSignalHandler := 0;
+ end;
+ end else
+ if FButtonPressSignalHandler = 0
+ then FButtonPressSignalHandler := g_signal_connect_swapped(PGtkObject(FWidget), 'button-press-event', G_CALLBACK(@TGTKControl_button_press_event), Self)
+ end;
+end;
+
+function TGTKControl.GetTooltip: string;
+var TooltipsData : PGtkTooltipsData;
+begin
+ Result := '';
+ TooltipsData := gtk_tooltips_data_get(FWidget);
+ if Assigned(TooltipsData) then Result := PgcharToString(TooltipsData^.tip_text);
+end;
+
+procedure TGTKControl.SetTooltip(Value: string);
+var FParentForm : TCustomGTKForm;
+begin
+ FParentForm := GetParentForm(Self);
+ if FParentForm <> nil then gtk_tooltips_set_tip(FParentForm.Tooltips.FObject, FWidget, StringToPgchar(Value), nil);
+end;
+
+procedure TGTKControl.SetFocus;
+begin
+ if (csDestroying in ComponentState) then Exit;
+ gtk_widget_grab_focus(FWidget);
+end;
+
+function TGTKControl.GetCanFocus: boolean;
+begin
+ Result := False;
+ if (csDestroying in ComponentState) then Exit;
+ Result := GTK_WIDGET_CAN_FOCUS(FWidget);
+end;
+
+procedure TGTKControl.SetCanFocus(Value: boolean);
+begin
+{ if Value then FWidget^.private_flags := FWidget^.private_flags or GTK_CAN_FOCUS
+ else FWidget^.private_flags := FWidget^.private_flags and (not GTK_CAN_FOCUS); }
+ g_object_set(G_OBJECT(FWidget), 'can-focus', Ord(Value), nil);
+end;
+
+function TGTKControl.GetFocused: boolean;
+begin
+ Result := False;
+ try
+ if (csDestroying in ComponentState) or (FWidget = nil) then Exit;
+ Result := GTK_WIDGET_HAS_FOCUS(FWidget);
+ except end;
+end;
+
+procedure TGTKControl.SetFocused(Value: boolean);
+begin
+ SetFocus;
+end;
+
+function TGTKControl_key_event(event: PGdkEventKey; user_data : gpointer; KeyDown : boolean): gboolean;
+var Shift: TShiftState;
+ Accept: boolean;
+begin
+ Accept := True;
+ Shift := [];
+ if event^.state and GDK_SHIFT_MASK = GDK_SHIFT_MASK then Include(Shift, ssShift);
+ if event^.state and GDK_CONTROL_MASK = GDK_CONTROL_MASK then Include(Shift, ssCtrl);
+ if event^.state and GDK_MOD1_MASK = GDK_MOD1_MASK then Include(Shift, ssAlt);
+ if KeyDown then begin
+ if Assigned(TGTKControl(user_data).FOnKeyDown) then TGTKControl(user_data).FOnKeyDown(TGTKControl(user_data), event^.keyval,
+ Shift, Accept);
+ end else if Assigned(TGTKControl(user_data).FOnKeyUp) then TGTKControl(user_data).FOnKeyUp(TGTKControl(user_data), event^.keyval,
+ Shift, Accept);
+ Result := not Accept;
+end;
+
+function TGTKControl_key_press_event(widget: PGtkWidget; event: PGdkEventKey; user_data : gpointer): gboolean; cdecl;
+begin
+ Result := TGTKControl_key_event(event, user_data, True);
+end;
+
+function TGTKControl_key_release_event(widget: PGtkWidget; event: PGdkEventKey; user_data : gpointer): gboolean; cdecl;
+begin
+ Result := TGTKControl_key_event(event, user_data, False);
+end;
+
+procedure TGTKControl.SetOnKeyDown(Value: TGDKKeyEvent);
+begin
+ if @FOnKeyDown <> @Value then begin
+ FOnKeyDown := Value;
+ if Assigned(Value)
+ then FKeyDownSignalHandler := g_signal_connect(PGtkObject(FWidget), 'key-press-event', G_CALLBACK(@TGTKControl_key_press_event), Self)
+ else g_signal_handler_disconnect(PGtkObject(FWidget), FKeyDownSignalHandler);
+ end;
+end;
+
+procedure TGTKControl.SetOnKeyUp(Value: TGDKKeyEvent);
+begin
+ if @FOnKeyUp <> @Value then begin
+ FOnKeyUp := Value;
+ if Assigned(Value)
+ then FKeyUpSignalHandler := g_signal_connect(PGtkObject(FWidget), 'key-release-event', G_CALLBACK(@TGTKControl_key_release_event), Self)
+ else g_signal_handler_disconnect(PGtkObject(FWidget), FKeyUpSignalHandler);
+ end;
+end;
+
+function TGTKControl_focus_in_event(widget: PGtkWidget; event: PGdkEventFocus; user_data : gpointer): gboolean; cdecl;
+var Accept: boolean;
+begin
+ Accept := True;
+ if Assigned(TGTKControl(user_data).FOnEnter) then TGTKControl(user_data).FOnEnter(TGTKControl(user_data), Accept);
+ Result := not Accept;
+end;
+
+function TGTKControl_focus_out_event(widget: PGtkWidget; event: PGdkEventFocus; user_data : gpointer): gboolean; cdecl;
+var Accept: boolean;
+begin
+ Accept := True;
+ if Assigned(TGTKControl(user_data).FOnExit) then TGTKControl(user_data).FOnExit(TGTKControl(user_data), Accept);
+ Result := not Accept;
+end;
+
+procedure TGTKControl.SetOnEnter(Value: TGDKFocusEvent);
+begin
+ if @FOnEnter <> @Value then begin
+ FOnEnter := Value;
+ if Assigned(Value)
+ then FFocusInSignalHandler := g_signal_connect(PGtkObject(FWidget), 'focus-in-event', G_CALLBACK(@TGTKControl_focus_in_event), Self)
+ else g_signal_handler_disconnect(PGtkObject(FWidget), FFocusInSignalHandler);
+ end;
+end;
+
+procedure TGTKControl.SetOnExit(Value: TGDKFocusEvent);
+begin
+ if @FOnExit <> @Value then begin
+ FOnExit := Value;
+ if Assigned(Value)
+ then FFocusOutSignalHandler := g_signal_connect(PGtkObject(FWidget), 'focus-out-event', G_CALLBACK(@TGTKControl_focus_out_event), Self)
+ else g_signal_handler_disconnect(PGtkObject(FWidget), FFocusOutSignalHandler);
+ end;
+end;
+
+procedure TGTKControl.SetForegroundColor(Red, Green, Blue: word);
+begin
+ gtk_widget_modify_fg(FWidget, 0, AllocateColor(FWidget, Red, Green, Blue));
+end;
+
+procedure TGTKControl.SetForegroundColor(State: integer; Red, Green, Blue: word);
+begin
+ gtk_widget_modify_fg(FWidget, State, AllocateColor(FWidget, Red, Green, Blue));
+end;
+
+procedure TGTKControl.SetForegroundColor(State: integer; Color: PGdkColor);
+begin
+ gtk_widget_modify_fg(FWidget, State, Color);
+end;
+
+procedure TGTKControl.SetForegroundColor(Color: PGdkColor);
+begin
+ gtk_widget_modify_fg(FWidget, 0, Color);
+end;
+
+procedure TGTKControl.SetBackgroundColor(Red, Green, Blue: word);
+begin
+ gtk_widget_modify_bg(FWidget, 0, AllocateColor(FWidget, Red, Green, Blue));
+end;
+
+procedure TGTKControl.SetBackgroundColor(State: integer; Red, Green, Blue: word);
+begin
+ gtk_widget_modify_bg(FWidget, State, AllocateColor(FWidget, Red, Green, Blue));
+end;
+
+procedure TGTKControl.SetBackgroundColor(State: integer; Color: PGdkColor);
+begin
+ gtk_widget_modify_bg(FWidget, State, Color);
+end;
+
+procedure TGTKControl.SetBackgroundColor(Color: PGdkColor);
+begin
+ gtk_widget_modify_bg(FWidget, 0, Color);
+end;
+
+procedure TGTKControl.SetTextColor(Red, Green, Blue: word);
+begin
+ gtk_widget_modify_text(FWidget, 0, AllocateColor(FWidget, Red, Green, Blue));
+end;
+
+procedure TGTKControl.SetTextColor(State: integer; Red, Green, Blue: word);
+begin
+ gtk_widget_modify_text(FWidget, State, AllocateColor(FWidget, Red, Green, Blue));
+end;
+
+procedure TGTKControl.SetBaseColor(Red, Green, Blue: word);
+begin
+ gtk_widget_modify_base(FWidget, 0, AllocateColor(FWidget, Red, Green, Blue));
+end;
+
+procedure TGTKControl.SetBaseColor(State: integer; Red, Green, Blue: word);
+begin
+ gtk_widget_modify_base(FWidget, State, AllocateColor(FWidget, Red, Green, Blue));
+end;
+
+procedure TGTKControl.SetOnMouseDown(Value: TGDKMouseEvent);
+begin
+ if @FOnMouseDown <> @Value then begin
+ FOnMouseDown := Value;
+ if not Assigned(Value) then begin
+ if (not Assigned(FPopupMenu)) and (not Assigned(FOnDblClick)) then begin
+ g_signal_handler_disconnect(PGtkObject(FWidget), FButtonPressSignalHandler);
+ FButtonPressSignalHandler := 0;
+ end;
+ end else
+ if FButtonPressSignalHandler = 0
+ then FButtonPressSignalHandler := g_signal_connect_swapped(PGtkObject(FWidget), 'button-press-event', G_CALLBACK(@TGTKControl_button_press_event), Self)
+ end;
+end;
+
+procedure TGTKControl.SetOnDblClick(Value: TGDKMouseEvent);
+begin
+ if @FOnMouseDown <> @Value then begin
+ FOnDblClick := Value;
+ if not Assigned(Value) then begin
+ if (not Assigned(FPopupMenu)) and (not Assigned(FOnMouseDown)) then begin
+ g_signal_handler_disconnect(PGtkObject(FWidget), FButtonPressSignalHandler);
+ FButtonPressSignalHandler := 0;
+ end;
+ end else
+ if FButtonPressSignalHandler = 0
+ then FButtonPressSignalHandler := g_signal_connect_swapped(PGtkObject(FWidget), 'button-press-event', G_CALLBACK(@TGTKControl_button_press_event), Self)
+ end;
+end;
+
+function TGTKControl_button_release_event(widget: PGtkWidget; event: PGdkEventButton; user_data: gpointer):gboolean; cdecl;
+var Shift: TShiftState;
+ Accept: boolean;
+begin
+ Shift := [];
+ if event^.state and GDK_SHIFT_MASK = GDK_SHIFT_MASK then Include(Shift, ssShift);
+ if event^.state and GDK_CONTROL_MASK = GDK_CONTROL_MASK then Include(Shift, ssCtrl);
+ if event^.state and GDK_MOD1_MASK = GDK_MOD1_MASK then Include(Shift, ssAlt);
+ Accept := True;
+ if Assigned(TGTKControl(widget).FOnMouseUp)
+ then TGTKControl(widget).FOnMouseUp(TGTKControl(widget), TGDKMouseButton(event^.button - 1), Shift, Trunc(event^.x), Trunc(event^.y), Accept);
+ Result := not Accept;
+end;
+
+procedure TGTKControl.SetOnMouseUp(Value: TGDKMouseEvent);
+begin
+ if @FOnMouseUp <> @Value then begin
+ FOnMouseUp := Value;
+ if Assigned(Value) then FButtonReleaseSignalHandler := g_signal_connect_swapped(PGtkObject(FWidget), 'button-release-event', G_CALLBACK(@TGTKControl_button_release_event), Self)
+ else g_signal_handler_disconnect(PGtkObject(FWidget), FButtonReleaseSignalHandler);
+ end;
+end;
+
+function TGTKControl.GetDefault: boolean;
+begin
+ Result := False;
+ if (csDestroying in ComponentState) then Exit;
+ Result := GTK_WIDGET_HAS_DEFAULT(FWidget);
+end;
+
+procedure TGTKControl.SetDefault(Value: boolean);
+begin
+ if (csDestroying in ComponentState) then Exit;
+ GTK_WIDGET_SET_FLAGS(FWidget, GTK_CAN_DEFAULT);
+// gtk_widget_grab_default(FWidget);
+end;
+
+procedure TGTKControl.Invalidate;
+begin
+ if (csDestroying in ComponentState) then Exit;
+ gtk_widget_queue_draw(FWidget);
+end;
+
+procedure TGTKControl.SetAlignment(XAlign, YAlign: Double);
+begin
+ gtk_misc_set_alignment(PGtkMisc(FWidget), XAlign, YAlign);
+end;
+
+procedure TGTKControl.SetPadding(XPad, YPad: integer);
+begin
+ gtk_misc_set_padding(PGtkMisc(FWidget), XPad, YPad);
+end;
+
+function TGTKControl_expose_event(widget: PGtkWidget; event: PGdkEventExpose; user_data: gpointer):gboolean; cdecl;
+var Accept: boolean;
+begin
+ Accept := True;
+ if Assigned(TGTKControl(user_data).FOnExpose)
+ then TGTKControl(user_data).FOnExpose(TGTKControl(user_data), @event^.area, Accept);
+ Result := not Accept;
+end;
+
+procedure TGTKControl.SetOnExpose(Value: TGDKExposeEvent);
+begin
+ if @FOnExpose <> @Value then begin
+ FOnExpose := Value;
+ if Assigned(Value)
+ then FExposeSignalHandler := g_signal_connect(PGtkObject(FWidget), 'expose-event', G_CALLBACK(@TGTKControl_expose_event), Self)
+ else g_signal_handler_disconnect(PGtkObject(FWidget), FExposeSignalHandler);
+ end;
+end;
+
+function TGTKControl.GetControlState: TGTKControlState;
+begin
+ Result := TGTKControlState(FWidget^.state);
+end;
+
+procedure TGTKControl.SetControlState(Value: TGTKControlState);
+begin
+ gtk_widget_set_state(FWidget, integer(Value));
+end;
+
+function TGTKControl.GetData(Key: string): Pointer;
+begin
+ Result := g_object_get_data(G_OBJECT(FWidget), PChar(Key));
+end;
+
+procedure TGTKControl.SetData(Key: string; Value: Pointer);
+begin
+ g_object_set_data(G_OBJECT(FWidget), PChar(Key), Value);
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKContainer.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+end;
+
+destructor TGTKContainer.Destroy;
+begin
+ inherited Destroy;
+end;
+
+function TGTKContainer.GetBorderWidth: integer;
+begin
+ Result := gtk_container_get_border_width(PGtkContainer(FWidget));
+end;
+
+procedure TGTKContainer.SetBorderWidth(Value: integer);
+begin
+ gtk_container_set_border_width(PGtkContainer(FWidget), Value);
+end;
+
+procedure TGTKContainer.AddControl(AControl: TGTKControl);
+begin
+ gtk_container_add(PGtkContainer(FWidget), AControl.FWidget);
+end;
+
+procedure TGTKContainer.RemoveControl(AControl: TGTKControl);
+begin
+ gtk_container_remove(PGtkContainer(FWidget), AControl.FWidget);
+end;
+
+function TGTKContainer.GetChildrenCount: integer;
+begin
+ Result := g_list_length(gtk_container_get_children(PGtkContainer(FWidget)));
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKBin.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+end;
+
+destructor TGTKBin.Destroy;
+begin
+ inherited Destroy;
+end;
+
+function TGTKBin.GetChildControl: PGtkWidget;
+begin
+ Result := gtk_bin_get_child(PGtkBin(FWidget));
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKBox.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FLinked := False;
+end;
+
+constructor TGTKBox.CreateLinked(AOwner: TComponent; Widget: PGtkWidget);
+begin
+ inherited Create(AOwner);
+ FLinked := True;
+ FWidget := Widget;
+ Show;
+end;
+
+destructor TGTKBox.Destroy;
+begin
+ if not FLinked then inherited Destroy;
+end;
+
+procedure TGTKBox.AddControl(Control: TGTKControl);
+begin
+ gtk_box_pack_start_defaults(PGtkBox(FWidget), Control.FWidget);
+end;
+
+procedure TGTKBox.AddControlEnd(Control: TGTKControl);
+begin
+ gtk_box_pack_end_defaults(PGtkBox(FWidget), Control.FWidget);
+end;
+
+procedure TGTKBox.AddControlEx(Control: TGTKControl; Expand, Fill: boolean; Padding: integer);
+begin
+ gtk_box_pack_start(PGtkBox(FWidget), Control.FWidget, Expand, Fill, Padding);
+end;
+
+procedure TGTKBox.AddControlEndEx(Control: TGTKControl; Expand, Fill: boolean; Padding: integer);
+begin
+ gtk_box_pack_end(PGtkBox(FWidget), Control.FWidget, Expand, Fill, Padding);
+end;
+
+function TGTKBox.GetHomogeneous: boolean;
+begin
+ Result := gtk_box_get_homogeneous(PGtkBox(FWidget));
+end;
+
+procedure TGTKBox.SetHomogeneous(Value: boolean);
+begin
+ gtk_box_set_homogeneous(PGtkBox(FWidget), Value);
+end;
+
+function TGTKBox.GetSpacing: integer;
+begin
+ Result := gtk_box_get_spacing(PGtkBox(FWidget));
+end;
+
+procedure TGTKBox.SetSpacing(Value: integer);
+begin
+ gtk_box_set_spacing(PGtkBox(FWidget), Value);
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKHBox.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ if ClassName = 'TGTKHBox' then begin
+ FWidget := gtk_hbox_new(True, 0);
+ Show;
+ end;
+end;
+
+destructor TGTKHBox.Destroy;
+begin
+ inherited Destroy;
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKVBox.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ if ClassName = 'TGTKVBox' then begin
+ FWidget := gtk_vbox_new(False, 0);
+ Show;
+ end;
+end;
+
+destructor TGTKVBox.Destroy;
+begin
+ inherited Destroy;
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKTooltips.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FObject := gtk_tooltips_new;
+end;
+
+destructor TGTKTooltips.Destroy;
+begin
+ inherited Destroy;
+end;
+
+function TGTKTooltips.GetEnabled: boolean;
+begin
+ Result := Boolean(gtk2.enabled(FObject^));
+end;
+
+procedure TGTKTooltips.SetEnabled(Value: boolean);
+begin
+ if Value then gtk_tooltips_enable(FObject)
+ else gtk_tooltips_disable(FObject);
+end;
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKEventBox.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FWidget := gtk_event_box_new;
+ Show;
+end;
+
+destructor TGTKEventBox.Destroy;
+begin
+ inherited Destroy;
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKTable.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FWidget := gtk_table_new(0, 0, False);
+ Show;
+end;
+
+destructor TGTKTable.Destroy;
+begin
+ inherited Destroy;
+end;
+
+function TGTKTable.GetRowCount: integer;
+begin
+ Result := PGtkTable(FWidget)^.nrows;
+end;
+
+procedure TGTKTable.SetRowCount(Value: integer);
+begin
+ SetRowColCount(Value, ColCount);
+end;
+
+function TGTKTable.GetColCount: integer;
+begin
+ Result := PGtkTable(FWidget)^.ncols;
+end;
+
+procedure TGTKTable.SetColCount(Value: integer);
+begin
+ SetRowColCount(RowCount, Value);
+end;
+
+procedure TGTKTable.SetRowColCount(Rows, Cols: integer);
+begin
+ gtk_table_resize(PGtkTable(FWidget), Rows, Cols);
+end;
+
+function TGTKTable.GetRowSpacing: integer;
+begin
+ Result := gtk_table_get_default_row_spacing(PGtkTable(FWidget));
+end;
+
+procedure TGTKTable.SetRowSpacing(Value: integer);
+begin
+ gtk_table_set_row_spacings(PGtkTable(FWidget), Value);
+end;
+
+function TGTKTable.GetColSpacing: integer;
+begin
+ Result := gtk_table_get_default_col_spacing(PGtkTable(FWidget));
+end;
+
+procedure TGTKTable.SetColSpacing(Value: integer);
+begin
+ gtk_table_set_col_spacings(PGtkTable(FWidget), Value);
+end;
+
+function TGTKTable.GetHomogeneous: boolean;
+begin
+ Result := gtk_table_get_homogeneous(PGtkTable(FWidget));
+end;
+
+procedure TGTKTable.SetHomogeneous(Value: boolean);
+begin
+ gtk_table_set_homogeneous(PGtkTable(FWidget), Value);
+end;
+
+procedure TGTKTable.AddControl(Column, Row, NumCols, NumRows: integer; Control: TGTKControl; XPadding, YPadding: integer);
+begin
+ gtk_table_attach(PGtkTable(FWidget), Control.FWidget, Column, Column + NumCols, Row, Row + NumRows,
+ GTK_EXPAND or GTK_SHRINK or GTK_FILL, GTK_EXPAND or GTK_SHRINK or GTK_FILL, XPadding, YPadding);
+end;
+
+procedure TGTKTable.AddControlEx(Column, Row, NumCols, NumRows: integer; Control: TGTKControl; XAttachOptions,
+ YAttachOptions: TGTKTableAttachOptions; XPadding, YPadding: integer);
+begin
+ gtk_table_attach(PGtkTable(FWidget), Control.FWidget, Column, Column + NumCols, Row, Row + NumRows,
+ (GTK_EXPAND*Ord(taoExpand in XAttachOptions)) or (GTK_SHRINK*Ord(taoShrink in XAttachOptions)) or (GTK_FILL*Ord(taoFill in XAttachOptions)),
+ (GTK_EXPAND*Ord(taoExpand in YAttachOptions)) or (GTK_SHRINK*Ord(taoShrink in YAttachOptions)) or (GTK_FILL*Ord(taoFill in YAttachOptions)),
+ XPadding, YPadding);
+end;
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+
+
+
+end.
diff --git a/libgtk_kylix/GTKDialogs.pas b/libgtk_kylix/GTKDialogs.pas
new file mode 100644
index 0000000..eb24ccc
--- /dev/null
+++ b/libgtk_kylix/GTKDialogs.pas
@@ -0,0 +1,248 @@
+(*
+ GTK-Kylix Library: GTKDialogs - Special purpose dialogs
+ Version 0.7.0 (last updated 2006-02-05)
+ Copyright (C) 2006 Tomas Bzatek <tbzatek@users.sourceforge.net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library 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 Library General Public
+ License along with this library; if not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307 USA.
+
+*)
+
+unit GTKDialogs;
+{ $WEAKPACKAGEUNIT}
+
+interface
+
+uses gtk2, gdk2, glib2, Classes, GTKControls, GTKConsts, GTKUtils, GTKClasses, GTKForms;
+
+
+type
+
+(****************************************** TGTKFILESELECTIONDIALOG *************************************************************)
+ TGTKFileSelectionDialog = class(TGTKDialog)
+ private
+ function GetFileName: string;
+ function GetShowFileOpButtons: boolean;
+ function GetMultiSelect: boolean;
+ procedure SetFileName(Value: string);
+ procedure SetShowFileOpButtons(Value: boolean);
+ procedure SetMultiSelect(Value: boolean);
+ protected
+ public
+ constructor Create(AOwner: TComponent); override;
+ constructor CreateWithTitle(AOwner: TComponent; const Title: string);
+ destructor Destroy; override;
+ published
+ property FileName: string read GetFileName write SetFileName;
+ property ShowFileOpButtons: boolean read GetShowFileOpButtons write SetShowFileOpButtons;
+ property MultiSelect: boolean read GetMultiSelect write SetMultiSelect;
+ end;
+
+(****************************************** TGTKCOLORSELECTIONDIALOG ************************************************************)
+ TGTKColorSelectionDialog = class(TGTKDialog)
+ private
+ function GetShowOpacity: boolean;
+ procedure SetShowOpacity(Value: boolean);
+ function GetShowPalette: boolean;
+ procedure SetShowPalette(Value: boolean);
+ function GetColor: TGDKColor;
+ procedure SetColor(Value: TGDKColor);
+ protected
+ public
+ constructor Create(AOwner: TComponent); override;
+ constructor CreateWithTitle(AOwner: TComponent; const Title: string);
+ destructor Destroy; override;
+ property Color: TGDKColor read GetColor write SetColor;
+ published
+ property ShowOpacity: boolean read GetShowOpacity write SetShowOpacity;
+ property ShowPalette: boolean read GetShowPalette write SetShowPalette;
+ end;
+
+(****************************************** TGTKFONTSELECTIONDIALOG *************************************************************)
+ TGTKFontSelectionDialog = class(TGTKDialog)
+ private
+ function GetFontName: string;
+ procedure SetFontName(Value: string);
+ function GetPreviewText: string;
+ procedure SetPreviewText(Value: string);
+ protected
+ public
+ constructor Create(AOwner: TComponent); override;
+ constructor CreateWithTitle(AOwner: TComponent; const Title: string);
+ destructor Destroy; override;
+ published
+ property FontName: string read GetFontName write SetFontName;
+ property PreviewText: string read GetPreviewText write SetPreviewText;
+ end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+implementation
+
+uses SysUtils, DateUtils;
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKFileSelectionDialog.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FWidget := gtk_file_selection_new(nil);
+ Show;
+end;
+
+constructor TGTKFileSelectionDialog.CreateWithTitle(AOwner: TComponent; const Title: string);
+begin
+ inherited Create(AOwner);
+ FWidget := gtk_file_selection_new(StringToPgchar(Title));
+ Show;
+end;
+
+destructor TGTKFileSelectionDialog.Destroy;
+begin
+ inherited Destroy;
+end;
+
+function TGTKFileSelectionDialog.GetFileName: string;
+begin
+ Result := string(gtk_file_selection_get_filename(PGtkFileSelection(FWidget)));
+end;
+
+procedure TGTKFileSelectionDialog.SetFileName(Value: string);
+begin
+ gtk_file_selection_set_filename(PGtkFileSelection(FWidget), PChar(Value));
+end;
+
+function TGTKFileSelectionDialog.GetShowFileOpButtons: boolean;
+var b: Boolean;
+begin
+ g_object_get(FWidget, 'show-fileops', @b, nil);
+ Result := b;
+end;
+
+procedure TGTKFileSelectionDialog.SetShowFileOpButtons(Value: boolean);
+begin
+ if Value then gtk_file_selection_show_fileop_buttons(PGtkFileSelection(FWidget))
+ else gtk_file_selection_hide_fileop_buttons(PGtkFileSelection(FWidget));
+end;
+
+function TGTKFileSelectionDialog.GetMultiSelect: boolean;
+begin
+ Result := gtk_file_selection_get_select_multiple(PGtkFileSelection(FWidget));
+end;
+
+procedure TGTKFileSelectionDialog.SetMultiSelect(Value: boolean);
+begin
+ gtk_file_selection_set_select_multiple(PGtkFileSelection(FWidget), Value);
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKColorSelectionDialog.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FWidget := gtk_color_selection_dialog_new(nil);
+ Show;
+end;
+
+constructor TGTKColorSelectionDialog.CreateWithTitle(AOwner: TComponent; const Title: string);
+begin
+ inherited Create(AOwner);
+ FWidget := gtk_color_selection_dialog_new(StringToPgchar(Title));
+ Show;
+end;
+
+destructor TGTKColorSelectionDialog.Destroy;
+begin
+ inherited Destroy;
+end;
+
+function TGTKColorSelectionDialog.GetShowOpacity: boolean;
+begin
+ Result := gtk_color_selection_get_has_opacity_control(PGtkColorSelection(PGtkColorSelectionDialog(FWidget)^.colorsel));
+end;
+
+procedure TGTKColorSelectionDialog.SetShowOpacity(Value: boolean);
+begin
+ gtk_color_selection_set_has_opacity_control(PGtkColorSelection(PGtkColorSelectionDialog(FWidget)^.colorsel), Value);
+end;
+
+function TGTKColorSelectionDialog.GetShowPalette: boolean;
+begin
+ Result := gtk_color_selection_get_has_palette(PGtkColorSelection(PGtkColorSelectionDialog(FWidget)^.colorsel));
+end;
+
+procedure TGTKColorSelectionDialog.SetShowPalette(Value: boolean);
+begin
+ gtk_color_selection_set_has_palette(PGtkColorSelection(PGtkColorSelectionDialog(FWidget)^.colorsel), Value);
+end;
+
+function TGTKColorSelectionDialog.GetColor: TGDKColor;
+var Col: gdk2.TGDkColor;
+begin
+ gtk_color_selection_get_current_color(PGtkColorSelection(PGtkColorSelectionDialog(FWidget)^.colorsel), @Col);
+ Result := PGdkColorToGDKColor(@Col);
+end;
+
+procedure TGTKColorSelectionDialog.SetColor(Value: TGDKColor);
+var Col: PGDkColor;
+begin
+ Col := GDKColorToPGdkColor(Value);
+ gtk_color_selection_set_current_color(PGtkColorSelection(PGtkColorSelectionDialog(FWidget)^.colorsel), Col);
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKFontSelectionDialog.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FWidget := gtk_font_selection_dialog_new(nil);
+ Show;
+end;
+
+constructor TGTKFontSelectionDialog.CreateWithTitle(AOwner: TComponent; const Title: string);
+begin
+ inherited Create(AOwner);
+ FWidget := gtk_font_selection_dialog_new(StringToPgchar(Title));
+ Show;
+end;
+
+destructor TGTKFontSelectionDialog.Destroy;
+begin
+ inherited Destroy;
+end;
+
+function TGTKFontSelectionDialog.GetFontName: string;
+begin
+ Result := PgcharToString(gtk_font_selection_dialog_get_font_name(PGtkFontSelectionDialog(FWidget)));
+end;
+
+procedure TGTKFontSelectionDialog.SetFontName(Value: string);
+begin
+ gtk_font_selection_dialog_set_font_name(PGtkFontSelectionDialog(FWidget), StringToPgchar(Value));
+end;
+
+function TGTKFontSelectionDialog.GetPreviewText: string;
+begin
+ Result := PgcharToString(gtk_font_selection_dialog_get_preview_text(PGtkFontSelectionDialog(FWidget)));
+end;
+
+procedure TGTKFontSelectionDialog.SetPreviewText(Value: string);
+begin
+ gtk_font_selection_dialog_set_preview_text(PGtkFontSelectionDialog(FWidget), StringToPgchar(Value));
+end;
+
+(********************************************************************************************************************************)
+end.
diff --git a/libgtk_kylix/GTKExtCtrls.pas b/libgtk_kylix/GTKExtCtrls.pas
new file mode 100644
index 0000000..8426d02
--- /dev/null
+++ b/libgtk_kylix/GTKExtCtrls.pas
@@ -0,0 +1,707 @@
+(*
+ GTK-Kylix Library: GTKExtCtrls - Extended visual controls
+ Version 0.6.22 (last updated 2004-11-20)
+ Copyright (C) 2004 Tomas Bzatek <tbzatek@users.sourceforge.net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library 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 Library General Public
+ License along with this library; if not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307 USA.
+
+*)
+
+unit GTKExtCtrls;
+{ $WEAKPACKAGEUNIT}
+
+interface
+
+uses gtk2, gdk2, glib2, Classes, GTKControls, GTKConsts, GTKStdCtrls, GTKUtils, GTKMenus;
+ // Quick jump: QForms QControls QStdCtrls QExtCtrls
+
+
+type
+
+(****************************************** TGTKSEPARATOR ***********************************************************************)
+ TGTKSeparator = class(TGTKControl)
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ end;
+
+(****************************************** TGTKHSEPARATOR **********************************************************************)
+ TGTKHSeparator = class(TGTKSeparator)
+ public
+ constructor Create(AOwner: TComponent); override;
+ end;
+
+(****************************************** TGTKVSEPARATOR **********************************************************************)
+ TGTKVSeparator = class(TGTKSeparator)
+ public
+ constructor Create(AOwner: TComponent); override;
+ end;
+
+(****************************************** TGTKHANDLEBOX ***********************************************************************)
+ TGTKHandleBox = class(TGTKBin)
+ private
+ function GetShadowType: TGTKShadowType;
+ function GetHandlePosition: TGTKPosition;
+ function GetSnapEdge: TGTKPosition;
+ procedure SetShadowType(Value: TGTKShadowType);
+ procedure SetHandlePosition(Value: TGTKPosition);
+ procedure SetSnapEdge(Value: TGTKPosition);
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ published
+ property ShadowType: TGTKShadowType read GetShadowType write SetShadowType;
+ property HandlePosition: TGTKPosition read GetHandlePosition write SetHandlePosition;
+ property SnapEdge: TGTKPosition read GetSnapEdge write SetSnapEdge;
+ end;
+
+(****************************************** TGTKPROGRESSBAR *********************************************************************)
+ TGTKProgressBarOrientation = (poLeftToRight, poRightToLeft, poBottomToTop, poTopToBottom);
+ TGTKProgressBar = class(TGTKControl)
+ private
+ FMax: Int64;
+ function GetText: string;
+ function GetFraction: Double;
+ function GetPulseStep: Double;
+ function GetOrientation: TGTKProgressBarOrientation;
+ function GetValue: Int64;
+ procedure SetText(Value: string);
+ procedure SetFraction(Value: Double);
+ procedure SetPulseStep(Value: Double);
+ procedure SetOrientation(Value: TGTKProgressBarOrientation);
+ procedure SetValue(Value: Int64);
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ procedure Pulse;
+ published
+ property Text: string read GetText write SetText;
+ property Fraction: Double read GetFraction write SetFraction;
+ property PulseStep: Double read GetPulseStep write SetPulseStep;
+ property Orientation: TGTKProgressBarOrientation read GetOrientation write SetOrientation;
+ property Max: Int64 read FMax write FMax;
+ property Value: Int64 read GetValue write SetValue;
+ end;
+
+(****************************************** TGTKPANED ***************************************************************************)
+ TGTKPaned = class(TGTKContainer)
+ private
+ FChild1, FChild2: TGTKControl;
+ FOnResize: TNotifyEvent;
+ function GetPosition: integer;
+ procedure SetPosition(Value: integer);
+ procedure SetChild1(Value: TGTKControl);
+ procedure SetChild2(Value: TGTKControl);
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ published
+ property Child1: TGTKControl read FChild1 write SetChild1;
+ property Child2: TGTKControl read FChild2 write SetChild2;
+ property Position: integer read GetPosition write SetPosition;
+ property OnResize: TNotifyEvent read FOnResize write FOnResize;
+ end;
+
+(****************************************** TGTKHPANED **************************************************************************)
+ TGTKHPaned = class(TGTKPaned)
+ public
+ constructor Create(AOwner: TComponent); override;
+ end;
+
+(****************************************** TGTKVPANED **************************************************************************)
+ TGTKVPaned = class(TGTKPaned)
+ public
+ constructor Create(AOwner: TComponent); override;
+ end;
+
+(****************************************** TGTKNOTEBOOK ************************************************************************)
+ TGTKNotebook = class(TGTKContainer)
+ private
+ FOnSwitchPage: TNotifyEvent;
+ function GetPageIndex: integer;
+ function GetTabPosition: TGTKPosition;
+ function GetShowTabs: boolean;
+ function GetShowBorder: boolean;
+ function GetScrollable: boolean;
+ procedure SetPageIndex(Value: integer);
+ procedure SetTabPosition(Value: TGTKPosition);
+ procedure SetShowTabs(Value: boolean);
+ procedure SetShowBorder(Value: boolean);
+ procedure SetScrollable(Value: boolean);
+ public
+ constructor Create(AOwner: TComponent); virtual;
+ destructor Destroy; virtual;
+ function AppendPage(Child: TGTKControl; Caption: string): integer;
+ procedure RemovePage(PageNo: integer);
+ function GetCaption(PageNo: integer): string;
+ procedure SetCaption(PageNo: integer; Caption: string);
+ procedure NextPage;
+ procedure PrevPage;
+ function GetExpandTab(PageNo: integer): boolean;
+ procedure SetExpandTab(PageNo: integer; Value: boolean);
+ function GetFillTab(PageNo: integer): boolean;
+ procedure SetFillTab(PageNo: integer; Value: boolean);
+ function GetTabLabel(PageNo: integer): TGTKLabel;
+ published
+ property PageIndex: integer read GetPageIndex write SetPageIndex;
+ property TabPosition: TGTKPosition read GetTabPosition write SetTabPosition;
+ property ShowTabs: boolean read GetShowTabs write SetShowTabs;
+ property ShowBorder: boolean read GetShowBorder write SetShowBorder;
+ property Scrollable: boolean read GetScrollable write SetScrollable;
+ property OnSwitchPage: TNotifyEvent read FOnSwitchPage write FOnSwitchPage;
+ end;
+
+(****************************************** TGTKOPTIONMENU **********************************************************************)
+ TGTKOptionMenu = class(TGTKButton)
+ private
+ FItems: TGTKMenuItem;
+ FOnChanged: TNotifyEvent;
+ procedure ItemsChanged(Sender: TObject);
+ function GetItemIndex: integer;
+ procedure SetItemIndex(Value: integer);
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ published
+ property Items: TGTKMenuItem read FItems;
+ property ItemIndex: integer read GetItemIndex write SetItemIndex;
+ property OnChanged: TNotifyEvent read FOnChanged write FOnChanged;
+ end;
+
+(****************************************** TGTKSCROLLEDWINDOW ******************************************************************)
+ TGTKScrollBarPolicy = (sbAlways, sbAutomatic, sbNever);
+ TGTKScrolledWindow = class(TGTKBin)
+ private
+ function GetHorizScrollBarPolicy: TGTKScrollBarPolicy;
+ function GetVertScrollBarPolicy: TGTKScrollBarPolicy;
+ procedure SetHorizScrollBarPolicy(Value: TGTKScrollBarPolicy);
+ procedure SetVertScrollBarPolicy(Value: TGTKScrollBarPolicy);
+ function GetShadowType: TGTKShadowType;
+ procedure SetShadowType(Value: TGTKShadowType);
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ procedure AddWithViewPort(Control: TGTKControl);
+ published
+ property HorizScrollBarPolicy: TGTKScrollBarPolicy read GetHorizScrollBarPolicy write SetHorizScrollBarPolicy;
+ property VertScrollBarPolicy: TGTKScrollBarPolicy read GetVertScrollBarPolicy write SetVertScrollBarPolicy;
+ property ShadowType: TGTKShadowType read GetShadowType write SetShadowType;
+ end;
+
+(****************************************** TGTKBUTTONBOX ***********************************************************************)
+ TGTKButtonBoxLayout = (blDefault, blSpread, blEdge, blStart, blEnd);
+ TGTKButtonBox = class(TGTKBox)
+ private
+ function GetLayout: TGTKButtonBoxLayout;
+ procedure SetLayout(Value: TGTKButtonBoxLayout);
+ public
+ constructor Create(AOwner: TComponent); override;
+ published
+ property Layout: TGTKButtonBoxLayout read GetLayout write SetLayout;
+ end;
+
+(****************************************** TGTKHBUTTONBOX **********************************************************************)
+ TGTKHButtonBox = class(TGTKButtonBox)
+ public
+ constructor Create(AOwner: TComponent); override;
+ end;
+
+(****************************************** TGTKVBUTTONBOX **********************************************************************)
+ TGTKVButtonBox = class(TGTKButtonBox)
+ public
+ constructor Create(AOwner: TComponent); override;
+ end;
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+implementation
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKSeparator.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+end;
+
+destructor TGTKSeparator.Destroy;
+begin
+ inherited Destroy;
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKHSeparator.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FWidget := gtk_hseparator_new;
+ Show;
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKVSeparator.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FWidget := gtk_vseparator_new;
+ Show;
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKHandleBox.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FWidget := gtk_handle_box_new;
+ Show;
+end;
+
+destructor TGTKHandleBox.Destroy;
+begin
+ inherited Destroy;
+end;
+
+function TGTKHandleBox.GetShadowType: TGTKShadowType;
+begin
+ Result := TGTKShadowType(gtk_handle_box_get_shadow_type(PGtkHandleBox(FWidget)));
+end;
+
+procedure TGTKHandleBox.SetShadowType(Value: TGTKShadowType);
+begin
+ gtk_handle_box_set_shadow_type(PGtkHandleBox(FWidget), gtk2.TGtkShadowType(Value));
+end;
+
+function TGTKHandleBox.GetHandlePosition: TGTKPosition;
+begin
+ Result := TGTKPosition(gtk_handle_box_get_handle_position(PGtkHandleBox(FWidget)));
+end;
+
+procedure TGTKHandleBox.SetHandlePosition(Value: TGTKPosition);
+begin
+ gtk_handle_box_set_handle_position(PGtkHandleBox(FWidget), Integer(Value));
+end;
+
+function TGTKHandleBox.GetSnapEdge: TGTKPosition;
+begin
+ Result := TGTKPosition(gtk_handle_box_get_snap_edge(PGtkHandleBox(FWidget)));
+end;
+
+procedure TGTKHandleBox.SetSnapEdge(Value: TGTKPosition);
+begin
+ gtk_handle_box_set_snap_edge(PGtkHandleBox(FWidget), Integer(Value));
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKProgressBar.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FMax := 100;
+ FWidget := gtk_progress_bar_new;
+ Show;
+end;
+
+destructor TGTKProgressBar.Destroy;
+begin
+ inherited Destroy;
+end;
+
+procedure TGTKProgressBar.Pulse;
+begin
+ gtk_progress_bar_pulse(PGtkProgressBar(FWidget));
+end;
+
+function TGTKProgressBar.GetText: string;
+begin
+ Result := PgcharToString(gtk_progress_bar_get_text(PGtkProgressBar(FWidget)));
+end;
+
+procedure TGTKProgressBar.SetText(Value: string);
+begin
+ gtk_progress_bar_set_text(PGtkProgressbar(FWidget), StringToPgchar(Value));
+end;
+
+function TGTKProgressBar.GetFraction: Double;
+begin
+ Result := gtk_progress_bar_get_fraction(PGtkProgressbar(FWidget));
+end;
+
+procedure TGTKProgressBar.SetFraction(Value: Double);
+begin
+ gtk_progress_bar_set_fraction(PGtkProgressbar(FWidget), Value);
+end;
+
+function TGTKProgressBar.GetPulseStep: Double;
+begin
+ Result := gtk_progress_bar_get_pulse_step(PGtkProgressbar(FWidget));
+end;
+
+procedure TGTKProgressBar.SetPulseStep(Value: Double);
+begin
+ gtk_progress_bar_set_pulse_step(PGtkProgressbar(FWidget), Value);
+end;
+
+function TGTKProgressBar.GetOrientation: TGTKProgressBarOrientation;
+begin
+ Result := TGTKProgressBarOrientation(gtk_progress_bar_get_orientation(PGtkProgressBar(FWidget)));
+end;
+
+procedure TGTKProgressBar.SetOrientation(Value: TGTKProgressBarOrientation);
+begin
+ gtk_progress_bar_set_orientation(PGtkProgressbar(FWidget), gtk2.TGtkProgressBarOrientation(Value));
+end;
+
+function TGTKProgressBar.GetValue: Int64;
+begin
+ Result := Round(Fraction * Max);
+end;
+
+procedure TGTKProgressBar.SetValue(Value: Int64);
+begin
+ if FMax = 0 then Fraction := 0
+ else Fraction := Value / FMax;
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+
+procedure TGTKPaned_resize(widget : PGtkWidget; allocation : PGtkAllocation; user_data : gpointer); cdecl;
+begin
+ if Assigned(TGTKPaned(user_data).FOnResize) then TGTKPaned(user_data).FOnResize(TGTKPaned(user_data));
+end;
+
+constructor TGTKPaned.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FChild1 := nil;
+ FChild2 := nil;
+end;
+
+destructor TGTKPaned.Destroy;
+begin
+ inherited Destroy;
+end;
+
+procedure TGTKPaned.SetChild1(Value: TGTKControl);
+begin
+ gtk_paned_pack1(PGtkPaned(FWidget), Value.FWidget, True, False);
+ g_signal_connect(PGtkObject(Value.FWidget), 'size-allocate', G_CALLBACK(@TGTKPaned_resize), Self);
+end;
+
+procedure TGTKPaned.SetChild2(Value: TGTKControl);
+begin
+ gtk_paned_pack2(PGtkPaned(FWidget), Value.FWidget, True, False);
+end;
+
+function TGTKPaned.GetPosition: integer;
+begin
+ Result := gtk_paned_get_position(PGtkPaned(FWidget));
+end;
+
+procedure TGTKPaned.SetPosition(Value: integer);
+begin
+ gtk_paned_set_position(PGtkPaned(FWidget), Value);
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKHPaned.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FWidget := gtk_hpaned_new;
+ Show;
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKVPaned.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FWidget := gtk_vpaned_new;
+ Show;
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+
+procedure TGTKNotebook_switch_page(notebook: PGtkNotebook; page: PGtkNotebookPage; page_num: guint; user_data: gpointer); cdecl;
+begin
+ if Assigned(user_data) and Assigned(TGTKNotebook(user_data).FOnSwitchPage) then TGTKNotebook(user_data).FOnSwitchPage(user_data);
+end;
+
+constructor TGTKNotebook.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FWidget := gtk_notebook_new;
+ FOnSwitchPage := nil;
+ g_signal_connect_after(PGtkObject(FWidget), 'switch-page', G_CALLBACK(@TGTKNotebook_switch_page), Self);
+ Show;
+end;
+
+destructor TGTKNotebook.Destroy;
+begin
+ inherited Destroy;
+end;
+
+function TGTKNotebook.AppendPage(Child: TGTKControl; Caption: string): integer;
+begin
+ Result := gtk_notebook_append_page(PGtkNotebook(FWidget), Child.FWidget, nil);
+ gtk_notebook_set_tab_label_text(PGtkNotebook(FWidget), Child.FWidget, StringToPgchar(Caption));
+end;
+
+function TGTKNotebook.GetCaption(PageNo: integer): string;
+begin
+ Result := PgcharToString(gtk_notebook_get_tab_label_text(PGtkNotebook(FWidget), gtk_notebook_get_nth_page(PGtkNotebook(FWidget), PageNo)));
+end;
+
+procedure TGTKNotebook.SetCaption(PageNo: integer; Caption: string);
+begin
+ gtk_notebook_set_tab_label_text(PGtkNotebook(FWidget), gtk_notebook_get_nth_page(PGtkNotebook(FWidget), PageNo), StringToPgchar(Caption));
+end;
+
+procedure TGTKNotebook.RemovePage(PageNo: integer);
+begin
+ gtk_notebook_remove_page(PGtkNotebook(FWidget), PageNo);
+end;
+
+function TGTKNotebook.GetPageIndex: integer;
+begin
+ Result := gtk_notebook_get_current_page(PGtkNotebook(FWidget));
+end;
+
+procedure TGTKNotebook.SetPageIndex(Value: integer);
+begin
+ gtk_notebook_set_page(PGtkNotebook(FWidget), Value);
+end;
+
+procedure TGTKNotebook.NextPage;
+begin
+ gtk_notebook_next_page(PGtkNotebook(FWidget));
+end;
+
+procedure TGTKNotebook.PrevPage;
+begin
+ gtk_notebook_prev_page(PGtkNotebook(FWidget));
+end;
+
+function TGTKNotebook.GetTabPosition: TGTKPosition;
+begin
+ Result := TGTKPosition(gtk_notebook_get_tab_pos(PGtkNotebook(FWidget)));
+end;
+
+procedure TGTKNotebook.SetTabPosition(Value: TGTKPosition);
+begin
+ gtk_notebook_set_tab_pos(PGtkNotebook(FWidget), Integer(Value));
+end;
+
+function TGTKNotebook.GetShowTabs: boolean;
+begin
+ Result := gtk_notebook_get_show_tabs(PGtkNotebook(FWidget));
+end;
+
+procedure TGTKNotebook.SetShowTabs(Value: boolean);
+begin
+ gtk_notebook_set_show_tabs(PGtkNotebook(FWidget), Value);
+end;
+
+function TGTKNotebook.GetShowBorder: boolean;
+begin
+ Result := gtk_notebook_get_show_border(PGtkNotebook(FWidget));
+end;
+
+procedure TGTKNotebook.SetShowBorder(Value: boolean);
+begin
+ gtk_notebook_set_show_border(PGtkNotebook(FWidget), Value);
+end;
+
+function TGTKNotebook.GetScrollable: boolean;
+begin
+ Result := gtk_notebook_get_scrollable(PGtkNotebook(FWidget));
+end;
+
+procedure TGTKNotebook.SetScrollable(Value: boolean);
+begin
+ gtk_notebook_set_scrollable(PGtkNotebook(FWidget), Value);
+end;
+
+function TGTKNotebook.GetExpandTab(PageNo: integer): boolean;
+var expand, fill: Pgboolean;
+ packtype: PGtkPackType;
+begin
+ gtk_notebook_query_tab_label_packing(PGtkNotebook(FWidget), gtk_notebook_get_nth_page(PGtkNotebook(FWidget), PageNo), expand, fill, packtype);
+ Result := expand <> nil;
+end;
+
+procedure TGTKNotebook.SetExpandTab(PageNo: integer; Value: boolean);
+begin
+ gtk_notebook_set_tab_label_packing(PGtkNotebook(FWidget), gtk_notebook_get_nth_page(PGtkNotebook(FWidget), PageNo), Value, GetFillTab(PageNo), GTK_PACK_START);
+end;
+
+function TGTKNotebook.GetFillTab(PageNo: integer): boolean;
+var expand, fill: Pgboolean;
+ packtype: PGtkPackType;
+begin
+ gtk_notebook_query_tab_label_packing(PGtkNotebook(FWidget), gtk_notebook_get_nth_page(PGtkNotebook(FWidget), PageNo), expand, fill, packtype);
+ Result := fill <> nil;
+end;
+
+procedure TGTKNotebook.SetFillTab(PageNo: integer; Value: boolean);
+begin
+ gtk_notebook_set_tab_label_packing(PGtkNotebook(FWidget), gtk_notebook_get_nth_page(PGtkNotebook(FWidget), PageNo), GetExpandTab(PageNo), Value, GTK_PACK_START);
+end;
+
+function TGTKNotebook.GetTabLabel(PageNo: integer): TGTKLabel;
+begin
+ Result := TGTKLabel.CreateFromWidget(Self, gtk_notebook_get_tab_label(PGtkNotebook(FWidget), gtk_notebook_get_nth_page(PGtkNotebook(FWidget), PageNo)));
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure TGTKOptionMenu_changed(optionmenu: PGtkOptionMenu; user_data: pgpointer); cdecl;
+begin
+ if Assigned(TGTKOptionMenu(user_data).FOnChanged) then TGTKOptionMenu(user_data).FOnChanged(TGTKOptionMenu(user_data));
+end;
+
+constructor TGTKOptionMenu.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FOnChanged := nil;
+ FWidget := gtk_option_menu_new;
+ g_signal_connect(PGtkObject(FWidget), 'changed', G_CALLBACK(@TGTKOptionMenu_changed), Self);
+ Show;
+ FItems := TGTKMenuItem.Create(Self);
+ FItems.FParentMenu := Self;
+ FItems.Notify := ItemsChanged;
+end;
+
+destructor TGTKOptionMenu.Destroy;
+begin
+ FItems.Notify := nil;
+ FItems.Free;
+ inherited Destroy;
+end;
+
+procedure TGTKOptionMenu.ItemsChanged(Sender: TObject);
+begin
+ if Assigned(FItems.FMenu) and (gtk_option_menu_get_menu(PGtkOptionMenu(FWidget)) <> FItems.FMenu)
+ then gtk_option_menu_set_menu(PGtkOptionMenu(FWidget), FItems.FMenu);
+end;
+
+function TGTKOptionMenu.GetItemIndex: integer;
+begin
+ Result := gtk_option_menu_get_history(PGtkOptionMenu(FWidget));
+end;
+
+procedure TGTKOptionMenu.SetItemIndex(Value: integer);
+begin
+ gtk_option_menu_set_history(PGtkOptionMenu(FWidget), Value);
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKScrolledWindow.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FWidget := gtk_scrolled_window_new(nil, nil);
+ Show;
+end;
+
+destructor TGTKScrolledWindow.Destroy;
+begin
+ inherited Destroy;
+end;
+
+function TGTKScrolledWindow.GetHorizScrollBarPolicy: TGTKScrollBarPolicy;
+var hscrollbar, vscrollbar: tGtkPolicyType;
+begin
+ gtk_scrolled_window_get_policy(PGtkScrolledWindow(FWidget), @hscrollbar, @vscrollbar);
+ Result := TGTKScrollBarPolicy(hscrollbar);
+end;
+
+procedure TGTKScrolledWindow.SetHorizScrollBarPolicy(Value: TGTKScrollBarPolicy);
+begin
+ gtk_scrolled_window_set_policy(PGtkScrolledWindow(FWidget), TGtkPolicyType(Value), TGtkPolicyType(VertScrollBarPolicy));
+end;
+
+function TGTKScrolledWindow.GetVertScrollBarPolicy: TGTKScrollBarPolicy;
+var hscrollbar, vscrollbar: tGtkPolicyType;
+begin
+ gtk_scrolled_window_get_policy(PGtkScrolledWindow(FWidget), @hscrollbar, @vscrollbar);
+ Result := TGTKScrollBarPolicy(vscrollbar);
+end;
+
+procedure TGTKScrolledWindow.SetVertScrollBarPolicy(Value: TGTKScrollBarPolicy);
+begin
+ gtk_scrolled_window_set_policy(PGtkScrolledWindow(FWidget), TGtkPolicyType(HorizScrollBarPolicy), TGtkPolicyType(Value));
+end;
+
+function TGTKScrolledWindow.GetShadowType: TGTKShadowType;
+begin
+ Result := TGTKShadowType(gtk_scrolled_window_get_shadow_type(PGtkScrolledWindow(FWidget)));
+end;
+
+procedure TGTKScrolledWindow.SetShadowType(Value: TGTKShadowType);
+begin
+ gtk_scrolled_window_set_shadow_type(PGtkScrolledWindow(FWidget), gtk2.TGtkShadowType(Value));
+end;
+
+procedure TGTKScrolledWindow.AddWithViewPort(Control: TGTKControl);
+begin
+ gtk_scrolled_window_add_with_viewport(PGtkScrolledWindow(FWidget), Control.FWidget);
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKButtonBox.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+end;
+
+function TGTKButtonBox.GetLayout: TGTKButtonBoxLayout;
+begin
+ Result := TGTKButtonBoxLayout(gtk_button_box_get_layout(PGtkButtonBox(FWidget)));
+end;
+
+procedure TGTKButtonBox.SetLayout(Value: TGTKButtonBoxLayout);
+begin
+ gtk_button_box_set_layout(PGtkButtonBox(FWidget), Integer(Value));
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKHButtonBox.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FWidget := gtk_hbutton_box_new;
+ Show;
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKVButtonBox.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FWidget := gtk_vbutton_box_new;
+ Show;
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+
+
+
+end.
diff --git a/libgtk_kylix/GTKForms.pas b/libgtk_kylix/GTKForms.pas
new file mode 100644
index 0000000..ad755b7
--- /dev/null
+++ b/libgtk_kylix/GTKForms.pas
@@ -0,0 +1,874 @@
+(*
+ GTK-Kylix Library: GTKForms - Basic windows (TGTKForm, TGTKDialog), TGTKApplication, TGDKScreen
+ Version 0.6.26 (last updated 2007-08-19)
+ Copyright (C) 2007 Tomas Bzatek <tbzatek@users.sourceforge.net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library 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 Library General Public
+ License along with this library; if not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307 USA.
+
+*)
+
+unit GTKForms;
+{ $WEAKPACKAGEUNIT}
+
+interface
+
+uses gtk2, gdk2, glib2, Classes, SysUtils, GTKControls, GTKConsts;
+
+
+type // Some basic types
+ PCharArray = array[0..0] of PChar;
+
+ TCustomGTKForm = class;
+
+(****************************************** TGDKSCREEN **************************************************************************)
+ TGDKScreen = class(TComponent)
+ private
+ FForms: TList;
+ FActiveForm: TCustomGTKForm;
+ procedure AddForm(AForm: TCustomGTKForm);
+ function GetForm(Index: Integer): TCustomGTKForm;
+ function GetFormCount: Integer;
+ procedure RemoveForm(AForm: TCustomGTKForm);
+ function GetHeight: Integer;
+ function GetWidth: Integer;
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ property ActiveForm: TCustomGTKForm read FActiveForm;
+ property FormCount: Integer read GetFormCount;
+ property Forms[Index: Integer]: TCustomGTKForm read GetForm;
+ property Height: Integer read GetHeight;
+ property Width: Integer read GetWidth;
+ end;
+
+(****************************************** TGTKFORM ****************************************************************************)
+ TCloseAction = (caNone, caHide, caFree, caMinimize);
+ TCloseEvent = procedure(Sender: TObject; var Action: TCloseAction) of object;
+ TCloseQueryEvent = procedure(Sender: TObject; var CanClose: Boolean) of object;
+ TWindowPosition = (wpNone, wpCenter, wpMouse, wpCenterAlways, wpCenterOnParent);
+ TGDKWindowState = (wsNormal, wsState1, wsMinimized, wsState2, wsMaximized);
+ TGDKWindowTypeHint = (whNormal, whDialog, whToolbar, whSplashScreen, whUtility, whDock, whDesktop);
+
+ TCustomGTKForm = class(TGTKBin)
+ procedure FormCreate(Sender: TObject); dynamic;
+ private
+ FOnClose: TCloseEvent;
+ FOnCloseQuery: TCloseQueryEvent;
+ FOnResize: TNotifyEvent;
+ FOnShow: TNotifyEvent;
+ FCaption: string;
+ FOnDestroy: TNotifyEvent;
+ function GetWindowPosition: TWindowPosition;
+ function GetResizeable: boolean;
+ function GetWindowTypeHint: TGDKWindowTypeHint;
+ function GetWindowState: TGDKWindowState;
+ function GetLeft: integer;
+ function GetTop: integer;
+ function GetWidth: integer;
+ function GetHeight: integer;
+ procedure SetVisible(Value: Boolean);
+ procedure SetCaption(Value: string);
+ procedure SetWindowPosition(Value: TWindowPosition);
+ procedure SetResizeable(Value: Boolean);
+ procedure SetWindowTypeHint(Value: TGDKWindowTypeHint);
+ procedure SetLeft(Value: integer);
+ procedure SetTop(Value: integer);
+ procedure SetWidth(Value: integer);
+ procedure SetHeight(Value: integer);
+ procedure SetDefault(Value: TGTKControl);
+ protected
+ procedure DoClose(var Action: TCloseAction); dynamic;
+ property Visible write SetVisible default False;
+ property OnClose: TCloseEvent read FOnClose write FOnClose;
+ property OnCloseQuery: TCloseQueryEvent read FOnCloseQuery write FOnCloseQuery;
+ property OnResize: TNotifyEvent read FOnResize write FOnResize;
+ property OnShow: TNotifyEvent read FOnShow write FOnShow;
+ property Caption: string read FCaption write SetCaption;
+ property WindowPosition: TWindowPosition read GetWindowPosition write SetWindowPosition;
+ property Resizeable: boolean read GetResizeable write SetResizeable;
+ property OnDestroy: TNotifyEvent read FOnDestroy write FOnDestroy;
+ property WindowTypeHint: TGDKWindowTypeHint read GetWindowTypeHint write SetWindowTypeHint;
+ property WindowState: TGDKWindowState read GetWindowState;
+ property Left: integer read GetLeft write SetLeft;
+ property Top: integer read GetTop write SetTop;
+ property Width: integer read GetWidth write SetWidth;
+ property Height: integer read GetHeight write SetHeight;
+ property Default: TGTKControl write SetDefault;
+ public
+ FAccelGroup: PGtkAccelGroup;
+ Tooltips: TGTKTooltips;
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ procedure Release;
+ function Close: boolean;
+ procedure ShowModal; virtual;
+ function CloseQuery: Boolean; virtual;
+ procedure SetDefaultSize(DefaultWidth, DefaultHeight: integer);
+ procedure SetTransientFor(Parent: TCustomGTKForm);
+ procedure Maximize;
+ procedure Unmaximize;
+ procedure Minimize;
+ procedure Unminimize;
+ procedure Stick;
+ procedure Unstick;
+ procedure WindowMove(ALeft, ATop: integer);
+ procedure Resize(AWidth, AHeight: integer);
+ end;
+
+ TGTKForm = class(TCustomGTKForm)
+ public
+ constructor Create(AOwner: TComponent); override;
+ procedure Show; virtual;
+ procedure Hide;
+ end;
+
+(****************************************** TGTKDIALOG **************************************************************************)
+ TMessageButton = (mbYes, mbNo, mbOK, mbCancel, mbApply, mbClose, mbHelp, mbPrint, mbQuit, mbStop, mbBack, mbForward, mbNone);
+ TMessageButtons = set of TMessageButton;
+ TGTKDialogResponseEvent = procedure(Sender: TObject; const ResponseID: integer) of object;
+
+ TGTKDialog = class(TCustomGTKForm)
+ private
+ FButtons: TMessageButtons;
+ FOnResponse: TGTKDialogResponseEvent;
+ function GetShowSeparator: boolean;
+ procedure SetButtons(Value: TMessageButtons);
+ procedure SetShowSeparator(Value: boolean);
+ procedure SetModalResult(Value: TMessageButton);
+ procedure SetDefaultButton(Value: TMessageButton);
+ procedure SetParentForm(Value: TGTKForm);
+ public
+ ClientArea: TGTKVBox;
+ ActionArea: TGTKHBox;
+ constructor Create(AOwner: TComponent); override;
+ function Run: TMessageButton;
+ procedure AddButton(ButtonCaption: string; ButtonID: integer);
+ procedure SetResponseSensitive(ButtonID: integer; Sensitive: boolean);
+ published
+ property Buttons: TMessageButtons read FButtons write SetButtons default [];
+ property ShowSeparator: boolean read GetShowSeparator write SetShowSeparator;
+ property ModalResult: TMessageButton write SetModalResult;
+ property DefaultButton: TMessageButton write SetDefaultButton;
+ property Caption;
+ property OnResponse: TGTKDialogResponseEvent read FOnResponse write FOnResponse;
+ property ParentForm: TGTKForm write SetParentForm;
+ end;
+
+(****************************************** TGTKAPPLICATION *********************************************************************)
+ TMessageStyle = (mbError, mbInfo, mbQuestion, mbWarning);
+
+ TExceptionEvent = procedure (Sender: TObject; E: Exception) of object;
+
+ TGTKApplication = class(TComponent)
+ private
+ FTerminated: Boolean;
+ FOnException: TExceptionEvent;
+ FMainForm: TCustomGTKForm;
+ FMainFormSet, FGTK205Up, FGTK220Up, FGTK240Up, FGTK260Up, FGTK280Up: Boolean;
+ procedure Quit;
+ protected
+ procedure CreateHandle;
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ procedure ControlDestroyed(Control: TGTKControl);
+ procedure CreateForm(InstanceClass: TComponentClass; var Reference);
+ procedure HandleException(Sender: TObject);
+ procedure HandleMessage;
+ procedure HookSynchronizeWakeup;
+ procedure Initialize;
+ function MessageBox(const Text: string; Buttons: TMessageButtons = [mbOK]; Style: TMessageStyle = mbInfo;
+ Default: TMessageButton = mbNone; Escape: TMessageButton = mbNone): TMessageButton;
+ procedure ProcessMessages;
+ procedure Run;
+ procedure ShowException(E: Exception);
+ procedure Terminate;
+ procedure UnhookSynchronizeWakeup;
+ property MainForm: TCustomGTKForm read FMainForm;
+ property Terminated: Boolean read FTerminated;
+ property OnException: TExceptionEvent read FOnException write FOnException;
+ published
+ property GTKVersion_2_0_5_Up: boolean read FGTK205Up;
+ property GTKVersion_2_2_0_Up: boolean read FGTK220Up;
+ property GTKVersion_2_4_0_Up: boolean read FGTK240Up;
+ property GTKVersion_2_6_0_Up: boolean read FGTK260Up;
+ property GTKVersion_2_8_0_Up: boolean read FGTK280Up;
+ end;
+
+
+{ Global objects }
+
+var Application: TGTKApplication;
+ Screen: TGDKScreen;
+ Argc: Integer;
+ Argv: PPChar;
+
+function GetParentForm(Control: TGTKControl): TCustomGTKForm;
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+implementation
+
+uses GTKUtils;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGDKScreen.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FForms := TList.Create;
+ FActiveForm := nil;
+end;
+
+destructor TGDKScreen.Destroy;
+begin
+ FForms.Free;
+ inherited Destroy;
+end;
+
+procedure TGDKScreen.AddForm(AForm: TCustomGTKForm);
+begin
+ FForms.Add(AForm);
+end;
+
+function TGDKScreen.GetForm(Index: Integer): TCustomGTKForm;
+begin
+ Result := FForms[Index];
+end;
+
+function TGDKScreen.GetFormCount: Integer;
+begin
+ Result := FForms.Count;
+end;
+
+procedure TGDKScreen.RemoveForm(AForm: TCustomGTKForm);
+begin
+ FForms.Remove(AForm);
+end;
+
+function TGDKScreen.GetHeight: Integer;
+begin
+ Result := gdk_screen_height;
+end;
+
+function TGDKScreen.GetWidth: Integer;
+begin
+ Result := gdk_screen_width;
+end;
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+function TCustomGTKForm_delete_event(widget: PGtkWidget; event: PGdkEvent; user_data: gpointer): gboolean; cdecl;
+begin
+ Result := not TCustomGTKForm(user_data).Close;
+end;
+
+procedure TCustomGTKForm_show(anobject : PGtkObject; user_data: pgpointer); cdecl;
+begin
+ if Assigned(TCustomGTKForm(user_data).FOnShow) then TCustomGTKForm(user_data).FOnShow(TCustomGTKForm(user_data));
+end;
+
+procedure TCustomGTKForm_size_allocate(widget : PGtkWidget; allocation : PGtkAllocation; user_data : gpointer); cdecl;
+begin
+ if Assigned(TCustomGTKForm(user_data).FOnResize) then TCustomGTKForm(user_data).FOnResize(TCustomGTKForm(user_data));
+end;
+
+constructor TCustomGTKForm.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ Tooltips := TGTKTooltips.Create(Self);
+ FOnClose := nil;
+ FOnCloseQuery := nil;
+ FOnDestroy := nil;
+ FCaption := '';
+ FAccelGroup := gtk_accel_group_new;
+ Screen.AddForm(Self);
+end;
+
+destructor TCustomGTKForm.Destroy;
+begin
+ try
+ Screen.RemoveForm(Self);
+ if Assigned(FOnDestroy) then FOnDestroy(Self);
+ except
+ end;
+ Tooltips.Free;
+ if not Application.Terminated then gtk_widget_destroy(FWidget);
+ inherited Destroy;
+end;
+
+procedure TCustomGTKForm.SetVisible(Value: Boolean);
+begin
+ inherited Visible := Value;
+end;
+
+function TCustomGTKForm.Close: boolean;
+var CloseAction: TCloseAction;
+begin
+ CloseAction := caFree;
+ if CloseQuery then begin
+ DoClose(CloseAction);
+ if CloseAction <> caNone then
+ if Application.MainForm = Self
+ then Application.Terminate
+ else if CloseAction = caHide then
+ Hide
+{ else if CloseAction = caMinimize then
+ WindowState := wsMinimized }
+ else
+ Release;
+ end else CloseAction := caNone;
+ Result := CloseAction = caFree;
+end;
+
+function TCustomGTKForm.CloseQuery: Boolean;
+begin
+ Result := True;
+ if Assigned(FOnCloseQuery) then FOnCloseQuery(Self, Result);
+end;
+
+procedure TCustomGTKForm.DoClose(var Action: TCloseAction);
+begin
+ if Assigned(FOnClose) then FOnClose(Self, Action);
+end;
+
+procedure TCustomGTKForm.Release;
+begin
+// SetParent(nil);
+// if Assigned(FWidget) and GTK_IS_WIDGET(FWidget) then gtk_widget_destroy(PGtkWidget(FWidget));
+end;
+
+procedure TCustomGTKForm.FormCreate(Sender: TObject);
+begin
+ // Dummy procedure, override it in ordinary instance if needed
+end;
+
+procedure TCustomGTKForm.SetCaption(Value: string);
+begin
+ FCaption := Value;
+ gtk_window_set_title(PGtkWindow(FWidget), PChar(Value));
+end;
+
+function TCustomGTKForm.GetWindowPosition: TWindowPosition;
+begin
+ Result := TWindowPosition(position(PGtkWindow(FWidget)^));
+end;
+
+procedure TCustomGTKForm.SetWindowPosition(Value: TWindowPosition);
+begin
+ gtk_window_set_position(PGtkWindow(FWidget), TGtkWindowPosition(Value));
+end;
+
+function TCustomGTKForm.GetResizeable: boolean;
+begin
+ Result := gtk_window_get_resizable(PGtkWindow(FWidget));
+end;
+
+procedure TCustomGTKForm.SetResizeable(Value: Boolean);
+begin
+ gtk_window_set_resizable(PGtkWindow(FWidget), Value);
+end;
+
+procedure TCustomGTKForm.SetDefaultSize(DefaultWidth, DefaultHeight: integer);
+begin
+ gtk_window_set_default_size(PGtkWindow(FWidget), DefaultWidth, DefaultHeight);
+end;
+
+procedure TCustomGTKForm.SetTransientFor(Parent: TCustomGTKForm);
+begin
+ if Assigned(Parent) and Assigned(Parent.FWidget) then
+ gtk_window_set_transient_for(PGtkWindow(FWidget), PGtkWindow(Parent.FWidget));
+end;
+
+procedure TCustomGTKForm.ShowModal;
+begin
+ gtk_window_set_modal(PGtkWindow(FWidget), True);
+ if Assigned(Parent) and (Parent is TCustomGTKForm) then gtk_window_set_transient_for(PGtkWindow(FWidget), PGtkWindow(Parent.FWidget));
+ SetVisible(True);
+end;
+
+function TCustomGTKForm.GetWindowTypeHint: TGDKWindowTypeHint;
+begin
+ Result := TGDKWindowTypeHint(gtk_window_get_type_hint(PGtkWindow(FWidget)));
+end;
+
+procedure TCustomGTKForm.SetWindowTypeHint(Value: TGDKWindowTypeHint);
+begin
+ gtk_window_set_type_hint(PGtkWindow(FWidget), gdk2.TGdkWindowTypeHint(Value));
+end;
+
+function TCustomGTKForm.GetWindowState: TGDKWindowState;
+begin
+ Result := TGDKWindowState(gdk_window_get_state(PGdkWindow(FWidget^.window)));
+end;
+
+procedure TCustomGTKForm.Maximize;
+begin
+ gtk_window_maximize(PGtkWindow(FWidget));
+end;
+
+procedure TCustomGTKForm.Unmaximize;
+begin
+ gtk_window_unmaximize(PGtkWindow(FWidget));
+end;
+
+procedure TCustomGTKForm.Minimize;
+begin
+ gtk_window_iconify(PGtkWindow(FWidget));
+end;
+
+procedure TCustomGTKForm.Unminimize;
+begin
+ gtk_window_deiconify(PGtkWindow(FWidget));
+end;
+
+procedure TCustomGTKForm.Stick;
+begin
+ gtk_window_stick(PGtkWindow(FWidget));
+end;
+
+procedure TCustomGTKForm.Unstick;
+begin
+ gtk_window_unstick(PGtkWindow(FWidget));
+end;
+
+procedure TCustomGTKForm.WindowMove(ALeft, ATop: integer);
+begin
+ gtk_window_move(PGtkWindow(FWidget), ALeft, ATop);
+end;
+
+function TCustomGTKForm.GetLeft: integer;
+var PosLeft, PosTop: integer;
+begin
+ gtk_window_get_position(PGtkWindow(FWidget), @PosLeft, @PosTop);
+ Result := PosLeft;
+end;
+
+function TCustomGTKForm.GetTop: integer;
+var PosLeft, PosTop: integer;
+begin
+ gtk_window_get_position(PGtkWindow(FWidget), @PosLeft, @PosTop);
+ Result := PosTop;
+end;
+
+function TCustomGTKForm.GetWidth: integer;
+var AWidth, AHeight: integer;
+begin
+ gtk_window_get_size(PGtkWindow(FWidget), @AWidth, @AHeight);
+ Result := AWidth;
+end;
+
+function TCustomGTKForm.GetHeight: integer;
+var AWidth, AHeight: integer;
+begin
+ gtk_window_get_size(PGtkWindow(FWidget), @AWidth, @AHeight);
+ Result := AHeight;
+end;
+
+procedure TCustomGTKForm.SetLeft(Value: integer);
+begin
+ gtk_window_move(PGtkWindow(FWidget), Value, GetTop);
+end;
+
+procedure TCustomGTKForm.SetTop(Value: integer);
+begin
+ gtk_window_move(PGtkWindow(FWidget), GetLeft, Value);
+end;
+
+procedure TCustomGTKForm.SetWidth(Value: integer);
+begin
+ gtk_window_resize(PGtkWindow(FWidget), Value, GetHeight);
+end;
+
+procedure TCustomGTKForm.SetHeight(Value: integer);
+begin
+ gtk_window_resize(PGtkWindow(FWidget), GetWidth, Value);
+end;
+
+procedure TCustomGTKForm.Resize(AWidth, AHeight: integer);
+begin
+ gtk_window_resize(PGtkWindow(FWidget), AWidth, AHeight);
+end;
+
+procedure TCustomGTKForm.SetDefault(Value: TGTKControl);
+begin
+ gtk_window_set_default(PGtkWindow(FWidget), Value.FWidget);
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKApplication.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FMainForm := nil;
+ FMainFormSet := False;
+ if not Assigned(Classes.ApplicationHandleException) then
+ Classes.ApplicationHandleException := HandleException;
+ if not Assigned(Classes.ApplicationShowException) then
+ Classes.ApplicationShowException := ShowException;
+ CreateHandle;
+ HookSynchronizeWakeup;
+end;
+
+procedure my_g_thread_init(vtable:Pointer);cdecl;external 'libgthread-2.0.so' name 'g_thread_init';
+
+procedure TGTKApplication.CreateHandle;
+var
+ I: Integer;
+ Temp: string;
+ Ver : Pchar;
+begin
+ Argc := ParamCount + 1;
+ Argv := AllocMem((Argc + 1) * SizeOf(PChar));
+ for I := 0 to Argc - 1 do
+ begin
+ Temp := ParamStr(I);
+ {$R-}
+ PCharArray(Argv^)[I] := AllocMem(Length(Temp)+1);
+ StrCopy(PCharArray(Argv^)[I], PChar(Temp));
+ {$R+}
+ end;
+ {$R-}
+ PCharArray(Argv^)[Argc] := nil;
+ {$R+}
+
+ // Check for correct version of GTK+ library
+ Ver := gtk_check_version(2, 8, 0);
+ FGTK280Up := Ver = nil;
+ if not FGTK280Up then Ver := gtk_check_version(2, 6, 0);
+ FGTK260Up := Ver = nil;
+ if not FGTK260Up then Ver := gtk_check_version(2, 4, 0);
+ FGTK240Up := Ver = nil;
+ if not FGTK240Up then Ver := gtk_check_version(2, 2, 0);
+ FGTK220Up := Ver = nil;
+ if not FGTK220Up then Ver := gtk_check_version(2, 0, 5);
+ FGTK205Up := Ver = nil;
+ if not FGTK220Up then WriteLn('Warning: Your version of GTK+ is old and some workarounds has been activated. It is recommended to update GTK libraries at least to 2.2.0');
+ if Ver <> nil then Ver := gtk_check_version(2, 0, 0);
+ if Ver <> nil then WriteLn('Warning: There might be some problems with GTK+ library or version conflict.');
+
+ // Init threads
+ my_g_thread_init(nil);
+ gdk_threads_init;
+
+ // Initialize the widget set
+ gtk_init(@argc, @argv);
+{ if not gtk_init_check(@argc, @argv) then begin
+ WriteLn('Unable to initialize GTK+ interface. Make sure you have correctly installed all of GTK libraries and have set a valid X server in the DISPLAY variable.');
+ Halt(1);
+ end; }
+end;
+
+destructor TGTKApplication.Destroy;
+type
+ TExceptionEvent = procedure (E: Exception) of object;
+var
+ P: TNotifyEvent;
+ E: TExceptionEvent;
+begin
+ UnhookSynchronizeWakeup;
+ P := HandleException;
+ if @P = @Classes.ApplicationHandleException then
+ Classes.ApplicationHandleException := nil;
+ E := ShowException;
+ if @E = @Classes.ApplicationShowException then
+ Classes.ApplicationShowException := nil;
+ inherited Destroy;
+end;
+
+procedure TGTKApplication.HookSynchronizeWakeup;
+begin
+ if not Assigned(Classes.WakeMainThread) then
+ Classes.WakeMainThread := WakeMainThread;
+end;
+
+procedure TGTKApplication.UnhookSynchronizeWakeup;
+var
+ P: TNotifyEvent;
+begin
+ P := WakeMainThread;
+ if @P = @Classes.WakeMainThread then
+ Classes.WakeMainThread := nil;
+end;
+
+procedure TGTKApplication.HandleException(Sender: TObject);
+begin
+ if ExceptObject is Exception then
+ begin
+ if not (ExceptObject is EAbort) then
+ if Assigned(FOnException) then
+ FOnException(Sender, Exception(ExceptObject))
+ else
+ ShowException(Exception(ExceptObject));
+ end else
+ SysUtils.ShowException(ExceptObject, ExceptAddr);
+end;
+
+procedure TGTKApplication.CreateForm(InstanceClass: TComponentClass; var Reference);
+var
+ Instance: TComponent;
+begin
+ Instance := TComponent(InstanceClass.NewInstance);
+ TComponent(Reference) := Instance;
+ try
+ Instance.Create(Self);
+ except
+ TComponent(Reference) := nil;
+ raise;
+ end;
+ if not FMainFormSet and (Instance is TCustomGTKForm) then
+ begin
+ // FMainForm will be set to the first form created by TForm.Create but
+ // it will be reset by CreateForm if one was created early, such as through
+ // a splash screen. This allows applications that don't use CreateForm to
+ // still have a main form but preserve the semantics the first CreateForm
+ // being the main form.
+{ TCustomGTKForm(Instance).HandleNeeded; }
+ FMainForm := TCustomGTKForm(Instance);
+{ if TForm(Instance).ActiveControl = nil then
+ TForm(Instance).SetFocusedControl(TForm(Instance));}
+ FMainFormSet := True;
+ end;
+end;
+
+procedure TGTKApplication.ControlDestroyed(Control: TGTKControl);
+begin
+ if FMainForm = Control then FMainForm := nil;
+ if Screen.FActiveForm = Control then Screen.FActiveForm := nil;
+end;
+
+procedure TGTKApplication.Initialize;
+begin
+end;
+
+// function GetCurrentThreadID: Integer; external 'libpthread.so.0' name 'pthread_self';
+
+procedure TGTKApplication.ProcessMessages;
+begin
+ while WordBool(gtk_events_pending) do gtk_main_iteration;
+ // QApplication_processEvents(Handle);
+{ if GetCurrentThreadID = Integer(MainThreadID) then
+ CheckSynchronize; }
+end;
+
+procedure TGTKApplication.HandleMessage;
+begin
+// QApplication_processOneEvent(Handle);
+{ if GetCurrentThreadID = Integer(MainThreadID) then
+ CheckSynchronize; }
+end;
+
+procedure TGTKApplication.Run;
+begin
+ repeat
+ try
+// gdk_threads_enter;
+ gtk_main;
+// gdk_threads_leave;
+ except
+ on E : Exception do
+ if E is EControlC then begin
+ WriteLn('*** Exception: ', E.Message);
+ Halt(1);
+ Exit;
+ end else HandleException(E);
+ end;
+ until Terminated;
+end;
+
+function TGTKApplication_MessageBox_key_press_event(widget: PGtkWidget; event: PGdkEventKey; user_data : gpointer): gboolean; cdecl;
+begin
+ Result := False;
+ if event^.keyval = GDK_ESCAPE then begin
+ gtk_dialog_response(PGtkDialog(widget), integer(user_data));
+// Beep;
+ Result := True;
+ end;
+end;
+
+function TGTKApplication.MessageBox(const Text: string; Buttons: TMessageButtons; Style: TMessageStyle;
+ Default, Escape: TMessageButton): TMessageButton;
+const TMessageStyleID : array[0..3] of TGtkMessageType = (GTK_MESSAGE_ERROR, GTK_MESSAGE_INFO, GTK_MESSAGE_QUESTION, GTK_MESSAGE_WARNING);
+var Dialog: PGtkWidget;
+ DialogParent: PGtkWindow;
+ i: integer;
+begin
+ if Application.Terminated then
+ begin
+ Result := Escape;
+ Exit;
+ end;
+ if Screen.FormCount > 0
+ then DialogParent := PGtkWindow(Screen.Forms[0].FWidget)
+ else DialogParent := nil;
+ Dialog := gtk_message_dialog_new(DialogParent, GTK_DIALOG_MODAL or GTK_DIALOG_DESTROY_WITH_PARENT, TMessageStyleID[Integer(Style)],
+ GTK_BUTTONS_NONE, StringToPgchar(Text));
+ for i := 1 to NumMessageButtons do
+ if TMessageButton(i - 1) in Buttons
+ then gtk_dialog_add_button(PGtkDialog(Dialog), MessageButtonID[i], i);
+ if Escape <> mbNone then g_signal_connect(PGtkObject(Dialog), 'key-press-event', G_CALLBACK(@TGTKApplication_MessageBox_key_press_event),
+ Pointer(Ord(Escape) + 1{MessageButtonID[Ord(Escape)]}));
+ if Default <> mbNone then gtk_dialog_set_default_response(PGtkDialog(Dialog), Ord(Default));
+ Result := TMessageButton(gtk_dialog_run(PGtkDialog(Dialog)) - 1);
+ gtk_widget_destroy(Dialog);
+end;
+
+procedure TGTKApplication.ShowException(E: Exception);
+var Msg: string;
+begin
+ Msg := E.Message;
+ if (Msg <> '') and (AnsiLastChar(Msg) = '.') then Delete(Msg, Length(Msg), 1);
+ MessageBox(Format('An unhandled exception has occured: '#10' %s'#10#10'It is strongly recommended to save your data and quit the application.', [Msg]), [mbOk], mbError);
+end;
+
+procedure TGTKApplication.Terminate;
+begin
+ if (not Application.Terminated) and CallTerminateProcs then begin
+ FTerminated := True;
+ Quit;
+ end;
+end;
+
+procedure TGTKApplication.Quit;
+begin
+ gtk_main_quit();
+{ // The user lost interest
+ gtk_exit(0); }
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKForm.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FWidget := gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_add_accel_group(PGtkWindow(FWidget), FAccelGroup);
+ g_signal_connect(PGtkObject(FWidget), 'delete-event', G_CALLBACK(@TCustomGTKForm_delete_event), Self);
+ g_signal_connect(PGtkObject(FWidget), 'size-allocate', G_CALLBACK(@TCustomGTKForm_size_allocate), Self);
+ g_signal_connect(PGtkObject(FWidget), 'show', G_CALLBACK(@TCustomGTKForm_show), Self);
+ Visible := False;
+ SetResizeable(True);
+ FormCreate(Self);
+ if Visible then Show;
+end;
+
+procedure TGTKForm.Hide;
+begin
+ SetVisible(False);
+end;
+
+procedure TGTKForm.Show;
+begin
+ SetVisible(True);
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure TGTKDialog_response_event(dialog: PGtkDialog; arg1: gint; user_data: gpointer); cdecl;
+begin
+ if Assigned(TGTKDialog(user_data).FOnResponse) then TGTKDialog(user_data).FOnResponse(TGTKDialog(user_data), arg1);
+end;
+
+constructor TGTKDialog.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FWidget := gtk_dialog_new;
+ if Assigned(AOwner) and (AOwner is TCustomGTKForm) then SetTransientFor(AOwner as TCustomGTKForm);
+ FOnResponse := nil;
+ gtk_window_add_accel_group(PGtkWindow(FWidget), FAccelGroup);
+ g_signal_connect(PGtkObject(FWidget), 'delete-event', G_CALLBACK(@TCustomGTKForm_delete_event), Self);
+ g_signal_connect(PGtkObject(FWidget), 'show', G_CALLBACK(@TCustomGTKForm_show), Self);
+ g_signal_connect(PGtkObject(FWidget), 'response', G_CALLBACK(@TGTKDialog_response_event), Self);
+ ClientArea := TGTKVBox.CreateLinked(Self, PGtkDialog(FWidget)^.vbox);
+ ActionArea := TGTKHBox.CreateLinked(Self, PGtkDialog(FWidget)^.action_area);
+ FButtons := [];
+ Visible := False;
+ SetResizeable(True);
+ FormCreate(Self);
+ if Visible then Show;
+end;
+
+function TGTKDialog.Run: TMessageButton;
+begin
+ gtk_widget_show{_all}(FWidget);
+ Result := TMessageButton(gtk_dialog_run(PGtkDialog(FWidget)));
+end;
+
+procedure TGTKDialog.SetButtons(Value: TMessageButtons);
+var i: integer;
+begin
+ for i := 1 to NumMessageButtons do
+ if TMessageButton(i - 1) in Value
+ then gtk_dialog_add_button(PGtkDialog(FWidget), MessageButtonID[i], i - 1);
+end;
+
+function TGTKDialog.GetShowSeparator: boolean;
+begin
+ Result := gtk_dialog_get_has_separator(PGtkDialog(FWidget));
+end;
+
+procedure TGTKDialog.SetShowSeparator(Value: boolean);
+begin
+ gtk_dialog_set_has_separator(PGtkDialog(FWidget), Value);
+end;
+
+procedure TGTKDialog.SetModalResult(Value: TMessageButton);
+begin
+ gtk_dialog_response(PGtkDialog(FWidget), Integer(Value));
+end;
+
+procedure TGTKDialog.SetDefaultButton(Value: TMessageButton);
+begin
+ gtk_dialog_set_default_response(PGtkDialog(FWidget), Integer(Value));
+end;
+
+procedure TGTKDialog.AddButton(ButtonCaption: string; ButtonID: integer);
+begin
+ gtk_dialog_add_button(PGtkDialog(FWidget), StringToPgchar(ButtonCaption), ButtonID);
+end;
+
+procedure TGTKDialog.SetResponseSensitive(ButtonID: integer; Sensitive: boolean);
+begin
+ gtk_dialog_set_response_sensitive(PGtkDialog(FWidget), ButtonID, Sensitive);
+end;
+
+procedure TGTKDialog.SetParentForm(Value: TGTKForm);
+begin
+ if Value <> nil then gtk_window_set_transient_for(PGtkWindow(FWidget), PGtkWindow(Value.FWidget));
+end;
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+function GetParentForm(Control: TGTKControl): TCustomGTKForm;
+begin
+ while Control.Parent <> nil do Control := Control.Parent;
+ if Control is TCustomGTKForm then
+ Result := TCustomGTKForm(Control) else
+ Result := nil;
+end;
+
+initialization
+ Screen := TGDKScreen.Create(nil);
+ Application := TGTKApplication.Create(Screen);
+finalization
+ Application.Free;
+ Screen.Free;
+end.
diff --git a/libgtk_kylix/GTKMenus.pas b/libgtk_kylix/GTKMenus.pas
new file mode 100644
index 0000000..2b6e190
--- /dev/null
+++ b/libgtk_kylix/GTKMenus.pas
@@ -0,0 +1,530 @@
+(*
+ GTK-Kylix Library: GTKMenus - Menu handling and related routines
+ Version 0.6.13 (last updated 2003-07-10)
+ Copyright (C) 2003 Tomas Bzatek <tbzatek@users.sourceforge.net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library 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 Library General Public
+ License along with this library; if not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307 USA.
+
+*)
+
+unit GTKMenus;
+{ $WEAKPACKAGEUNIT}
+
+interface
+
+uses gtk2, gdk2, glib2, Classes, GTKControls, GTKConsts, GTKUtils, GTKPixbuf;
+ // Quick jump: QForms QControls QMenus
+
+
+type
+(****************************************** TGDKSHORTCUTS ***********************************************************************)
+ TGDKShortCut = record
+ Key: word;
+ Locked: boolean;
+ ModAlt: boolean;
+ ModShift: boolean;
+ ModCtrl: boolean;
+ end;
+ TGDKShortCuts = class(TComponent)
+ private
+ FList: TList;
+ FOwner: TGTKControl;
+ function GetCount: Integer;
+ function GetItem(Index: Integer): TGDKShortCut;
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ procedure Add(Item: TGDKShortCut);
+ procedure AddName(Item: string);
+ procedure Clear;
+ procedure Delete(Index: Integer);
+ procedure Insert(Index: Integer; Item: TGDKShortCut);
+ function IndexOf(Item: TGDKShortCut): Integer;
+ property Count: Integer read GetCount;
+ property Items[Index: Integer]: TGDKShortCut read GetItem; default;
+ end;
+
+(****************************************** TGTKMENUITEM ************************************************************************)
+ TGTKMenuItemType = (itLabel, itSeparator, itTearOff, itCheck, itImageText, itRadio);
+ TGTKMenuItemGroup = PGSList;
+ TGTKMenuItem = class(TGTKBin)
+ private
+ FItems: TList;
+ FTearOffTitle: string;
+ FOnClick: TNotifyEvent;
+ FUKey: guint;
+ FItemType: TGTKMenuItemType;
+ FNotify: TNotifyEvent;
+ FImageWidget: PGtkWidget;
+ FData: Pointer;
+ FOnPopup: TNotifyEvent;
+ function GetCount: Integer;
+ function GetItem(Index: Integer): TGTKMenuItem;
+ function GetCaption: string;
+ function GetRightJustified: boolean;
+ function GetTornOff: boolean;
+ function GetChecked: boolean;
+ function GetGroup: TGTKMenuItemGroup;
+ procedure SetCaption(Value: string);
+ procedure SetTearOffTitle(Value: string);
+ procedure SetRightJustified(Value: boolean);
+ procedure SetItemType(Value: TGTKMenuItemType);
+ procedure SetTornOff(Value: boolean);
+ procedure SetChecked(Value: boolean);
+ procedure SetStockIcon(Value: string);
+ procedure SetIcon(Value: TGDKPixbuf);
+ procedure SetGroup(Value: TGTKMenuItemGroup);
+ protected
+ public
+ FMenu: PGtkWidget;
+ FParentMenu: TGTKControl;
+ ShortCuts: TGDKShortCuts;
+ constructor Create(AOwner: TComponent); override;
+ constructor CreateTyped(AOwner: TComponent; const ItemType: TGTKMenuItemType; AGroup: TGTKMenuItemGroup = nil);
+ destructor Destroy; override;
+ procedure Recreate(AGroup: TGTKMenuItemGroup = nil);
+ procedure Add(Item: TGTKMenuItem);
+ procedure Clear;
+ procedure Delete(Index: Integer);
+ procedure Insert(Index: Integer; Item: TGTKMenuItem);
+ procedure TearOff;
+ procedure UnTearOff;
+ procedure PopUp;
+ procedure PopDown;
+ procedure SetCaptionPlain(Value: string);
+ property Count: Integer read GetCount;
+ property Items[Index: Integer]: TGTKMenuItem read GetItem; default;
+ property Caption: string read GetCaption write SetCaption;
+ property TearOffTitle: string read FTearOffTitle write SetTearOffTitle;
+ property RightJustified: boolean read GetRightJustified write SetRightJustified default False;
+ property OnClick: TNotifyEvent read FOnClick write FOnClick;
+ property ItemType: TGTKMenuItemType read FItemType write SetItemType default itLabel;
+ property TornOff: boolean read GetTornOff write SetTornOff;
+ property Checked: boolean read GetChecked write SetChecked;
+ property Notify: TNotifyEvent read FNotify write FNotify;
+ property StockIcon: string write SetStockIcon;
+ property Icon: TGDKPixbuf write SetIcon;
+ property Data: Pointer read FData write FData;
+ property OnPopup: TNotifyEvent read FOnPopup write FOnPopup;
+ property Group: TGTKMenuItemGroup read GetGroup write SetGroup;
+ end;
+
+
+(****************************************** TGTKMENUBAR *************************************************************************)
+ TGTKMenuBar = class(TGTKContainer)
+ private
+ FItems: TGTKMenuItem;
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ published
+ property Items: TGTKMenuItem read FItems;
+ end;
+
+
+function MakeGDKShortCut(Key: word; Locked, ModAlt, ModShift, ModCtrl : boolean): TGDKShortCut;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+implementation
+
+uses GTKForms, GTKExtCtrls;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKMenuBar.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FWidget := gtk_menu_bar_new;
+ Show;
+ FItems := TGTKMenuItem.Create(Self);
+ FItems.FParentMenu := Self;
+end;
+
+destructor TGTKMenuBar.Destroy;
+begin
+ if Assigned(FItems) then FItems.Free;
+ inherited Destroy;
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure TGTKMenuItem_activate(menuitem : PGtkMenuItem; user_data: pgpointer); cdecl;
+begin
+ if Assigned(TGTKMenuItem(user_data).FOnClick) then TGTKMenuItem(user_data).FOnClick(TGTKMenuItem(user_data));
+end;
+
+constructor TGTKMenuItem.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FItemType := itLabel;
+ FImageWidget := nil;
+ FItems := nil;
+ FMenu := nil;
+ FOnClick := nil;
+ FWidget := nil;
+ FParentMenu := nil;
+ FNotify := nil;
+ FData := nil;
+ FOnPopup := nil;
+ ShortCuts := TGDKShortCuts.Create(Self);
+ FTearOffTitle := '';
+ FUKey := 0;
+ Recreate;
+end;
+
+constructor TGTKMenuItem.CreateTyped(AOwner: TComponent; const ItemType: TGTKMenuItemType; AGroup: TGTKMenuItemGroup = nil);
+begin
+ inherited Create(AOwner);
+ FItemType := ItemType;
+ FImageWidget := nil;
+ FItems := nil;
+ FMenu := nil;
+ FOnClick := nil;
+ FWidget := nil;
+ FParentMenu := nil;
+ FNotify := nil;
+ FData := nil;
+ ShortCuts := TGDKShortCuts.Create(Self);
+ FTearOffTitle := '';
+ FUKey := 0;
+ Recreate(AGroup);
+end;
+
+destructor TGTKMenuItem.Destroy;
+begin
+ if not (csDestroying in ComponentState) then begin
+ ShortCuts.Free;
+ if FItems <> nil then begin
+ Clear;
+ FItems.Free;
+ FItems := nil;
+ end;
+ end;
+ inherited Destroy;
+end;
+
+procedure TGTKMenuItem.Recreate(AGroup: TGTKMenuItemGroup = nil);
+begin
+ if Assigned(FWidget) then begin
+ gtk_widget_unparent(FWidget);
+ gtk_widget_hide(FWidget);
+ gtk_widget_destroy(FWidget);
+ end;
+ case FItemType of
+ itLabel: FWidget := gtk_menu_item_new_with_mnemonic(Pgchar(SCDefaultMenuItemCaption));
+ itSeparator: FWidget := gtk_menu_item_new;
+ itTearOff: FWidget := gtk_tearoff_menu_item_new;
+ itCheck: FWidget := gtk_check_menu_item_new_with_mnemonic(Pgchar(SCDefaultMenuItemCaption));
+ itImageText: begin
+ FWidget := gtk_image_menu_item_new_with_mnemonic(Pgchar(SCDefaultMenuItemCaption));
+ FImageWidget := gtk_image_new;
+ gtk_widget_show(FImageWidget);
+ gtk_image_menu_item_set_image(PGtkImageMenuItem(FWidget), FImageWidget);
+ end;
+ itRadio: FWidget := gtk_radio_menu_item_new_with_mnemonic(AGroup, Pgchar(SCDefaultMenuItemCaption));
+ end;
+ g_signal_connect(PGtkObject(FWidget), 'activate', G_CALLBACK(@TGTKMenuItem_activate), Self);
+ Show;
+end;
+
+procedure TGTKMenuItem.Add(Item: TGTKMenuItem);
+begin
+ Insert(GetCount, Item);
+end;
+
+procedure TGTKMenuItem.Clear;
+var i: Integer;
+begin
+ if Count > 0 then
+ for i := Count - 1 downto 0 do Delete(i);
+end;
+
+function TGTKMenuItem.GetCount: Integer;
+begin
+ if FItems = nil then Result := 0
+ else Result := FItems.Count;
+end;
+
+function TGTKMenuItem.GetItem(Index: Integer): TGTKMenuItem;
+begin
+ Result := nil;
+ if FItems = nil then Exit;
+ Result := FItems[Index];
+end;
+
+procedure TGTKMenuItem.Delete(Index: Integer);
+begin
+ if (Index < 0) or (FItems = nil) or (Index >= GetCount) then Exit;
+ if FParentMenu is TGTKMenuBar
+ then gtk_container_remove(PGtkContainer(Parent.FWidget), TGTKMenuItem(FItems[Index]).FWidget)
+ else gtk_container_remove(PGtkContainer(FMenu), TGTKMenuItem(FItems[Index]).FWidget);
+// Items[Index].Free;
+ FItems.Delete(Index);
+ if FItems.Count = 0 then begin
+ if (FParentMenu is TGTKMenuItem) or (FParentMenu is TGTKMenuBar)
+ then begin
+ if (FParentMenu is TGTKMenuItem) or (FParentMenu is TGTKMenuBar)
+ then gtk_menu_item_remove_submenu(PGtkMenuItem(FWidget));
+ gtk_widget_destroy(FMenu);
+ FMenu := nil;
+ end;
+ FItems.Free;
+ FItems := nil;
+ end;
+ if Assigned(Notify) then Notify(Self);
+end;
+
+procedure TGTKMenuItem.Insert(Index: Integer; Item: TGTKMenuItem);
+begin
+ if (Item = Self) or (FItemType in [itSeparator, itTearOff]) then Exit;
+ if FItems = nil then begin
+ FItems := TList.Create;
+ if FMenu = nil then FMenu := gtk_menu_new;
+ if (FParentMenu is TGTKMenuItem) or (FParentMenu is TGTKMenuBar)
+ then gtk_menu_item_set_submenu(PGtkMenuItem(FWidget), FMenu);
+ SetTearOffTitle(FTearOffTitle);
+ end;
+ Item.FParentMenu := Self;
+ FItems.Insert(Index, Item);
+ if FParentMenu is TGTKMenuBar
+ then gtk_menu_shell_insert(PGtkMenuShell(FParentMenu.FWidget), Item.FWidget, Index)
+ else gtk_menu_shell_insert(PGtkMenuShell(FMenu), Item.FWidget, Index);
+ if Assigned(Notify) then Notify(Self);
+end;
+
+function TGTKMenuItem.GetCaption: string;
+begin
+ Result := '';
+ if FItemType in [itSeparator, itTearOff] then Exit;
+ if Assigned(ChildControl) then Result := PgcharToString(gtk_label_get_text(PGtkLabel(ChildControl)));
+end;
+
+procedure TGTKMenuItem.SetCaption(Value: string);
+begin
+ if FItemType in [itSeparator, itTearOff] then Exit;
+ gtk_label_set_markup_with_mnemonic(PGtkLabel(ChildControl), StringToPgchar(Value));
+ if FTearOffTitle = '' then SetTearOffTitle(Value);
+end;
+
+procedure TGTKMenuItem.SetCaptionPlain(Value: string);
+begin
+ if FItemType in [itSeparator, itTearOff] then Exit;
+ gtk_label_set_markup(PGtkLabel(ChildControl), StringToPgchar(Value));
+ if FTearOffTitle = '' then SetTearOffTitle(Value);
+end;
+
+procedure TGTKMenuItem.SetTearOffTitle(Value: string);
+begin
+ FTearOffTitle := Value;
+ if FItemType = itTearOff then begin
+ if Assigned(FParentMenu) and (FParentMenu is TGTKMenuItem) and Assigned((FParentMenu as TGTKMenuItem).FMenu)
+ then gtk_menu_set_title(PGtkMenu((FParentMenu as TGTKMenuItem).FMenu), StringToPgchar(FTearOffTitle))
+ end else if Assigned(FMenu) then gtk_menu_set_title(PGtkMenu(FMenu), StringToPgchar(FTearOffTitle));
+ end;
+
+function TGTKMenuItem.GetRightJustified: boolean;
+begin
+ Result := False;
+ if FItemType in [itSeparator, itTearOff] then Exit;
+ Result := gtk_menu_item_get_right_justified(PGtkMenuItem(FWidget));
+end;
+
+procedure TGTKMenuItem.SetRightJustified(Value: boolean);
+begin
+ if FItemType in [itSeparator, itTearOff] then Exit;
+ gtk_menu_item_set_right_justified(PGtkMenuItem(FWidget), Value);
+end;
+
+ procedure TGTKMenuItem.SetItemType(Value: TGTKMenuItemType);
+ begin
+ if Value <> FItemType then begin
+ FItemType := Value;
+ Recreate;
+ end;
+ end;
+
+ function TGTKMenuItem.GetTornOff: boolean;
+ begin
+ if FItemType = itTearOff then Result := Boolean(torn_off(PGTKTearOffMenuItem(FWidget)^)) else
+ if Assigned(FMenu) and (Count > 0) then Result := Boolean(torn_off(PGTKMenu(FMenu)^))
+ else Result := False;
+ end;
+
+ procedure TGTKMenuItem.SetTornOff(Value: boolean);
+ begin
+ if FItemType = itTearOff then begin
+ if Assigned(FParentMenu) and (FParentMenu is TGTKMenuItem) and Assigned((FParentMenu as TGTKMenuItem).FMenu)
+ then gtk_menu_set_tearoff_state(PGtkMenu((FParentMenu as TGTKMenuItem).FMenu), Value);
+ end else if Assigned(FMenu) then gtk_menu_set_tearoff_state(PGtkMenu(FMenu), Value);
+ end;
+
+ procedure TGTKMenuItem.TearOff;
+ begin
+ SetTornOff(True);
+ end;
+
+ procedure TGTKMenuItem.UnTearOff;
+begin
+ SetTornOff(False);
+ end;
+
+ function TGTKMenuItem.GetChecked: boolean;
+ begin
+ Result := False;
+ if (FItemType = itCheck) or (FItemType = itRadio) then
+ Result := Boolean(active(PGtkCheckMenuItem(FWidget)^));
+ end;
+
+ procedure TGTKMenuItem.SetChecked(Value: boolean);
+ begin
+ if (FItemType = itCheck) or (FItemType = itRadio) then
+ gtk_check_menu_item_set_active(PGtkCheckMenuItem(FWidget), Value);
+ end;
+
+ procedure TGTKMenuItem.PopUp;
+ begin
+ if FItems.Count > 0 then gtk_menu_popup(PGtkMenu(FMenu), nil, nil, nil, nil, 3, 0);
+end;
+
+ procedure TGTKMenuItem.PopDown;
+ begin
+ if FItems.Count > 0 then gtk_menu_popdown(PGtkMenu(FMenu));
+end;
+
+procedure TGTKMenuItem.SetStockIcon(Value: string);
+begin
+ gtk_image_set_from_stock(PGtkImage(FImageWidget), PChar(Value), GTK_ICON_SIZE_MENU);
+end;
+
+procedure TGTKMenuItem.SetIcon(Value: TGDKPixbuf);
+begin
+ gtk_image_set_from_pixbuf(PGtkImage(FImageWidget), Value.FPixbuf);
+end;
+
+function TGTKMenuItem.GetGroup: TGTKMenuItemGroup;
+begin
+ Result := gtk_radio_menu_item_get_group(PGtkRadioMenuItem(FWidget));
+end;
+
+procedure TGTKMenuItem.SetGroup(Value: TGTKMenuItemGroup);
+begin
+ gtk_radio_menu_item_set_group(PGtkRadioMenuItem(FWidget), Value);
+end;
+
+(********************************************************************************************************************************)
+ (********************************************************************************************************************************)
+constructor TGDKShortCuts.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FList := TList.Create;
+ FOwner := TGTKControl(AOwner);
+end;
+
+destructor TGDKShortCuts.Destroy;
+begin
+ if not (csDestroying in ComponentState) then Clear;
+ inherited Destroy;
+end;
+
+function TGDKShortCuts.GetCount: Integer;
+begin
+ Result := FList.Count;
+end;
+
+procedure TGDKShortCuts.Add(Item: TGDKShortCut);
+begin
+ Insert(GetCount, Item);
+end;
+
+procedure TGDKShortCuts.AddName(Item: string);
+var Key, Modifiers: guint;
+begin
+ gtk_accelerator_parse(StringToPgchar(Item), @Key, @Modifiers);
+ if Key <> 0 then Add(MakeGDKShortCut(Key, False, Modifiers and GDK_MOD1_MASK = GDK_MOD1_MASK, Modifiers and GDK_SHIFT_MASK = GDK_SHIFT_MASK, Modifiers and GDK_CONTROL_MASK = GDK_CONTROL_MASK));
+end;
+
+procedure TGDKShortCuts.Clear;
+var i: Integer;
+begin
+ for i := Count - 1 downto 0 do Delete(i);
+end;
+
+function GetAccelMods(SC: TGDKShortCut): guint;
+begin
+ Result := 0;
+ if SC.ModShift then Inc(Result, GDK_SHIFT_MASK);
+ if SC.ModCtrl then Inc(Result, GDK_CONTROL_MASK);
+ if SC.ModAlt then Inc(Result, GDK_MOD1_MASK);
+end;
+
+function GetAccelFlags(SC: TGDKShortCut): TGtkAccelFlags;
+begin
+ Result := GTK_ACCEL_VISIBLE;
+ if SC.Locked then Result := GTK_ACCEL_LOCKED;
+end;
+
+procedure TGDKShortCuts.Delete(Index: Integer);
+begin
+ if (Index < 0) or (FList = nil) or (Index >= GetCount) then Exit;
+ if (GetParentForm(FOwner) <> nil) and (not (csDestroying in ComponentState))
+ then gtk_widget_remove_accelerator(FOwner.FWidget, GetParentForm(FOwner).FAccelGroup, TGDKShortCut(FList[Index]^).Key, GetAccelMods(TGDKShortCut(FList[Index]^)));
+ FList.Delete(Index);
+end;
+
+procedure TGDKShortCuts.Insert(Index: Integer; Item: TGDKShortCut);
+begin
+ FList.Insert(Index, @Item);
+ if GetParentForm(FOwner) <> nil
+ then gtk_widget_add_accelerator(FOwner.FWidget, 'activate', GetParentForm(FOwner).FAccelGroup, Item.Key, GetAccelMods(Item), GetAccelFlags(Item));
+end;
+
+function TGDKShortCuts.GetItem(Index: Integer): TGDKShortCut;
+begin
+ Result := TGDKShortCut(FList[Index]^);
+end;
+
+function TGDKShortCuts.IndexOf(Item: TGDKShortCut): Integer;
+var i : integer;
+begin
+ Result := -1;
+ if FList.Count > 0 then
+ for i := 0 to FList.Count - 1 do
+ if (TGDKShortCut(FList[i]^).Key = Item.Key) and (TGDKShortCut(FList[i]^).Locked = Item.Locked) and
+ (TGDKShortCut(FList[i]^).ModAlt = Item.ModAlt) and (TGDKShortCut(FList[i]^).ModShift = Item.ModShift) and
+ (TGDKShortCut(FList[i]^).ModCtrl = Item.ModCtrl) then
+ begin
+ Result := i;
+ Break;
+ end;
+end;
+
+function MakeGDKShortCut(Key: word; Locked, ModAlt, ModShift, ModCtrl : boolean): TGDKShortCut;
+begin
+ Result.Key := Key;
+ Result.Locked := Locked;
+ Result.ModAlt := ModAlt;
+ Result.ModShift := ModShift;
+ Result.ModCtrl := ModCtrl;
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+
+
+end.
diff --git a/libgtk_kylix/GTKPixbuf.pas b/libgtk_kylix/GTKPixbuf.pas
new file mode 100644
index 0000000..d895071
--- /dev/null
+++ b/libgtk_kylix/GTKPixbuf.pas
@@ -0,0 +1,214 @@
+(*
+ GTK-Kylix Library: GTKPixbuf - Image handling routines
+ Version 0.6.2 (last updated 2003-03-30)
+ Copyright (C) 2003 Tomas Bzatek <tbzatek@users.sourceforge.net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library 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 Library General Public
+ License along with this library; if not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307 USA.
+
+*)
+
+unit GTKPixbuf;
+{ $WEAKPACKAGEUNIT}
+
+interface
+
+uses glib2, gdk2, gdk2pixbuf, gtk2, Classes, GTKControls, GTKStdCtrls;
+
+
+type
+ TGTKIconSize = (isInvalid, isMenu, isSmallToolbar, isLargeToolbar, isButton, isDND, isDialog);
+
+(****************************************** TGDKPIXBUF **************************************************************************)
+ TGDKPixbuf = class (TComponent)
+ private
+ function GetWidth: integer;
+ function GetHeight: integer;
+ function GetBPP: integer;
+ protected
+ public
+ FPixbuf: PGdkPixbuf;
+ constructor Create(AOwner: TComponent); override;
+ constructor CreateNew(AOwner: TComponent; const Width, Height, BPP: integer; const HasAlpha: boolean);
+ destructor Destroy; override;
+ function LoadFromFile(const FileName: string): boolean;
+ function LoadFromXPM(const Data: PPChar): boolean;
+ function LoadFromInline(Data: Pointer): boolean;
+ procedure Fill(const Pixel: Cardinal);
+ procedure ScaleSimple(const DestWidth, DestHeight: integer);
+ function Copy: PGdkPixbuf;
+ procedure CopyArea(Source: TGDKPixbuf; SourceX, SourceY, SourceWidth, SourceHeight, DestX, DestY: integer);
+ procedure SetFromStock(Stock_ID: string; IconSize: TGTKIconSize);
+ published
+ property Width: integer read GetWidth;
+ property Height: integer read GetHeight;
+ property BPP: integer read GetBPP;
+ end;
+
+(****************************************** TGTKIMAGE ***************************************************************************)
+ TGTKImage = class(TGTKMisc)
+ private
+ protected
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ procedure LoadFromFile(const FileName: string);
+ procedure SetFromPixbuf(Pixbuf: TGDKPixbuf);
+ function GetPixbuf: PGdkPixbuf;
+ procedure CopyFromPixbuf(Pixbuf: TGDKPixbuf);
+ procedure SetFromStock(Stock_ID: string; IconSize: TGTKIconSize);
+ end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+implementation
+
+uses SysUtils, DateUtils;
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGDKPixbuf.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FPixbuf := nil;
+end;
+
+constructor TGDKPixbuf.CreateNew(AOwner: TComponent; const Width, Height, BPP: integer; const HasAlpha: boolean);
+begin
+ inherited Create(AOwner);
+ FPixbuf := gdk_pixbuf_new(GDK_COLORSPACE_RGB, HasAlpha, BPP, Width, Height);
+end;
+
+destructor TGDKPixbuf.Destroy;
+begin
+ if FPixbuf <> nil then gdk_pixbuf_unref(FPixbuf);
+ inherited Destroy;
+end;
+
+function TGDKPixbuf.GetWidth: integer;
+begin
+ Result := gdk_pixbuf_get_width(FPixbuf);
+end;
+
+function TGDKPixbuf.GetHeight: integer;
+begin
+ Result := gdk_pixbuf_get_height(FPixbuf);
+end;
+
+function TGDKPixbuf.GetBPP: integer;
+begin
+ Result := gdk_pixbuf_get_bits_per_sample(FPixbuf);
+end;
+
+function TGDKPixbuf.LoadFromFile(const FileName: string): boolean;
+var P: Pointer;
+ Error: PGError;
+begin
+ Error := nil;
+ P := gdk_pixbuf_new_from_file(PChar(FileName), @Error);
+ Result := P <> nil;
+ if P <> nil then FPixbuf := P;
+end;
+
+function TGDKPixbuf.LoadFromXPM(const Data: PPChar): boolean;
+var P: Pointer;
+begin
+ P := gdk_pixbuf_new_from_xpm_data(Data);
+ Result := P <> nil;
+ if P <> nil then FPixbuf := P;
+end;
+
+function TGDKPixbuf.LoadFromInline(Data: Pointer): boolean;
+var P: Pointer;
+ Error: PGError;
+begin
+ Error := nil;
+ P := gdk_pixbuf_new_from_inline(-1, Pguint8(Data)^, True, @Error);
+ Result := P <> nil;
+ if Error <> nil then begin
+ WriteLn('TGDKPixbuf.LoadFromInline error: ', Error^.message);
+ g_error_free(Error);
+ end;
+ if P <> nil then FPixbuf := P;
+end;
+
+procedure TGDKPixbuf.Fill(const Pixel: Cardinal);
+begin
+ gdk_pixbuf_fill(FPixbuf, Pixel);
+end;
+
+procedure TGDKPixbuf.ScaleSimple(const DestWidth, DestHeight: integer);
+begin
+ FPixbuf := gdk_pixbuf_scale_simple(FPixbuf, DestWidth, DestHeight, GDK_INTERP_BILINEAR);
+end;
+
+function TGDKPixbuf.Copy: PGdkPixbuf;
+begin
+ Result := gdk_pixbuf_copy(FPixbuf);
+end;
+
+procedure TGDKPixbuf.CopyArea(Source: TGDKPixbuf; SourceX, SourceY, SourceWidth, SourceHeight, DestX, DestY: integer);
+begin
+ gdk_pixbuf_copy_area(Source.FPixbuf, SourceX, SourceY, SourceWidth, SourceHeight, FPixbuf, DestX, DestY);
+end;
+
+procedure TGDKPixbuf.SetFromStock(Stock_ID: string; IconSize: TGTKIconSize);
+begin
+ FPixbuf := gtk_widget_render_icon(gtk_label_new(nil), PChar(Stock_ID), Ord(IconSize), nil);
+end;
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKImage.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FWidget := gtk_image_new;
+ Show;
+end;
+
+destructor TGTKImage.Destroy;
+begin
+ inherited Destroy;
+end;
+
+procedure TGTKImage.LoadFromFile(const FileName: string);
+begin
+ gtk_image_set_from_file(PGtkImage(FWidget), PChar(FileName));
+end;
+
+function TGTKImage.GetPixbuf: PGdkPixbuf;
+begin
+ Result := gtk_image_get_pixbuf(PGtkImage(FWidget));
+end;
+
+procedure TGTKImage.SetFromPixbuf(Pixbuf: TGDKPixbuf);
+begin
+ gtk_image_set_from_pixbuf(PGtkImage(FWidget), Pixbuf.FPixbuf);
+end;
+
+procedure TGTKImage.CopyFromPixbuf(Pixbuf: TGDKPixbuf);
+begin
+ gtk_image_set_from_pixbuf(PGtkImage(FWidget), Pixbuf.Copy);
+end;
+
+procedure TGTKImage.SetFromStock(Stock_ID: string; IconSize: TGTKIconSize);
+begin
+ gtk_image_set_from_stock(PGtkImage(FWidget), PChar(Stock_ID), Ord(IconSize));
+end;
+
+(********************************************************************************************************************************)
+end.
diff --git a/libgtk_kylix/GTKStdCtrls.pas b/libgtk_kylix/GTKStdCtrls.pas
new file mode 100644
index 0000000..1d4157a
--- /dev/null
+++ b/libgtk_kylix/GTKStdCtrls.pas
@@ -0,0 +1,1008 @@
+(*
+ GTK-Kylix Library: GTKStdCtrls - Standard visual controls (such as buttons, labels, entry)
+ Version 0.6.23 (last updated 2007-12-08)
+ Copyright (C) 2007 Tomas Bzatek <tbzatek@users.sourceforge.net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library 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 Library General Public
+ License along with this library; if not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307 USA.
+
+*)
+
+unit GTKStdCtrls;
+{ $WEAKPACKAGEUNIT}
+
+interface
+
+uses gtk2, gdk2, glib2, Classes, GTKControls, GTKConsts, GTKClasses;
+ // Quick jump: QForms QControls QStdCtrls
+
+
+type
+
+(****************************************** TGTKBUTTON **************************************************************************)
+ TGTKBorderStyle = (bsNormal, bsHalf, bsNone);
+ TGTKButton = class(TGTKBin)
+ private
+ FOnClick: TNotifyEvent;
+ function GetCaption: string;
+ function GetUseStock: boolean;
+ function GetUseUnderline: boolean;
+ function GetBorderStyle: TGTKBorderStyle;
+ procedure SetCaption(Value: string);
+ procedure SetUseStock(Value: boolean);
+ procedure SetUseUnderline(Value: boolean);
+ procedure SetBorderStyle(Value: TGTKBorderStyle);
+ public
+ constructor Create(AOwner: TComponent); override;
+ constructor CreateFromStock(AOwner: TComponent; const StockID: PChar);
+ destructor Destroy; override;
+ published
+ property Caption: string read GetCaption write SetCaption;
+ property OnClick: TNotifyEvent read FOnClick write FOnClick;
+ property UseStock: boolean read GetUseStock write SetUseStock;
+ property UseUnderline: boolean read GetUseUnderline write SetUseUnderline;
+ property BorderStyle: TGTKBorderStyle read GetBorderStyle write SetBorderStyle;
+ end;
+
+(****************************************** TGTKMISC ****************************************************************************)
+ TGTKMisc = class(TGTKControl)
+ private
+ function GetXAlign: Single;
+ function GetYAlign: Single;
+ function GetXPadding: integer;
+ function GetYPadding: integer;
+ procedure SetXAlign(Value: Single);
+ procedure SetYAlign(Value: Single);
+ procedure SetXPadding(Value: integer);
+ procedure SetYPadding(Value: integer);
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ procedure SetAlignment(XAlign, YAlign : Single);
+ procedure SetPadding(XPadding, YPadding : integer);
+ published
+ property XAlign: Single read GetXAlign write SetXAlign;
+ property YAlign: Single read GetYAlign write SetYAlign;
+ property XPadding: integer read GetXPadding write SetXPadding;
+ property YPadding: integer read GetYPadding write SetYPadding;
+ end;
+
+(****************************************** TGTKLABEL **************************************************************************)
+ TGTKAlignment = (taLeftJustify, taRightJustify, taCenter, taFill);
+ TGTKLabel = class(TGTKMisc)
+ private
+ FLinked: boolean;
+ function GetCaption: string;
+ function GetAlignment: TGTKAlignment;
+ function GetUseMarkup: boolean;
+ function GetLineWrap: boolean;
+ function GetUseUnderline: boolean;
+ function GetSelectable: boolean;
+ procedure SetCaption(Value: string);
+ procedure SetAlignment(Value: TGTKAlignment);
+ procedure SetUseMarkup(Value: boolean);
+ procedure SetLineWrap(Value: boolean);
+ procedure SetUseUnderline(Value: boolean);
+ procedure SetFocusControl(Value: TGTKControl);
+ procedure SetSelectable(Value: boolean);
+ public
+ constructor Create(AOwner: TComponent); override;
+ constructor CreateFromWidget(AOwner: TComponent; Widget: PGtkWidget);
+ destructor Destroy; override;
+ procedure SetMarkup(const Text: string);
+ published
+ property Caption: string read GetCaption write SetCaption;
+ property Alignment: TGTKAlignment read GetAlignment write SetAlignment;
+ property UseMarkup: boolean read GetUseMarkup write SetUseMarkup;
+ property LineWrap: boolean read GetLineWrap write SetLineWrap;
+ property UseUnderline: boolean read GetUseUnderline write SetUseUnderline;
+ property FocusControl: TGTKControl write SetFocusControl;
+ property Selectable: boolean read GetSelectable write SetSelectable;
+ end;
+
+(****************************************** TGTKTOGGLEBUTTON ********************************************************************)
+ TGTKToggleButton = class(TGTKButton)
+ private
+ FOnToggled: TNotifyEvent;
+ function GetCaption: string;
+ function GetChecked: boolean;
+ function GetDrawIndicator: boolean;
+ function GetInconsistent: boolean;
+ procedure SetCaption(Value: string);
+ procedure SetChecked(Value: boolean);
+ procedure SetDrawIndicator(Value: boolean);
+ procedure SetInconsistent(Value: boolean);
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ published
+ property Caption: string read GetCaption write SetCaption;
+ property Checked: boolean read GetChecked write SetChecked;
+ property DrawIndicator: boolean read GetDrawIndicator write SetDrawIndicator;
+ property OnToggled: TNotifyEvent read FOnToggled write FOnToggled;
+ property Inconsistent: boolean read GetInconsistent write SetInconsistent;
+ property UseUnderline;
+ end;
+
+(****************************************** TGTKCHECKBUTTON *********************************************************************)
+ TGTKCheckButton = class(TGTKToggleButton)
+ public
+ constructor Create(AOwner: TComponent); override;
+ constructor CreateWithLabel(AOwner: TComponent; const ALabel: string);
+ destructor Destroy; override;
+ published
+ property Caption;
+ property Checked;
+ property DrawIndicator;
+ property OnToggled;
+ property UseUnderline;
+ end;
+
+(****************************************** TGTKRADIOBUTTON *********************************************************************)
+ TGTKRadioButton = class(TGTKToggleButton)
+ public
+ constructor Create(AOwner: TComponent); override;
+ constructor CreateWithLabel(AOwner: TComponent; const ALabel: string);
+ destructor Destroy; override;
+ procedure SetRadioGroup(RadioButton: TGTKRadioButton);
+ published
+ property Caption;
+ property Checked;
+ property DrawIndicator;
+ property OnToggled;
+ end;
+
+(****************************************** TGTKFRAME ***************************************************************************)
+ TGTKFrame = class(TGTKBin)
+ private
+ function GetCaption: string;
+ function GetShadowType: TGTKShadowType;
+ procedure SetCaption(Value: string);
+ procedure SetShadowType(Value: TGTKShadowType);
+ public
+ constructor Create(AOwner: TComponent); override;
+ constructor CreateWithoutLabel(AOwner: TComponent);
+ destructor Destroy; override;
+ published
+ property Caption: string read GetCaption write SetCaption;
+ property ShadowType: TGTKShadowType read GetShadowType write SetShadowType;
+ end;
+
+(****************************************** TGTKEDITABLE ************************************************************************)
+ TGTKEditable = class(TGTKControl)
+ private
+ FOnChanged: TNotifyEvent;
+ function GetEditable: boolean;
+ function GetPosition: integer;
+ procedure SetEditable(Value: boolean);
+ procedure SetPosition(Value: integer);
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ procedure CutClipboard;
+ procedure CopyClipboard;
+ procedure PasteClipboard;
+ procedure DeleteSelection;
+ procedure SelectRegion(StartPosition, EndPosition: integer);
+ procedure InsertText(AText: string; Position: integer);
+ procedure DeleteText(StartPosition, EndPosition: integer);
+ function GetChars(StartPosition, EndPosition: integer): string;
+ published
+ property Editable: boolean read GetEditable write SetEditable;
+ property CursorPosition: integer read GetPosition write SetPosition;
+ property OnChanged: TNotifyEvent read FOnChanged write FOnChanged;
+ end;
+
+(****************************************** TGTKENTRY ************************************************************************)
+ TGTKEntry = class(TGTKEditable)
+ private
+ FLinked: boolean;
+ function GetText: string;
+ function GetMaxLength: integer;
+ function GetVisibility: boolean;
+ procedure SetText(Value: string);
+ procedure SetMaxLength(Value: integer);
+ procedure SetVisibility(Value: boolean);
+ public
+ constructor Create(AOwner: TComponent); override;
+ constructor CreateFromWidget(AOwner: TComponent; Widget: PGtkWidget);
+ destructor Destroy; override;
+ procedure SelectAll;
+ published
+ property Text: string read GetText write SetText;
+ property MaxLength: integer read GetMaxLength write SetMaxLength;
+ property Visibility: boolean read GetVisibility write SetVisibility;
+ end;
+
+(****************************************** TGTKCOMBO **************************************************************************)
+ TGTKCombo = class(TGTKHBox)
+ private
+ procedure ItemsChanged(Sender: TObject);
+ function GetAllowEmpty: boolean;
+ function GetMatchValue: boolean;
+ function GetCaseSensitive: boolean;
+ procedure SetAllowEmpty(Value: boolean);
+ procedure SetMatchValue(Value: boolean);
+ procedure SetCaseSensitive(Value: boolean);
+ public
+ Items: TGList;
+ Entry: TGTKEntry;
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ procedure UpdateItems;
+ procedure SetPolicy(MatchValue, AllowEmpty: boolean);
+ procedure DisableActivate;
+ published
+ property AllowEmpty: boolean read GetAllowEmpty write SetAllowEmpty;
+ property MatchValue: boolean read GetMatchValue write SetMatchValue;
+ property CaseSensitive: boolean read GetCaseSensitive write SetCaseSensitive;
+ end;
+
+(****************************************** TGTKSPINEDIT ************************************************************************)
+ TGTKSpinEdit = class(TGTKEntry)
+ private
+ FAdjustment: PGtkAdjustment;
+ function GetDigits: integer;
+ procedure SetDigits(AValue: integer);
+ function GetMin: Double;
+ procedure SetMin(AValue: Double);
+ function GetMax: Double;
+ procedure SetMax(AValue: Double);
+ function GetIncrementStep: Double;
+ procedure SetIncrementStep(AValue: Double);
+ function GetIncrementPage: Double;
+ procedure SetIncrementPage(AValue: Double);
+ function GetValue: Double;
+ procedure SetValue(AValue: Double);
+ function GetAsInteger: integer;
+ procedure SetAsInteger(AValue: integer);
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ published
+ property Digits: integer read GetDigits write SetDigits;
+ property Min: Double read GetMin write SetMin;
+ property Max: Double read GetMax write SetMax;
+ property IncrementStep: Double read GetIncrementStep write SetIncrementStep;
+ property IncrementPage: Double read GetIncrementPage write SetIncrementPage;
+ property Value: Double read GetValue write SetValue;
+ property AsInteger: integer read GetAsInteger write SetAsInteger;
+ property AsFloat: Double read GetValue write SetValue;
+ end;
+
+procedure TGTKButton_OnClick(button: PGtkButton; user_data: Pgpointer); cdecl;
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+implementation
+
+uses GTKUtils;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure TGTKButton_OnClick(button: PGtkButton; user_data: Pgpointer); cdecl;
+begin
+ if Assigned(TGTKButton(user_data).FOnClick) then TGTKButton(user_data).FOnClick(TGTKButton(user_data));
+end;
+
+constructor TGTKButton.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FOnClick := nil;
+ if ClassName = 'TGTKButton' then begin
+ FWidget := gtk_button_new_with_mnemonic(StringToPgchar(SCDefaultButtonCaption));
+ g_signal_connect(PGtkObject(FWidget), 'clicked', G_CALLBACK(@TGTKButton_OnClick), Self);
+ Show;
+ end;
+end;
+
+constructor TGTKButton.CreateFromStock(AOwner: TComponent; const StockID: PChar);
+begin
+ inherited Create(AOwner);
+ FOnClick := nil;
+ if ClassName = 'TGTKButton' then begin
+ FWidget := gtk_button_new_from_stock(StockID);
+ g_signal_connect(PGtkObject(FWidget), 'clicked', G_CALLBACK(@TGTKButton_OnClick), Self);
+ Show;
+ end;
+end;
+
+destructor TGTKButton.Destroy;
+begin
+ inherited Destroy;
+end;
+
+function TGTKButton.GetCaption: string;
+begin
+ Result := PgcharToString(gtk_label_get_text(PGtkLabel(ChildControl)));
+end;
+
+procedure TGTKButton.SetCaption(Value: string);
+begin
+ gtk_label_set_text_with_mnemonic(PGtkLabel(ChildControl), StringToPgchar(Value));
+end;
+
+function TGTKButton.GetUseStock: boolean;
+begin
+ Result := gtk_button_get_use_stock(PGtkButton(FWidget));
+end;
+
+procedure TGTKButton.SetUseStock(Value: boolean);
+begin
+ gtk_button_set_use_stock(PGtkButton(FWidget), Value);
+end;
+
+function TGTKButton.GetUseUnderline: boolean;
+begin
+ Result := gtk_button_get_use_underline(PGtkButton(FWidget));
+end;
+
+procedure TGTKButton.SetUseUnderline(Value: boolean);
+begin
+ gtk_button_set_use_underline(PGtkButton(FWidget), Value);
+end;
+
+function TGTKButton.GetBorderStyle: TGTKBorderStyle;
+begin
+ Result := TGTKBorderStyle(gtk_button_get_relief(PGtkButton(FWidget)));
+end;
+
+procedure TGTKButton.SetBorderStyle(Value: TGTKBorderStyle);
+begin
+ gtk_button_set_relief(PGtkButton(FWidget), integer(Value));
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKMisc.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+end;
+
+destructor TGTKMisc.Destroy;
+begin
+ inherited Destroy;
+end;
+
+procedure TGTKMisc.SetAlignment(XAlign, YAlign : Single);
+begin
+// Writeln('gtk_misc_set_alignment, FWidget = ', integer(FWidget), ', XAlign = ', XAlign, ', YAlign = ', YAlign);
+ gtk_misc_set_alignment(PGtkMisc(FWidget), XAlign, YAlign);
+end;
+
+function TGTKMisc.GetXAlign: Single;
+{var xalign, yalign: pgfloat; }
+begin
+{ gtk_misc_get_alignment(PGtkMisc(FWidget), xalign, yalign);
+ if Assigned(xalign) then Result := Single(xalign^)
+ else Result := 0; }
+ if Assigned(FWidget) then Result := PGtkMisc(FWidget)^.xalign
+ else Result := 0;
+end;
+
+procedure TGTKMisc.SetXAlign(Value: Single);
+begin
+ SetAlignment(Value, YAlign);
+end;
+
+function TGTKMisc.GetYAlign: Single;
+{var xalign, yalign: Extended;
+ x: Extended; }
+begin
+{ gtk_misc_get_alignment(PGtkMisc(FWidget), @xalign, @yalign);
+ writeln('yalign = ', integer(yalign));
+ if Assigned(yalign) then Result := yalign
+ else Result := 0; }
+ if Assigned(FWidget) then Result := PGtkMisc(FWidget)^.yalign
+ else Result := 0;
+end;
+
+procedure TGTKMisc.SetYAlign(Value: Single);
+begin
+ SetAlignment(XAlign, Value);
+end;
+
+procedure TGTKMisc.SetPadding(XPadding, YPadding : integer);
+begin
+ gtk_misc_set_padding(PGtkMisc(FWidget), XPadding, YPadding);
+end;
+
+function TGTKMisc.GetXPadding: integer;
+var xpad, ypad: pgint;
+begin
+ gtk_misc_get_padding(PGtkMisc(FWidget), xpad, ypad);
+ if Assigned(xpad) then Result := Integer(xpad)
+ else Result := 0;
+end;
+
+procedure TGTKMisc.SetXPadding(Value: integer);
+begin
+ SetPadding(Value, YPadding);
+end;
+
+function TGTKMisc.GetYPadding: integer;
+var xpad, ypad: pgint;
+begin
+ gtk_misc_get_padding(PGtkMisc(FWidget), xpad, ypad);
+ if Assigned(ypad) then Result := Integer(ypad)
+ else Result := 0;
+end;
+
+procedure TGTKMisc.SetYPadding(Value: integer);
+begin
+ SetPadding(XPadding, Value);
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKLabel.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FWidget := gtk_label_new(nil);
+ FLinked := False;
+ Show;
+end;
+
+constructor TGTKLabel.CreateFromWidget(AOwner: TComponent; Widget: PGtkWidget);
+begin
+ inherited Create(AOwner);
+ FWidget := Widget;
+ FLinked := True;
+ Show;
+end;
+
+destructor TGTKLabel.Destroy;
+begin
+ if not FLinked then inherited Destroy;
+end;
+
+function TGTKLabel.GetCaption: string;
+begin
+ Result := PgcharToString(gtk_label_get_text(PGtkLabel(FWidget)));
+end;
+
+procedure TGTKLabel.SetCaption(Value: string);
+begin
+ gtk_label_set_text(PGtkLabel(FWidget), StringToPgchar(Value));
+end;
+
+function TGTKLabel.GetAlignment: TGTKAlignment;
+begin
+ Result := TGTKAlignment(gtk_label_get_justify(PGtkLabel(FWidget)));
+end;
+
+procedure TGTKLabel.SetAlignment(Value: TGTKAlignment);
+begin
+ gtk_label_set_justify(PGtkLabel(FWidget), TGtkJustification(Value));
+end;
+
+procedure TGTKLabel.SetMarkup(const Text: string);
+begin
+ gtk_label_set_markup(PGtkLabel(FWidget), PChar(Text));
+end;
+
+function TGTKLabel.GetUseMarkup: boolean;
+begin
+ Result := gtk_label_get_use_markup(PGtkLabel(FWidget));
+end;
+
+procedure TGTKLabel.SetUseMarkup(Value: boolean);
+begin
+ gtk_label_set_use_markup(PGtkLabel(FWidget), Value);
+end;
+
+function TGTKLabel.GetLineWrap: boolean;
+begin
+ Result := gtk_label_get_line_wrap(PGtkLabel(FWidget));
+end;
+
+procedure TGTKLabel.SetLineWrap(Value: boolean);
+begin
+ gtk_label_set_line_wrap(PGtkLabel(FWidget), Value);
+end;
+
+function TGTKLabel.GetUseUnderline: boolean;
+begin
+ Result := gtk_label_get_use_underline(PGtkLabel(FWidget));
+end;
+
+procedure TGTKLabel.SetUseUnderline(Value: boolean);
+begin
+ gtk_label_set_use_underline(PGtkLabel(FWidget), Value);
+end;
+
+procedure TGTKLabel.SetFocusControl(Value: TGTKControl);
+begin
+ gtk_label_set_mnemonic_widget(PGtkLabel(FWidget), Value.FWidget);
+end;
+
+function TGTKLabel.GetSelectable: boolean;
+begin
+ Result := gtk_label_get_selectable(PGtkLabel(FWidget));
+end;
+
+procedure TGTKLabel.SetSelectable(Value: boolean);
+begin
+ gtk_label_set_selectable(PGtkLabel(FWidget), Value);
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure TGTKToggleButton_OnToggled(ToggleButton: PGtkToggleButton; user_data: Pgpointer); cdecl;
+begin
+ if Assigned(TGTKToggleButton(user_data).FOnToggled) then TGTKToggleButton(user_data).FOnToggled(TGTKToggleButton(user_data));
+end;
+
+constructor TGTKToggleButton.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FOnToggled := nil;
+ if ClassName = 'TGTKToggleButton' then begin
+ FWidget := gtk_toggle_button_new_with_label(StringToPgchar(SCDefaultToggleButtonCaption));
+ g_signal_connect(PGtkObject(FWidget), 'toggled', G_CALLBACK(@TGTKToggleButton_OnToggled), Self);
+ Show;
+ end;
+end;
+
+destructor TGTKToggleButton.Destroy;
+begin
+ inherited Destroy;
+end;
+
+function TGTKToggleButton.GetCaption: string;
+begin
+ Result := PgcharToString(gtk_label_get_text(PGtkLabel(ChildControl)));
+end;
+
+procedure TGTKToggleButton.SetCaption(Value: string);
+begin
+ gtk_label_set_text(PGtkLabel(ChildControl), StringToPgchar(Value));
+end;
+
+function TGTKToggleButton.GetChecked: boolean;
+begin
+ Result := gtk_toggle_button_get_active(PGtkToggleButton(FWidget));
+end;
+
+procedure TGTKToggleButton.SetChecked(Value: boolean);
+begin
+ gtk_toggle_button_set_active(PGtkToggleButton(FWidget), Value);
+end;
+
+function TGTKToggleButton.GetDrawIndicator: boolean;
+begin
+ Result := gtk_toggle_button_get_mode(PGtkToggleButton(FWidget));
+end;
+
+procedure TGTKToggleButton.SetDrawIndicator(Value: boolean);
+begin
+ gtk_toggle_button_set_mode(PGtkToggleButton(FWidget), Value);
+end;
+
+function TGTKToggleButton.GetInconsistent: boolean;
+begin
+ Result := gtk_toggle_button_get_inconsistent(PGtkToggleButton(FWidget));
+end;
+
+procedure TGTKToggleButton.SetInconsistent(Value: boolean);
+begin
+ gtk_toggle_button_set_inconsistent(PGtkToggleButton(FWidget), Value);
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKCheckButton.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ if ClassName = 'TGTKCheckButton' then begin
+ FWidget := gtk_check_button_new_with_mnemonic(StringToPgchar(SCDefaultCheckButtonCaption));
+ g_signal_connect(PGtkObject(FWidget), 'toggled', G_CALLBACK(@TGTKToggleButton_OnToggled), Self);
+ Show;
+ end;
+end;
+
+constructor TGTKCheckButton.CreateWithLabel(AOwner: TComponent; const ALabel: string);
+begin
+ inherited Create(AOwner);
+ if ClassName = 'TGTKCheckButton' then begin
+ FWidget := gtk_check_button_new_with_mnemonic(StringToPgchar(ALabel));
+ g_signal_connect(PGtkObject(FWidget), 'toggled', G_CALLBACK(@TGTKToggleButton_OnToggled), Self);
+ Show;
+ end;
+end;
+
+destructor TGTKCheckButton.Destroy;
+begin
+ inherited Destroy;
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKRadioButton.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ if ClassName = 'TGTKRadioButton' then begin
+ FWidget := gtk_radio_button_new_with_label(nil, StringToPgchar(SCDefaultRadioButtonCaption));
+ g_signal_connect(PGtkObject(FWidget), 'toggled', G_CALLBACK(@TGTKToggleButton_OnToggled), Self);
+ Show;
+ end;
+end;
+
+constructor TGTKRadioButton.CreateWithLabel(AOwner: TComponent; const ALabel: string);
+begin
+ inherited Create(AOwner);
+ if ClassName = 'TGTKRadioButton' then begin
+ FWidget := gtk_radio_button_new_with_mnemonic(nil, StringToPgchar(ALabel));
+ g_signal_connect(PGtkObject(FWidget), 'toggled', G_CALLBACK(@TGTKToggleButton_OnToggled), Self);
+ Show;
+ end;
+end;
+
+destructor TGTKRadioButton.Destroy;
+begin
+ inherited Destroy;
+end;
+
+procedure TGTKRadioButton.SetRadioGroup(RadioButton: TGTKRadioButton);
+begin
+ if Assigned(RadioButton) then gtk_radio_button_set_group(PGtkRadioButton(FWidget), gtk_radio_button_get_group(PGtkRadioButton(RadioButton.FWidget)))
+ else gtk_radio_button_set_group(PGtkRadioButton(FWidget), nil);
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKFrame.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FWidget := gtk_frame_new(StringToPgchar(SCDefaultFrameCaption));
+ Show;
+end;
+
+constructor TGTKFrame.CreateWithoutLabel(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FWidget := gtk_frame_new(nil);
+ Show;
+end;
+
+destructor TGTKFrame.Destroy;
+begin
+ inherited Destroy;
+end;
+
+function TGTKFrame.GetCaption: string;
+begin
+ Result := PgcharToString(gtk_frame_get_label(PGtkFrame(FWidget)));
+end;
+
+procedure TGTKFrame.SetCaption(Value: string);
+begin
+ gtk_label_set_text(PGtkLabel(gtk_frame_get_label_widget(PGtkFrame(FWidget))), StringToPgchar(Value));
+end;
+
+function TGTKFrame.GetShadowType: TGTKShadowType;
+begin
+ Result := TGTKShadowType(gtk_frame_get_shadow_type(PGtkFrame(FWidget)));
+end;
+
+procedure TGTKFrame.SetShadowType(Value: TGTKShadowType);
+begin
+ gtk_frame_set_shadow_type(PGtkFrame(FWidget), gtk2.TGtkShadowType(Value));
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+procedure TGTKEditable_Changed(editable: PGtkEditable; user_data: gpointer); cdecl;
+begin
+ if Assigned(TGTKEditable(user_data).FOnChanged) then TGTKEditable(user_data).FOnChanged(TGTKEditable(user_data));
+end;
+
+constructor TGTKEditable.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FOnChanged := nil;
+end;
+
+destructor TGTKEditable.Destroy;
+begin
+ inherited Destroy;
+end;
+
+function TGTKEditable.GetEditable: boolean;
+begin
+ Result := gtk_editable_get_editable(PGtkEditable(FWidget));
+end;
+
+procedure TGTKEditable.SetEditable(Value: boolean);
+begin
+ gtk_entry_set_editable(PGtkEntry(FWidget), Value);
+end;
+
+procedure TGTKEditable.CutClipboard;
+begin
+ gtk_editable_cut_clipboard(PGtkEditable(FWidget));
+end;
+
+procedure TGTKEditable.CopyClipboard;
+begin
+ gtk_editable_copy_clipboard(PGtkEditable(FWidget));
+end;
+
+procedure TGTKEditable.PasteClipboard;
+begin
+ gtk_editable_paste_clipboard(PGtkEditable(FWidget));
+end;
+
+procedure TGTKEditable.DeleteSelection;
+begin
+ gtk_editable_delete_selection(PGtkEditable(FWidget));
+end;
+
+procedure TGTKEditable.InsertText(AText: string; Position: integer);
+begin
+ gtk_editable_insert_text(PGtkEditable(FWidget), StringToPgchar(AText), Length(AText), @Position);
+end;
+
+procedure TGTKEditable.DeleteText(StartPosition, EndPosition: integer);
+begin
+ gtk_editable_delete_text(PGtkEditable(FWidget), StartPosition, EndPosition);
+end;
+
+function TGTKEditable.GetChars(StartPosition, EndPosition: integer): string;
+begin
+ Result := PgcharToString(gtk_editable_get_chars(PGtkEditable(FWidget), StartPosition, EndPosition));
+end;
+
+procedure TGTKEditable.SelectRegion(StartPosition, EndPosition: integer);
+begin
+ gtk_editable_select_region(PGtkEditable(FWidget), StartPosition, EndPosition);
+end;
+
+function TGTKEditable.GetPosition: integer;
+begin
+ Result := gtk_editable_get_position(PGtkEditable(FWidget));
+end;
+
+procedure TGTKEditable.SetPosition(Value: integer);
+begin
+ gtk_editable_set_position(PGtkEditable(FWidget), Value);
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKEntry.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FLinked := False;
+ FWidget := gtk_entry_new;
+ Show;
+ g_signal_connect(PGtkObject(FWidget), 'changed', G_CALLBACK(@TGTKEditable_Changed), Self);
+end;
+
+constructor TGTKEntry.CreateFromWidget(AOwner: TComponent; Widget: PGtkWidget);
+begin
+ inherited Create(AOwner);
+ FLinked := True;
+ FWidget := Widget;
+end;
+
+destructor TGTKEntry.Destroy;
+begin
+ if not FLinked then inherited Destroy;
+end;
+
+function TGTKEntry.GetText: string;
+begin
+ Result := PgcharToString(gtk_entry_get_text(PGtkEntry(FWidget)));
+end;
+
+procedure TGTKEntry.SetText(Value: string);
+begin
+ gtk_entry_set_text(PGtkEntry(FWidget), StringToPgchar(Value));
+end;
+
+function TGTKEntry.GetMaxLength: integer;
+begin
+ Result := gtk_entry_get_max_length(PGtkEntry(FWidget));
+end;
+
+procedure TGTKEntry.SetMaxLength(Value: integer);
+begin
+ gtk_entry_set_max_length(PGtkEntry(FWidget), Value);
+end;
+
+function TGTKEntry.GetVisibility: boolean;
+begin
+ Result := gtk_entry_get_visibility(PGtkEntry(FWidget));
+end;
+
+procedure TGTKEntry.SetVisibility(Value: boolean);
+begin
+// g_object_set(FWidget, 'visibility', gboolean(Value), nil);
+ gtk_entry_set_visibility(PGtkEntry(FWidget), Value);
+end;
+
+procedure TGTKEntry.SelectAll;
+begin
+ SelectRegion(0, Length(Text));
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKCombo.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FWidget := gtk_combo_new;
+ Items := TGList.Create(Self);
+ Items.Notify := ItemsChanged;
+ Entry := TGTKEntry.CreateFromWidget(Self, PGtkCombo(FWidget)^.entry);
+ Show;
+end;
+
+destructor TGTKCombo.Destroy;
+begin
+ Items.Free;
+ inherited Destroy;
+end;
+
+procedure TGTKCombo.UpdateItems;
+begin
+ gtk_combo_set_popdown_strings(PGtkCombo(FWidget), Items.FList);
+end;
+
+function TGTKCombo.GetAllowEmpty: boolean;
+begin
+ Result := Boolean(ok_if_empty(PGtkCombo(FWidget)^));
+end;
+
+procedure TGTKCombo.SetAllowEmpty(Value: boolean);
+begin
+ SetPolicy(GetMatchValue, Value);
+end;
+
+function TGTKCombo.GetMatchValue: boolean;
+begin
+ Result := Boolean(value_in_list(PGtkCombo(FWidget)^));
+end;
+
+procedure TGTKCombo.SetMatchValue(Value: boolean);
+begin
+ SetPolicy(Value, GetAllowEmpty);
+end;
+
+procedure TGTKCombo.SetPolicy(MatchValue, AllowEmpty: boolean);
+begin
+ gtk_combo_set_value_in_list(PGtkCombo(FWidget), MatchValue, AllowEmpty);
+end;
+
+function TGTKCombo.GetCaseSensitive: boolean;
+begin
+ Result := Boolean(gtk2.case_sensitive(PGtkCombo(FWidget)^));
+end;
+
+procedure TGTKCombo.SetCaseSensitive(Value: boolean);
+begin
+ gtk_combo_set_case_sensitive(PGtkCombo(FWidget), Value);
+end;
+
+procedure TGTKCombo.DisableActivate;
+begin
+ gtk_combo_disable_activate(PGtkCombo(FWidget));
+end;
+
+procedure TGTKCombo.ItemsChanged(Sender: TObject);
+begin
+ UpdateItems;
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKSpinEdit.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FAdjustment := PGtkAdjustment(gtk_adjustment_new(0, 0, 0, 1, 10, 10));
+ FWidget := gtk_spin_button_new(FAdjustment, 1, 0);
+ Show;
+end;
+
+destructor TGTKSpinEdit.Destroy;
+begin
+ inherited Destroy;
+end;
+
+function TGTKSpinEdit.GetDigits: integer;
+begin
+ Result := gtk_spin_button_get_digits(PGtkSpinButton(FWidget));
+end;
+
+procedure TGTKSpinEdit.SetDigits(AValue: integer);
+begin
+ gtk_spin_button_set_digits(PGtkSpinButton(FWidget), AValue);
+end;
+
+function TGTKSpinEdit.GetMin: Double;
+var amin, amax: Double;
+begin
+ gtk_spin_button_get_range(PGtkSpinButton(FWidget), @amin, @amax);
+ Result := amin;
+end;
+
+procedure TGTKSpinEdit.SetMin(AValue: Double);
+begin
+ gtk_spin_button_set_range(PGtkSpinButton(FWidget), AValue, Max);
+end;
+
+function TGTKSpinEdit.GetMax: Double;
+var amin, amax: Double;
+begin
+ gtk_spin_button_get_range(PGtkSpinButton(FWidget), @amin, @amax);
+ Result := amax;
+end;
+
+procedure TGTKSpinEdit.SetMax(AValue: Double);
+begin
+ gtk_spin_button_set_range(PGtkSpinButton(FWidget), Min, AValue);
+end;
+
+function TGTKSpinEdit.GetIncrementStep: Double;
+var astep, apage: Double;
+begin
+ gtk_spin_button_get_increments(PGtkSpinButton(FWidget), @astep, @apage);
+ Result := astep;
+end;
+
+procedure TGTKSpinEdit.SetIncrementStep(AValue: Double);
+begin
+ gtk_spin_button_set_increments(PGtkSpinButton(FWidget), AValue, IncrementPage);
+end;
+
+function TGTKSpinEdit.GetIncrementPage: Double;
+var astep, apage: Double;
+begin
+ gtk_spin_button_get_increments(PGtkSpinButton(FWidget), @astep, @apage);
+ Result := apage;
+end;
+
+procedure TGTKSpinEdit.SetIncrementPage(AValue: Double);
+begin
+ gtk_spin_button_set_increments(PGtkSpinButton(FWidget), IncrementStep, AValue);
+end;
+
+function TGTKSpinEdit.GetValue: Double;
+begin
+ Result := gtk_spin_button_get_value(PGtkSpinButton(FWidget));
+end;
+
+procedure TGTKSpinEdit.SetValue(AValue: Double);
+begin
+ gtk_spin_button_set_value(PGtkSpinButton(FWidget), AValue);
+end;
+
+function TGTKSpinEdit.GetAsInteger: integer;
+begin
+ Result := gtk_spin_button_get_value_as_int(PGtkSpinButton(FWidget));
+end;
+
+procedure TGTKSpinEdit.SetAsInteger(AValue: integer);
+begin
+ gtk_spin_button_set_value(PGtkSpinButton(FWidget), AValue);
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+
+
+end.
diff --git a/libgtk_kylix/GTKText.pas b/libgtk_kylix/GTKText.pas
new file mode 100644
index 0000000..fe1a0c4
--- /dev/null
+++ b/libgtk_kylix/GTKText.pas
@@ -0,0 +1,167 @@
+(*
+ GTK-Kylix Library: GTKText - Multiline Text Editor (GtkTextView)
+ Version 0.5.16 (last updated 2003-01-21)
+ Copyright (C) 2003 Tomas Bzatek <tbzatek@users.sourceforge.net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library 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 Library General Public
+ License along with this library; if not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307 USA.
+
+*)
+
+unit GTKText;
+{ $WEAKPACKAGEUNIT}
+
+interface
+
+uses gtk2, gdk2, glib2, Classes, GTKControls, GTKConsts, GTKUtils, GTKClasses, GTKForms;
+
+
+type
+ TGTKTextBuffer = class;
+
+(****************************************** TGTKTEXTVIEW ************************************************************************)
+ TGTKTextViewWrapMode = (wmWrapNone, wmWrapChar, wmWrapWord);
+ TGTKTextView = class(TGTKContainer)
+ private
+ FTextBuffer: TGTKTextBuffer;
+ function GetWrapMode: TGTKTextViewWrapMode;
+ procedure SetWrapMode(Value: TGTKTextViewWrapMode);
+ function GetReadOnly: boolean;
+ procedure SetReadOnly(Value: boolean);
+ function GetCursorVisible: boolean;
+ procedure SetCursorVisible(Value: boolean);
+ protected
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ published
+ property WrapMode: TGTKTextViewWrapMode read GetWrapMode write SetWrapMode;
+ property ReadOnly: boolean read GetReadOnly write SetReadOnly;
+ property CursorVisible: boolean read GetCursorVisible write SetCursorVisible;
+ property TextBuffer: TGTKTextBuffer read FTextBuffer write FTextBuffer;
+ property Lines: TGTKTextBuffer read FTextBuffer write FTextBuffer;
+ end;
+
+(****************************************** TGTKTEXTBUFFER **********************************************************************)
+ TGTKTextBuffer = class
+ private
+ FOwner: TGTKTextView;
+ FBuffer: PGtkTextBuffer;
+ function GetLineCount: integer;
+ function GetCharCount: integer;
+ protected
+ public
+ constructor Create(AOwner: TGTKTextView);
+ destructor Destroy; override;
+ procedure SetText(const Text: string);
+ procedure InsertText(const Text: string);
+ published
+ property Count: integer read GetLineCount;
+ property LineCount: integer read GetLineCount;
+ property CharCount: integer read GetCharCount;
+ end;
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+implementation
+
+uses SysUtils, DateUtils;
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKTextView.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FTextBuffer := TGTKTextBuffer.Create(Self);
+ FWidget := gtk_text_view_new_with_buffer(FTextBuffer.FBuffer);
+ Show;
+ g_object_unref(FTextBuffer.FBuffer);
+end;
+
+destructor TGTKTextView.Destroy;
+begin
+ inherited Destroy;
+end;
+
+function TGTKTextView.GetWrapMode: TGTKTextViewWrapMode;
+begin
+ Result := TGTKTextViewWrapMode(gtk_text_view_get_wrap_mode(PGtkTextView(FWidget)));
+end;
+
+procedure TGTKTextView.SetWrapMode(Value: TGTKTextViewWrapMode);
+begin
+ gtk_text_view_set_wrap_mode(PGtkTextView(FWidget), integer(Value));
+end;
+
+function TGTKTextView.GetReadOnly: boolean;
+begin
+ Result := not gtk_text_view_get_editable(PGtkTextView(FWidget));
+end;
+
+procedure TGTKTextView.SetReadOnly(Value: boolean);
+begin
+ gtk_text_view_set_editable(PGtkTextView(FWidget), not Value);
+end;
+
+function TGTKTextView.GetCursorVisible: boolean;
+begin
+ Result := gtk_text_view_get_cursor_visible(PGtkTextView(FWidget));
+end;
+
+procedure TGTKTextView.SetCursorVisible(Value: boolean);
+begin
+ gtk_text_view_set_cursor_visible(PGtkTextView(FWidget), Value);
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKTextBuffer.Create(AOwner: TGTKTextView);
+begin
+ inherited Create;
+ FOwner := AOwner;
+ FBuffer := gtk_text_buffer_new(nil);
+end;
+
+destructor TGTKTextBuffer.Destroy;
+begin
+ inherited Destroy;
+end;
+
+procedure TGTKTextBuffer.SetText(const Text: string);
+begin
+ gtk_text_buffer_set_text(FBuffer, PChar(Text), -1);
+end;
+
+procedure TGTKTextBuffer.InsertText(const Text: string);
+var Iter: TGtkTextIter;
+begin
+ gtk_text_buffer_get_end_iter(FBuffer, @Iter);
+ gtk_text_buffer_insert(FBuffer, @Iter, PChar(Text), -1);
+end;
+
+function TGTKTextBuffer.GetLineCount: integer;
+begin
+ Result := gtk_text_buffer_get_line_count(FBuffer);
+end;
+
+function TGTKTextBuffer.GetCharCount: integer;
+begin
+ Result := gtk_text_buffer_get_char_count(FBuffer);
+end;
+
+(********************************************************************************************************************************)
+end.
diff --git a/libgtk_kylix/GTKUtils.pas b/libgtk_kylix/GTKUtils.pas
new file mode 100644
index 0000000..924ece1
--- /dev/null
+++ b/libgtk_kylix/GTKUtils.pas
@@ -0,0 +1,212 @@
+(*
+ GTK-Kylix Library: GTKUtils - Various utilities
+ Version 0.6.17 (last updated 2003-10-07)
+ Copyright (C) 2003 Tomas Bzatek <tbzatek@users.sourceforge.net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library 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 Library General Public
+ License along with this library; if not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307 USA.
+
+*)
+
+unit GTKUtils;
+{ $WEAKPACKAGEUNIT}
+
+interface
+
+uses gtk2, gdk2, glib2, SysUtils, GTKControls, GTKClasses;
+
+(********************************************************************************************************************************)
+function PgcharToString(const S: Pgchar): string;
+function StringToPgchar(const S: string): Pgchar;
+function AllocateColor(Widget: PGtkWidget; R, G, B: Word): PGdkColor; overload;
+function AllocateColor(R, G, B: Word): TGDKColor; overload;
+function KeyValToUnicode(const Key: word): guint32;
+function UnicodeToKeyVal(const UnicodeVal: guint32): word;
+function GetDefaultForegroundColor(State: integer): PGdkColor; overload;
+function GetDefaultForegroundColor(Widget: TGTKControl; State: integer): PGdkColor; overload;
+function GetDefaultBackgroundColor(State: integer): PGdkColor; overload;
+function GetDefaultBackgroundColor(Widget: TGTKControl; State: integer): PGdkColor; overload;
+function GetDefaultBaseColor(State: integer): PGdkColor; overload;
+function GetDefaultBaseColor(Widget: TGTKControl; State: integer): PGdkColor; overload;
+function GetDefaultTextColor(State: integer): PGdkColor; overload;
+function GetDefaultTextColor(Widget: TGTKControl; State: integer): PGdkColor; overload;
+function GDKColorToPGdkColor(Color: TGDKColor): PGdkColor;
+function PGdkColorToGDKColor(Color: PGdkColor): TGDKColor;
+function GDKColorToString(Color: TGDKColor): string;
+function StringToGDKColor(Str: string; var Color: TGDKColor): boolean;
+(********************************************************************************************************************************)
+
+implementation
+
+(********************************************************************************************************************************)
+function PgcharToString(const S: Pgchar): string;
+begin
+ Result := string(S);
+end;
+
+(********************************************************************************************************************************)
+function StringToPgchar(const S: string): Pgchar;
+begin
+ Result := PChar(S);
+end;
+
+(********************************************************************************************************************************)
+function AllocateColor(Widget: PGtkWidget; R, G, B: Word): PGdkColor;
+begin
+ New(Result);
+ with Result^ do begin
+ Pixel := 0;
+ Red := R;
+ Green := G;
+ Blue := B;
+ end;
+ if Assigned(Widget) then gdk_colormap_alloc_color(gtk_widget_get_colormap(Widget), Result, True, False);
+end;
+
+function AllocateColor(R, G, B: Word): TGDKColor;
+begin
+ Result.red := R;
+ Result.green := G;
+ Result.blue := B;
+end;
+
+(********************************************************************************************************************************)
+function KeyValToUnicode(const Key: word): guint32;
+begin
+ Result := gdk_keyval_to_unicode(Key);
+end;
+
+(********************************************************************************************************************************)
+function UnicodeToKeyVal(const UnicodeVal: guint32): word;
+begin
+ Result := gdk_unicode_to_keyval(UnicodeVal);
+end;
+
+(********************************************************************************************************************************)
+function GetDefaultForegroundColor(State: integer): PGdkColor;
+var Widget: PGtkWidget;
+ Style: PGtkStyle;
+begin
+ Widget := gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ Style := gtk_rc_get_style(Widget);
+ Result := @Style^.fg[State];
+ gtk_widget_destroy(Widget);
+end;
+
+function GetDefaultForegroundColor(Widget: TGTKControl; State: integer): PGdkColor;
+var Style: PGtkStyle;
+begin
+ Style := gtk_rc_get_style(Widget.FWidget);
+ Result := @Style^.fg[State];
+end;
+
+(********************************************************************************************************************************)
+function GetDefaultBackgroundColor(State: integer): PGdkColor;
+var Widget: PGtkWidget;
+ Style: PGtkStyle;
+begin
+ Widget := gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ Style := gtk_rc_get_style(Widget);
+ Result := @Style^.bg[State];
+ gtk_widget_destroy(Widget);
+end;
+
+function GetDefaultBackgroundColor(Widget: TGTKControl; State: integer): PGdkColor;
+var Style: PGtkStyle;
+begin
+ Style := gtk_rc_get_style(Widget.FWidget);
+ Result := @Style^.bg[State];
+end;
+
+(********************************************************************************************************************************)
+function GetDefaultBaseColor(State: integer): PGdkColor;
+var Widget: PGtkWidget;
+ Style: PGtkStyle;
+begin
+ Widget := gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ Style := gtk_rc_get_style(Widget);
+ Result := @Style^.base[State];
+ gtk_widget_destroy(Widget);
+end;
+
+function GetDefaultBaseColor(Widget: TGTKControl; State: integer): PGdkColor;
+var Style: PGtkStyle;
+begin
+ Style := gtk_rc_get_style(Widget.FWidget);
+ Result := @Style^.base[State];
+end;
+
+(********************************************************************************************************************************)
+function GetDefaultTextColor(State: integer): PGdkColor;
+var Widget: PGtkWidget;
+ Style: PGtkStyle;
+begin
+ Widget := gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ Style := gtk_rc_get_style(Widget);
+ Result := @Style^.text[State];
+ gtk_widget_destroy(Widget);
+end;
+
+function GetDefaultTextColor(Widget: TGTKControl; State: integer): PGdkColor;
+var Style: PGtkStyle;
+begin
+ Style := gtk_rc_get_style(Widget.FWidget);
+ Result := @Style^.text[State];
+end;
+
+(********************************************************************************************************************************)
+function GDKColorToPGdkColor(Color: TGDKColor): PGdkColor;
+begin
+ New(Result);
+ Result^.pixel := Color.pixel;
+ Result^.red := Color.red;
+ Result^.green := Color.green;
+ Result^.blue := Color.blue;
+end;
+
+(********************************************************************************************************************************)
+function PGdkColorToGDKColor(Color: PGdkColor): TGDKColor;
+begin
+ Result.pixel := Color.pixel;
+ Result.red := Color.red;
+ Result.green := Color.green;
+ Result.blue := Color.blue;
+end;
+
+(********************************************************************************************************************************)
+function GDKColorToString(Color: TGDKColor): string;
+begin
+ Result := Format('#%.2x%.2x%.2xFF', [Color.red div 256, Color.green div 256, Color.blue div 256]);
+end;
+
+(********************************************************************************************************************************)
+function StringToGDKColor(Str: string; var Color: TGDKColor): boolean;
+var AColor: PGdkColor;
+begin
+ Result := False;
+ Str := ANSIUpperCase(Trim(Str));
+ if (Length(Str) < 7) or (Str[1] <> '#') then Exit;
+ try
+ New(AColor);
+ if Length(Str) = 9 then Delete(Str, 8, 2);
+ Result := boolean(gdk_color_parse(PChar(Str), AColor));
+ Color := PGdkColorToGDKColor(AColor);
+ Dispose(AColor);
+ except end;
+end;
+
+(********************************************************************************************************************************)
+
+end.
diff --git a/libgtk_kylix/GTKView.pas b/libgtk_kylix/GTKView.pas
new file mode 100644
index 0000000..a8b80fc
--- /dev/null
+++ b/libgtk_kylix/GTKView.pas
@@ -0,0 +1,1376 @@
+(*
+ GTK-Kylix Library: GTKView - GtkTreeView and its modifications
+ Version 0.6.21 (last updated 2006-05-06)
+ Copyright (C) 2006 Tomas Bzatek <tbzatek@users.sourceforge.net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library 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 Library General Public
+ License along with this library; if not, write to the
+ Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307 USA.
+
+*)
+
+unit GTKView;
+{ $WEAKPACKAGEUNIT}
+{$O+} // Optimization needs to be enabled for this unit due to bug in compiler (fixed columns doesn't work)
+
+interface
+
+uses gtk2, gdk2, gdk2pixbuf, glib2, Classes, GTKControls, GTKConsts, GTKUtils, GTKClasses, GTKForms, GTKPixbuf;
+ // Quick jump: QForms QControls QStdCtrls QComCtrls
+
+
+type
+ TGTKListItem = class;
+ TGTKTreeViewColumn = class;
+
+(****************************************** TGTKTREEVIEWCOLUMN ******************************************************************)
+ TGTKTreeViewColumnSizingMode = (smGrowOnly, smAutoSize, smFixed);
+ TGTKTreeViewSortOrder = (soAscending, soDescending, soNone);
+ TGTKTreeViewColumnType = (ctText, ctToggle, ctImageText);
+ TGTKTreeViewColumnEditedEvent = procedure(Sender: TObject; Column: TGTKTreeViewColumn; Item: TGTKListItem; var NewText: string; var AllowChange: boolean; var DataColumn: integer) of object;
+ TGTKTreeViewColumnToggledEvent = procedure(Sender: TObject; Column: TGTKTreeViewColumn; Item: TGTKListItem) of object;
+ TGTKTreeViewColumn = class(TComponent)
+ private
+ FOwner: TComponent;
+ FColumnType: TGTKTreeViewColumnType;
+ FOnEdited: TGTKTreeViewColumnEditedEvent;
+ FOnToggled: TGTKTreeViewColumnToggledEvent;
+ FOnClicked: TNotifyEvent;
+ FIndex: integer;
+ function GetCaption: string;
+ function GetVisible: boolean;
+ function GetResizable: boolean;
+ function GetSizingMode: TGTKTreeViewColumnSizingMode;
+ function GetWidth: integer;
+ function GetFixedWidth: integer;
+ function GetMinWidth: integer;
+ function GetMaxWidth: integer;
+ function GetClickable: boolean;
+ function GetAlignment: Double;
+ function GetReorderable: boolean;
+ function GetSortID: integer;
+ function GetShowSortIndicator: boolean;
+ function GetSortOrder: TGTKTreeViewSortOrder;
+ procedure SetCaption(Value: string);
+ procedure SetVisible(Value: boolean);
+ procedure SetResizable(Value: boolean);
+ procedure SetSizingMode(Value: TGTKTreeViewColumnSizingMode);
+ procedure SetFixedWidth(Value: integer);
+ procedure SetMinWidth(Value: integer);
+ procedure SetMaxWidth(Value: integer);
+ procedure SetClickable(Value: boolean);
+ procedure SetAlignment(Value: Double);
+ procedure SetReorderable(Value: boolean);
+ procedure SetSortID(Value: integer);
+ procedure SetShowSortIndicator(Value: boolean);
+ procedure SetSortOrder(Value: TGTKTreeViewSortOrder);
+ procedure SetColumnType(Value: TGTKTreeViewColumnType);
+ public
+ FColumn: PGtkTreeViewColumn;
+ FRenderer, FPixbufRenderer: PGtkCellRenderer;
+ constructor Create(AOwner: TComponent); override;
+ constructor CreateTyped(AOwner: TComponent; ColType: TGTKTreeViewColumnType);
+ destructor Destroy; override;
+ procedure AddAttribute(Attribute: string; Value: integer);
+ procedure SetProperty(AProperty: string; Value: integer); overload;
+ procedure SetProperty(AProperty: string; Value: string); overload;
+ procedure SetProperty(AProperty: string; Value: Double); overload;
+ procedure SetProperty(AProperty: string; Value: pointer); overload;
+ procedure AddImageAttribute(Attribute: string; Value: integer);
+ procedure SetImageProperty(AProperty: string; Value: integer); overload;
+ procedure SetImageProperty(AProperty: string; Value: string); overload;
+ procedure SetImageProperty(AProperty: string; Value: Double); overload;
+ procedure SetImageProperty(AProperty: string; Value: pointer); overload;
+ procedure ClearAttributes;
+ property Parent: TComponent read FOwner;
+ published
+ property Caption: string read GetCaption write SetCaption;
+ property Visible: boolean read GetVisible write SetVisible;
+ property Resizable: boolean read GetResizable write SetResizable;
+ property SizingMode: TGTKTreeViewColumnSizingMode read GetSizingMode write SetSizingMode;
+ property Width: integer read GetWidth;
+ property FixedWidth: integer read GetFixedWidth write SetFixedWidth;
+ property MinWidth: integer read GetMinWidth write SetMinWidth;
+ property MaxWidth: integer read GetMaxWidth write SetMaxWidth;
+ property Clickable: boolean read GetClickable write SetClickable;
+ property Alignment: Double read GetAlignment write SetAlignment;
+ property Reorderable: boolean read GetReorderable write SetReorderable;
+ property SortID: integer read GetSortID write SetSortID;
+ property ShowSortIndicator: boolean read GetShowSortIndicator write SetShowSortIndicator;
+ property SortOrder: TGTKTreeViewSortOrder read GetSortOrder write SetSortOrder;
+ property ColumnType: TGTKTreeViewColumnType read FColumnType write SetColumnType;
+ property Index: integer read FIndex;
+ property OnEdited: TGTKTreeViewColumnEditedEvent read FOnEdited write FOnEdited;
+ property OnToggled: TGTKTreeViewColumnToggledEvent read FOnToggled write FOnToggled;
+ property OnClicked: TNotifyEvent read FOnClicked write FOnClicked;
+ end;
+
+(****************************************** TGTKTREEVIEWCOLUMNS *****************************************************************)
+ TGTKTreeViewColumns = class(TComponent)
+ private
+ FOwner: TComponent;
+ FList: TList;
+ function GetCount: Integer;
+ function GetItem(Index: Integer): TGTKTreeViewColumn;
+ procedure SetItem(Index: Integer; Value: TGTKTreeViewColumn);
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ function Add: TGTKTreeViewColumn;
+ function AddTyped(ColType: TGTKTreeViewColumnType): TGTKTreeViewColumn;
+ procedure Insert(Index: Integer; Item: TGTKTreeViewColumn);
+ procedure Delete(Index: Integer);
+ procedure Clear;
+ procedure AutosizeColumns;
+ property Items[Index: Integer]: TGTKTreeViewColumn read GetItem write SetItem; default;
+ property Parent: TComponent read FOwner;
+ published
+ property Count: Integer read GetCount;
+ end;
+
+(****************************************** TGTKLISTITEM ************************************************************************)
+ TGTKListItem = class(TComponent)
+ private
+ FOwner: TComponent;
+ FIndex: longint;
+ FData: pointer;
+ function GetSelected: boolean;
+ procedure SetSelected(Value: boolean);
+ public
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ function AsString(Index: longint): string;
+ function AsInteger(Index: longint): integer;
+ function AsPointer(Index: longint): pointer;
+ function AsBoolean(Index: longint): boolean;
+ procedure SetValue(Index: longint; Value: string); overload;
+ procedure SetValue(Index: longint; Value: integer); overload;
+ procedure SetValue(Index: longint; Value: pointer); overload;
+ procedure SetValue(Index: longint; Value: boolean); overload;
+ procedure SetCursor(const FocusColumnNo: integer; const StartEditing, UseAlignment: boolean; const AlignX, AlignY: Double);
+ procedure StartEditing(ColumnNo: integer);
+ procedure RedrawRow;
+ property Data: pointer read FData write FData;
+ property Parent: TComponent read FOwner;
+ function IsVisible: boolean;
+ published
+ property Selected: boolean read GetSelected write SetSelected;
+ property Index: integer read FIndex;
+ end;
+
+(****************************************** TGTKLISTITEMS ***********************************************************************)
+ TGTKListColumnType = (lcText, lcNumber, lcPointer, lcPixbuf, lcBoolean);
+ TGTKListItems = class(TComponent)
+ private
+ FStore: PGtkListStore;
+ FOwner: TComponent;
+ FList: TList;
+ function GetCount: longint;
+ function GetItem(Index: longint): TGTKListItem;
+ procedure SetItem(Index: longint; Value: TGTKListItem);
+ public
+ constructor Create(AOwner: TComponent); override;
+ constructor CreateTyped(AOwner: TComponent; ColumnTypes: array of TGTKListColumnType);
+ destructor Destroy; override;
+ procedure SetColumnTypes(Types: array of TGTKListColumnType);
+ function Add: TGTKListItem;
+ procedure Insert(Index: longint; Item: TGTKListItem);
+ procedure Append(Item: TGTKListItem);
+ procedure Delete(Index: longint);
+ procedure Clear;
+ property Items[Index: longint]: TGTKListItem read GetItem write SetItem; default;
+ property Parent: TComponent read FOwner;
+ published
+ property Count: longint read GetCount;
+ end;
+
+(****************************************** TGTKVIEW ****************************************************************************)
+ TGTKSelectionMode = (smNone, smSingle, smBrowse, smMultiple);
+ TGTKCellDataFunc = procedure (Sender: TObject; tree_view: PGtkTreeView; tree_column : PGtkTreeViewColumn; cell : PGtkCellRenderer; tree_model : PGtkTreeModel; iter : PGtkTreeIter) of object;
+ TGTKSortCoversionFunc = function (Sender: TObject; const Index: integer): integer of object;
+ TGTKView = class(TGTKContainer)
+ private
+ FColumns: TGTKTreeViewColumns;
+ FOnSelectionChanged: TNotifyEvent;
+ FTreeModelSort: PGtkTreeModelSort;
+ FCellDataFunc: TGTKCellDataFunc;
+ FTreeModel: PGtkTreeModel;
+ FToSortedConvFunc, FFromSortedConvFunc: TGTKSortCoversionFunc;
+ function GetSelectionMode: TGTKSelectionMode;
+ function GetShowHeaders: boolean;
+ function GetRulesHint: boolean;
+ function GetReorderable: boolean;
+ function GetEnableSearch: boolean;
+ function GetSearchColumn: integer;
+ function GetSortColumnID: integer;
+ function GetSortOrder: TGTKTreeViewSortOrder;
+ procedure SetSelectionMode(Value: TGTKSelectionMode);
+ procedure SetShowHeaders(Value: boolean);
+ procedure SetRulesHint(Value: boolean);
+ procedure SetReorderable(Value: boolean);
+ procedure SetEnableSearch(Value: boolean);
+ procedure SetSearchColumn(Value: integer);
+ procedure SetSortColumnID(Value: integer);
+ procedure SetSortOrder(Value: TGTKTreeViewSortOrder);
+ protected
+ public
+ FSelection: PGtkTreeSelection;
+ constructor Create(AOwner: TComponent); override;
+ destructor Destroy; override;
+ procedure SelectAll;
+ procedure DeselectAll;
+ procedure SetSortInfo(ColumnID: integer; Order: TGTKTreeViewSortOrder);
+ function ConvertToSorted(Index: integer): integer;
+ function ConvertFromSorted(Index: integer): integer;
+ procedure ConvertPathToChild(var Path: PGtkTreePath);
+ procedure ConvertChildToPath(var Path: PGtkTreePath);
+ published
+ property Columns: TGTKTreeViewColumns read FColumns write FColumns;
+ property SelectionMode: TGTKSelectionMode read GetSelectionMode write SetSelectionMode;
+ property OnSelectionChanged: TNotifyEvent read FOnSelectionChanged write FOnSelectionChanged;
+ property ShowHeaders: boolean read GetShowHeaders write SetShowHeaders;
+ property RulesHint: boolean read GetRulesHint write SetRulesHint;
+ property Reorderable: boolean read GetReorderable write SetReorderable;
+ property EnableSearch: boolean read GetEnableSearch write SetEnableSearch;
+ property SearchColumn: integer read GetSearchColumn write SetSearchColumn;
+ property SortColumnID: integer read GetSortColumnID write SetSortColumnID;
+ property SortOrder: TGTKTreeViewSortOrder read GetSortOrder write SetSortOrder;
+ property CellDataFunc: TGTKCellDataFunc read FCellDataFunc write FCellDataFunc;
+ property FromSortedCoversionFunc: TGTKSortCoversionFunc read FFromSortedConvFunc write FFromSortedConvFunc;
+ property ToSortedCoversionFunc: TGTKSortCoversionFunc read FToSortedConvFunc write FToSortedConvFunc;
+ end;
+
+(****************************************** TGTKLISTVIEW ************************************************************************)
+ TGTKLVItemActivateEvent = procedure (Sender: TObject; Item: TGTKListItem) of object;
+ TGTKTreeViewCompareFunc = function (Sender: TObject; var model: PGtkTreeModel; var a, b: PGtkTreeIter): integer of object;
+ TGTKListView = class(TGTKView)
+ private
+ FOnItemActivate: TGTKLVItemActivateEvent;
+ FSortable: boolean;
+ FCompareFunc: TGTKTreeViewCompareFunc;
+ FOnColumnsChanged: TNotifyEvent;
+ protected
+ FListItems: TGTKListItems;
+ procedure Recreate;
+ function GetSelected: TGTKListItem;
+ procedure SetSelected(Value: TGTKListItem);
+ public
+ constructor Create(AOwner: TComponent); override;
+ constructor CreateTyped(AOwner: TComponent; Sortable: boolean; ColumnTypes: array of TGTKListColumnType);
+ destructor Destroy; override;
+ procedure StartEditing(ColumnNo: integer);
+ function GetItemAtPos(X, Y: integer): TGTKListItem;
+ published
+ property Items: TGTKListItems read FListItems write FListItems;
+ property Selected: TGTKListItem read GetSelected write SetSelected;
+ property OnItemActivate: TGTKLVItemActivateEvent read FOnItemActivate write FOnItemActivate;
+ property CompareFunc: TGTKTreeViewCompareFunc read FCompareFunc write FCompareFunc;
+ property OnColumnsChanged: TNotifyEvent read FOnColumnsChanged write FOnColumnsChanged;
+ end;
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+implementation
+
+uses SysUtils, DateUtils;
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKView.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FColumns := TGTKTreeViewColumns.Create(Self);
+ FOnSelectionChanged := nil;
+ FToSortedConvFunc := nil;
+ FFromSortedConvFunc := nil;
+end;
+
+destructor TGTKView.Destroy;
+begin
+ FColumns.Free;
+ inherited Destroy;
+end;
+
+function TGTKView.GetSelectionMode: TGTKSelectionMode;
+begin
+ Result := TGTKSelectionMode(gtk_tree_selection_get_mode(FSelection));
+end;
+
+procedure TGTKView.SetSelectionMode(Value: TGTKSelectionMode);
+begin
+ gtk_tree_selection_set_mode(FSelection, Integer(Value));
+end;
+
+procedure TGTKView.SelectAll;
+begin
+ gtk_tree_selection_select_all(FSelection);
+end;
+
+procedure TGTKView.DeselectAll;
+begin
+ gtk_tree_selection_unselect_all(FSelection);
+end;
+
+function TGTKView.GetShowHeaders: boolean;
+begin
+ Result := gtk_tree_view_get_headers_visible(PGtkTreeView(FWidget));
+end;
+
+procedure TGTKView.SetShowHeaders(Value: boolean);
+begin
+ gtk_tree_view_set_headers_visible(PGtkTreeView(FWidget), Value);
+end;
+
+function TGTKView.GetRulesHint: boolean;
+begin
+ Result := gtk_tree_view_get_rules_hint(PGtkTreeView(FWidget));
+end;
+
+procedure TGTKView.SetRulesHint(Value: boolean);
+begin
+ gtk_tree_view_set_rules_hint(PGtkTreeView(FWidget), Value);
+end;
+
+function TGTKView.GetReorderable: boolean;
+begin
+ Result := gtk_tree_view_get_reorderable(PGtkTreeView(FWidget));
+end;
+
+procedure TGTKView.SetReorderable(Value: boolean);
+begin
+ gtk_tree_view_set_reorderable(PGtkTreeView(FWidget), Value);
+end;
+
+function TGTKView.GetEnableSearch: boolean;
+begin
+ Result := gtk_tree_view_get_enable_search(PGtkTreeView(FWidget));
+end;
+
+procedure TGTKView.SetEnableSearch(Value: boolean);
+begin
+ gtk_tree_view_set_enable_search(PGtkTreeView(FWidget), Value);
+end;
+
+function TGTKView.GetSearchColumn: integer;
+begin
+ Result := gtk_tree_view_get_search_column(PGtkTreeView(FWidget));
+end;
+
+procedure TGTKView.SetSearchColumn(Value: integer);
+begin
+ gtk_tree_view_set_search_column(PGtkTreeView(FWidget), Value);
+end;
+
+function TGTKView.GetSortColumnID: integer;
+var sort_column_id: gint;
+ order: TGtkSortType;
+begin
+ Result := -1;
+ if (FTreeModelSort <> nil) and gtk_tree_sortable_get_sort_column_id(PGtkTreeSortable(FTreeModelSort), @sort_column_id, @order)
+ then Result := sort_column_id;
+end;
+
+procedure TGTKView.SetSortColumnID(Value: integer);
+begin
+ if FTreeModelSort <> nil then
+ gtk_tree_sortable_set_sort_column_id(PGtkTreeSortable(FTreeModelSort), Value, TGtkSortType(GetSortOrder));
+end;
+
+procedure TGTKView.ConvertChildToPath(var Path: PGtkTreePath);
+var NewPath: PGtkTreePath;
+begin
+ if Assigned(FTreeModelSort) then
+ if not Assigned(FToSortedConvFunc) then begin
+ NewPath := gtk_tree_model_sort_convert_child_path_to_path(FTreeModelSort, Path);
+ Path := NewPath;
+ end else begin
+ NewPath := gtk_tree_path_new_from_string(PChar(IntToStr(FToSortedConvFunc(Self, StrToIntDef(gtk_tree_path_to_string(Path), 0)))));
+ Path := NewPath;
+ end;
+end;
+
+procedure TGTKView.ConvertPathToChild(var Path: PGtkTreePath);
+var NewPath: PGtkTreePath;
+begin
+ if Assigned(FTreeModelSort) then
+ if not Assigned(FFromSortedConvFunc) then begin
+ NewPath := gtk_tree_model_sort_convert_path_to_child_path(FTreeModelSort, Path);
+ Path := NewPath;
+ end else begin
+ NewPath := gtk_tree_path_new_from_string(PChar(IntToStr(FFromSortedConvFunc(Self, StrToIntDef(gtk_tree_path_to_string(Path), 0)))));
+ Path := NewPath;
+ end;
+end;
+
+function TGTKView.GetSortOrder: TGTKTreeViewSortOrder;
+var sort_column_id: gint;
+ order: TGtkSortType;
+begin
+ Result := soNone;
+ if (FTreeModelSort <> nil) and gtk_tree_sortable_get_sort_column_id(PGtkTreeSortable(FTreeModelSort), @sort_column_id, @order)
+ then Result := TGTKTreeViewSortOrder(order);
+end;
+
+procedure TGTKView.SetSortOrder(Value: TGTKTreeViewSortOrder);
+begin
+ if FTreeModelSort <> nil then
+ gtk_tree_sortable_set_sort_column_id(PGtkTreeSortable(FTreeModelSort), GetSortColumnID, TGtkSortType(Value));
+end;
+
+procedure TGTKView.SetSortInfo(ColumnID: integer; Order: TGTKTreeViewSortOrder);
+begin
+ if FTreeModelSort <> nil then
+ gtk_tree_sortable_set_sort_column_id(PGtkTreeSortable(FTreeModelSort), ColumnID, TGtkSortType(Order));
+end;
+
+function TGTKView.ConvertToSorted(Index: integer): integer;
+var Path: PGtkTreePath;
+ Iter: TGtkTreeIter;
+begin
+ Result := Index;
+ if Application.GTKVersion_2_0_5_Up then begin
+ Path := gtk_tree_path_new_from_string(StringToPgchar(IntToStr(Index)));
+ if not Assigned(Path) then Exit;
+ if Assigned(FTreeModelSort) then Path := gtk_tree_model_sort_convert_child_path_to_path(FTreeModelSort, Path);
+ if not Assigned(Path) then Exit;
+ Result := gtk_tree_path_get_indices(Path)^;
+ gtk_tree_path_free(Path);
+ end else
+ if Assigned(FToSortedConvFunc) then Result := FToSortedConvFunc(Self, Index) else begin
+ gtk_tree_model_get_iter_from_string(FTreeModel, @Iter, PChar(IntToStr(Index)));
+// gtk_tree_model_sort_convert_child_iter_to_iter(FTreeModelSort, @NewIter, @Iter);
+ Path := gtk_tree_model_get_path(FTreeModel, @Iter);
+ if not Assigned(Path) then Exit;
+ if Assigned(FTreeModelSort) then Path := gtk_tree_model_sort_convert_child_path_to_path(FTreeModelSort, Path);
+ if not Assigned(Path) then Exit;
+ Result := StrToIntDef(String(gtk_tree_path_to_string(Path)), Index);
+ gtk_tree_path_free(Path);
+ end;
+end;
+
+function TGTKView.ConvertFromSorted(Index: integer): integer;
+var Path: PGtkTreePath;
+ Iter: TGtkTreeIter;
+begin
+ Result := Index;
+ if Application.GTKVersion_2_0_5_Up then begin
+ Path := gtk_tree_path_new_from_string(StringToPgchar(IntToStr(Index)));
+ if not Assigned(Path) then Exit;
+ if Assigned(FTreeModelSort) then Path := gtk_tree_model_sort_convert_path_to_child_path(FTreeModelSort, Path);
+ if not Assigned(Path) then Exit;
+ Result := gtk_tree_path_get_indices(Path)^;
+ gtk_tree_path_free(Path);
+ end else
+ if Assigned(FFromSortedConvFunc) then Result := FFromSortedConvFunc(Self, Index) else begin
+ gtk_tree_model_get_iter_from_string(FTreeModel, @Iter, PChar(IntToStr(Index)));
+// gtk_tree_model_sort_convert_child_iter_to_iter(FTreeModelSort, @NewIter, @Iter);
+ Path := gtk_tree_model_get_path(FTreeModel, @Iter);
+ if not Assigned(Path) then Exit;
+ if Assigned(FTreeModelSort) then Path := gtk_tree_model_sort_convert_path_to_child_path(FTreeModelSort, Path);
+ if not Assigned(Path) then Exit;
+ Result := StrToIntDef(String(gtk_tree_path_to_string(Path)), Index);
+ gtk_tree_path_free(Path);
+ end;
+end;
+
+procedure CellDataFunc(tree_column : PGtkTreeViewColumn; cell : PGtkCellRenderer; tree_model : PGtkTreeModel; iter : PGtkTreeIter; data : gpointer); cdecl;
+begin
+ if Assigned(TGTKView(data).FCellDataFunc) then TGTKView(data).FCellDataFunc(TGTKView(data), PGtkTreeView(TGTKView(data).FWidget), tree_column, cell, tree_model, iter);
+end;
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKListView.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FListItems := TGTKListItems.Create(Self);
+ FSortable := False;
+ FCompareFunc := nil;
+ Recreate;
+end;
+
+destructor TGTKListView.Destroy;
+begin
+ FListItems.Free;
+ inherited Destroy;
+end;
+
+procedure TGTKListView_changed(treeselection: PGtkTreeSelection; user_data: gpointer); cdecl;
+begin
+ if Assigned(TGTKListView(user_data).FOnSelectionChanged) then TGTKListView(user_data).FOnSelectionChanged(TGTKListView(user_data));
+end;
+
+procedure TGTKListView_row_activated(treeview: PGtkTreeView; arg1: PGtkTreePath; arg2: PGtkTreeViewColumn; user_data: gpointer); cdecl;
+var Item: TGTKListItem;
+ AIndex: integer;
+begin
+ Item := nil;
+ if Assigned(arg1) then begin
+ TGTKListView(user_data).ConvertPathToChild(arg1);
+ if Application.GTKVersion_2_0_5_Up then AIndex := gtk_tree_path_get_indices(arg1)^
+ else AIndex := StrToIntDef(String(gtk_tree_path_to_string(arg1)), 0);
+ Item := TGTKListView(user_data).Items[AIndex];
+ Item.FIndex := AIndex;
+ end;
+ if Assigned(TGTKListView(user_data).FOnItemActivate) then TGTKListView(user_data).FOnItemActivate(TGTKListView(user_data), Item);
+end;
+
+procedure TGTKListView_columns_changed(treeselection: PGtkTreeSelection; user_data: gpointer); cdecl;
+begin
+ if Assigned(TGTKListView(user_data).FOnColumnsChanged) then TGTKListView(user_data).FOnColumnsChanged(TGTKListView(user_data));
+end;
+
+procedure TGTKListView.Recreate;
+begin
+ if Assigned(FWidget) then gtk_widget_destroy(PGtkWidget(FWidget));
+ FTreeModelSort := nil;
+ if not FSortable then FWidget := gtk_tree_view_new_with_model(PGtkTreeModel(FListItems.FStore))
+ else begin
+ FTreeModelSort := gtk_tree_model_sort_new_with_model(FListItems.FStore);
+ FWidget := gtk_tree_view_new_with_model(FTreeModelSort);
+ end;
+ FSelection := gtk_tree_view_get_selection(PGtkTreeView(FWidget));
+ g_signal_connect(FSelection, 'changed', G_CALLBACK(@TGTKListView_changed), Self);
+ g_signal_connect(FWidget, 'row-activated', G_CALLBACK(@TGTKListView_row_activated), Self);
+ g_signal_connect(FWidget, 'columns-changed', G_CALLBACK(@TGTKListView_columns_changed), Self);
+ FTreeModel := gtk_tree_view_get_model(PGtkTreeView(FWidget));
+ Show;
+end;
+
+constructor TGTKListView.CreateTyped(AOwner: TComponent; Sortable: boolean; ColumnTypes: array of TGTKListColumnType);
+begin
+ inherited Create(AOwner);
+ FListItems := TGTKListItems.CreateTyped(Self, ColumnTypes);
+ FSortable := Sortable;
+ FCompareFunc := nil;
+ Recreate;
+end;
+
+function TGTKListView.GetSelected: TGTKListItem;
+var Iter{, NewIter}: TGtkTreeIter;
+ Path: PGtkTreePath;
+ AIndex: integer;
+ i: integer;
+begin
+ Result := nil;
+ Path := nil;
+ if not Application.GTKVersion_2_0_5_Up then begin
+ for i := 0 to Items.Count - 1 do begin
+ Path := gtk_tree_path_new_from_string(PChar(IntToStr(i)));
+ if gtk_tree_selection_path_is_selected(gtk_tree_view_get_selection(PGtkTreeView(FWidget)), Path) then Break else
+// WriteLn('Index ', i, ', Selected: ', gtk_tree_selection_path_is_selected(gtk_tree_view_get_selection(PGtkTreeView(FWidget)), Path));
+ gtk_tree_path_free(Path);
+ Path := nil;
+ end;
+// WriteLn('Selected: ', String(gtk_tree_path_to_string(Path)));
+ ConvertPathToChild(Path);
+(* gtk_tree_model_get_iter_from_string(gtk_tree_view_get_model(PGtkTreeView(FWidget)){FTreeModelSort}, @Iter, gtk_tree_path_to_string(Path));
+ gtk_tree_model_sort_convert_child_iter_to_iter(FTreeModelSort, @NewIter, @Iter);
+ Path := gtk_tree_model_get_path({FTreeModelSort}gtk_tree_view_get_model(PGtkTreeView(FWidget)), @NewIter);
+ *)
+// gtk_tree_model_sort_clear_cache(FTreeModelSort);
+// Path := gtk_tree_model_sort_convert_path_to_child_path(FTreeModelSort, Path);
+ end else begin
+ if not gtk_tree_selection_get_selected(gtk_tree_view_get_selection(PGtkTreeView(FWidget)), nil, @Iter) then Exit;
+ Path := gtk_tree_model_get_path(gtk_tree_view_get_model(PGtkTreeView(FWidget)), @iter);
+ if not Assigned(Path) then Exit;
+ ConvertPathToChild(Path);
+ end;
+// WriteLn('Selected Converted: ', String(gtk_tree_path_to_string(Path)));
+ if Assigned(Path) then begin
+ if Application.GTKVersion_2_0_5_Up then AIndex := gtk_tree_path_get_indices(Path)^
+ else AIndex := StrToIntDef(String(gtk_tree_path_to_string(Path)), 0);
+ Result := Items[AIndex];
+ Result.FIndex := AIndex;
+ gtk_tree_path_free(Path);
+ end;
+end;
+
+procedure TGTKListView.SetSelected(Value: TGTKListItem);
+var Path: PGtkTreePath;
+begin
+ Path := gtk_tree_path_new_from_string(StringToPgchar(IntToStr(Value.FIndex)));
+ ConvertChildToPath(Path);
+ gtk_tree_selection_select_path(FSelection, Path);
+ gtk_tree_path_free(Path);
+end;
+
+function GtkTreeIterCompareFunc(model: PGtkTreeModel; a: PGtkTreeIter; b: PGtkTreeIter; user_data: gpointer): gint; cdecl;
+var Value: TGValue;
+ s: string;
+begin
+ if not Assigned(TGTKListView(user_data).FCompareFunc) then begin
+ Value.g_type := 0;
+ gtk_tree_model_get_value(model, a, TGTKView(user_data).GetSortColumnID, @Value);
+ s := string(PChar(Value.data[0].v_pointer));
+ Value.g_type := 0;
+ gtk_tree_model_get_value(model, b, TGTKView(user_data).GetSortColumnID, @Value);
+ Result := AnsiCompareStr(s, PChar(Value.data[0].v_pointer));
+ end else Result := TGTKListView(user_data).FCompareFunc(TGTKView(user_data), model, a, b);
+end;
+
+procedure TGTKListView.StartEditing(ColumnNo: integer);
+var Iter: TGtkTreeIter;
+ Path: PGtkTreePath;
+begin
+ if not gtk_tree_selection_get_selected(FSelection, nil, @Iter) then Exit;
+ Path := gtk_tree_model_get_path(FTreeModel, @iter);
+ if not Assigned(Path) then Exit;
+ gtk_tree_view_set_cursor(PGtkTreeView(FWidget), Path, FColumns[ColumnNo].FColumn, True);
+end;
+
+function TGTKListView.GetItemAtPos(X, Y: integer): TGTKListItem;
+var Path: PGtkTreePath;
+ Column: PGtkTreeViewColumn;
+ AIndex: integer;
+begin
+ Result := nil;
+ if gtk_tree_view_get_path_at_pos(PGtkTreeView(FWidget), X, Y, Path, Column, nil, nil) then begin
+ if not Assigned(Path) then Exit;
+ ConvertPathToChild(Path);
+ if Application.GTKVersion_2_0_5_Up then AIndex := gtk_tree_path_get_indices(Path)^
+ else AIndex := StrToIntDef(String(gtk_tree_path_to_string(Path)), 0);
+ Result := Items[AIndex];
+ Result.FIndex := AIndex;
+ gtk_tree_path_free(Path);
+ end;
+end;
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKListItems.Create(AOwner: TComponent);
+const Types : GType = G_TYPE_STRING;
+begin
+ inherited Create(AOwner);
+ FOwner := AOwner;
+ FStore := gtk_list_store_newv(1, @Types);
+ FList := TList.Create;
+end;
+
+destructor TGTKListItems.Destroy;
+begin
+ if not (csDestroying in ComponentState) then begin
+ Clear;
+ FList.Free;
+ gtk_object_destroy(PGtkObject(FStore));
+ end;
+ inherited Destroy;
+end;
+
+constructor TGTKListItems.CreateTyped(AOwner: TComponent; ColumnTypes: array of TGTKListColumnType);
+var i: integer;
+ Cols : array[0..255] of GType;
+begin
+ inherited Create(AOwner);
+ FOwner := AOwner;
+ FList := TList.Create;
+ for i := Low(ColumnTypes) to High(ColumnTypes) do
+ case ColumnTypes[i] of
+ lcText : Cols[i] := G_TYPE_STRING;
+ lcNumber : Cols[i] := G_TYPE_LONG;
+ lcPointer : Cols[i] := G_TYPE_POINTER;
+ lcPixbuf : Cols[i] := GDK_TYPE_PIXBUF;
+ lcBoolean : Cols[i] := G_TYPE_BOOLEAN;
+ end;
+ FStore := gtk_list_store_newv(Length(ColumnTypes), @Cols);
+end;
+
+procedure TGTKListItems.SetColumnTypes(Types: array of TGTKListColumnType);
+var i: integer;
+ Cols : array[0..255] of GType;
+begin
+ for i := Low(Types) to High(Types) do
+ case Types[i] of
+ lcText : Cols[i] := G_TYPE_STRING;
+ lcNumber : Cols[i] := G_TYPE_LONG;
+ lcPointer : Cols[i] := G_TYPE_POINTER;
+ lcPixbuf : Cols[i] := GDK_TYPE_PIXBUF;
+ lcBoolean : Cols[i] := G_TYPE_BOOLEAN;
+ end;
+ g_object_unref(PGObject(FStore));
+ FStore := gtk_list_store_newv(Length(Types), @Cols);
+ (FOwner as TGTKListView).Recreate;
+end;
+
+function TGTKListItems.GetItem(Index: longint): TGTKListItem;
+begin
+ Result := TGTKListItem(FList[Index]);
+ Result.FIndex := Index;
+end;
+
+procedure TGTKListItems.SetItem(Index: longint; Value: TGTKListItem);
+begin
+ FList[Index] := Value;
+end;
+
+function TGTKListItems.Add: TGTKListItem;
+begin
+ Result := TGTKListItem.Create(Self);
+ Result.FIndex := GetCount;
+// Insert(GetCount, Result);
+ Append(Result);
+end;
+
+function TGTKListItems.GetCount: longint;
+begin
+ Result := FList.Count;
+end;
+
+procedure TGTKListItems.Clear;
+var i: longint;
+begin
+ for i := Count - 1 downto 0 do Delete(i); // !!!! DON'T use here gtk_list_store_clear(FStore), because it causes memory leaks !!!!
+end;
+
+procedure TGTKListItems.Delete(Index: longint);
+var x: pointer;
+ Iter: TGtkTreeIter;
+begin
+ x := FList[Index];
+ if gtk_tree_model_get_iter_from_string(PGtkTreeModel(FStore), @Iter, StringToPgchar(IntToStr(Index))) then begin
+// (FOwner as TGTKView).CovertSortableIter(Iter);
+ gtk_list_store_remove(FStore, @Iter);
+ end;
+ FList.Delete(Index);
+ TObject(x).Free;
+end;
+
+procedure TGTKListItems.Insert(Index: longint; Item: TGTKListItem);
+var Iter: TGtkTreeIter;
+begin
+ FList.Insert(Index, Item);
+ gtk_list_store_insert(FStore, @Iter, Index);
+end;
+
+procedure TGTKListItems.Append(Item: TGTKListItem);
+var Iter: TGtkTreeIter;
+begin
+ FList.Add(Item);
+ gtk_list_store_append(FStore, @Iter);
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKTreeViewColumns.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FOwner := AOwner;
+ FList := TList.Create;
+end;
+
+destructor TGTKTreeViewColumns.Destroy;
+begin
+ if not (csDestroying in ComponentState) then begin
+ Clear;
+ FList.Free;
+ end;
+ inherited Destroy;
+end;
+
+function TGTKTreeViewColumns.GetItem(Index: Integer): TGTKTreeViewColumn;
+begin
+ Result := TGTKTreeViewColumn(FList[Index]);
+ Result.FIndex := Index;
+end;
+
+procedure TGTKTreeViewColumns.SetItem(Index: Integer; Value: TGTKTreeViewColumn);
+begin
+ FList[Index] := Value;
+end;
+
+function TGTKTreeViewColumns.Add: TGTKTreeViewColumn;
+begin
+ Result := TGTKTreeViewColumn.Create(Self);
+ Result.FIndex := GetCount;
+ Insert(GetCount, Result);
+end;
+
+function TGTKTreeViewColumns.AddTyped(ColType: TGTKTreeViewColumnType): TGTKTreeViewColumn;
+begin
+ Result := TGTKTreeViewColumn.CreateTyped(Self, ColType);
+ Result.FIndex := GetCount;
+ Insert(GetCount, Result);
+end;
+
+function TGTKTreeViewColumns.GetCount: Integer;
+begin
+ Result := FList.Count;
+end;
+
+procedure TGTKTreeViewColumns.Clear;
+var i: Integer;
+begin
+ for i := Count - 1 downto 0 do Delete(i);
+end;
+
+procedure TGTKTreeViewColumns.Delete(Index: Integer);
+var x : pointer;
+begin
+ if not (csDestroying in ComponentState) then
+ gtk_tree_view_remove_column(PGtkTreeView((FOwner as TGTKControl).FWidget), TGTKTreeViewColumn(FList[Index]).FColumn);
+ x := FList[Index];
+ FList.Delete(Index);
+ TObject(x).Free;
+end;
+
+procedure TGTKTreeViewColumns.Insert(Index: Integer; Item: TGTKTreeViewColumn);
+begin
+ FList.Insert(Index, Item);
+ Item.FIndex := Index;
+ gtk_tree_view_insert_column(PGtkTreeView((FOwner as TGTKControl).FWidget), Item.FColumn, Index);
+ if Assigned((FOwner as TGTKView).FTreeModelSort) then
+ gtk_tree_sortable_set_sort_func(PGtkTreeSortable((FOwner as TGTKView).FTreeModelSort), Index, TGtkTreeIterCompareFunc(@GtkTreeIterCompareFunc), FOwner, nil);
+ gtk_tree_view_column_set_cell_data_func(Item.FColumn, Item.FRenderer, @CellDataFunc, (FOwner as TGTKView), nil);
+ if Item.ColumnType = ctImageText then gtk_tree_view_column_set_cell_data_func(Item.FColumn, Item.FPixbufRenderer, @CellDataFunc, (FOwner as TGTKView), nil);
+end;
+
+procedure TGTKTreeViewColumns.AutosizeColumns;
+begin
+ gtk_tree_view_columns_autosize(PGtkTreeView((FOwner as TGTKControl).FWidget));
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKTreeViewColumn.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FOwner := AOwner;
+ FColumn := gtk_tree_view_column_new;
+ FRenderer := nil;
+ FPixbufRenderer := nil;
+ FOnEdited := nil;
+ FOnToggled := nil;
+ FOnClicked := nil;
+ SetColumnType(ctText);
+end;
+
+constructor TGTKTreeViewColumn.CreateTyped(AOwner: TComponent; ColType: TGTKTreeViewColumnType);
+begin
+ inherited Create(AOwner);
+ FOwner := AOwner;
+ FColumn := gtk_tree_view_column_new;
+ FRenderer := nil;
+ FPixbufRenderer := nil;
+ FOnEdited := nil;
+ FOnToggled := nil;
+ FOnClicked := nil;
+ SetColumnType(ColType);
+end;
+
+destructor TGTKTreeViewColumn.Destroy;
+begin
+ if not (csDestroying in ComponentState) then begin
+ gtk_object_destroy(PGtkObject(FRenderer));
+ if GTK_IS_OBJECT(FColumn) then gtk_object_destroy(PGtkObject(FColumn));
+ end;
+ inherited Destroy;
+end;
+
+function TGTKTreeViewColumn.GetCaption: string;
+begin
+ Result := PgcharToString(gtk_tree_view_column_get_title(FColumn));
+end;
+
+procedure TGTKTreeViewColumn.SetCaption(Value: string);
+begin
+ gtk_tree_view_column_set_title(FColumn, StringToPgchar(Value));
+end;
+
+function TGTKTreeViewColumn.GetVisible: boolean;
+begin
+ Result := gtk_tree_view_column_get_visible(FColumn);
+end;
+
+procedure TGTKTreeViewColumn.SetVisible(Value: boolean);
+begin
+ gtk_tree_view_column_set_visible(FColumn, Value);
+end;
+
+function TGTKTreeViewColumn.GetResizable: boolean;
+begin
+ Result := gtk_tree_view_column_get_resizable(FColumn);
+end;
+
+procedure TGTKTreeViewColumn.SetResizable(Value: boolean);
+begin
+ gtk_tree_view_column_set_resizable(FColumn, Value);
+end;
+
+function TGTKTreeViewColumn.GetSizingMode: TGTKTreeViewColumnSizingMode;
+begin
+ Result := TGTKTreeViewColumnSizingMode(gtk_tree_view_column_get_sizing(FColumn));
+end;
+
+procedure TGTKTreeViewColumn.SetSizingMode(Value: TGTKTreeViewColumnSizingMode);
+begin
+ gtk_tree_view_column_set_sizing(FColumn, TGtkTreeViewColumnSizing(Value));
+end;
+
+function TGTKTreeViewColumn.GetWidth: integer;
+begin
+ Result := gtk_tree_view_column_get_width(FColumn);
+end;
+
+function TGTKTreeViewColumn.GetFixedWidth: integer;
+begin
+ Result := gtk_tree_view_column_get_fixed_width(FColumn);
+end;
+
+procedure TGTKTreeViewColumn.SetFixedWidth(Value: integer);
+begin
+ gtk_tree_view_column_set_fixed_width(FColumn, Value);
+end;
+
+function TGTKTreeViewColumn.GetMinWidth: integer;
+begin
+ Result := gtk_tree_view_column_get_min_width(FColumn);
+end;
+
+procedure TGTKTreeViewColumn.SetMinWidth(Value: integer);
+begin
+ gtk_tree_view_column_set_min_width(FColumn, Value);
+end;
+
+function TGTKTreeViewColumn.GetMaxWidth: integer;
+begin
+ Result := gtk_tree_view_column_get_max_width(FColumn);
+end;
+
+procedure TGTKTreeViewColumn.SetMaxWidth(Value: integer);
+begin
+ gtk_tree_view_column_set_max_width(FColumn, Value);
+end;
+
+function TGTKTreeViewColumn.GetClickable: boolean;
+begin
+ Result := gtk_tree_view_column_get_clickable(FColumn);
+end;
+
+procedure TGTKTreeViewColumn.SetClickable(Value: boolean);
+begin
+ gtk_tree_view_column_set_clickable(FColumn, Value);
+end;
+
+function TGTKTreeViewColumn.GetAlignment: Double;
+begin
+ Result := gtk_tree_view_column_get_alignment(FColumn);
+end;
+
+procedure TGTKTreeViewColumn.SetAlignment(Value: Double);
+begin
+ gtk_tree_view_column_set_alignment(FColumn, Value);
+end;
+
+function TGTKTreeViewColumn.GetReorderable: boolean;
+begin
+ Result := gtk_tree_view_column_get_reorderable(FColumn);
+end;
+
+procedure TGTKTreeViewColumn.SetReorderable(Value: boolean);
+begin
+ gtk_tree_view_column_set_reorderable(FColumn, Value);
+end;
+
+function TGTKTreeViewColumn.GetSortID: integer;
+begin
+ Result := gtk_tree_view_column_get_sort_column_id(FColumn);
+end;
+
+procedure TGTKTreeViewColumn.SetSortID(Value: integer);
+begin
+ gtk_tree_view_column_set_sort_column_id(FColumn, Value);
+end;
+
+function TGTKTreeViewColumn.GetShowSortIndicator: boolean;
+begin
+ Result := gtk_tree_view_column_get_sort_indicator(FColumn);
+end;
+
+procedure TGTKTreeViewColumn.SetShowSortIndicator(Value: boolean);
+begin
+ gtk_tree_view_column_set_sort_indicator(FColumn, Value);
+end;
+
+function TGTKTreeViewColumn.GetSortOrder: TGTKTreeViewSortOrder;
+begin
+ Result := TGTKTreeViewSortOrder(gtk_tree_view_column_get_sort_order(FColumn));
+end;
+
+procedure TGTKTreeViewColumn.SetSortOrder(Value: TGTKTreeViewSortOrder);
+begin
+ gtk_tree_view_column_set_sort_order(FColumn, TGtkSortType(Value));
+end;
+
+procedure TGTKTreeViewColumn_edited(cell: PGtkCellRendererText; const path_string, new_text: pgchar; data: gpointer); cdecl;
+var NewText: string;
+ AllowChange: boolean;
+ DataColumn, AIndex: integer;
+ Path: PGtkTreePath;
+begin
+ if Assigned(TGTKTreeViewColumn(data).FOnEdited) then begin
+ NewText := PgcharToString(new_text);
+ AllowChange := True;
+ DataColumn := TGTKTreeViewColumn(data).FIndex;
+ Path := gtk_tree_path_new_from_string(path_string);
+ if not Assigned(Path) then Exit;
+ if Application.GTKVersion_2_0_5_Up then AIndex := gtk_tree_path_get_indices(Path)^
+ else AIndex := StrToIntDef(String(gtk_tree_path_to_string(Path)), 0);
+ TGTKTreeViewColumn(data).FOnEdited(TGTKTreeViewColumn(data), TGTKTreeViewColumn(data), ((TGTKTreeViewColumn(data).FOwner as TGTKTreeViewColumns).FOwner as TGTKListView).Items[AIndex], NewText, AllowChange, DataColumn);
+ if AllowChange and (((TGTKTreeViewColumn(data).FOwner as TGTKTreeViewColumns).FOwner as TGTKListView).Items.Count < AIndex) then
+ ((TGTKTreeViewColumn(data).FOwner as TGTKTreeViewColumns).FOwner as TGTKListView).Items[AIndex].SetValue(DataColumn, NewText);
+ gtk_tree_path_free(Path);
+ end;
+end;
+
+procedure TGTKTreeViewColumn_toggled(cell: PGtkCellRendererToggle; const path_string: pgchar; data: gpointer); cdecl;
+var Path: PGtkTreePath;
+ AIndex: integer;
+begin
+ if Assigned(data) and Assigned(TGTKTreeViewColumn(data).FOnToggled) then begin
+ Path := gtk_tree_path_new_from_string(path_string);
+ if not Assigned(Path) then Exit;
+ if Application.GTKVersion_2_0_5_Up then AIndex := gtk_tree_path_get_indices(Path)^
+ else AIndex := StrToIntDef(String(gtk_tree_path_to_string(Path)), 0);
+ TGTKTreeViewColumn(data).FOnToggled(TGTKTreeViewColumn(data), TGTKTreeViewColumn(data), ((TGTKTreeViewColumn(data).FOwner as TGTKTreeViewColumns).FOwner as TGTKListView).Items[AIndex]);
+ end;
+end;
+
+procedure TGTKTreeViewColumn_clicked(treeviewcolumn: PGtkTreeViewColumn; user_data: gpointer); cdecl;
+begin
+ if Assigned(user_data) and Assigned(TGTKTreeViewColumn(user_data).FOnClicked) then
+ TGTKTreeViewColumn(user_data).FOnClicked(TGTKTreeViewColumn(user_data));
+end;
+
+procedure TGTKTreeViewColumn.SetColumnType(Value: TGTKTreeViewColumnType);
+begin
+ FColumnType := Value;
+ if Assigned(FRenderer) then begin
+ gtk_tree_view_column_clear(FColumn);
+ gtk_object_destroy(PGtkObject(FRenderer));
+ end;
+ case Value of
+ ctText : FRenderer := gtk_cell_renderer_text_new;
+ ctToggle : FRenderer := gtk_cell_renderer_toggle_new;
+ ctImageText : begin
+ FRenderer := gtk_cell_renderer_text_new;
+ FPixbufRenderer := gtk_cell_renderer_pixbuf_new;
+ end;
+ end;
+ if Value = ctImageText then gtk_tree_view_column_pack_start(FColumn, FPixbufRenderer, False);
+ gtk_tree_view_column_pack_start(FColumn, FRenderer, True);
+ if (Value = ctImageText) or (Value = ctText) then g_signal_connect(FRenderer, 'edited', G_CALLBACK(@TGTKTreeViewColumn_edited), Self);
+ if Value = ctToggle then g_signal_connect(FRenderer, 'toggled', G_CALLBACK(@TGTKTreeViewColumn_toggled), Self);
+ g_signal_connect_after(FColumn, 'clicked', G_CALLBACK(@TGTKTreeViewColumn_clicked), Self);
+end;
+
+procedure TGTKTreeViewColumn.AddAttribute(Attribute: string; Value: integer);
+begin
+ gtk_tree_view_column_add_attribute(FColumn, FRenderer, StringToPgchar(Attribute), Value);
+end;
+
+procedure TGTKTreeViewColumn.AddImageAttribute(Attribute: string; Value: integer);
+begin
+ gtk_tree_view_column_add_attribute(FColumn, FPixbufRenderer, StringToPgchar(Attribute), Value);
+end;
+
+procedure TGTKTreeViewColumn.ClearAttributes;
+begin
+ gtk_tree_view_column_clear_attributes(FColumn, FRenderer);
+end;
+
+procedure TGTKTreeViewColumn.SetProperty(AProperty: string; Value: integer);
+var AValue: TGValue;
+begin
+ AValue.g_type := G_TYPE_LONG;
+ AValue.data[0].v_long := Value;
+ g_object_set_property(PGObject(FRenderer), StringToPgchar(AProperty), @AValue);
+end;
+
+procedure TGTKTreeViewColumn.SetProperty(AProperty: string; Value: string);
+var AValue: TGValue;
+begin
+ AValue.g_type := G_TYPE_STRING;
+ AValue.data[0].v_pointer := StringToPgchar(Value);
+ g_object_set_property(PGObject(FRenderer), StringToPgchar(AProperty), @AValue);
+end;
+
+procedure TGTKTreeViewColumn.SetProperty(AProperty: string; Value: Double);
+var AValue: TGValue;
+begin
+ AValue.g_type := G_TYPE_DOUBLE;
+ AValue.data[0].v_double := Value;
+ g_object_set_property(PGObject(FRenderer), StringToPgchar(AProperty), @AValue);
+end;
+
+procedure TGTKTreeViewColumn.SetProperty(AProperty: string; Value: pointer);
+var AValue: TGValue;
+begin
+ AValue.g_type := G_TYPE_POINTER;
+ AValue.data[0].v_pointer := Value;
+ g_object_set_property(PGObject(FRenderer), StringToPgchar(AProperty), @AValue);
+end;
+
+procedure TGTKTreeViewColumn.SetImageProperty(AProperty: string; Value: integer);
+var AValue: TGValue;
+begin
+ AValue.g_type := G_TYPE_LONG;
+ AValue.data[0].v_long := Value;
+ g_object_set_property(PGObject(FPixbufRenderer), StringToPgchar(AProperty), @AValue);
+end;
+
+procedure TGTKTreeViewColumn.SetImageProperty(AProperty: string; Value: string);
+var AValue: TGValue;
+begin
+ AValue.g_type := G_TYPE_STRING;
+ AValue.data[0].v_pointer := StringToPgchar(Value);
+ g_object_set_property(PGObject(FPixbufRenderer), StringToPgchar(AProperty), @AValue);
+end;
+
+procedure TGTKTreeViewColumn.SetImageProperty(AProperty: string; Value: Double);
+var AValue: TGValue;
+begin
+ AValue.g_type := G_TYPE_DOUBLE;
+ AValue.data[0].v_double := Value;
+ g_object_set_property(PGObject(FPixbufRenderer), StringToPgchar(AProperty), @AValue);
+end;
+
+procedure TGTKTreeViewColumn.SetImageProperty(AProperty: string; Value: pointer);
+var AValue: TGValue;
+begin
+ AValue.g_type := G_TYPE_POINTER;
+ AValue.data[0].v_pointer := Value;
+ g_object_set_property(PGObject(FPixbufRenderer), StringToPgchar(AProperty), @AValue);
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TGTKListItem.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ FOwner := AOwner;
+ FData := nil;
+end;
+
+destructor TGTKListItem.Destroy;
+begin
+ inherited Destroy;
+end;
+
+function TGTKListItem.AsString(Index: longint): string;
+var Iter: TGtkTreeIter;
+ AValue: TGValue;
+begin
+ Result := '';
+ if gtk_tree_model_get_iter_from_string(PGtkTreeModel((FOwner as TGTKListItems).FStore), @Iter, StringToPgchar(IntToStr(FIndex))) then
+ begin
+ AValue.g_type := 0;
+ gtk_tree_model_get_value(PGtkTreeModel((FOwner as TGTKListItems).FStore), @Iter, Index, @AValue);
+ Result := PgcharToString(AValue.data[0].v_pointer);
+ end;
+end;
+
+function TGTKListItem.AsInteger(Index: longint): integer;
+var Iter: TGtkTreeIter;
+ AValue: TGValue;
+begin
+ Result := 0;
+ if gtk_tree_model_get_iter_from_string(PGtkTreeModel((FOwner as TGTKListItems).FStore), @Iter, StringToPgchar(IntToStr(FIndex))) then
+ begin
+ AValue.g_type := 0;
+ gtk_tree_model_get_value(PGtkTreeModel((FOwner as TGTKListItems).FStore), @Iter, Index, @AValue);
+ Result := AValue.data[0].v_long;
+ end;
+end;
+
+function TGTKListItem.AsPointer(Index: longint): pointer;
+var Iter: TGtkTreeIter;
+ AValue: TGValue;
+begin
+ Result := nil;
+ if gtk_tree_model_get_iter_from_string(PGtkTreeModel((FOwner as TGTKListItems).FStore), @Iter, StringToPgchar(IntToStr(FIndex))) then
+ begin
+ AValue.g_type := 0;
+ gtk_tree_model_get_value(PGtkTreeModel((FOwner as TGTKListItems).FStore), @Iter, Index, @AValue);
+ Result := AValue.data[0].v_pointer;
+ end;
+end;
+
+function TGTKListItem.AsBoolean(Index: longint): boolean;
+var Iter: TGtkTreeIter;
+ AValue: TGValue;
+begin
+ Result := False;
+ if gtk_tree_model_get_iter_from_string(PGtkTreeModel((FOwner as TGTKListItems).FStore), @Iter, StringToPgchar(IntToStr(FIndex))) then
+ begin
+ AValue.g_type := 0;
+ gtk_tree_model_get_value(PGtkTreeModel((FOwner as TGTKListItems).FStore), @Iter, Index, @AValue);
+ Result := boolean(AValue.data[0].v_int);
+ end;
+end;
+
+procedure TGTKListItem.SetValue(Index: longint; Value: string);
+var Iter: TGtkTreeIter;
+begin
+ if gtk_tree_model_get_iter_from_string(PGtkTreeModel((FOwner as TGTKListItems).FStore), @Iter, StringToPgchar(IntToStr(FIndex)))
+ then gtk_list_store_set(PGtkTreeModel((FOwner as TGTKListItems).FStore), @Iter, Index, StringToPgchar(Value), -1);
+end;
+
+procedure TGTKListItem.SetValue(Index: longint; Value: integer);
+var Iter: TGtkTreeIter;
+begin
+ if gtk_tree_model_get_iter_from_string(PGtkTreeModel((FOwner as TGTKListItems).FStore), @Iter, StringToPgchar(IntToStr(FIndex)))
+ then gtk_list_store_set(PGtkTreeModel((FOwner as TGTKListItems).FStore), @Iter, Index, Value, -1);
+end;
+
+procedure TGTKListItem.SetValue(Index: longint; Value: pointer);
+var Iter: TGtkTreeIter;
+begin
+ if gtk_tree_model_get_iter_from_string(PGtkTreeModel((FOwner as TGTKListItems).FStore), @Iter, StringToPgchar(IntToStr(FIndex)))
+ then gtk_list_store_set(PGtkTreeModel((FOwner as TGTKListItems).FStore), @Iter, Index, Value, -1);
+end;
+
+procedure TGTKListItem.SetValue(Index: longint; Value: boolean);
+var Iter: TGtkTreeIter;
+begin
+ if gtk_tree_model_get_iter_from_string(PGtkTreeModel((FOwner as TGTKListItems).FStore), @Iter, StringToPgchar(IntToStr(FIndex)))
+ then gtk_list_store_set(PGtkTreeModel((FOwner as TGTKListItems).FStore), @Iter, Index, Value, -1);
+end;
+
+function TGTKListItem.GetSelected: boolean;
+var Iter: TGtkTreeIter;
+begin
+ Result := False;
+ if gtk_tree_model_get_iter_from_string(PGtkTreeModel((FOwner as TGTKListItems).FStore), @Iter, StringToPgchar(IntToStr(FIndex))) then begin
+// ((FOwner as TGTKListItems).FOwner as TGTKView).ConvertSortableIter(Iter);
+ Result := gtk_tree_selection_iter_is_selected(((FOwner as TGTKListItems).FOwner as TGTKView).FSelection, @Iter);
+ end;
+end;
+
+procedure TGTKListItem.SetSelected(Value: boolean);
+var Iter, NewIter: TGtkTreeIter;
+ Path: PGtkTreePath;
+begin
+ try
+ if not Application.GTKVersion_2_0_5_Up then begin
+ Path := gtk_tree_path_new_from_string(StringToPgchar(IntToStr(FIndex)));
+ ((FOwner as TGTKListItems).FOwner as TGTKView).ConvertChildToPath(Path);
+ gtk_tree_selection_select_path(((FOwner as TGTKListItems).FOwner as TGTKView).FSelection, Path);
+ gtk_tree_path_free(Path);
+ end else
+ if gtk_tree_model_get_iter_from_string(PGtkTreeModel((FOwner as TGTKListItems).FStore), @Iter, StringToPgchar(IntToStr(FIndex))) then begin
+ if Assigned(((FOwner as TGTKListItems).FOwner as TGTKView).FTreeModelSort) then begin
+ gtk_tree_model_sort_convert_child_iter_to_iter(((FOwner as TGTKListItems).FOwner as TGTKView).FTreeModelSort, @NewIter, @Iter);
+ Iter := NewIter;
+ end;
+ if Value then gtk_tree_selection_select_iter(((FOwner as TGTKListItems).FOwner as TGTKView).FSelection, @Iter)
+ else gtk_tree_selection_unselect_iter(((FOwner as TGTKListItems).FOwner as TGTKView).FSelection, @Iter);
+ end;
+ except end;
+end;
+
+procedure TGTKListItem.SetCursor(const FocusColumnNo: integer; const StartEditing, UseAlignment: boolean; const AlignX, AlignY: Double);
+var Path: PGtkTreePath;
+ Column: PGtkTreeViewColumn;
+// Renderer: PGtkCellRenderer;
+ i : integer;
+begin
+ Path := gtk_tree_path_new_from_string(StringToPgchar(IntToStr(FIndex)));
+ if not Assigned(Path) then Exit;
+ ((FOwner as TGTKListItems).FOwner as TGTKView).ConvertChildToPath(Path);
+ if not Assigned(Path) then Exit;
+
+ Column := ((FOwner as TGTKListItems).FOwner as TGTKView).Columns[FocusColumnNo].FColumn;
+// Renderer := ((FOwner as TGTKListItems).FOwner as TGTKView).Columns[FocusColumnNo].FRenderer;
+
+// if not Application.GTKVersion_2_0_5_Up then
+ for i := 1 to 2 do gtk_main_iteration_do(False); // This ugly piece of code HAVE TO BE HERE due some focus-related problems in GtkTreeView
+ gtk_tree_view_set_cursor(PGtkTreeView(((FOwner as TGTKListItems).FOwner as TGTKView).FWidget), Path, Column, StartEditing);
+// gtk_tree_view_set_cursor(PGtkTreeView(((FOwner as TGTKListItems).FOwner as TGTKView).FWidget), Path, Column, StartEditing);
+// gtk_tree_view_set_cursor_on_cell(PGtkTreeView(((FOwner as TGTKListItems).FOwner as TGTKView).FWidget), Path, Column, Renderer, StartEditing);
+ gtk_tree_view_scroll_to_cell(PGtkTreeView(((FOwner as TGTKListItems).FOwner as TGTKView).FWidget), Path, nil, UseAlignment, AlignX, AlignY);
+
+ gtk_tree_path_free(Path);
+end;
+
+procedure TGTKListItem.StartEditing(ColumnNo: integer);
+var CellEditable: PGtkCellEditable;
+ Path: PGtkTreePath;
+ Column: PGtkTreeViewColumn;
+ BackgroundRect, CellRect: TGdkRectangle;
+begin
+ Path := gtk_tree_path_new_from_string(StringToPgchar(IntToStr(FIndex)));
+ if not Assigned(Path) then Exit;
+ ((FOwner as TGTKListItems).FOwner as TGTKView).ConvertChildToPath(Path);
+ if not Assigned(Path) then Exit;
+ Column := ((FOwner as TGTKListItems).FOwner as TGTKView).Columns[ColumnNo].FColumn;
+ gtk_tree_view_get_background_area(PGtkTreeView(((FOwner as TGTKListItems).FOwner as TGTKView).FWidget), Path, Column, @BackgroundRect);
+ gtk_tree_view_get_cell_area(PGtkTreeView(((FOwner as TGTKListItems).FOwner as TGTKView).FWidget), Path, Column, @CellRect);
+
+ gtk_tree_view_column_focus_cell(Column, ((FOwner as TGTKListItems).FOwner as TGTKView).Columns[ColumnNo].FRenderer);
+ CellEditable := gtk_cell_renderer_start_editing(((FOwner as TGTKListItems).FOwner as TGTKView).Columns[ColumnNo].FRenderer,
+ nil, ((FOwner as TGTKListItems).FOwner as TGTKView).FWidget, PChar(StringToPgchar(IntToStr(FIndex))),
+ @BackgroundRect, @CellRect, {GTK_CELL_RENDERER_SELECTED or GTK_CELL_RENDERER_SORTED} 0);
+ gtk_widget_show(CellEditable);
+// gtk_cell_editable_start_editing(CellEditable, nil);
+
+
+ gtk_tree_path_free(Path);
+end;
+
+procedure TGTKListItem.RedrawRow;
+var Rect, BackgroundRect: TGdkRectangle;
+ Path: PGtkTreePath;
+ Column: PGtkTreeViewColumn;
+begin
+ Path := gtk_tree_path_new_from_string(StringToPgchar(IntToStr(FIndex)));
+ if not Assigned(Path) then Exit;
+ ((FOwner as TGTKListItems).FOwner as TGTKView).ConvertChildToPath(Path);
+ if not Assigned(Path) then Exit;
+ Column := ((FOwner as TGTKListItems).FOwner as TGTKView).Columns[0].FColumn;
+ gtk_tree_view_get_background_area(PGtkTreeView(((FOwner as TGTKListItems).FOwner as TGTKView).FWidget), Path, Column, @BackgroundRect);
+
+ Rect.x := 0;
+ Rect.width := ((FOwner as TGTKListItems).FOwner as TGTKView).FWidget^.allocation.width;
+ Rect.y := BackgroundRect.y;
+ Rect.height := BackgroundRect.height;
+ gdk_window_invalidate_rect(gtk_tree_view_get_bin_window(PGtkTreeView(((FOwner as TGTKListItems).FOwner as TGTKView).FWidget)), @Rect, True);
+
+ gtk_tree_path_free(Path);
+end;
+
+function TGTKListItem.IsVisible: boolean;
+var CellRect, VisibleRect: TGdkRectangle;
+ Path: PGtkTreePath;
+begin
+ Result := False;
+ gtk_tree_view_get_visible_rect(PGtkTreeView(((FOwner as TGTKListItems).FOwner as TGTKView).FWidget), @VisibleRect);
+ if not Assigned(Path) then Exit;
+ Path := gtk_tree_path_new_from_string(StringToPgchar(IntToStr(FIndex)));
+ ((FOwner as TGTKListItems).FOwner as TGTKView).ConvertChildToPath(Path);
+ if not Assigned(Path) then Exit;
+ gtk_tree_view_get_background_area(PGtkTreeView(((FOwner as TGTKListItems).FOwner as TGTKView).FWidget), Path, nil, @CellRect);
+ gtk_tree_path_free(Path);
+ Result := (CellRect.y > VisibleRect.y) and (CellRect.y + CellRect.height < VisibleRect.y + VisibleRect.height);
+end;
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+
+
+end.
diff --git a/pixmaps/emblem_symbolic_link_png.inc b/pixmaps/emblem_symbolic_link_png.inc
new file mode 100644
index 0000000..10e0f29
--- /dev/null
+++ b/pixmaps/emblem_symbolic_link_png.inc
@@ -0,0 +1,29 @@
+const emblem_symbolic_link_png: array[1..349] of byte = (
+ $47, $64, $6B, $50,
+ $00, $00, $01, $5C,
+ $01, $01, $00, $02,
+ $00, $00, $00, $24,
+ $00, $00, $00, $09,
+ $00, $00, $00, $09,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,
+ $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,
+ $FF, $FF, $FF, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $FF, $FF, $FF, $FF,
+ $00, $33, $66, $FF, $00, $33, $66, $FF, $00, $33, $66, $FF, $00, $33, $66, $FF,
+ $EF, $EF, $EF, $FF, $CC, $CC, $CC, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $FF, $FF, $FF, $FF, $00, $33, $66, $FF, $00, $33, $66, $FF, $00, $33, $66, $FF,
+ $EF, $EF, $EF, $FF, $EF, $EF, $EF, $FF, $CC, $CC, $CC, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $FF, $FF, $FF, $FF, $00, $33, $66, $FF, $00, $33, $66, $FF,
+ $00, $33, $66, $FF, $00, $33, $66, $FF, $EF, $EF, $EF, $FF, $CC, $CC, $CC, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $FF, $FF, $FF, $FF, $00, $33, $66, $FF,
+ $EF, $EF, $EF, $FF, $00, $33, $66, $FF, $00, $33, $66, $FF, $00, $2C, $59, $FF,
+ $CC, $CC, $CC, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $FF, $FF, $FF, $FF,
+ $EF, $EF, $EF, $FF, $EF, $EF, $EF, $FF, $EF, $EF, $EF, $FF, $00, $28, $50, $FF,
+ $00, $25, $4A, $FF, $CC, $CC, $CC, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $FF, $FF, $FF, $FF, $CC, $CC, $CC, $FF, $CC, $CC, $CC, $FF, $CC, $CC, $CC, $FF,
+ $CC, $CC, $CC, $FF, $CC, $CC, $CC, $FF, $CC, $CC, $CC, $FF, $18, $18, $18, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $09, $09, $09, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00);
+
diff --git a/pixmaps/gnome_dev_cdrom_16_png.inc b/pixmaps/gnome_dev_cdrom_16_png.inc
new file mode 100644
index 0000000..b497efc
--- /dev/null
+++ b/pixmaps/gnome_dev_cdrom_16_png.inc
@@ -0,0 +1,73 @@
+const gnome_dev_cdrom_16_png: array[1..1049] of byte = (
+ $47, $64, $6B, $50,
+ $00, $00, $04, $18,
+ $01, $01, $00, $02,
+ $00, $00, $00, $40,
+ $00, $00, $00, $10,
+ $00, $00, $00, $10,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $61, $00, $00, $00, $B7, $00, $00, $00, $EC, $00, $00, $00, $FF,
+ $00, $00, $00, $EC, $00, $00, $00, $B7, $00, $00, $00, $61, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $30, $00, $00, $00, $C9,
+ $70, $70, $70, $FF, $D5, $D5, $D5, $FF, $F8, $F8, $F8, $FF, $FF, $FF, $FF, $FF,
+ $F8, $F8, $F8, $FF, $AE, $AE, $AE, $FF, $5D, $5C, $5D, $FF, $00, $00, $00, $C9,
+ $00, $00, $00, $30, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $30, $00, $00, $00, $EC, $C5, $C5, $C5, $FF,
+ $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,
+ $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $A3, $A3, $A3, $FF,
+ $00, $00, $00, $EC, $00, $00, $00, $30, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $C9, $C5, $C5, $C5, $FF, $FF, $FF, $FF, $FF,
+ $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,
+ $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $F2, $F2, $F2, $FF, $D9, $D9, $D9, $FF,
+ $69, $69, $69, $FF, $00, $00, $00, $C9, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $61, $70, $70, $70, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,
+ $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $CE, $CE, $CE, $FF, $CE, $CE, $CE, $FF,
+ $CE, $CE, $CE, $FF, $F4, $F4, $F4, $FF, $DA, $DA, $DA, $FF, $DD, $DD, $DC, $FF,
+ $B4, $B4, $B4, $FF, $34, $34, $34, $FF, $00, $00, $00, $61, $00, $00, $00, $00,
+ $00, $00, $00, $B7, $D5, $D6, $D5, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,
+ $FF, $FF, $FF, $FF, $AB, $AB, $AB, $FF, $31, $31, $31, $FF, $00, $00, $00, $FF,
+ $3B, $3A, $3A, $FF, $B6, $B6, $B6, $FF, $DD, $DD, $DD, $FF, $E0, $E0, $E0, $FF,
+ $E3, $E4, $E3, $FF, $7D, $7D, $7D, $FF, $00, $00, $00, $D0, $00, $00, $00, $00,
+ $00, $00, $00, $EC, $F8, $F8, $F8, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,
+ $CE, $CE, $CE, $FF, $31, $31, $31, $FF, $00, $00, $00, $12, $00, $00, $00, $00,
+ $00, $00, $00, $12, $34, $34, $34, $FF, $F0, $F0, $F1, $FF, $E3, $E4, $E3, $FF,
+ $E7, $E6, $E7, $FF, $AC, $AC, $AC, $FF, $00, $00, $00, $F3, $00, $00, $00, $00,
+ $00, $00, $00, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,
+ $CE, $CE, $CE, $FF, $00, $00, $00, $FF, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $FF, $F4, $F4, $F4, $FF, $E7, $E7, $E7, $FF,
+ $EA, $EA, $EA, $FF, $BF, $C0, $C0, $FF, $00, $00, $00, $FF, $00, $00, $00, $00,
+ $00, $00, $00, $EC, $F8, $F8, $F8, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,
+ $CE, $CE, $CE, $FF, $30, $30, $30, $FF, $00, $00, $00, $12, $00, $00, $00, $00,
+ $00, $00, $00, $12, $5C, $5C, $5C, $FF, $F5, $F5, $F5, $FF, $EA, $EA, $EA, $FF,
+ $EE, $ED, $EE, $FF, $B1, $B0, $B1, $FF, $00, $00, $00, $F0, $00, $00, $00, $00,
+ $00, $00, $00, $B7, $D8, $D9, $D9, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,
+ $FC, $FC, $FC, $FF, $BB, $BB, $BB, $FF, $35, $35, $35, $FF, $00, $00, $00, $FF,
+ $94, $94, $94, $FF, $E8, $E8, $E8, $FF, $F3, $F3, $F3, $FF, $EE, $EE, $EE, $FF,
+ $F1, $F1, $F1, $FF, $84, $84, $85, $FF, $00, $00, $00, $C5, $00, $00, $00, $00,
+ $00, $00, $00, $61, $74, $74, $74, $FF, $FF, $FF, $FF, $FF, $FD, $FD, $FD, $FF,
+ $E3, $E3, $E3, $FF, $DE, $DE, $DE, $FF, $F5, $F5, $F5, $FF, $F8, $F8, $F8, $FF,
+ $F9, $F9, $F8, $FF, $EE, $EE, $EE, $FF, $EE, $EF, $EF, $FF, $F1, $F1, $F2, $FF,
+ $C5, $C5, $C5, $FF, $39, $39, $39, $FF, $00, $00, $00, $61, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $C9, $A3, $A3, $A3, $FF, $B8, $B8, $B8, $FF,
+ $DF, $DF, $DF, $FF, $E2, $E1, $E2, $FF, $E5, $E5, $E5, $FF, $E9, $E8, $E8, $FF,
+ $EB, $EB, $EB, $FF, $EE, $EF, $EF, $FF, $F2, $F2, $F2, $FF, $C5, $C5, $C5, $FF,
+ $5F, $5F, $5F, $FF, $00, $00, $00, $D3, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $30, $00, $00, $00, $EC, $6A, $6A, $6A, $FF,
+ $B6, $B6, $B7, $FF, $E5, $E5, $E5, $FF, $E8, $E8, $E9, $FF, $EB, $EC, $EC, $FF,
+ $EF, $EF, $EF, $FF, $F2, $F2, $F2, $FF, $9F, $9F, $9F, $FF, $5F, $5F, $5F, $FF,
+ $00, $00, $00, $F0, $00, $00, $00, $30, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $30, $00, $00, $00, $C9,
+ $42, $42, $42, $FF, $7E, $7E, $7E, $FF, $AD, $AD, $AD, $FF, $C1, $C1, $C1, $FF,
+ $B3, $B2, $B2, $FF, $85, $85, $85, $FF, $3A, $3A, $3A, $FF, $00, $00, $00, $C9,
+ $00, $00, $00, $30, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $61, $00, $00, $00, $B7, $00, $00, $00, $EC, $00, $00, $00, $FF,
+ $00, $00, $00, $EC, $00, $00, $00, $B7, $00, $00, $00, $61, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00);
+
diff --git a/pixmaps/gnome_dev_floppy_16_png.inc b/pixmaps/gnome_dev_floppy_16_png.inc
new file mode 100644
index 0000000..806a194
--- /dev/null
+++ b/pixmaps/gnome_dev_floppy_16_png.inc
@@ -0,0 +1,73 @@
+const gnome_dev_floppy_16_png: array[1..1049] of byte = (
+ $47, $64, $6B, $50,
+ $00, $00, $04, $18,
+ $01, $01, $00, $02,
+ $00, $00, $00, $40,
+ $00, $00, $00, $10,
+ $00, $00, $00, $10,
+ $00, $00, $00, $47, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $55,
+ $00, $00, $00, $FF, $F7, $F8, $FA, $FF, $CB, $DD, $EB, $FF, $C8, $8A, $80, $FF,
+ $D1, $8F, $84, $FF, $D1, $8F, $84, $FF, $D1, $8F, $84, $FF, $D1, $8F, $84, $FF,
+ $D1, $8F, $84, $FF, $D1, $8F, $84, $FF, $D1, $90, $84, $FF, $D1, $8F, $84, $FF,
+ $D3, $91, $86, $FF, $BF, $D5, $E8, $FF, $BF, $D5, $E8, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $DB, $E7, $F1, $FF, $8D, $A9, $BE, $FF, $B7, $87, $7E, $FF,
+ $C7, $75, $68, $FF, $C7, $74, $67, $FF, $C7, $74, $67, $FF, $C7, $74, $67, $FF,
+ $C7, $74, $67, $FF, $C7, $74, $66, $FF, $C7, $74, $67, $FF, $C8, $76, $68, $FF,
+ $CD, $86, $7A, $FF, $8D, $A9, $BE, $FF, $54, $69, $7C, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $CF, $E0, $ED, $FF, $8D, $A9, $BE, $FF, $D7, $D7, $D7, $FF,
+ $FE, $FE, $FE, $FF, $FE, $FE, $FE, $FF, $FE, $FE, $FE, $FF, $FE, $FE, $FE, $FF,
+ $FE, $FE, $FE, $FF, $FE, $FE, $FE, $FF, $FE, $FE, $FE, $FF, $FE, $FE, $FE, $FF,
+ $F9, $F9, $F9, $FF, $84, $A0, $B5, $FF, $4F, $64, $75, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $CF, $E0, $ED, $FF, $8D, $A9, $BE, $FF, $D7, $D7, $D7, $FF,
+ $D7, $D7, $D7, $FF, $D7, $D7, $D7, $FF, $D7, $D7, $D7, $FF, $D7, $D7, $D7, $FF,
+ $D7, $D7, $D7, $FF, $D7, $D7, $D7, $FF, $D7, $D7, $D7, $FF, $D6, $D6, $D6, $FF,
+ $F1, $F1, $F1, $FF, $81, $9A, $AE, $FF, $49, $60, $72, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $CF, $E0, $ED, $FF, $8D, $A9, $BE, $FF, $D7, $D7, $D7, $FF,
+ $FE, $FE, $FE, $FF, $FE, $FE, $FE, $FF, $FE, $FE, $FE, $FF, $FE, $FE, $FE, $FF,
+ $FC, $FC, $FC, $FF, $F4, $F4, $F4, $FF, $EB, $EB, $EB, $FF, $EB, $EB, $EB, $FF,
+ $F1, $F1, $F1, $FF, $81, $9A, $AE, $FF, $49, $60, $72, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $CF, $E0, $ED, $FF, $8D, $A9, $BE, $FF, $D7, $D7, $D7, $FF,
+ $D7, $D7, $D7, $FF, $D7, $D7, $D7, $FF, $D7, $D7, $D7, $FF, $D4, $D4, $D4, $FF,
+ $C5, $C5, $C5, $FF, $C5, $C5, $C5, $FF, $C5, $C5, $C5, $FF, $C5, $C5, $C5, $FF,
+ $F1, $F1, $F1, $FF, $81, $9A, $AE, $FF, $49, $60, $72, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $CF, $E0, $ED, $FF, $8D, $A9, $BE, $FF, $EE, $EE, $EE, $FF,
+ $FE, $FE, $FE, $FF, $FE, $FE, $FE, $FF, $F2, $F2, $F2, $FF, $EB, $EB, $EB, $FF,
+ $EB, $EB, $EB, $FF, $EB, $EB, $EB, $FF, $EB, $EB, $EB, $FF, $EB, $EB, $EB, $FF,
+ $EE, $EE, $EE, $FF, $81, $9A, $AE, $FF, $49, $60, $72, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $CF, $E0, $ED, $FF, $8D, $A9, $BE, $FF, $AE, $BF, $CD, $FF,
+ $CA, $D6, $DF, $FF, $C7, $CF, $DA, $FF, $BF, $CB, $D6, $FF, $BF, $CB, $D6, $FF,
+ $BF, $CB, $D6, $FF, $BF, $CB, $D6, $FF, $BF, $CB, $D6, $FF, $BF, $CB, $D6, $FF,
+ $A1, $B6, $C4, $FF, $81, $9A, $AE, $FF, $49, $60, $72, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $CF, $E0, $ED, $FF, $8D, $A9, $BE, $FF, $8D, $A9, $BE, $FF,
+ $89, $A6, $BC, $FF, $7F, $9A, $AE, $FF, $81, $9A, $AE, $FF, $81, $9A, $AE, $FF,
+ $81, $9A, $AE, $FF, $81, $9A, $AE, $FF, $7E, $99, $AD, $FF, $7D, $97, $AC, $FF,
+ $81, $9A, $AE, $FF, $81, $9A, $AE, $FF, $49, $60, $72, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $CF, $E0, $ED, $FF, $8D, $A9, $BE, $FF, $8C, $A8, $BD, $FF,
+ $A8, $B1, $BD, $FF, $C5, $C5, $C5, $FF, $C5, $C5, $C5, $FF, $CE, $CE, $CE, $FF,
+ $EB, $EB, $EB, $FF, $D7, $D7, $D7, $FF, $9C, $9D, $9D, $FF, $2F, $46, $56, $FF,
+ $80, $86, $8C, $FF, $81, $9A, $AE, $FF, $49, $60, $72, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $CF, $E0, $ED, $FF, $8D, $A9, $BE, $FF, $84, $A0, $B5, $FF,
+ $C5, $C5, $C5, $FF, $C5, $C5, $C5, $FF, $18, $30, $42, $FF, $33, $49, $5A, $FF,
+ $D6, $D6, $D6, $FF, $C5, $C5, $C5, $FF, $B9, $B9, $B9, $FF, $13, $2D, $3C, $FF,
+ $58, $6D, $80, $FF, $97, $A5, $B0, $FF, $49, $60, $72, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $CF, $E0, $ED, $FF, $86, $A4, $B9, $FF, $81, $9A, $AE, $FF,
+ $C5, $C5, $C5, $FF, $CD, $CD, $CD, $FF, $2E, $43, $53, $FF, $5A, $70, $82, $FF,
+ $C5, $C5, $C5, $FF, $C5, $C5, $C5, $FF, $BF, $BF, $BF, $FF, $11, $28, $35, $FF,
+ $5A, $70, $82, $FF, $9D, $A9, $B0, $FF, $49, $60, $72, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $6B, $78, $82, $FF, $83, $9E, $B2, $FF, $81, $9A, $AE, $FF,
+ $CD, $CD, $CD, $FF, $E6, $E6, $E6, $FF, $21, $36, $48, $FF, $5F, $79, $89, $FF,
+ $C5, $C5, $C5, $FF, $C2, $C2, $C2, $FF, $B2, $B2, $B2, $FF, $11, $2C, $3A, $FF,
+ $5A, $70, $82, $FF, $9F, $A9, $B0, $FF, $49, $60, $72, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $55, $00, $00, $00, $FF, $59, $63, $6D, $FF, $4F, $64, $75, $FF,
+ $A1, $A1, $A1, $FF, $C0, $C0, $C0, $FF, $90, $90, $90, $FF, $90, $90, $90, $FF,
+ $86, $86, $86, $FF, $6E, $6E, $6E, $FF, $7A, $7A, $7A, $FF, $2D, $39, $49, $FF,
+ $3E, $4F, $5C, $FF, $80, $87, $8F, $FF, $1A, $31, $40, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $00, $00, $00, $00, $55, $00, $00, $00, $FF, $00, $00, $00, $D3,
+ $00, $00, $00, $DC, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $E0,
+ $00, $00, $00, $E1, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $47,
+ $00);
+
diff --git a/pixmaps/gnome_dev_harddisk_16_png.inc b/pixmaps/gnome_dev_harddisk_16_png.inc
new file mode 100644
index 0000000..950a8dc
--- /dev/null
+++ b/pixmaps/gnome_dev_harddisk_16_png.inc
@@ -0,0 +1,73 @@
+const gnome_dev_harddisk_16_png: array[1..1049] of byte = (
+ $47, $64, $6B, $50,
+ $00, $00, $04, $18,
+ $01, $01, $00, $02,
+ $00, $00, $00, $40,
+ $00, $00, $00, $10,
+ $00, $00, $00, $10,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $46, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $46,
+ $00, $00, $00, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,
+ $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,
+ $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,
+ $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $D9, $D9, $D9, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $FD, $FD, $FD, $FF, $FC, $FC, $FC, $FF, $FB, $FB, $FB, $FF,
+ $FB, $FC, $FC, $FF, $FB, $FB, $FB, $FF, $FB, $FB, $FB, $FF, $FB, $FB, $FB, $FF,
+ $FB, $FB, $FB, $FF, $FC, $FB, $FB, $FF, $FB, $FC, $FB, $FF, $FB, $FB, $FC, $FF,
+ $FB, $FC, $FC, $FF, $FB, $FC, $FB, $FF, $D5, $D6, $D5, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $FC, $FB, $FC, $FF, $F7, $F8, $F8, $FF, $F7, $F8, $F8, $FF,
+ $F7, $F7, $F7, $FF, $F8, $F7, $F7, $FF, $F7, $F8, $F7, $FF, $F7, $F8, $F7, $FF,
+ $F8, $F8, $F8, $FF, $F7, $F7, $F7, $FF, $F8, $F7, $F7, $FF, $F7, $F7, $F8, $FF,
+ $F8, $F7, $F8, $FF, $F8, $F8, $F8, $FF, $D3, $D3, $D2, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $FA, $FA, $FA, $FF, $F3, $F3, $F4, $FF, $F4, $F4, $F4, $FF,
+ $F4, $F4, $F4, $FF, $F4, $F4, $F4, $FF, $F4, $F4, $F3, $FF, $F3, $F4, $F4, $FF,
+ $F4, $F4, $F4, $FF, $F3, $F3, $F4, $FF, $F4, $F4, $F4, $FF, $F4, $F3, $F4, $FF,
+ $F4, $F4, $F4, $FF, $F4, $F3, $F4, $FF, $CE, $CE, $CE, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $F9, $F9, $F9, $FF, $F0, $F0, $F0, $FF, $F0, $F0, $F0, $FF,
+ $F0, $F0, $F0, $FF, $F0, $F0, $F0, $FF, $F0, $F0, $F0, $FF, $F0, $F0, $F0, $FF,
+ $F0, $F0, $F0, $FF, $F0, $F0, $F0, $FF, $F0, $F0, $F0, $FF, $F0, $F0, $F0, $FF,
+ $F0, $F0, $F0, $FF, $F0, $F0, $F0, $FF, $CC, $CC, $CC, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $F9, $F9, $F9, $FF, $F0, $F0, $F0, $FF, $F0, $F0, $F0, $FF,
+ $F0, $F0, $F0, $FF, $F0, $F0, $F0, $FF, $F0, $F0, $F0, $FF, $F0, $F0, $F0, $FF,
+ $F0, $F0, $F0, $FF, $F0, $F0, $F0, $FF, $F0, $F0, $F0, $FF, $F0, $F0, $F0, $FF,
+ $F0, $F0, $F0, $FF, $F0, $F0, $F0, $FF, $CC, $CC, $CC, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $F7, $F7, $F7, $FF, $EC, $EC, $EC, $FF, $ED, $EC, $EC, $FF,
+ $EC, $EC, $EC, $FF, $ED, $EC, $EC, $FF, $EC, $EC, $EC, $FF, $EC, $ED, $ED, $FF,
+ $ED, $EC, $EC, $FF, $EC, $EC, $ED, $FF, $EC, $EC, $EC, $FF, $EC, $EC, $ED, $FF,
+ $EC, $ED, $EC, $FF, $EC, $EC, $ED, $FF, $C8, $C8, $C8, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $FE, $FE, $FE, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,
+ $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,
+ $FF, $FF, $FF, $FF, $F4, $F4, $F4, $FF, $F4, $F4, $F4, $FF, $EB, $EB, $EB, $FF,
+ $EB, $EB, $EB, $FF, $E3, $E3, $E3, $FF, $C9, $C9, $C9, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $CE, $CE, $CE, $FF, $B9, $B9, $B9, $FF, $B9, $B9, $B9, $FF,
+ $B9, $B9, $B9, $FF, $B9, $B9, $B9, $FF, $B9, $B9, $B9, $FF, $B9, $B9, $B9, $FF,
+ $B9, $B9, $B9, $FF, $B9, $B9, $B9, $FF, $B9, $B9, $B9, $FF, $B9, $B9, $B9, $FF,
+ $B9, $B9, $B9, $FF, $B9, $B9, $B9, $FF, $A7, $A7, $A8, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $CE, $CE, $CE, $FF, $B9, $B9, $B9, $FF, $9D, $9D, $9D, $FF,
+ $D2, $D2, $D2, $FF, $9D, $9D, $9D, $FF, $D2, $D2, $D2, $FF, $9D, $9D, $9D, $FF,
+ $D2, $D2, $D2, $FF, $9D, $9D, $9D, $FF, $D2, $D2, $D2, $FF, $9D, $9D, $9D, $FF,
+ $D2, $D2, $D2, $FF, $B9, $B9, $B9, $FF, $A2, $A2, $A2, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $CD, $CD, $CD, $FF, $B6, $B6, $B6, $FF, $9B, $9B, $9A, $FF,
+ $D1, $D1, $D1, $FF, $9B, $9A, $9B, $FF, $D1, $D1, $D1, $FF, $9A, $9B, $9A, $FF,
+ $D1, $D1, $D1, $FF, $9B, $9A, $9B, $FF, $D1, $D1, $D1, $FF, $9B, $9A, $9A, $FF,
+ $D1, $D1, $D1, $FF, $B7, $B6, $B6, $FF, $9F, $9F, $9F, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $BD, $BD, $BD, $FF, $9C, $9C, $9C, $FF, $9D, $9D, $9C, $FF,
+ $9D, $9C, $9D, $FF, $9C, $9D, $9C, $FF, $9C, $9D, $9C, $FF, $9C, $9D, $9C, $FF,
+ $9C, $9D, $9C, $FF, $9D, $9D, $9D, $FF, $9D, $9C, $9D, $FF, $9C, $9D, $9D, $FF,
+ $9D, $9C, $9D, $FF, $9D, $9D, $9C, $FF, $9C, $9C, $9C, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $79, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $62,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00);
+
diff --git a/pixmaps/gnome_dev_removable_usb_16_png.inc b/pixmaps/gnome_dev_removable_usb_16_png.inc
new file mode 100644
index 0000000..a81b9e9
--- /dev/null
+++ b/pixmaps/gnome_dev_removable_usb_16_png.inc
@@ -0,0 +1,73 @@
+const gnome_dev_removable_usb_16_png: array[1..1049] of byte = (
+ $47, $64, $6B, $50,
+ $00, $00, $04, $18,
+ $01, $01, $00, $02,
+ $00, $00, $00, $40,
+ $00, $00, $00, $10,
+ $00, $00, $00, $10,
+ $00, $00, $00, $00, $00, $00, $00, $00, $FF, $FF, $FF, $71, $FF, $FF, $FF, $FF,
+ $62, $5B, $81, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $41, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $46, $41, $41, $41, $FF, $FF, $FF, $FF, $FF, $62, $5B, $81, $FF,
+ $62, $5B, $81, $FF, $62, $5B, $81, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,
+ $FF, $FF, $FF, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $46,
+ $71, $71, $71, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,
+ $62, $5B, $81, $FF, $FF, $FF, $FF, $FF, $62, $5B, $81, $FF, $62, $5B, $81, $FF,
+ $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,
+ $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $D9, $D9, $D9, $FF, $00, $00, $00, $FF,
+ $FF, $FF, $FF, $FF, $AD, $A9, $BC, $FF, $A7, $A3, $B9, $FF, $FF, $FF, $FF, $FF,
+ $62, $5B, $81, $FF, $FF, $FF, $FF, $FF, $62, $5B, $81, $FF, $62, $5B, $81, $FF,
+ $FF, $FF, $FF, $FF, $FC, $FB, $FB, $FF, $FB, $FC, $FB, $FF, $FB, $FB, $FC, $FF,
+ $FB, $FC, $FC, $FF, $FB, $FC, $FB, $FF, $D5, $D6, $D5, $FF, $00, $00, $00, $FF,
+ $FF, $FF, $FF, $FF, $BD, $BB, $CA, $FF, $62, $5B, $81, $FF, $FF, $FF, $FF, $FF,
+ $62, $5B, $81, $FF, $62, $5B, $81, $FF, $62, $5B, $81, $FF, $FF, $FF, $FF, $FF,
+ $FF, $FF, $FF, $FF, $F7, $F7, $F7, $FF, $F8, $F7, $F7, $FF, $F7, $F7, $F8, $FF,
+ $F8, $F7, $F8, $FF, $F8, $F8, $F8, $FF, $D3, $D3, $D2, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $FF, $FF, $FF, $FF, $F1, $F0, $F3, $FF, $62, $5B, $81, $FF,
+ $62, $5B, $81, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $F6, $F6, $F6, $FF,
+ $F4, $F4, $F4, $FF, $F3, $F3, $F4, $FF, $F4, $F4, $F4, $FF, $F4, $F3, $F4, $FF,
+ $F4, $F4, $F4, $FF, $F4, $F3, $F4, $FF, $CE, $CE, $CE, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $FA, $FA, $FA, $FF, $FF, $FF, $FF, $FF, $7C, $76, $95, $FF,
+ $62, $5B, $81, $FF, $8C, $87, $A3, $FF, $FF, $FF, $FF, $FF, $F0, $F0, $F0, $FF,
+ $F0, $F0, $F0, $FF, $F0, $F0, $F0, $FF, $F0, $F0, $F0, $FF, $F0, $F0, $F0, $FF,
+ $F0, $F0, $F0, $FF, $F0, $F0, $F0, $FF, $CC, $CC, $CC, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $F9, $F9, $F9, $FF, $FF, $FF, $FF, $FF, $62, $5B, $81, $FF,
+ $62, $5B, $81, $FF, $62, $5B, $81, $FF, $FF, $FF, $FF, $FF, $F0, $F0, $F0, $FF,
+ $F0, $F0, $F0, $FF, $F0, $F0, $F0, $FF, $F0, $F0, $F0, $FF, $F0, $F0, $F0, $FF,
+ $F0, $F0, $F0, $FF, $F0, $F0, $F0, $FF, $CC, $CC, $CC, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $F7, $F7, $F7, $FF, $FF, $FF, $FF, $FF, $9B, $97, $AD, $FF,
+ $62, $5B, $81, $FF, $9B, $97, $AD, $FF, $FF, $FF, $FF, $FF, $EC, $ED, $ED, $FF,
+ $ED, $EC, $EC, $FF, $EC, $EC, $ED, $FF, $EC, $EC, $EC, $FF, $EC, $EC, $ED, $FF,
+ $EC, $ED, $EC, $FF, $EC, $EC, $ED, $FF, $C8, $C8, $C8, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $FE, $FE, $FE, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,
+ $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,
+ $FF, $FF, $FF, $FF, $F4, $F4, $F4, $FF, $F4, $F4, $F4, $FF, $EB, $EB, $EB, $FF,
+ $EB, $EB, $EB, $FF, $E3, $E3, $E3, $FF, $C9, $C9, $C9, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $CE, $CE, $CE, $FF, $B9, $B9, $B9, $FF, $B9, $B9, $B9, $FF,
+ $B9, $B9, $B9, $FF, $B9, $B9, $B9, $FF, $B9, $B9, $B9, $FF, $B9, $B9, $B9, $FF,
+ $B9, $B9, $B9, $FF, $B9, $B9, $B9, $FF, $B9, $B9, $B9, $FF, $B9, $B9, $B9, $FF,
+ $B9, $B9, $B9, $FF, $B9, $B9, $B9, $FF, $A7, $A7, $A8, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $CE, $CE, $CE, $FF, $D0, $D0, $D0, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $EA, $EA, $EA, $FF, $B9, $B9, $B9, $FF,
+ $F7, $F7, $F7, $FF, $7E, $7E, $7E, $FF, $A2, $A2, $A2, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $CD, $CD, $CD, $FF, $B9, $B9, $B9, $FF, $E0, $E0, $E0, $FF,
+ $E0, $E0, $E0, $FF, $E0, $E0, $E0, $FF, $E0, $E0, $E0, $FF, $E0, $E0, $E0, $FF,
+ $E0, $E0, $E0, $FF, $E0, $E0, $E0, $FF, $D0, $D0, $D0, $FF, $B9, $B9, $B9, $FF,
+ $7E, $7E, $7E, $FF, $90, $90, $90, $FF, $9F, $9F, $9F, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $BD, $BD, $BD, $FF, $9C, $9C, $9C, $FF, $9D, $9D, $9C, $FF,
+ $9D, $9C, $9D, $FF, $9C, $9D, $9C, $FF, $9C, $9D, $9C, $FF, $9C, $9D, $9C, $FF,
+ $9C, $9D, $9C, $FF, $9D, $9D, $9D, $FF, $9D, $9C, $9D, $FF, $9C, $9D, $9D, $FF,
+ $9D, $9C, $9D, $FF, $9D, $9D, $9C, $FF, $9C, $9C, $9C, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $79, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $62,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00);
+
diff --git a/pixmaps/gnome_mime_application_zip_16_png.inc b/pixmaps/gnome_mime_application_zip_16_png.inc
new file mode 100644
index 0000000..0831aa4
--- /dev/null
+++ b/pixmaps/gnome_mime_application_zip_16_png.inc
@@ -0,0 +1,73 @@
+const gnome_mime_application_zip_16_png: array[1..1049] of byte = (
+ $47, $64, $6B, $50,
+ $00, $00, $04, $18,
+ $01, $01, $00, $02,
+ $00, $00, $00, $40,
+ $00, $00, $00, $10,
+ $00, $00, $00, $10,
+ $0B, $0B, $0B, $00, $07, $07, $07, $00, $00, $00, $01, $00, $02, $02, $02, $00,
+ $10, $10, $10, $00, $02, $02, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $2A, $11, $11, $10, $BB, $14, $14, $12, $D3, $00, $00, $00, $16,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $0B, $0B, $0B, $00, $07, $07, $07, $00, $00, $00, $01, $00, $00, $00, $00, $00,
+ $09, $09, $09, $00, $00, $00, $00, $5A, $23, $23, $20, $BC, $38, $38, $36, $D3,
+ $33, $34, $2F, $F4, $62, $65, $54, $FF, $6D, $6F, $5B, $FF, $13, $13, $10, $D5,
+ $00, $00, $00, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $0B, $0B, $0B, $00, $02, $02, $02, $00, $00, $00, $00, $0E, $02, $02, $02, $73,
+ $36, $36, $33, $DF, $94, $94, $8C, $FD, $D4, $D4, $C8, $FF, $A0, $A1, $93, $FF,
+ $73, $77, $63, $FF, $79, $7C, $66, $FF, $85, $88, $6F, $FF, $6A, $6E, $5A, $FF,
+ $0B, $0C, $09, $B9, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $04, $04, $04, $25, $10, $10, $10, $90, $4F, $4F, $4E, $E9, $A8, $A8, $A5, $FF,
+ $F5, $F5, $EB, $FF, $DE, $DF, $D2, $FF, $88, $8A, $7A, $FF, $69, $6C, $58, $FF,
+ $73, $75, $61, $FF, $7A, $7E, $67, $FF, $81, $86, $6E, $FF, $98, $9C, $80, $FF,
+ $5D, $60, $4E, $FF, $04, $04, $03, $83, $00, $00, $00, $00, $00, $00, $00, $00,
+ $2D, $2E, $2B, $D5, $AF, $B0, $A8, $FF, $D2, $D2, $C8, $FF, $D4, $D5, $CD, $FF,
+ $C9, $CA, $C5, $FF, $8D, $8E, $83, $FF, $61, $64, $4F, $FF, $70, $73, $5D, $FF,
+ $79, $7D, $66, $FF, $83, $86, $6E, $FF, $89, $8C, $74, $FF, $82, $85, $6E, $FF,
+ $75, $79, $61, $FF, $14, $15, $11, $D0, $00, $00, $00, $00, $00, $00, $00, $00,
+ $50, $50, $4B, $ED, $F8, $F9, $E6, $FF, $CE, $D0, $BF, $FF, $A1, $A2, $91, $FF,
+ $74, $77, $65, $FF, $7A, $7C, $6B, $FF, $94, $96, $85, $FF, $73, $77, $5F, $FF,
+ $82, $86, $6F, $FF, $83, $86, $70, $FF, $72, $75, $60, $FF, $6E, $71, $5C, $FF,
+ $70, $74, $5E, $FF, $16, $17, $13, $D3, $00, $00, $00, $00, $00, $00, $00, $00,
+ $39, $3A, $36, $E5, $E4, $E5, $D4, $FF, $E5, $E6, $D4, $FF, $E6, $E7, $D6, $FF,
+ $DE, $DF, $CE, $FF, $C5, $C6, $B3, $FF, $BF, $C1, $AE, $FF, $AA, $AD, $98, $FF,
+ $79, $7C, $68, $FF, $69, $6C, $59, $FF, $6A, $6D, $58, $FF, $75, $79, $62, $FF,
+ $77, $7A, $64, $FF, $16, $16, $13, $D6, $00, $00, $00, $00, $00, $00, $00, $00,
+ $32, $33, $30, $DC, $E0, $E1, $D0, $FF, $E1, $E2, $D1, $FF, $DD, $DE, $CD, $FF,
+ $E0, $E1, $D0, $FF, $E4, $E5, $D4, $FF, $EA, $EB, $DA, $FF, $C5, $C6, $B6, $FF,
+ $5E, $62, $4F, $FF, $6B, $6F, $59, $FF, $72, $76, $60, $FF, $7C, $80, $67, $FF,
+ $7C, $80, $69, $FF, $17, $17, $14, $DA, $00, $00, $00, $00, $00, $00, $00, $00,
+ $2C, $2C, $29, $C8, $DC, $DD, $CC, $FF, $E2, $E3, $D2, $FF, $DE, $DF, $CE, $FF,
+ $DE, $DF, $CE, $FF, $DD, $DE, $CD, $FF, $E8, $E9, $D8, $FF, $B8, $B9, $A8, $FF,
+ $62, $65, $51, $FF, $72, $76, $60, $FF, $78, $7C, $65, $FF, $82, $86, $6D, $FF,
+ $81, $84, $6D, $FF, $17, $18, $15, $DC, $02, $02, $02, $00, $1C, $1C, $1C, $00,
+ $24, $24, $21, $B4, $D5, $D6, $C6, $FF, $E4, $E5, $D3, $FF, $DE, $DF, $CE, $FF,
+ $DE, $DF, $CE, $FF, $DD, $DE, $CD, $FF, $E3, $E5, $D3, $FF, $B8, $BA, $A8, $FF,
+ $69, $6D, $57, $FF, $77, $7C, $65, $FF, $7E, $82, $6A, $FF, $86, $8A, $70, $FF,
+ $85, $88, $71, $FF, $17, $17, $15, $E3, $11, $11, $11, $14, $28, $28, $28, $04,
+ $1A, $1A, $17, $B1, $CF, $CF, $C0, $FF, $E4, $E5, $D4, $FF, $DC, $DD, $CD, $FF,
+ $DA, $DC, $CB, $FF, $D8, $D9, $C8, $FF, $DE, $DF, $CE, $FF, $B7, $BA, $A7, $FF,
+ $70, $74, $5C, $FF, $7E, $82, $6A, $FF, $82, $86, $6D, $FF, $90, $94, $79, $FF,
+ $8D, $8F, $79, $FF, $15, $15, $14, $F1, $1A, $1A, $1B, $57, $25, $25, $25, $26,
+ $10, $10, $0F, $A9, $C2, $C3, $B5, $FF, $F0, $F2, $DF, $FF, $DC, $DD, $CD, $FF,
+ $D4, $D6, $C5, $FF, $D2, $D4, $C4, $FF, $D8, $D9, $C9, $FF, $B7, $B9, $A6, $FF,
+ $76, $7A, $62, $FF, $83, $88, $6D, $FF, $8F, $94, $78, $FF, $8C, $90, $76, $FF,
+ $4C, $4D, $43, $FF, $0C, $0C, $0D, $DB, $20, $20, $20, $64, $25, $25, $25, $33,
+ $03, $02, $03, $41, $36, $37, $32, $E7, $8D, $8F, $83, $FF, $CB, $CB, $BC, $FF,
+ $DF, $E1, $CF, $FF, $D7, $D8, $C8, $FF, $D4, $D5, $C6, $FF, $B5, $B8, $A5, $FF,
+ $81, $86, $6C, $FF, $90, $94, $79, $FF, $68, $6B, $58, $FF, $27, $28, $23, $FE,
+ $0D, $0D, $0F, $D7, $1F, $1F, $1F, $7F, $24, $24, $24, $3A, $24, $24, $24, $10,
+ $01, $01, $02, $00, $00, $00, $00, $0C, $00, $00, $00, $76, $25, $25, $22, $DA,
+ $72, $73, $6A, $FD, $B2, $B3, $A6, $FF, $D6, $D8, $C9, $FF, $C5, $C8, $B2, $FF,
+ $7A, $7E, $65, $FF, $41, $43, $38, $FF, $08, $08, $09, $E5, $0E, $0D, $0F, $8F,
+ $23, $23, $23, $30, $26, $26, $26, $08, $24, $24, $24, $00, $24, $24, $24, $00,
+ $01, $01, $02, $00, $08, $08, $07, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $50, $14, $14, $13, $C2, $5C, $5C, $56, $F8, $86, $87, $7A, $FF,
+ $1A, $1A, $16, $F1, $00, $00, $00, $86, $00, $00, $00, $0E, $13, $13, $13, $00,
+ $24, $24, $24, $00, $25, $25, $25, $00, $24, $24, $24, $00, $24, $24, $24, $00,
+ $01, $01, $02, $00, $08, $08, $07, $00, $01, $01, $01, $00, $00, $00, $00, $00,
+ $04, $04, $04, $00, $00, $00, $00, $00, $00, $00, $00, $3E, $03, $03, $03, $87,
+ $00, $00, $00, $38, $00, $00, $00, $00, $02, $02, $02, $00, $13, $13, $13, $00,
+ $24, $24, $24, $00, $25, $25, $25, $00, $24, $24, $24, $00, $24, $24, $24, $00,
+ $00);
+
diff --git a/pixmaps/gnome_mime_x_directory_smb_share_16_png.inc b/pixmaps/gnome_mime_x_directory_smb_share_16_png.inc
new file mode 100644
index 0000000..7f1175e
--- /dev/null
+++ b/pixmaps/gnome_mime_x_directory_smb_share_16_png.inc
@@ -0,0 +1,73 @@
+const gnome_mime_x_directory_smb_share_16_png: array[1..1049] of byte = (
+ $47, $64, $6B, $50,
+ $00, $00, $04, $18,
+ $01, $01, $00, $02,
+ $00, $00, $00, $40,
+ $00, $00, $00, $10,
+ $00, $00, $00, $10,
+ $00, $00, $00, $00, $00, $00, $00, $00, $0E, $0E, $0E, $59, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $4F, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $FF, $8E, $92, $7C, $FF,
+ $8E, $92, $7C, $FF, $8E, $92, $7C, $FF, $8E, $92, $7C, $FF, $66, $69, $58, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $30, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $FF, $8E, $92, $7C, $FF,
+ $68, $6A, $57, $FF, $68, $6A, $57, $FF, $67, $69, $56, $FF, $67, $69, $56, $FF,
+ $56, $58, $48, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $30, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $A2, $A3, $9B, $FF, $D8, $D9, $CC, $FF, $D1, $D3, $C6, $FF,
+ $D0, $D1, $C4, $FF, $BA, $BB, $AF, $FF, $00, $00, $00, $FF, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $FF, $D6, $D7, $CA, $FF,
+ $D6, $D7, $CA, $FF, $D6, $D7, $CA, $FF, $D6, $D7, $CA, $FF, $D6, $D7, $CA, $FF,
+ $D6, $D7, $CA, $FF, $DB, $DC, $CF, $FF, $C3, $C5, $B1, $FF, $BB, $BE, $AA, $FF,
+ $B9, $BB, $A8, $FF, $A5, $A6, $95, $FF, $00, $00, $00, $FF, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $FF, $D0, $D1, $C4, $FF,
+ $C8, $CA, $B5, $FF, $C8, $CA, $B5, $FF, $C8, $CA, $B5, $FF, $C8, $CA, $B5, $FF,
+ $BC, $BE, $AA, $FF, $BC, $BE, $AA, $FF, $BC, $BE, $AA, $FF, $BA, $BC, $A9, $FF,
+ $B8, $B9, $A7, $FF, $A4, $A5, $94, $FF, $00, $00, $00, $FF, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $FF, $D7, $D8, $CC, $FF,
+ $C1, $C4, $AE, $FF, $BF, $C2, $AC, $FF, $BC, $BF, $AA, $FF, $BB, $BD, $A9, $FF,
+ $B9, $BA, $A6, $FF, $B8, $B9, $A5, $FF, $B5, $B7, $A3, $FF, $AF, $B0, $9D, $FF,
+ $AC, $AD, $9B, $FF, $99, $9B, $8A, $FF, $00, $00, $00, $FF, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $FF, $D7, $D8, $CC, $FF,
+ $BC, $BE, $A9, $FF, $BA, $BC, $A7, $FF, $B7, $B9, $A5, $FF, $B7, $B8, $A3, $FF,
+ $B4, $B5, $A1, $FF, $B2, $B4, $A0, $FF, $AF, $B1, $9D, $FF, $A9, $AA, $97, $FF,
+ $A5, $A7, $94, $FF, $93, $94, $84, $FF, $00, $00, $00, $FF, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $FF, $D7, $D8, $CC, $FF,
+ $B6, $B8, $A3, $FF, $B4, $B6, $A1, $FF, $B2, $B4, $9F, $FF, $B0, $B2, $9D, $FF,
+ $AE, $AF, $9B, $FF, $AC, $AE, $99, $FF, $A8, $AB, $97, $FF, $A3, $A4, $91, $FF,
+ $9F, $A1, $8F, $FF, $8E, $90, $7F, $FF, $00, $00, $00, $FF, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $FF, $C1, $C2, $B8, $FF,
+ $A1, $A3, $8F, $FF, $9F, $A1, $8D, $FF, $9C, $9E, $8B, $FF, $7D, $7E, $70, $FF,
+ $BC, $BD, $B5, $FF, $7A, $7C, $6D, $FF, $94, $96, $84, $FF, $8F, $90, $7F, $FF,
+ $8C, $8E, $7E, $FF, $8B, $8D, $7C, $FF, $00, $00, $00, $FF, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $5C, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $AB, $AB, $AB, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $5C, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $FF,
+ $B9, $B9, $B9, $FF, $00, $00, $00, $FF, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $33, $32, $31, $44, $00, $00, $00, $F3,
+ $C9, $C9, $C9, $FE, $00, $00, $00, $FE, $33, $32, $31, $44, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $16, $00, $00, $00, $1E, $00, $00, $00, $35, $00, $00, $00, $52,
+ $00, $00, $00, $74, $00, $00, $00, $9C, $00, $00, $00, $C7, $EA, $EA, $EA, $FF,
+ $DE, $DE, $DE, $FB, $CC, $CC, $CC, $FF, $00, $00, $00, $EC, $00, $00, $00, $C0,
+ $00, $00, $00, $81, $00, $00, $00, $52, $00, $00, $00, $39, $00, $00, $00, $33,
+ $00, $00, $00, $00, $C8, $C8, $C8, $15, $C8, $C8, $C8, $27, $C8, $C8, $C8, $44,
+ $C8, $C8, $C8, $66, $B0, $B0, $B0, $9E, $86, $86, $86, $D5, $CD, $CD, $CD, $F0,
+ $B4, $B4, $B4, $FA, $B4, $B4, $B4, $FB, $7B, $7B, $7B, $F0, $95, $95, $94, $C8,
+ $AB, $AA, $AA, $81, $C8, $C8, $C8, $46, $C8, $C8, $C8, $31, $C8, $C8, $C8, $2C,
+ $00, $00, $00, $14, $00, $00, $00, $20, $00, $00, $00, $39, $00, $00, $00, $5E,
+ $00, $00, $00, $7E, $00, $00, $00, $A8, $00, $00, $00, $D1, $00, $00, $00, $EE,
+ $00, $00, $00, $FC, $00, $00, $00, $FC, $00, $00, $00, $EB, $00, $00, $00, $BF,
+ $00, $00, $00, $85, $00, $00, $00, $58, $00, $00, $00, $42, $00, $00, $00, $3C,
+ $00);
+
diff --git a/pixmaps/stock_folder_16_png.inc b/pixmaps/stock_folder_16_png.inc
new file mode 100644
index 0000000..7979416
--- /dev/null
+++ b/pixmaps/stock_folder_16_png.inc
@@ -0,0 +1,73 @@
+const stock_folder_16_png: array[1..1049] of byte = (
+ $47, $64, $6B, $50,
+ $00, $00, $04, $18,
+ $01, $01, $00, $02,
+ $00, $00, $00, $40,
+ $00, $00, $00, $10,
+ $00, $00, $00, $10,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $39, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $39,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $39, $00, $00, $00, $FF, $E4, $E5, $DE, $FF,
+ $D3, $D5, $CA, $FF, $D3, $D5, $CA, $FF, $A5, $A7, $97, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $39, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $FF, $F3, $F4, $F0, $FF, $AB, $AE, $99, $FF,
+ $BD, $C0, $AD, $FF, $BC, $BE, $AA, $FF, $B1, $B4, $9F, $FF, $6E, $71, $5C, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $65,
+ $00, $00, $00, $00, $00, $00, $00, $FF, $E6, $E7, $DD, $FF, $F5, $F6, $F3, $FF,
+ $E6, $E7, $DD, $FF, $E6, $E7, $DD, $FF, $E6, $E7, $DD, $FF, $E4, $E5, $DB, $FF,
+ $E6, $E7, $DD, $FF, $E2, $E4, $D9, $FF, $E2, $E4, $D9, $FF, $E1, $E3, $D8, $FF,
+ $E1, $E3, $D8, $FF, $DF, $E1, $D6, $FF, $C4, $C6, $B6, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $00, $00, $00, $00, $FF, $F7, $F7, $F6, $FF, $D3, $D6, $C5, $FF,
+ $D3, $D6, $C4, $FF, $D2, $D4, $C2, $FF, $D0, $D2, $C0, $FF, $CE, $D1, $BD, $FF,
+ $CC, $CE, $BA, $FF, $CA, $CD, $B9, $FF, $CA, $CD, $B9, $FF, $C8, $CB, $B6, $FF,
+ $C6, $C9, $B3, $FF, $C4, $C8, $B1, $FF, $93, $96, $7C, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $00, $00, $00, $00, $FF, $F0, $F0, $EB, $FF, $D3, $D6, $C5, $FF,
+ $D3, $D6, $C4, $FF, $D2, $D4, $C2, $FF, $D0, $D2, $C0, $FF, $CE, $D1, $BD, $FF,
+ $CC, $CE, $BA, $FF, $CA, $CD, $B9, $FF, $CA, $CD, $B9, $FF, $C8, $CB, $B6, $FF,
+ $C6, $C9, $B3, $FF, $C4, $C8, $B1, $FF, $93, $96, $7C, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $00, $00, $00, $00, $FF, $F0, $F1, $EC, $FF, $D2, $D4, $C2, $FF,
+ $D0, $D2, $C0, $FF, $CE, $D1, $BD, $FF, $CC, $CE, $BA, $FF, $CA, $CD, $B9, $FF,
+ $C8, $CB, $B6, $FF, $C6, $C9, $B3, $FF, $C6, $C9, $B3, $FF, $C4, $C8, $B1, $FF,
+ $C3, $C6, $AF, $FF, $C1, $C4, $AD, $FF, $90, $94, $78, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $00, $00, $00, $00, $FF, $EF, $F0, $EB, $FF, $CE, $D1, $BD, $FF,
+ $CC, $CE, $BA, $FF, $CA, $CD, $B9, $FF, $C8, $CB, $B6, $FF, $C6, $C9, $B3, $FF,
+ $C4, $C8, $B1, $FF, $C3, $C6, $AF, $FF, $C3, $C6, $AF, $FF, $C1, $C4, $AD, $FF,
+ $BF, $C2, $AB, $FF, $BD, $C1, $A8, $FF, $8E, $91, $75, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $00, $00, $00, $00, $FF, $ED, $EE, $E8, $FF, $CA, $CD, $B9, $FF,
+ $C8, $CB, $B6, $FF, $C6, $C9, $B3, $FF, $C4, $C8, $B1, $FF, $C3, $C6, $AF, $FF,
+ $C1, $C4, $AD, $FF, $BF, $C2, $AB, $FF, $BF, $C2, $AB, $FF, $BD, $C1, $A8, $FF,
+ $BB, $BE, $A5, $FF, $BA, $BD, $A3, $FF, $8B, $8F, $72, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $00, $00, $00, $00, $FF, $EC, $EE, $E7, $FF, $C6, $C9, $B3, $FF,
+ $C4, $C8, $B1, $FF, $C3, $C6, $AF, $FF, $C1, $C4, $AD, $FF, $BF, $C2, $AB, $FF,
+ $BD, $C1, $A8, $FF, $BB, $BE, $A5, $FF, $BB, $BE, $A5, $FF, $BA, $BD, $A3, $FF,
+ $B7, $BA, $A0, $FF, $B7, $BA, $A0, $FF, $8B, $8F, $72, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $00, $00, $00, $00, $FF, $E8, $E8, $E0, $FF, $C3, $C6, $AF, $FF,
+ $C1, $C4, $AD, $FF, $BF, $C2, $AB, $FF, $BD, $C1, $A8, $FF, $BB, $BE, $A5, $FF,
+ $BA, $BD, $A3, $FF, $B7, $BA, $A0, $FF, $B7, $BA, $A0, $FF, $B7, $BA, $A0, $FF,
+ $B7, $BA, $A0, $FF, $B7, $BA, $A0, $FF, $8B, $8F, $72, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $00, $00, $00, $00, $FF, $C6, $C9, $BA, $FF, $90, $94, $78, $FF,
+ $8E, $92, $76, $FF, $8E, $91, $75, $FF, $8C, $90, $73, $FF, $8B, $8F, $72, $FF,
+ $8B, $8F, $72, $FF, $8B, $8F, $72, $FF, $8B, $8F, $72, $FF, $8B, $8F, $72, $FF,
+ $8B, $8F, $72, $FF, $8B, $8F, $72, $FF, $64, $67, $51, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $00, $00, $00, $00, $65, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $65,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00);
+
diff --git a/pixmaps/stock_lock_16_png.inc b/pixmaps/stock_lock_16_png.inc
new file mode 100644
index 0000000..1b073ce
--- /dev/null
+++ b/pixmaps/stock_lock_16_png.inc
@@ -0,0 +1,73 @@
+const stock_lock_16_png: array[1..1049] of byte = (
+ $47, $64, $6B, $50,
+ $00, $00, $04, $18,
+ $01, $01, $00, $02,
+ $00, $00, $00, $40,
+ $00, $00, $00, $10,
+ $00, $00, $00, $10,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $69, $00, $00, $00, $BB, $00, $00, $00, $C6,
+ $00, $00, $00, $C6, $00, $00, $00, $C1, $00, $00, $00, $3B, $00, $00, $00, $01,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $10,
+ $1E, $1E, $1E, $94, $7A, $7A, $7A, $FB, $D2, $D2, $D2, $FF, $DB, $DB, $DB, $FF,
+ $DB, $DB, $DB, $FF, $BC, $BC, $BC, $FE, $72, $72, $72, $F1, $08, $08, $08, $86,
+ $00, $00, $00, $03, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $13, $13, $13, $7E,
+ $84, $84, $84, $FC, $BE, $BE, $BE, $F7, $38, $38, $38, $F2, $1C, $1C, $1C, $F9,
+ $1C, $1C, $1C, $F9, $4D, $4D, $4D, $FC, $B1, $B1, $B1, $FF, $84, $84, $84, $F6,
+ $00, $00, $00, $6F, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $2D, $2D, $2D, $EB,
+ $C2, $C2, $C2, $FD, $09, $09, $09, $DE, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $2E, $2E, $2E, $FC, $AA, $AA, $AA, $FE,
+ $00, $00, $00, $BD, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $2B, $2B, $2B, $FC,
+ $C0, $C0, $C0, $FC, $00, $00, $00, $DC, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $16, $16, $16, $FA, $C1, $C0, $C0, $FF,
+ $00, $00, $00, $E0, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $60, $13, $11, $0E, $F8,
+ $9B, $97, $94, $FF, $20, $1D, $1C, $FF, $0B, $0B, $07, $FF, $04, $03, $02, $FF,
+ $04, $03, $02, $FF, $05, $04, $03, $FF, $2F, $29, $21, $FF, $A8, $A3, $9E, $FF,
+ $1A, $13, $0B, $FF, $00, $00, $00, $60, $00, $00, $00, $00, $00, $00, $00, $01,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $FF, $A5, $91, $76, $FF,
+ $E0, $C4, $A0, $FF, $DF, $C4, $A3, $FF, $DF, $C4, $A3, $FF, $DA, $BE, $9A, $FF,
+ $DA, $BE, $9A, $FF, $DA, $BE, $9A, $FF, $D6, $BA, $94, $FF, $CD, $A6, $76, $FF,
+ $81, $5A, $2B, $FF, $00, $00, $00, $FF, $00, $00, $00, $00, $00, $00, $00, $04,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $FF, $E2, $C5, $A1, $FF,
+ $D8, $B5, $8C, $FF, $CA, $9F, $68, $FF, $AC, $87, $58, $FF, $A7, $82, $52, $FF,
+ $A7, $82, $52, $FF, $A7, $82, $53, $FF, $A3, $7B, $4B, $FF, $BC, $88, $49, $FF,
+ $AC, $71, $2E, $FF, $00, $00, $00, $FF, $00, $00, $00, $00, $00, $00, $00, $05,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $FF, $E3, $C6, $A2, $FF,
+ $D5, $AE, $7E, $FF, $B0, $8D, $5F, $FF, $D5, $B2, $84, $FF, $CF, $AB, $7C, $FF,
+ $CF, $AB, $7C, $FF, $CF, $AC, $7B, $FF, $CB, $A4, $71, $FF, $BC, $87, $46, $FF,
+ $AA, $6F, $2B, $FF, $00, $00, $00, $FF, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $FF, $E1, $C4, $A0, $FF,
+ $D0, $A6, $74, $FF, $C7, $9B, $64, $FF, $AA, $84, $55, $FF, $A4, $7E, $4E, $FF,
+ $A4, $7E, $4E, $FF, $A4, $7E, $4E, $FF, $A0, $77, $44, $FF, $BA, $84, $42, $FF,
+ $AC, $71, $2E, $FF, $00, $00, $00, $FF, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $FF, $E1, $C2, $9C, $FF,
+ $CE, $A4, $70, $FF, $AD, $8D, $64, $FF, $D2, $B2, $89, $FF, $CD, $AC, $83, $FF,
+ $CD, $AC, $83, $FF, $CE, $AD, $83, $FF, $CC, $A7, $7B, $FF, $B8, $80, $3E, $FF,
+ $AD, $73, $32, $FF, $00, $00, $00, $FF, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $FF, $E0, $C2, $9E, $FF,
+ $D4, $AC, $79, $FF, $CD, $A6, $6E, $FF, $AF, $8D, $5E, $FF, $AB, $87, $58, $FF,
+ $AB, $87, $58, $FF, $AB, $88, $58, $FF, $A8, $81, $4C, $FF, $BC, $87, $46, $FF,
+ $B4, $7E, $3E, $FF, $00, $00, $00, $FF, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $FF, $D0, $A8, $74, $FF,
+ $C6, $96, $5D, $FF, $BE, $8D, $50, $FF, $BE, $8D, $50, $FF, $BA, $89, $4B, $FF,
+ $BA, $89, $4B, $FF, $BD, $8C, $4E, $FF, $BC, $8A, $4C, $FF, $BA, $86, $47, $FF,
+ $A4, $71, $36, $FF, $00, $00, $00, $FF, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $60, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $77, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00);
+
diff --git a/pixmaps/stock_lock_48_png.inc b/pixmaps/stock_lock_48_png.inc
new file mode 100644
index 0000000..2710c79
--- /dev/null
+++ b/pixmaps/stock_lock_48_png.inc
@@ -0,0 +1,585 @@
+const stock_lock_48_png: array[1..9241] of byte = (
+ $47, $64, $6B, $50,
+ $00, $00, $24, $18,
+ $01, $01, $00, $02,
+ $00, $00, $00, $C0,
+ $00, $00, $00, $30,
+ $00, $00, $00, $30,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01,
+ $00, $00, $00, $01, $00, $00, $00, $02, $00, $00, $00, $03, $00, $00, $00, $04,
+ $00, $00, $00, $05, $00, $00, $00, $05, $00, $00, $00, $05, $00, $00, $00, $04,
+ $00, $00, $00, $03, $00, $00, $00, $02, $00, $00, $00, $01, $00, $00, $00, $01,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $02, $00, $00, $00, $04,
+ $00, $00, $00, $07, $00, $00, $00, $0B, $00, $00, $00, $0E, $00, $00, $00, $11,
+ $00, $00, $00, $13, $00, $00, $00, $13, $00, $00, $00, $13, $00, $00, $00, $11,
+ $00, $00, $00, $0E, $00, $00, $00, $0B, $00, $00, $00, $07, $00, $00, $00, $04,
+ $00, $00, $00, $02, $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $01, $00, $00, $00, $04, $00, $00, $00, $08, $00, $00, $00, $0E,
+ $00, $00, $00, $67, $00, $00, $00, $AB, $00, $00, $00, $DA, $00, $00, $00, $F6,
+ $01, $01, $01, $FF, $00, $00, $00, $F6, $00, $00, $00, $DC, $00, $00, $00, $B0,
+ $00, $00, $00, $72, $00, $00, $00, $1E, $00, $00, $00, $16, $00, $00, $00, $0E,
+ $00, $00, $00, $08, $00, $00, $00, $04, $00, $00, $00, $01, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $02,
+ $00, $00, $00, $06, $00, $00, $00, $0C, $00, $00, $00, $83, $00, $00, $00, $EC,
+ $01, $01, $01, $FF, $9B, $9B, $9B, $FF, $D0, $D0, $D0, $FF, $E3, $E3, $E3, $FF,
+ $E9, $E9, $E9, $FF, $DD, $DD, $DD, $FF, $C6, $C6, $C6, $FF, $91, $91, $91, $FF,
+ $01, $01, $01, $FF, $00, $00, $00, $EE, $00, $00, $00, $91, $00, $00, $00, $23,
+ $00, $00, $00, $17, $00, $00, $00, $0D, $00, $00, $00, $06, $00, $00, $00, $02,
+ $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $02, $00, $00, $00, $07,
+ $00, $00, $00, $3F, $00, $00, $00, $D0, $01, $01, $01, $FF, $BE, $BE, $BE, $FF,
+ $EA, $EA, $EA, $FF, $F1, $F1, $F1, $FF, $F3, $F3, $F3, $FF, $F1, $F1, $F1, $FF,
+ $ED, $ED, $ED, $FF, $EA, $EA, $EA, $FF, $E6, $E6, $E6, $FF, $E2, $E2, $E2, $FF,
+ $D8, $D8, $D8, $FF, $9C, $9C, $9C, $FF, $01, $01, $01, $FF, $00, $00, $00, $D8,
+ $00, $00, $00, $57, $00, $00, $00, $1E, $00, $00, $00, $11, $00, $00, $00, $07,
+ $00, $00, $00, $02, $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $02, $00, $00, $00, $07, $00, $00, $00, $52,
+ $00, $00, $00, $F6, $60, $60, $60, $FF, $E3, $E3, $E3, $FF, $F3, $F3, $F3, $FF,
+ $F0, $F0, $F0, $FF, $EC, $EC, $EC, $FF, $E6, $E6, $E6, $FF, $E4, $E4, $E4, $FF,
+ $E3, $E3, $E3, $FF, $E2, $E2, $E2, $FF, $E2, $E2, $E2, $FF, $E2, $E2, $E2, $FF,
+ $E1, $E1, $E1, $FF, $D6, $D6, $D6, $FF, $B7, $B7, $B7, $FF, $45, $45, $45, $FF,
+ $00, $00, $00, $F7, $00, $00, $00, $6E, $00, $00, $00, $22, $00, $00, $00, $12,
+ $00, $00, $00, $07, $00, $00, $00, $02, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $01, $00, $00, $00, $06, $00, $00, $00, $3E, $00, $00, $00, $F6,
+ $85, $85, $85, $FF, $EC, $EC, $EC, $FF, $F3, $F3, $F3, $FF, $EA, $EA, $EA, $FF,
+ $E3, $E3, $E3, $FF, $D9, $D9, $D9, $FF, $CE, $CE, $CE, $FF, $C2, $C2, $C2, $FF,
+ $C2, $C2, $C2, $FF, $CC, $CC, $CC, $FF, $D5, $D5, $D5, $FF, $DC, $DC, $DC, $FF,
+ $E0, $E0, $E0, $FF, $DD, $DD, $DD, $FF, $C8, $C8, $C8, $FF, $B9, $B9, $B9, $FF,
+ $62, $62, $62, $FF, $00, $00, $00, $F8, $00, $00, $00, $59, $00, $00, $00, $22,
+ $00, $00, $00, $0F, $00, $00, $00, $05, $00, $00, $00, $01, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01,
+ $00, $00, $00, $04, $00, $00, $00, $0D, $00, $00, $00, $D0, $5E, $5E, $5E, $FF,
+ $EC, $EC, $EC, $FF, $F3, $F3, $F3, $FF, $E8, $E8, $E8, $FF, $DC, $DC, $DC, $FF,
+ $BC, $BC, $BC, $F8, $58, $58, $58, $F0, $14, $14, $14, $E1, $00, $00, $00, $DB,
+ $00, $00, $00, $D6, $00, $00, $00, $D4, $7B, $7B, $7B, $EA, $BE, $BE, $BE, $F6,
+ $E0, $E0, $E0, $FF, $DF, $DF, $DF, $FF, $DC, $DC, $DC, $FF, $C3, $C3, $C3, $FF,
+ $BB, $BB, $BB, $FF, $4C, $4C, $4C, $FF, $00, $00, $00, $BC, $00, $00, $00, $35,
+ $00, $00, $00, $1C, $00, $00, $00, $0B, $00, $00, $00, $03, $00, $00, $00, $01,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $02,
+ $00, $00, $00, $08, $00, $00, $00, $83, $01, $01, $01, $FF, $E2, $E2, $E2, $FF,
+ $F3, $F3, $F3, $FF, $E9, $E9, $E9, $FF, $D8, $D8, $D8, $FF, $97, $97, $97, $EC,
+ $00, $00, $00, $EA, $00, $00, $00, $BD, $00, $00, $00, $68, $00, $00, $00, $5A,
+ $00, $00, $00, $53, $00, $00, $00, $52, $00, $00, $00, $5A, $00, $00, $00, $C6,
+ $9C, $9C, $9C, $E9, $DD, $DD, $DD, $F9, $E0, $E0, $E0, $FF, $D8, $D8, $D8, $FF,
+ $BB, $BB, $BB, $FF, $B6, $B6, $B6, $FF, $01, $01, $01, $FF, $00, $00, $00, $79,
+ $00, $00, $00, $2B, $00, $00, $00, $13, $00, $00, $00, $07, $00, $00, $00, $01,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $03,
+ $00, $00, $00, $0D, $00, $00, $00, $EC, $B9, $B9, $B9, $FF, $F3, $F3, $F3, $FF,
+ $EB, $EB, $EB, $FF, $D8, $D8, $D8, $FF, $8A, $8A, $8A, $EE, $00, $00, $00, $E3,
+ $00, $00, $00, $7E, $00, $00, $00, $58, $00, $00, $00, $46, $00, $00, $00, $39,
+ $00, $00, $00, $31, $00, $00, $00, $2E, $00, $00, $00, $32, $00, $00, $00, $3C,
+ $00, $00, $00, $94, $91, $91, $91, $E0, $DB, $DB, $DB, $F7, $DF, $DF, $DF, $FF,
+ $CE, $CE, $CE, $FF, $B3, $B3, $B3, $FF, $93, $93, $93, $FF, $00, $00, $00, $CB,
+ $00, $00, $00, $3B, $00, $00, $00, $1E, $00, $00, $00, $0B, $00, $00, $00, $03,
+ $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $06,
+ $00, $00, $00, $45, $01, $01, $01, $FF, $EA, $EA, $EA, $FF, $F1, $F1, $F1, $FF,
+ $DD, $DD, $DD, $FF, $C0, $C0, $C0, $FF, $02, $02, $02, $E8, $00, $00, $00, $8C,
+ $00, $00, $00, $55, $00, $00, $00, $3D, $00, $00, $00, $29, $00, $00, $00, $1C,
+ $00, $00, $00, $15, $00, $00, $00, $13, $00, $00, $00, $16, $00, $00, $00, $1F,
+ $00, $00, $00, $2E, $00, $00, $00, $A0, $A2, $A2, $A2, $DF, $E5, $E5, $E5, $FF,
+ $DD, $DD, $DD, $FF, $C0, $C0, $C0, $FF, $B6, $B6, $B6, $FF, $01, $01, $01, $FF,
+ $00, $00, $00, $61, $00, $00, $00, $29, $00, $00, $00, $12, $00, $00, $00, $05,
+ $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $02, $00, $00, $00, $09,
+ $00, $00, $00, $70, $A0, $A0, $A0, $FF, $F1, $F1, $F1, $FF, $E8, $E8, $E8, $FF,
+ $C6, $C6, $C6, $FF, $80, $80, $80, $ED, $00, $00, $00, $D2, $00, $00, $00, $5B,
+ $00, $00, $00, $3E, $00, $00, $00, $26, $00, $00, $00, $14, $00, $00, $00, $0B,
+ $00, $00, $00, $07, $00, $00, $00, $06, $00, $00, $00, $07, $00, $00, $00, $0D,
+ $00, $00, $00, $18, $00, $00, $00, $30, $02, $02, $02, $CB, $DC, $DC, $DC, $EF,
+ $EA, $EA, $EA, $FF, $D1, $D1, $D1, $FF, $AE, $AE, $AE, $FF, $76, $76, $76, $FF,
+ $00, $00, $00, $91, $00, $00, $00, $35, $00, $00, $00, $18, $00, $00, $00, $08,
+ $00, $00, $00, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $03, $00, $00, $00, $0C,
+ $00, $00, $00, $93, $D0, $D0, $D0, $FF, $F2, $F2, $F2, $FF, $D9, $D9, $D9, $FF,
+ $C0, $C0, $C0, $FF, $2F, $2F, $2F, $E5, $00, $00, $00, $8B, $00, $00, $00, $4B,
+ $00, $00, $00, $2C, $00, $00, $00, $16, $00, $00, $00, $09, $00, $00, $00, $03,
+ $00, $00, $00, $01, $00, $00, $00, $01, $00, $00, $00, $02, $00, $00, $00, $04,
+ $00, $00, $00, $0B, $00, $00, $00, $19, $00, $00, $00, $6E, $82, $82, $82, $E1,
+ $EE, $EE, $EE, $FF, $DC, $DC, $DC, $FF, $B5, $B5, $B5, $FF, $9F, $9F, $9F, $FF,
+ $00, $00, $00, $BC, $00, $00, $00, $3E, $00, $00, $00, $1F, $00, $00, $00, $0B,
+ $00, $00, $00, $03, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $04, $00, $00, $00, $0E,
+ $00, $00, $00, $D5, $E1, $E1, $E1, $FF, $F1, $F1, $F1, $FF, $CC, $CC, $CC, $FF,
+ $C0, $C0, $C0, $FF, $0F, $0F, $0F, $D9, $00, $00, $00, $65, $00, $00, $00, $3D,
+ $00, $00, $00, $21, $00, $00, $00, $0E, $00, $00, $00, $05, $00, $00, $00, $02,
+ $00, $00, $00, $01, $00, $00, $00, $01, $00, $00, $00, $01, $00, $00, $00, $02,
+ $00, $00, $00, $06, $00, $00, $00, $0F, $00, $00, $00, $23, $1F, $1F, $1F, $D4,
+ $EC, $EC, $EC, $FF, $E2, $E2, $E2, $FF, $C0, $C0, $C0, $FF, $A8, $A8, $A8, $FF,
+ $00, $00, $00, $D6, $00, $00, $00, $47, $00, $00, $00, $26, $00, $00, $00, $0E,
+ $00, $00, $00, $04, $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $02, $00, $00, $00, $07, $00, $00, $00, $14,
+ $00, $00, $00, $DE, $E6, $E6, $E6, $FF, $EF, $EF, $EF, $FF, $CB, $CB, $CB, $FF,
+ $B7, $B7, $B7, $FF, $00, $00, $00, $D2, $00, $00, $00, $58, $00, $00, $00, $37,
+ $00, $00, $00, $1C, $00, $00, $00, $0D, $00, $00, $00, $08, $00, $00, $00, $06,
+ $00, $00, $00, $06, $00, $00, $00, $06, $00, $00, $00, $06, $00, $00, $00, $06,
+ $00, $00, $00, $08, $00, $00, $00, $0E, $00, $00, $00, $1D, $00, $00, $00, $C1,
+ $E9, $E9, $E9, $FF, $E5, $E5, $E5, $FF, $C5, $C5, $C5, $FF, $AE, $AE, $AE, $FF,
+ $00, $00, $00, $F0, $00, $00, $00, $50, $00, $00, $00, $2E, $00, $00, $00, $15,
+ $00, $00, $00, $08, $00, $00, $00, $03, $00, $00, $00, $01, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01,
+ $00, $00, $00, $02, $00, $00, $00, $06, $00, $00, $00, $0F, $00, $00, $00, $1F,
+ $00, $00, $00, $EC, $DA, $DA, $DA, $FF, $EB, $EB, $EB, $FF, $CA, $CA, $CA, $FF,
+ $AB, $AB, $AB, $FF, $00, $00, $00, $D2, $00, $00, $00, $5A, $00, $00, $00, $3C,
+ $00, $00, $00, $26, $00, $00, $00, $1A, $00, $00, $00, $16, $00, $00, $00, $15,
+ $00, $00, $00, $15, $00, $00, $00, $15, $00, $00, $00, $15, $00, $00, $00, $15,
+ $00, $00, $00, $16, $00, $00, $00, $1A, $00, $00, $00, $26, $00, $00, $00, $C1,
+ $E4, $E4, $E4, $FF, $E3, $E3, $E3, $FF, $CA, $CA, $CA, $FF, $AD, $AC, $AA, $FF,
+ $00, $00, $00, $F9, $00, $00, $00, $5A, $00, $00, $00, $3B, $00, $00, $00, $22,
+ $00, $00, $00, $13, $00, $00, $00, $0B, $00, $00, $00, $05, $00, $00, $00, $02,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01,
+ $00, $00, $00, $06, $31, $16, $07, $66, $37, $19, $08, $FF, $37, $19, $08, $FF,
+ $37, $19, $08, $FF, $9C, $52, $17, $FF, $B8, $6E, $25, $FF, $B9, $6B, $26, $FF,
+ $A7, $5A, $1C, $FF, $37, $19, $08, $FF, $37, $19, $08, $FF, $37, $19, $08, $FF,
+ $37, $19, $08, $FF, $37, $19, $08, $FF, $37, $19, $08, $FF, $37, $19, $08, $FF,
+ $37, $19, $08, $FF, $37, $19, $08, $FF, $37, $19, $08, $FF, $37, $19, $08, $FF,
+ $37, $19, $08, $FF, $37, $19, $08, $FF, $37, $19, $08, $FF, $37, $19, $08, $FF,
+ $A5, $5E, $1F, $FF, $BC, $73, $2A, $FF, $B8, $6F, $27, $FF, $97, $55, $1A, $FF,
+ $37, $19, $08, $FF, $37, $19, $08, $FF, $37, $19, $08, $FF, $37, $19, $08, $FF,
+ $25, $10, $05, $5F, $00, $00, $00, $1B, $00, $00, $00, $0E, $00, $00, $00, $05,
+ $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $03,
+ $00, $00, $00, $0B, $37, $19, $08, $FF, $C9, $9C, $62, $FF, $F4, $E1, $CB, $FF,
+ $F4, $E0, $C9, $FF, $EF, $DB, $BE, $FF, $EC, $D5, $B7, $FF, $EB, $D2, $B4, $FF,
+ $EA, $D2, $B3, $FF, $EB, $CF, $B0, $FF, $E9, $CE, $AE, $FF, $E8, $CC, $AB, $FF,
+ $E7, $CC, $A8, $FF, $E8, $C7, $A1, $FF, $E6, $C6, $A1, $FF, $E6, $C6, $A1, $FF,
+ $E6, $C6, $A1, $FF, $E6, $C6, $A1, $FF, $E6, $C6, $A1, $FF, $E8, $C7, $A1, $FF,
+ $E8, $C7, $A1, $FF, $E6, $C6, $A1, $FF, $E5, $C5, $A0, $FF, $E5, $C5, $A0, $FF,
+ $E3, $C2, $9A, $FF, $E0, $C0, $9B, $FF, $E0, $BD, $93, $FF, $DF, $BA, $92, $FF,
+ $DF, $BA, $8E, $FF, $DD, $B3, $86, $FF, $D5, $AC, $7C, $FF, $A2, $61, $1B, $FF,
+ $37, $19, $08, $FF, $00, $00, $00, $31, $00, $00, $00, $1B, $00, $00, $00, $0B,
+ $00, $00, $00, $03, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $04,
+ $00, $00, $00, $10, $37, $19, $08, $FF, $F5, $E6, $D0, $FF, $EA, $D3, $AF, $FF,
+ $EA, $CF, $AF, $FF, $E3, $C2, $9A, $FF, $DA, $B8, $8B, $FF, $DA, $B6, $87, $FF,
+ $D8, $B0, $81, $FF, $D6, $AE, $7F, $FF, $D3, $AB, $7C, $FF, $D1, $A9, $74, $FF,
+ $CF, $A5, $6E, $FF, $CC, $A3, $6D, $FF, $CA, $9F, $67, $FF, $CA, $9F, $67, $FF,
+ $CA, $9F, $67, $FF, $CA, $9F, $67, $FF, $CA, $9F, $67, $FF, $CA, $9F, $67, $FF,
+ $CA, $9F, $67, $FF, $C8, $9E, $67, $FF, $C6, $9B, $63, $FF, $C2, $98, $61, $FF,
+ $C2, $93, $5B, $FF, $BF, $90, $52, $FF, $BC, $88, $4B, $FF, $BD, $84, $40, $FF,
+ $BA, $7E, $3D, $FF, $B3, $76, $34, $FF, $A7, $6A, $22, $FF, $8D, $53, $14, $FF,
+ $37, $19, $08, $FF, $00, $00, $00, $45, $00, $00, $00, $27, $00, $00, $00, $0F,
+ $00, $00, $00, $04, $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $05,
+ $00, $00, $00, $13, $37, $19, $08, $FF, $F5, $E4, $CE, $FF, $E9, $CE, $AE, $FF,
+ $E7, $CD, $A8, $FF, $DF, $BD, $90, $FF, $D8, $B1, $83, $FF, $D5, $AD, $7E, $FF,
+ $D2, $AA, $7B, $FF, $D2, $A6, $77, $FF, $D0, $A7, $71, $FF, $CD, $A3, $6C, $FF,
+ $C8, $9F, $68, $FF, $C5, $9B, $64, $FF, $C4, $99, $61, $FF, $C4, $99, $61, $FF,
+ $C4, $99, $61, $FF, $C5, $9A, $62, $FF, $C5, $9A, $62, $FF, $C5, $9A, $62, $FF,
+ $C5, $9A, $62, $FF, $C4, $99, $61, $FF, $C2, $98, $5D, $FF, $C1, $94, $5A, $FF,
+ $BF, $90, $54, $FF, $BE, $8E, $4F, $FF, $BC, $87, $49, $FF, $BA, $82, $3F, $FF,
+ $BA, $7E, $3D, $FF, $B1, $74, $32, $FF, $A7, $6A, $22, $FF, $8B, $52, $14, $FF,
+ $37, $19, $08, $FF, $00, $00, $00, $52, $00, $00, $00, $2E, $00, $00, $00, $13,
+ $00, $00, $00, $05, $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $06,
+ $00, $00, $00, $14, $37, $19, $08, $FF, $F5, $E6, $D0, $FF, $EB, $CF, $B0, $FF,
+ $E9, $CE, $AE, $FF, $E0, $BF, $97, $FF, $DB, $B4, $86, $FF, $D8, $B0, $81, $FF,
+ $D7, $AF, $80, $FF, $D2, $AC, $7B, $FF, $D2, $A6, $77, $FF, $D0, $A6, $6F, $FF,
+ $CC, $A3, $6D, $FF, $CA, $9F, $67, $FF, $C7, $9C, $64, $FF, $C7, $9C, $64, $FF,
+ $C7, $9C, $64, $FF, $C7, $9C, $64, $FF, $C7, $9C, $64, $FF, $C7, $9C, $64, $FF,
+ $C7, $9C, $64, $FF, $C5, $9A, $62, $FF, $C2, $97, $5F, $FF, $C2, $93, $5B, $FF,
+ $BF, $90, $54, $FF, $BE, $8E, $4F, $FF, $BC, $84, $41, $FF, $BA, $82, $3F, $FF,
+ $B5, $7C, $38, $FF, $AF, $73, $2C, $FF, $A3, $66, $1E, $FF, $87, $50, $14, $FF,
+ $37, $19, $08, $FF, $00, $00, $00, $57, $00, $00, $00, $32, $00, $00, $00, $15,
+ $00, $00, $00, $06, $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $06,
+ $00, $00, $00, $15, $37, $19, $08, $FF, $F5, $E4, $CE, $FF, $EA, $CF, $AF, $FF,
+ $E8, $CD, $A9, $FF, $DF, $BC, $92, $FF, $D5, $AD, $7E, $FF, $D2, $AB, $7D, $FF,
+ $D2, $AA, $7B, $FF, $D0, $AB, $75, $FF, $D0, $A6, $6F, $FF, $CD, $A3, $6C, $FF,
+ $C8, $9F, $68, $FF, $C7, $9C, $64, $FF, $C5, $9B, $64, $FF, $C5, $9A, $62, $FF,
+ $C5, $9B, $64, $FF, $C7, $9C, $64, $FF, $C8, $9E, $67, $FF, $C8, $9F, $68, $FF,
+ $CA, $9F, $67, $FF, $C7, $9D, $66, $FF, $C5, $9B, $64, $FF, $C4, $99, $61, $FF,
+ $C2, $98, $5D, $FF, $BF, $91, $56, $FF, $BE, $8E, $4F, $FF, $BE, $86, $45, $FF,
+ $BC, $83, $3F, $FF, $B6, $7C, $37, $FF, $AA, $6C, $23, $FF, $8D, $55, $14, $FF,
+ $37, $19, $08, $FF, $00, $00, $00, $58, $00, $00, $00, $33, $00, $00, $00, $15,
+ $00, $00, $00, $06, $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $06,
+ $00, $00, $00, $15, $37, $19, $08, $FF, $F5, $E4, $CE, $FF, $E9, $CE, $AE, $FF,
+ $E8, $CE, $A9, $FF, $E1, $BC, $94, $FF, $DA, $B4, $87, $FF, $D8, $B2, $81, $FF,
+ $D7, $AF, $80, $FF, $D2, $AA, $7B, $FF, $D0, $A8, $73, $FF, $CF, $A5, $6E, $FF,
+ $CA, $A1, $6B, $FF, $CA, $9F, $67, $FF, $C7, $9C, $64, $FF, $C8, $9E, $67, $FF,
+ $C8, $9E, $67, $FF, $C8, $9F, $68, $FF, $C8, $9F, $68, $FF, $C8, $9F, $68, $FF,
+ $CA, $9F, $67, $FF, $C5, $9B, $64, $FF, $C5, $9A, $62, $FF, $C2, $97, $5F, $FF,
+ $C1, $94, $5A, $FF, $BE, $8F, $51, $FF, $BC, $87, $49, $FF, $BA, $81, $3D, $FF,
+ $B7, $7E, $3A, $FF, $B3, $79, $34, $FF, $A6, $69, $21, $FF, $8B, $52, $14, $FF,
+ $37, $19, $08, $FF, $00, $00, $00, $59, $00, $00, $00, $33, $00, $00, $00, $16,
+ $00, $00, $00, $06, $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $06,
+ $00, $00, $00, $15, $37, $19, $08, $FF, $F4, $E1, $CB, $FF, $E8, $CD, $A9, $FF,
+ $E5, $C9, $A4, $FF, $DD, $BA, $90, $FF, $D5, $AD, $7E, $FF, $D2, $AA, $7B, $FF,
+ $D2, $AA, $7B, $FF, $D2, $A5, $75, $FF, $D1, $A7, $70, $FF, $CC, $A3, $6D, $FF,
+ $CA, $9F, $67, $FF, $C8, $9E, $67, $FF, $C5, $9A, $62, $FF, $C5, $9B, $64, $FF,
+ $C7, $9C, $64, $FF, $C8, $9E, $67, $FF, $C8, $9F, $68, $FF, $CA, $9F, $67, $FF,
+ $CA, $9F, $67, $FF, $C8, $9E, $67, $FF, $C6, $9B, $63, $FF, $C4, $99, $61, $FF,
+ $C2, $97, $5F, $FF, $BF, $91, $56, $FF, $BD, $8C, $4C, $FF, $BC, $88, $45, $FF,
+ $BB, $82, $3E, $FF, $B6, $7C, $37, $FF, $A9, $6B, $22, $FF, $8D, $53, $14, $FF,
+ $37, $19, $08, $FF, $00, $00, $00, $59, $00, $00, $00, $33, $00, $00, $00, $16,
+ $00, $00, $00, $06, $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $06,
+ $00, $00, $00, $15, $37, $19, $08, $FF, $F5, $E4, $CE, $FF, $E9, $CD, $AC, $FF,
+ $E7, $CB, $A6, $FF, $DF, $BC, $92, $FF, $D8, $B0, $81, $FF, $D0, $A4, $73, $FF,
+ $CA, $9F, $70, $FF, $C9, $9C, $6B, $FF, $C6, $94, $60, $FF, $BF, $8E, $56, $FF,
+ $B8, $87, $4F, $FF, $B4, $83, $4B, $FF, $AE, $7C, $45, $FF, $AD, $7A, $43, $FF,
+ $AF, $7B, $43, $FF, $B0, $7C, $44, $FF, $B2, $7F, $48, $FF, $B3, $82, $4A, $FF,
+ $B6, $86, $4E, $FF, $B7, $87, $50, $FF, $B6, $87, $4F, $FF, $B7, $88, $50, $FF,
+ $B7, $87, $4E, $FF, $B6, $85, $48, $FF, $B6, $83, $44, $FF, $BC, $85, $43, $FF,
+ $BA, $7E, $3D, $FF, $B3, $78, $32, $FF, $A7, $6A, $22, $FF, $8B, $52, $14, $FF,
+ $37, $19, $08, $FF, $00, $00, $00, $59, $00, $00, $00, $33, $00, $00, $00, $16,
+ $00, $00, $00, $06, $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $06,
+ $00, $00, $00, $15, $37, $19, $08, $FF, $F4, $E1, $CB, $FF, $E8, $CC, $A7, $FF,
+ $E5, $CA, $A4, $FF, $DC, $B9, $8F, $FF, $D6, $AE, $7F, $FF, $D7, $B2, $84, $FF,
+ $D7, $B2, $85, $FF, $D8, $AF, $80, $FF, $D8, $B2, $7C, $FF, $D6, $B2, $7D, $FF,
+ $D7, $B4, $7D, $FF, $D8, $B5, $7C, $FF, $DA, $B7, $7E, $FF, $DB, $B9, $80, $FF,
+ $DB, $B9, $80, $FF, $DB, $B8, $80, $FF, $D9, $B6, $7E, $FF, $D7, $B4, $7B, $FF,
+ $D5, $B0, $78, $FF, $D0, $AA, $73, $FF, $CC, $A1, $64, $FF, $C8, $9C, $5E, $FF,
+ $C4, $96, $56, $FF, $C2, $8F, $4F, $FF, $BF, $88, $43, $FF, $B5, $7D, $3A, $FF,
+ $B5, $78, $36, $FF, $AD, $72, $2C, $FF, $A4, $66, $1D, $FF, $87, $50, $14, $FF,
+ $37, $19, $08, $FF, $00, $00, $00, $59, $00, $00, $00, $33, $00, $00, $00, $16,
+ $00, $00, $00, $06, $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $06,
+ $00, $00, $00, $15, $37, $19, $08, $FF, $F5, $E4, $CE, $FF, $E9, $CD, $AC, $FF,
+ $E7, $CB, $A6, $FF, $DD, $BA, $90, $FF, $D5, $AD, $7E, $FF, $CE, $A5, $72, $FF,
+ $CC, $A0, $6A, $FF, $C9, $9C, $64, $FF, $C1, $95, $5E, $FF, $BC, $8F, $57, $FF,
+ $B6, $85, $4E, $FF, $AE, $7E, $44, $FF, $A9, $75, $3D, $FF, $AA, $72, $3C, $FF,
+ $A9, $72, $3B, $FF, $AA, $73, $3C, $FF, $AA, $79, $3F, $FF, $AD, $7C, $43, $FF,
+ $B1, $82, $47, $FF, $B5, $81, $4A, $FF, $B7, $85, $4A, $FF, $B7, $86, $49, $FF,
+ $B8, $86, $48, $FF, $B7, $81, $45, $FF, $B8, $7E, $3B, $FF, $B7, $7F, $3C, $FF,
+ $B6, $7C, $37, $FF, $B0, $75, $2F, $FF, $A4, $68, $21, $FF, $89, $51, $14, $FF,
+ $37, $19, $08, $FF, $00, $00, $00, $59, $00, $00, $00, $33, $00, $00, $00, $16,
+ $00, $00, $00, $06, $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $06,
+ $00, $00, $00, $15, $37, $19, $08, $FF, $F5, $E6, $D0, $FF, $EA, $CF, $AF, $FF,
+ $E9, $CE, $AA, $FF, $E1, $BC, $94, $FF, $DB, $B4, $86, $FF, $DC, $B7, $8A, $FF,
+ $DD, $B8, $8B, $FF, $DA, $B5, $87, $FF, $D8, $B4, $84, $FF, $D8, $B5, $81, $FF,
+ $DB, $B6, $81, $FF, $DB, $B9, $85, $FF, $DD, $BA, $83, $FF, $DF, $BE, $86, $FF,
+ $DE, $BE, $88, $FF, $DD, $BD, $87, $FF, $DC, $BB, $85, $FF, $D9, $B6, $80, $FF,
+ $D6, $B2, $7B, $FF, $D1, $AA, $72, $FF, $CA, $A3, $67, $FF, $C7, $9C, $61, $FF,
+ $C3, $96, $59, $FF, $C0, $90, $4F, $FF, $BE, $88, $47, $FF, $B7, $7F, $3C, $FF,
+ $B6, $7A, $39, $FF, $B1, $76, $30, $FF, $A4, $68, $21, $FF, $8B, $52, $14, $FF,
+ $37, $19, $08, $FF, $00, $00, $00, $59, $00, $00, $00, $33, $00, $00, $00, $16,
+ $00, $00, $00, $06, $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $06,
+ $00, $00, $00, $15, $37, $19, $08, $FF, $F4, $E1, $CB, $FF, $E9, $CE, $AA, $FF,
+ $E5, $C9, $A4, $FF, $DA, $B8, $8B, $FF, $D2, $AC, $77, $FF, $CF, $A0, $70, $FF,
+ $CD, $A2, $6C, $FF, $C8, $9D, $66, $FF, $C3, $97, $61, $FF, $BE, $91, $5A, $FF,
+ $B6, $87, $4F, $FF, $B0, $80, $46, $FF, $AD, $77, $40, $FF, $A8, $77, $3D, $FF,
+ $AA, $78, $3E, $FF, $AA, $79, $42, $FF, $AC, $7B, $45, $FF, $B2, $80, $49, $FF,
+ $B5, $85, $4D, $FF, $B6, $89, $52, $FF, $B9, $88, $50, $FF, $B8, $88, $4E, $FF,
+ $BA, $8A, $4E, $FF, $B9, $87, $48, $FF, $B9, $84, $42, $FF, $BA, $82, $3F, $FF,
+ $B7, $7D, $38, $FF, $B3, $78, $32, $FF, $AD, $6F, $26, $FF, $89, $51, $14, $FF,
+ $37, $19, $08, $FF, $00, $00, $00, $59, $00, $00, $00, $33, $00, $00, $00, $16,
+ $00, $00, $00, $06, $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $06,
+ $00, $00, $00, $15, $37, $19, $08, $FF, $F5, $E4, $CE, $FF, $E9, $CE, $AA, $FF,
+ $E7, $CB, $A6, $FF, $DC, $B9, $8F, $FF, $D6, $AE, $7F, $FF, $D5, $AF, $81, $FF,
+ $D5, $AF, $80, $FF, $D6, $AB, $7C, $FF, $D5, $AE, $78, $FF, $D2, $AD, $77, $FF,
+ $D4, $AF, $78, $FF, $D5, $B1, $7A, $FF, $D9, $B5, $7D, $FF, $DA, $B8, $7F, $FF,
+ $DB, $B8, $80, $FF, $DA, $B7, $7F, $FF, $D8, $B5, $7C, $FF, $D5, $B1, $78, $FF,
+ $D2, $AC, $74, $FF, $CD, $A6, $6F, $FF, $C9, $9C, $60, $FF, $C4, $98, $5C, $FF,
+ $C2, $93, $53, $FF, $BF, $8B, $4C, $FF, $BE, $86, $41, $FF, $B7, $7E, $3A, $FF,
+ $B5, $79, $38, $FF, $AD, $76, $2E, $FF, $AF, $72, $2A, $FF, $87, $50, $14, $FF,
+ $37, $19, $08, $FF, $00, $00, $00, $59, $00, $00, $00, $33, $00, $00, $00, $16,
+ $00, $00, $00, $06, $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $06,
+ $00, $00, $00, $15, $37, $19, $08, $FF, $F5, $E6, $D0, $FF, $EA, $CF, $AF, $FF,
+ $E9, $CE, $AA, $FF, $E1, $BD, $96, $FF, $DB, $B4, $86, $FF, $D5, $AB, $7B, $FF,
+ $D2, $A8, $78, $FF, $CD, $A5, $73, $FF, $CA, $9F, $69, $FF, $C4, $96, $5E, $FF,
+ $BD, $8E, $57, $FF, $B7, $87, $50, $FF, $B0, $7E, $46, $FF, $AE, $7B, $43, $FF,
+ $AC, $79, $41, $FF, $AD, $7A, $42, $FF, $AF, $7C, $45, $FF, $B1, $80, $48, $FF,
+ $B5, $85, $4D, $FF, $B6, $88, $4D, $FF, $B8, $86, $4B, $FF, $B8, $87, $4C, $FF,
+ $B8, $86, $48, $FF, $B8, $84, $43, $FF, $B9, $7F, $3C, $FF, $B7, $7E, $3A, $FF,
+ $B5, $79, $38, $FF, $AF, $73, $2C, $FF, $BD, $82, $42, $FF, $87, $50, $14, $FF,
+ $37, $19, $08, $FF, $00, $00, $00, $59, $00, $00, $00, $33, $00, $00, $00, $16,
+ $00, $00, $00, $06, $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $06,
+ $00, $00, $00, $15, $37, $19, $08, $FF, $F4, $E1, $CB, $FF, $E7, $CC, $A8, $FF,
+ $E6, $C6, $A1, $FF, $DB, $B8, $8E, $FF, $D3, $AB, $7C, $FF, $D5, $B0, $7E, $FF,
+ $D4, $AC, $7C, $FF, $D5, $AD, $77, $FF, $D2, $AB, $75, $FF, $D3, $AC, $74, $FF,
+ $D2, $AC, $74, $FF, $D5, $B0, $78, $FF, $D7, $B3, $78, $FF, $D9, $B7, $7B, $FF,
+ $D9, $B7, $7B, $FF, $D9, $B7, $7F, $FF, $D9, $B6, $7D, $FF, $D6, $B2, $7A, $FF,
+ $D3, $AE, $75, $FF, $CE, $A8, $71, $FF, $CB, $9F, $66, $FF, $C8, $9B, $5E, $FF,
+ $C4, $96, $58, $FF, $C0, $8D, $4F, $FF, $BE, $88, $47, $FF, $BA, $7E, $3D, $FF,
+ $B4, $7B, $37, $FF, $B1, $76, $30, $FF, $C0, $8D, $51, $FF, $89, $4E, $14, $FF,
+ $37, $19, $08, $FF, $00, $00, $00, $59, $00, $00, $00, $33, $00, $00, $00, $16,
+ $00, $00, $00, $06, $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $06,
+ $00, $00, $00, $15, $37, $19, $08, $FF, $F4, $E0, $C9, $FF, $E7, $CB, $A6, $FF,
+ $E6, $C6, $A1, $FF, $DC, $B3, $87, $FF, $D1, $AB, $76, $FF, $D1, $A5, $72, $FF,
+ $D0, $A6, $6F, $FF, $CD, $A3, $6C, $FF, $C8, $9F, $68, $FF, $C4, $99, $61, $FF,
+ $C2, $97, $5F, $FF, $C0, $92, $57, $FF, $BF, $91, $56, $FF, $BF, $91, $56, $FF,
+ $C0, $92, $57, $FF, $C2, $93, $5B, $FF, $C1, $97, $5C, $FF, $C2, $98, $5D, $FF,
+ $C2, $98, $61, $FF, $C2, $93, $5B, $FF, $BF, $91, $56, $FF, $BF, $90, $54, $FF,
+ $BD, $8D, $4E, $FF, $BC, $89, $47, $FF, $B8, $80, $3D, $FF, $B5, $7C, $38, $FF,
+ $B5, $78, $36, $FF, $AF, $74, $2E, $FF, $C0, $8D, $51, $FF, $86, $4C, $13, $FF,
+ $37, $19, $08, $FF, $00, $00, $00, $59, $00, $00, $00, $33, $00, $00, $00, $16,
+ $00, $00, $00, $06, $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $06,
+ $00, $00, $00, $15, $37, $19, $08, $FF, $F4, $E1, $CB, $FF, $E6, $CA, $A5, $FF,
+ $E6, $C6, $A1, $FF, $DB, $B4, $86, $FF, $D1, $AB, $76, $FF, $D0, $A7, $71, $FF,
+ $CF, $A5, $6E, $FF, $CA, $A1, $6B, $FF, $C8, $9E, $67, $FF, $C4, $99, $61, $FF,
+ $C2, $93, $5B, $FF, $BF, $91, $56, $FF, $BE, $90, $55, $FF, $BE, $8F, $51, $FF,
+ $BD, $90, $56, $FF, $BD, $90, $56, $FF, $BD, $90, $56, $FF, $BD, $90, $56, $FF,
+ $BD, $90, $56, $FF, $BD, $8E, $50, $FF, $BD, $8D, $4E, $FF, $BC, $88, $4B, $FF,
+ $BB, $84, $44, $FF, $BA, $82, $3F, $FF, $B7, $7E, $3A, $FF, $B4, $7B, $37, $FF,
+ $B1, $77, $32, $FF, $AD, $71, $2A, $FF, $CA, $9D, $63, $FF, $87, $4D, $14, $FF,
+ $37, $19, $08, $FF, $00, $00, $00, $59, $00, $00, $00, $33, $00, $00, $00, $16,
+ $00, $00, $00, $06, $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $06,
+ $00, $00, $00, $15, $37, $19, $08, $FF, $F4, $E1, $CB, $FF, $E8, $CC, $A7, $FF,
+ $E4, $C8, $A3, $FF, $DA, $B8, $8D, $FF, $D3, $AB, $7C, $FF, $D2, $A6, $77, $FF,
+ $D0, $AB, $75, $FF, $D0, $A6, $6F, $FF, $CB, $A2, $6C, $FF, $C8, $9F, $68, $FF,
+ $C6, $9B, $63, $FF, $C4, $99, $61, $FF, $C2, $97, $5F, $FF, $C2, $98, $5D, $FF,
+ $C2, $98, $61, $FF, $C2, $98, $61, $FF, $C4, $99, $61, $FF, $C4, $99, $61, $FF,
+ $C4, $99, $61, $FF, $C2, $98, $61, $FF, $C1, $92, $56, $FF, $BF, $91, $56, $FF,
+ $BE, $8F, $51, $FF, $BC, $88, $4B, $FF, $BC, $84, $41, $FF, $B5, $7D, $3A, $FF,
+ $B5, $7C, $38, $FF, $B1, $76, $30, $FF, $CC, $9F, $69, $FF, $89, $51, $14, $FF,
+ $37, $19, $08, $FF, $00, $00, $00, $59, $00, $00, $00, $33, $00, $00, $00, $16,
+ $00, $00, $00, $06, $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $06,
+ $00, $00, $00, $15, $37, $19, $08, $FF, $F5, $E4, $CE, $FF, $E8, $CD, $A9, $FF,
+ $E5, $C9, $A4, $FF, $DC, $B9, $8F, $FF, $D5, $AD, $7E, $FF, $D2, $AA, $7B, $FF,
+ $D2, $AB, $79, $FF, $D1, $A7, $70, $FF, $CF, $A5, $6E, $FF, $CA, $A1, $6B, $FF,
+ $C8, $9F, $68, $FF, $C5, $9A, $62, $FF, $C5, $9A, $62, $FF, $C5, $9A, $62, $FF,
+ $C5, $9A, $62, $FF, $C5, $9A, $62, $FF, $C5, $9A, $62, $FF, $C5, $9A, $62, $FF,
+ $C5, $9A, $62, $FF, $C4, $99, $61, $FF, $C2, $93, $5B, $FF, $BF, $91, $56, $FF,
+ $BF, $90, $52, $FF, $BC, $87, $49, $FF, $BC, $83, $3F, $FF, $B7, $7E, $3A, $FF,
+ $B8, $7F, $3B, $FF, $BC, $82, $3D, $FF, $CE, $A1, $6B, $FF, $89, $4E, $14, $FF,
+ $37, $19, $08, $FF, $00, $00, $00, $59, $00, $00, $00, $33, $00, $00, $00, $16,
+ $00, $00, $00, $06, $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $06,
+ $00, $00, $00, $15, $37, $19, $08, $FF, $F4, $E1, $CB, $FF, $E8, $CB, $A5, $FF,
+ $E5, $C9, $A4, $FF, $DA, $B8, $8B, $FF, $D2, $AA, $7B, $FF, $D2, $A5, $75, $FF,
+ $D1, $A7, $70, $FF, $CD, $A4, $6E, $FF, $CA, $9F, $67, $FF, $C7, $9C, $64, $FF,
+ $C4, $99, $61, $FF, $C1, $97, $5C, $FF, $C0, $93, $59, $FF, $C0, $92, $57, $FF,
+ $C0, $92, $57, $FF, $C0, $92, $57, $FF, $C0, $92, $57, $FF, $C0, $92, $57, $FF,
+ $C0, $92, $57, $FF, $BF, $91, $56, $FF, $BF, $90, $52, $FF, $BE, $8E, $4F, $FF,
+ $BC, $89, $47, $FF, $BB, $84, $44, $FF, $B9, $81, $3E, $FF, $B5, $7C, $38, $FF,
+ $B8, $7F, $3B, $FF, $BC, $85, $45, $FF, $CD, $A0, $6A, $FF, $87, $50, $14, $FF,
+ $37, $19, $08, $FF, $00, $00, $00, $59, $00, $00, $00, $33, $00, $00, $00, $16,
+ $00, $00, $00, $06, $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $06,
+ $00, $00, $00, $15, $37, $19, $08, $FF, $F4, $E0, $C9, $FF, $E6, $C9, $A3, $FF,
+ $E5, $C5, $A0, $FF, $D9, $B8, $88, $FF, $D3, $A6, $76, $FF, $D0, $A7, $71, $FF,
+ $CF, $A5, $6E, $FF, $CB, $A2, $6C, $FF, $CA, $9F, $67, $FF, $C6, $9B, $63, $FF,
+ $C5, $9A, $62, $FF, $C4, $99, $61, $FF, $C2, $98, $5D, $FF, $C2, $98, $61, $FF,
+ $C2, $98, $61, $FF, $C4, $99, $61, $FF, $C4, $99, $61, $FF, $C5, $9A, $62, $FF,
+ $C5, $9A, $62, $FF, $C4, $99, $61, $FF, $C1, $94, $5A, $FF, $C0, $93, $59, $FF,
+ $BF, $90, $54, $FF, $BC, $8C, $4D, $FF, $BC, $89, $47, $FF, $BE, $8A, $4D, $FF,
+ $C4, $99, $61, $FF, $BE, $8B, $4F, $FF, $C7, $9D, $60, $FF, $89, $4E, $14, $FF,
+ $37, $19, $08, $FF, $00, $00, $00, $58, $00, $00, $00, $33, $00, $00, $00, $15,
+ $00, $00, $00, $06, $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $06,
+ $00, $00, $00, $14, $37, $19, $08, $FF, $F4, $E0, $C9, $FF, $E6, $C8, $A1, $FF,
+ $E1, $C3, $9C, $FF, $DA, $B3, $85, $FF, $D1, $A5, $72, $FF, $CF, $A5, $6E, $FF,
+ $CD, $A3, $6C, $FF, $C8, $9F, $68, $FF, $C5, $9B, $64, $FF, $C2, $99, $5F, $FF,
+ $C2, $93, $5B, $FF, $C0, $92, $57, $FF, $BF, $91, $56, $FF, $BF, $91, $56, $FF,
+ $C0, $92, $57, $FF, $C2, $93, $5B, $FF, $C1, $97, $5C, $FF, $C5, $9A, $62, $FF,
+ $C8, $9E, $67, $FF, $CD, $A3, $6C, $FF, $CD, $A3, $6C, $FF, $CE, $A1, $6B, $FF,
+ $CE, $A1, $6B, $FF, $D2, $AB, $79, $FF, $D2, $AA, $77, $FF, $D1, $A5, $72, $FF,
+ $D4, $A7, $73, $FF, $BF, $8A, $4C, $FF, $B1, $73, $30, $FF, $87, $4D, $14, $FF,
+ $37, $19, $08, $FF, $00, $00, $00, $55, $00, $00, $00, $30, $00, $00, $00, $14,
+ $00, $00, $00, $06, $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $05,
+ $00, $00, $00, $12, $33, $17, $07, $C1, $B2, $75, $2D, $FF, $C7, $9D, $60, $FF,
+ $C4, $9A, $5D, $FF, $BD, $8C, $4C, $FF, $BA, $7E, $3D, $FF, $B8, $7E, $39, $FF,
+ $B6, $7A, $39, $FF, $B5, $78, $36, $FF, $B3, $75, $32, $FF, $AF, $77, $2E, $FF,
+ $AD, $72, $2C, $FF, $AC, $74, $2B, $FF, $AA, $72, $29, $FF, $AA, $72, $29, $FF,
+ $AA, $72, $29, $FF, $AE, $71, $29, $FF, $AE, $71, $29, $FF, $AE, $71, $29, $FF,
+ $AE, $71, $29, $FF, $AA, $72, $29, $FF, $A9, $6D, $26, $FF, $AA, $6C, $23, $FF,
+ $A5, $69, $22, $FF, $A3, $67, $20, $FF, $A2, $65, $1D, $FF, $9E, $61, $19, $FF,
+ $9B, $5F, $18, $FF, $99, $5D, $16, $FF, $92, $56, $15, $FF, $58, $30, $0D, $FF,
+ $26, $11, $05, $B4, $00, $00, $00, $4C, $00, $00, $00, $2A, $00, $00, $00, $11,
+ $00, $00, $00, $04, $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $04,
+ $00, $00, $00, $0E, $2B, $13, $06, $71, $31, $16, $07, $C7, $37, $19, $08, $FF,
+ $37, $19, $08, $FF, $37, $19, $08, $FF, $37, $19, $08, $FF, $37, $19, $08, $FF,
+ $37, $19, $08, $FF, $37, $19, $08, $FF, $37, $19, $08, $FF, $37, $19, $08, $FF,
+ $37, $19, $08, $FF, $37, $19, $08, $FF, $37, $19, $08, $FF, $37, $19, $08, $FF,
+ $37, $19, $08, $FF, $37, $19, $08, $FF, $37, $19, $08, $FF, $37, $19, $08, $FF,
+ $37, $19, $08, $FF, $37, $19, $08, $FF, $37, $19, $08, $FF, $37, $19, $08, $FF,
+ $37, $19, $08, $FF, $37, $19, $08, $FF, $37, $19, $08, $FF, $37, $19, $08, $FF,
+ $37, $19, $08, $FF, $37, $19, $08, $FF, $37, $19, $08, $FF, $26, $11, $05, $B4,
+ $0C, $05, $01, $66, $00, $00, $00, $3C, $00, $00, $00, $20, $00, $00, $00, $0C,
+ $00, $00, $00, $03, $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $02,
+ $00, $00, $00, $09, $00, $00, $00, $18, $00, $00, $00, $2D, $00, $00, $00, $41,
+ $00, $00, $00, $4F, $00, $00, $00, $56, $00, $00, $00, $58, $00, $00, $00, $58,
+ $00, $00, $00, $58, $00, $00, $00, $59, $00, $00, $00, $59, $00, $00, $00, $59,
+ $00, $00, $00, $59, $00, $00, $00, $59, $00, $00, $00, $59, $00, $00, $00, $59,
+ $00, $00, $00, $59, $00, $00, $00, $59, $00, $00, $00, $59, $00, $00, $00, $59,
+ $00, $00, $00, $59, $00, $00, $00, $59, $00, $00, $00, $59, $00, $00, $00, $59,
+ $00, $00, $00, $59, $00, $00, $00, $59, $00, $00, $00, $59, $00, $00, $00, $59,
+ $00, $00, $00, $58, $00, $00, $00, $58, $00, $00, $00, $54, $00, $00, $00, $4C,
+ $00, $00, $00, $3C, $00, $00, $00, $27, $00, $00, $00, $14, $00, $00, $00, $07,
+ $00, $00, $00, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01,
+ $00, $00, $00, $04, $00, $00, $00, $0D, $00, $00, $00, $18, $00, $00, $00, $24,
+ $00, $00, $00, $2C, $00, $00, $00, $31, $00, $00, $00, $33, $00, $00, $00, $33,
+ $00, $00, $00, $33, $00, $00, $00, $33, $00, $00, $00, $33, $00, $00, $00, $33,
+ $00, $00, $00, $33, $00, $00, $00, $33, $00, $00, $00, $33, $00, $00, $00, $33,
+ $00, $00, $00, $33, $00, $00, $00, $33, $00, $00, $00, $33, $00, $00, $00, $33,
+ $00, $00, $00, $33, $00, $00, $00, $33, $00, $00, $00, $33, $00, $00, $00, $33,
+ $00, $00, $00, $33, $00, $00, $00, $33, $00, $00, $00, $33, $00, $00, $00, $33,
+ $00, $00, $00, $33, $00, $00, $00, $32, $00, $00, $00, $30, $00, $00, $00, $2A,
+ $00, $00, $00, $20, $00, $00, $00, $14, $00, $00, $00, $09, $00, $00, $00, $03,
+ $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $02, $00, $00, $00, $04, $00, $00, $00, $09, $00, $00, $00, $0E,
+ $00, $00, $00, $12, $00, $00, $00, $14, $00, $00, $00, $15, $00, $00, $00, $15,
+ $00, $00, $00, $15, $00, $00, $00, $16, $00, $00, $00, $16, $00, $00, $00, $16,
+ $00, $00, $00, $16, $00, $00, $00, $16, $00, $00, $00, $16, $00, $00, $00, $16,
+ $00, $00, $00, $16, $00, $00, $00, $16, $00, $00, $00, $16, $00, $00, $00, $16,
+ $00, $00, $00, $16, $00, $00, $00, $16, $00, $00, $00, $16, $00, $00, $00, $16,
+ $00, $00, $00, $16, $00, $00, $00, $16, $00, $00, $00, $16, $00, $00, $00, $16,
+ $00, $00, $00, $15, $00, $00, $00, $15, $00, $00, $00, $14, $00, $00, $00, $11,
+ $00, $00, $00, $0C, $00, $00, $00, $07, $00, $00, $00, $03, $00, $00, $00, $01,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $02, $00, $00, $00, $04,
+ $00, $00, $00, $05, $00, $00, $00, $06, $00, $00, $00, $06, $00, $00, $00, $06,
+ $00, $00, $00, $06, $00, $00, $00, $06, $00, $00, $00, $06, $00, $00, $00, $06,
+ $00, $00, $00, $06, $00, $00, $00, $06, $00, $00, $00, $06, $00, $00, $00, $06,
+ $00, $00, $00, $06, $00, $00, $00, $06, $00, $00, $00, $06, $00, $00, $00, $06,
+ $00, $00, $00, $06, $00, $00, $00, $06, $00, $00, $00, $06, $00, $00, $00, $06,
+ $00, $00, $00, $06, $00, $00, $00, $06, $00, $00, $00, $06, $00, $00, $00, $06,
+ $00, $00, $00, $06, $00, $00, $00, $06, $00, $00, $00, $06, $00, $00, $00, $04,
+ $00, $00, $00, $03, $00, $00, $00, $02, $00, $00, $00, $01, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $01, $00, $00, $00, $01, $00, $00, $00, $01, $00, $00, $00, $01,
+ $00, $00, $00, $01, $00, $00, $00, $01, $00, $00, $00, $01, $00, $00, $00, $01,
+ $00, $00, $00, $01, $00, $00, $00, $01, $00, $00, $00, $01, $00, $00, $00, $01,
+ $00, $00, $00, $01, $00, $00, $00, $01, $00, $00, $00, $01, $00, $00, $00, $01,
+ $00, $00, $00, $01, $00, $00, $00, $01, $00, $00, $00, $01, $00, $00, $00, $01,
+ $00, $00, $00, $01, $00, $00, $00, $01, $00, $00, $00, $01, $00, $00, $00, $01,
+ $00, $00, $00, $01, $00, $00, $00, $01, $00, $00, $00, $01, $00, $00, $00, $01,
+ $00, $00, $00, $01, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00);
+
diff --git a/pixmaps/stock_new_16_png.inc b/pixmaps/stock_new_16_png.inc
new file mode 100644
index 0000000..9994c2e
--- /dev/null
+++ b/pixmaps/stock_new_16_png.inc
@@ -0,0 +1,73 @@
+const stock_new_16_png: array[1..1049] of byte = (
+ $47, $64, $6B, $50,
+ $00, $00, $04, $18,
+ $01, $01, $00, $02,
+ $00, $00, $00, $40,
+ $00, $00, $00, $10,
+ $00, $00, $00, $10,
+ $00, $00, $00, $00, $00, $00, $00, $53, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $4C,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $FF, $FE, $FE, $FE, $FF, $FE, $FE, $FE, $FF,
+ $FE, $FE, $FE, $FF, $FE, $FE, $FE, $FF, $FE, $FE, $FE, $FF, $FE, $FE, $FE, $FF,
+ $FD, $FD, $FD, $FF, $E0, $E0, $E0, $FF, $C1, $C1, $C1, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $53, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $FF, $FE, $FE, $FE, $FF, $F1, $F1, $F1, $FF,
+ $F1, $F1, $F1, $FF, $F1, $F1, $F1, $FF, $F1, $F1, $F1, $FF, $F1, $F1, $F1, $FF,
+ $F1, $F1, $F1, $FF, $C3, $C3, $C3, $FF, $FB, $FB, $FB, $FF, $A8, $A8, $A8, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $4C, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $FF, $FE, $FE, $FE, $FF, $F1, $F1, $F1, $FF,
+ $F1, $F1, $F1, $FF, $F1, $F1, $F1, $FF, $F1, $F1, $F1, $FF, $F1, $F1, $F1, $FF,
+ $F1, $F1, $F1, $FF, $AD, $AD, $AD, $FF, $76, $76, $76, $FF, $5D, $5D, $5D, $FF,
+ $40, $40, $40, $FF, $00, $00, $00, $FF, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $FF, $FE, $FE, $FE, $FF, $F1, $F1, $F1, $FF,
+ $F1, $F1, $F1, $FF, $F1, $F1, $F1, $FF, $F1, $F1, $F1, $FF, $F1, $F1, $F1, $FF,
+ $F0, $F0, $F0, $FF, $E2, $E2, $E2, $FF, $85, $85, $85, $FF, $4B, $4B, $49, $FF,
+ $16, $16, $16, $FF, $00, $00, $00, $FF, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $FF, $FE, $FE, $FE, $FF, $F1, $F1, $F1, $FF,
+ $EF, $EF, $EF, $FF, $EF, $EF, $EF, $FF, $EF, $EF, $EF, $FF, $EF, $EF, $EF, $FF,
+ $EF, $EF, $EF, $FF, $EF, $EF, $EF, $FF, $EE, $EE, $EE, $FF, $EE, $EE, $EE, $FF,
+ $C5, $C5, $C5, $FF, $00, $00, $00, $FF, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $FF, $FE, $FE, $FE, $FF, $EF, $EF, $EF, $FF,
+ $EF, $EF, $EF, $FF, $EF, $EF, $EF, $FF, $EE, $EE, $EE, $FF, $EE, $EE, $EE, $FF,
+ $EE, $EE, $EE, $FF, $EE, $EE, $EE, $FF, $EE, $EE, $EE, $FF, $EC, $EC, $EC, $FF,
+ $C4, $C4, $C4, $FF, $00, $00, $00, $FF, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $FF, $FD, $FD, $FD, $FF, $EE, $EE, $EE, $FF,
+ $EE, $EE, $EE, $FF, $EE, $EE, $EE, $FF, $EE, $EE, $EE, $FF, $EE, $EE, $EE, $FF,
+ $EE, $EE, $EE, $FF, $EE, $EE, $EE, $FF, $EE, $EE, $EE, $FF, $EB, $EB, $EB, $FF,
+ $C3, $C3, $C3, $FF, $00, $00, $00, $FF, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $FF, $FD, $FD, $FD, $FF, $ED, $ED, $ED, $FF,
+ $EC, $EC, $EC, $FF, $EC, $EC, $EC, $FF, $EC, $EC, $EC, $FF, $EB, $EB, $EB, $FF,
+ $EB, $EB, $EB, $FF, $EA, $EA, $EA, $FF, $EA, $EA, $EA, $FF, $EA, $EA, $EA, $FF,
+ $C1, $C1, $C1, $FF, $00, $00, $00, $FF, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $FF, $FD, $FD, $FD, $FF, $EB, $EB, $EB, $FF,
+ $E8, $E8, $E8, $FF, $E8, $E8, $E8, $FF, $E8, $E8, $E8, $FF, $E8, $E8, $E8, $FF,
+ $E8, $E8, $E8, $FF, $E8, $E8, $E8, $FF, $E8, $E8, $E8, $FF, $E8, $E8, $E8, $FF,
+ $C0, $C0, $C0, $FF, $00, $00, $00, $FF, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $FF, $FD, $FD, $FD, $FF, $EA, $EA, $EA, $FF,
+ $EA, $EA, $EA, $FF, $E9, $E9, $E9, $FF, $E9, $E9, $E9, $FF, $E8, $E8, $E8, $FF,
+ $E8, $E8, $E8, $FF, $E8, $E8, $E8, $FF, $E7, $E7, $E7, $FF, $E7, $E7, $E7, $FF,
+ $BF, $BF, $BF, $FF, $00, $00, $00, $FF, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $FF, $FD, $FD, $FD, $FF, $E8, $E8, $E8, $FF,
+ $E6, $E6, $E6, $FF, $E6, $E6, $E6, $FF, $E6, $E6, $E6, $FF, $E6, $E6, $E6, $FF,
+ $E6, $E6, $E6, $FF, $E6, $E6, $E6, $FF, $E6, $E6, $E6, $FF, $E5, $E5, $E5, $FF,
+ $BE, $BE, $BE, $FF, $00, $00, $00, $FF, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $FF, $FD, $FD, $FD, $FF, $E7, $E7, $E7, $FF,
+ $E7, $E7, $E7, $FF, $E6, $E6, $E6, $FF, $E6, $E6, $E6, $FF, $E6, $E6, $E6, $FF,
+ $E5, $E5, $E5, $FF, $E5, $E5, $E5, $FF, $E4, $E4, $E4, $FF, $E4, $E4, $E4, $FF,
+ $BD, $BD, $BD, $FF, $00, $00, $00, $FF, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $FF, $FD, $FD, $FD, $FF, $E6, $E6, $E6, $FF,
+ $E5, $E5, $E5, $FF, $E5, $E5, $E5, $FF, $E5, $E5, $E5, $FF, $E4, $E4, $E4, $FF,
+ $E4, $E4, $E4, $FF, $E3, $E3, $E3, $FF, $E3, $E3, $E3, $FF, $E3, $E3, $E3, $FF,
+ $BB, $BB, $BB, $FF, $00, $00, $00, $FF, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $FF, $C2, $C2, $C2, $FF, $BD, $BD, $BD, $FF,
+ $BD, $BD, $BD, $FF, $BD, $BD, $BD, $FF, $BC, $BC, $BC, $FF, $BC, $BC, $BC, $FF,
+ $BB, $BB, $BB, $FF, $BB, $BB, $BB, $FF, $BB, $BB, $BB, $FF, $BB, $BB, $BB, $FF,
+ $A0, $A0, $A0, $FF, $00, $00, $00, $D4, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $6B, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $64, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00);
+
diff --git a/pixmaps/stock_up_one_dir_16_png.inc b/pixmaps/stock_up_one_dir_16_png.inc
new file mode 100644
index 0000000..2234efc
--- /dev/null
+++ b/pixmaps/stock_up_one_dir_16_png.inc
@@ -0,0 +1,73 @@
+const stock_up_one_dir_16_png: array[1..1049] of byte = (
+ $47, $64, $6B, $50,
+ $00, $00, $04, $18,
+ $01, $01, $00, $02,
+ $00, $00, $00, $40,
+ $00, $00, $00, $10,
+ $00, $00, $00, $10,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $39, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $39,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $39, $00, $00, $00, $FF, $E4, $E5, $DE, $FF,
+ $D3, $D5, $CA, $FF, $D3, $D5, $CA, $FF, $A5, $A7, $97, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $39, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $FF, $F3, $F4, $F0, $FF, $AB, $AE, $99, $FF,
+ $BD, $C0, $AD, $FF, $BC, $BE, $AA, $FF, $B1, $B4, $9F, $FF, $6E, $71, $5C, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $65,
+ $00, $00, $00, $00, $00, $00, $00, $FF, $E6, $E7, $DD, $FF, $F5, $F6, $F3, $FF,
+ $E6, $E7, $DD, $FF, $E6, $E7, $DD, $FF, $E6, $E7, $DD, $FF, $E4, $E5, $DB, $FF,
+ $E6, $E7, $DD, $FF, $E2, $E4, $D9, $FF, $E2, $E4, $D9, $FF, $E1, $E3, $D8, $FF,
+ $E1, $E3, $D8, $FF, $DF, $E1, $D6, $FF, $C4, $C6, $B6, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $00, $00, $00, $00, $FF, $F7, $F7, $F6, $FF, $D3, $D6, $C5, $FF,
+ $D3, $D6, $C4, $FF, $D2, $D4, $C2, $FF, $73, $74, $6A, $FF, $CE, $D1, $BD, $FF,
+ $CC, $CE, $BA, $FF, $CA, $CD, $B9, $FF, $CA, $CD, $B9, $FF, $C8, $CB, $B6, $FF,
+ $C6, $C9, $B3, $FF, $C4, $C8, $B1, $FF, $93, $96, $7C, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $00, $00, $00, $00, $FF, $F0, $F0, $EB, $FF, $D3, $D6, $C5, $FF,
+ $D3, $D6, $C4, $FF, $74, $76, $6C, $FF, $00, $00, $00, $FF, $72, $74, $69, $FF,
+ $CC, $CE, $BA, $FF, $CA, $CD, $B9, $FF, $CA, $CD, $B9, $FF, $C8, $CB, $B6, $FF,
+ $C6, $C9, $B3, $FF, $C4, $C8, $B1, $FF, $93, $96, $7C, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $00, $00, $00, $00, $FF, $F0, $F1, $EC, $FF, $D2, $D4, $C2, $FF,
+ $7C, $7E, $73, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $6F, $71, $65, $FF, $C6, $C9, $B3, $FF, $C6, $C9, $B3, $FF, $C4, $C8, $B1, $FF,
+ $C3, $C6, $AF, $FF, $C1, $C4, $AD, $FF, $90, $94, $78, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $00, $00, $00, $00, $FF, $EF, $F0, $EB, $FF, $CE, $D1, $BD, $FF,
+ $CC, $CE, $BA, $FF, $CA, $CD, $B9, $FF, $00, $00, $00, $FF, $C6, $C9, $B3, $FF,
+ $C4, $C8, $B1, $FF, $C3, $C6, $AF, $FF, $C3, $C6, $AF, $FF, $C1, $C4, $AD, $FF,
+ $BF, $C2, $AB, $FF, $BD, $C1, $A8, $FF, $8E, $91, $75, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $00, $00, $00, $00, $FF, $ED, $EE, $E8, $FF, $CA, $CD, $B9, $FF,
+ $C8, $CB, $B6, $FF, $C6, $C9, $B3, $FF, $00, $00, $00, $FF, $C3, $C6, $AF, $FF,
+ $C1, $C4, $AD, $FF, $BF, $C2, $AB, $FF, $BF, $C2, $AB, $FF, $BD, $C1, $A8, $FF,
+ $BB, $BE, $A5, $FF, $BA, $BD, $A3, $FF, $8B, $8F, $72, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $00, $00, $00, $00, $FF, $EC, $EE, $E7, $FF, $C6, $C9, $B3, $FF,
+ $C4, $C8, $B1, $FF, $C3, $C6, $AF, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $37, $38, $31, $FF, $55, $56, $4B, $FF, $63, $64, $56, $FF,
+ $8B, $8D, $79, $FF, $B7, $BA, $A0, $FF, $8B, $8F, $72, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $00, $00, $00, $00, $FF, $E8, $E8, $E0, $FF, $C3, $C6, $AF, $FF,
+ $C1, $C4, $AD, $FF, $BF, $C2, $AB, $FF, $BD, $C1, $A8, $FF, $BB, $BE, $A5, $FF,
+ $BA, $BD, $A3, $FF, $B7, $BA, $A0, $FF, $B7, $BA, $A0, $FF, $B7, $BA, $A0, $FF,
+ $B7, $BA, $A0, $FF, $B7, $BA, $A0, $FF, $8B, $8F, $72, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $00, $00, $00, $00, $FF, $C6, $C9, $BA, $FF, $90, $94, $78, $FF,
+ $8E, $92, $76, $FF, $8E, $91, $75, $FF, $8C, $90, $73, $FF, $8B, $8F, $72, $FF,
+ $8B, $8F, $72, $FF, $8B, $8F, $72, $FF, $8B, $8F, $72, $FF, $8B, $8F, $72, $FF,
+ $8B, $8F, $72, $FF, $8B, $8F, $72, $FF, $64, $67, $51, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $00, $00, $00, $00, $65, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF,
+ $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $FF, $00, $00, $00, $65,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
+ $00);
+
diff --git a/translations/UTranslation_CZ.pas b/translations/UTranslation_CZ.pas
new file mode 100644
index 0000000..cbaf654
--- /dev/null
+++ b/translations/UTranslation_CZ.pas
@@ -0,0 +1,1256 @@
+(*
+ Tux Commander - UTranslation_CZ - Czech Localization constants
+ Copyright (C) 2008 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit UTranslation_CZ;
+
+interface
+
+implementation
+
+uses ULocale;
+
+const LANGcsF2Button_Caption = 'F2 - Přejmenovat';
+ LANGcsF3Button_Caption = 'F3 - Prohlížet';
+ LANGcsF4Button_Caption = 'F4 - Upravit';
+ LANGcsF5Button_Caption = 'F5 - Kopírovat';
+ LANGcsF6Button_Caption = 'F6 - Přesunout';
+ LANGcsF7Button_Caption = 'F7 - Nová složka';
+ LANGcsF8Button_Caption = 'F8 - Smazat';
+
+ LANGcsmnuFile_Caption = 'Sou_bor';
+ LANGcsmnuMark_Caption = 'O_značení';
+ LANGcsmnuCommands_Caption = 'Pří_kazy';
+ LANGcsmnuHelp_Caption = 'Nápo_věda';
+ LANGcsmiExit_Caption = '_Konec';
+ LANGcsmiSelectGroup_Caption = 'Označit _skupinu...';
+ LANGcsmiUnselectGroup_Caption = '_Odznačit skupinu...';
+ LANGcsmiSelectAll_Caption = '_Vybrat vše';
+ LANGcsmiUnselectAll_Caption = 'O_doznačit vše';
+ LANGcsmiInvertSelection_Caption = '_Převrátit výběr';
+ LANGcsmiRefresh_Caption = 'O_bnovit';
+ LANGcsmiAbout_Caption = '_O programu...';
+
+ LANGcsColumn1_Caption = 'Jméno';
+ LANGcsColumn2_Caption = 'Přípona';
+ LANGcsColumn3_Caption = 'Velikost';
+ LANGcsColumn4_Caption = 'Datum';
+ LANGcsColumn5_Caption = 'Atributy';
+
+ LANGcsExpandSelection = 'Rozšířit výběr';
+ LANGcsShrinkSelection = 'Zúžit výběr';
+ LANGcsNoMatchesFound = 'Nenalezen žádný výskyt';
+ LANGcsNoFilesSelected = 'Není označen žádný soubor!';
+ LANGcsSelectedFilesDirectories = '%d označených souborů/složek';
+ LANGcsDirectoryS = 'složku %s';
+ LANGcsFileS = 'soubor %s';
+ LANGcsDoYouReallyWantToDeleteTheS = 'Opravdu si přejete odstranit %s?';
+ LANGcsDoYouReallyWantToDeleteTheSS = 'Opravdu si přejete odstranit %s?'#10'%s';
+ LANGcsCopyFiles = 'Kopírovat soubory';
+ LANGcsMoveRenameFiles = 'Přesunout/přejmenovat soubory';
+ LANGcsCopyDFileDirectoriesTo = 'Zkopírovat %d souborů/složek do';
+ LANGcsMoveRenameDFileDirectoriesTo = 'Přesunout/přejmenovat %d souborů/složek do';
+ LANGcsCopySC = 'Kopírovat:';
+ LANGcsMoveRenameSC = 'Přesunout/přejmenovat:';
+
+ LANGcsQuickFind = ' Vyhledat:';
+
+ LANGcsAboutString = 'Tux Commander'#10'Verze %s'#10'Datum sestavení: %s'#10#10'Copyright (c) 2008 Tomáš Bžatek'#10'E-mail: tbzatek@users.sourceforge.net'#10'WWW stránka: http://tuxcmd.sourceforge.net/';
+ LANGcsAboutStringGnome = 'verze %s'#10'Datum sestavení: %s'#10'WWW stránka: http://tuxcmd.sourceforge.net/';
+ LANGcsDiskStatFmt = '%s z %s volných';
+ LANGcsDiskStatVolNameFmt = '[%s] %s z %s volných';
+ LANGcsStatusLineFmt = '%s z %s v %d z %d souborů označeno';
+ LANGcsPanelStrings : array[boolean] of string = ('pravém', 'levém');
+
+ LANGcsDIR = '<DIR>';
+ LANGcsErrorGettingListingForSPanel = 'Chyba při otevírání složky v %s panelu:'#10' %s'#10#10'Cesta = ''%s''';
+ LANGcsErrorGettingListingForSPanelNoPath = 'Chyba při otevírání složky v %s panelu:'#10' %s';
+ LANGcsErrorCreatingNewDirectorySInSPanel = 'Nelze vytvořit složku ''%s'' v %s panelu:'#10' %s';
+ LANGcsErrorCreatingNewDirectorySInSPanelNoPath = 'Nelze vytvořit složku ''%s'' v %s panelu:'#10' %s';
+ LANGcsTheFileDirectory = 'Soubor/adresář';
+ LANGcsCouldNotBeDeleted = 'nemohl být smazán';
+ LANGcsCouldNotBeDeletedS = 'nemohl být smazán: %s';
+ LANGcsUserCancelled = 'Operace přerušena!';
+ LANGcsTheDirectorySIsNotEmpty = 'Složka %s není prázdná!';
+ LANGcsCannotCopyFile = 'Nelze zkopírovat soubor';
+ LANGcsCopyError = 'Chyba při kopírování';
+ LANGcsMoveError = 'Chyba při přesouvání';
+ LANGcsOverwriteS = 'Přepsat: %s';
+ LANGcsWithFileS = 'Souborem: %s';
+ LANGcsOvewriteSBytesS = '%s bytů, %s';
+ LANGcsTheFile = 'Soubor';
+ LANGcsCopy = 'Kopírovat';
+ LANGcsMove = 'Přesunout';
+ LANGcsTheDirectory = 'Adresář';
+ LANGcsTheSymbolicLink = 'Symbolický odkaz';
+ LANGcsCannotMoveFile = 'Nelze přesunout soubor';
+ LANGcsCouldNotBeCreated = 'nemohl být vytvořen';
+ LANGcsCouldNotBeCreatedS = 'nemohl být vytvořen: %s';
+ LANGcsFromS = 'Z: %s';
+ LANGcsToS = 'Do: %s';
+ LANGcsCannotCopyFileToItself = 'Zdrojový a cílový soubor jsou totožné!';
+ LANGcsMemoryAllocationFailed = 'Chyba při alokaci paměti:';
+ LANGcsCannotOpenSourceFile = 'Nelze otevřít zdrojový soubor';
+ LANGcsCannotOpenDestinationFile = 'Nelze otevřít cílový soubor';
+ LANGcsCannotCloseDestinationFile = 'Nelze uzavřít cílový soubor';
+ LANGcsCannotCloseSourceFile = 'Nelze uzavřít zdrojový soubor';
+ LANGcsCannotReadFromSourceFile = 'Nelze číst ze zdrojového souboru';
+ LANGcsCannotWriteToDestinationFile = 'Nelze zapisovat do cílového souboru';
+
+ LANGcsUnknownException = 'Neznámá chyba';
+ LANGcsNoAccess = 'Přístup zamítnut';
+ LANGcsUnknownError = 'Neznámá chyba';
+
+ LANGcsCreateANewDirectory = 'Vytvořit novou složku';
+ LANGcsEnterDirectoryName = 'Zadejte jmé_no složky:';
+
+ LANGcsOverwriteQuestion = 'Potvrzení přepsání';
+ LANGcsOverwriteButton_Caption = '_Přepsat';
+ LANGcsOverwriteAllButton_Caption = 'Přepsat _vše';
+ LANGcsSkipButton_Caption = 'Pře_skočit';
+ LANGcsOverwriteAllOlderButton_Caption = 'Přepsat sta_rší';
+ LANGcsSkipAllButton_Caption = 'Přeskočit vš_e';
+ LANGcsRenameButton_Caption = 'Přej_menovat';
+ LANGcsAppendButton_Caption = 'Připoji_t';
+ LANGcsRename = 'Přejmenovat';
+ LANGcsRenameFile = 'Přejmenovat soubor ''%s'' na';
+ LANGcsIgnoreButton_Caption = '_Ignorovat';
+
+ LANGcsProgress = 'Průběh operace';
+ LANGcsCancel = '_Storno';
+ LANGcsDelete = 'Mazání:';
+
+ LANGcsSpecifyFileType = 'Zvolte _typ souboru:';
+
+ LANGcsRemoveDirectory = 'Odstranit složku';
+ LANGcsDoYouWantToDeleteItWithAllItsFilesAndSubdirectories = 'Opravdu si přejete vše smazat včetně vnořených složek?';
+ LANGcsRetry = '_Opakovat';
+ LANGcsDeleteButton_Caption = 'O_dstranit';
+ LANGcsAll = '_Vše';
+
+ LANGcsCopyFilesSC = 'Kopírovat soubory:';
+ LANGcsAppendQuestion = 'Opravdu si přejete připojit soubor ''%s'' k souboru ''%s''?';
+ LANGcsPreparingList = 'Připravuje se seznam souborů...';
+
+ LANGcsYouMustSelectAValidFile = 'Musíte označit platný soubor!';
+ LANGcsmiVerifyChecksums = '_Ověřit kontrolní součty';
+ LANGcsVerifyChecksumsCaption = 'Ověřit kontrolní součty';
+ LANGcsCheckButtonCaptionCheck = '_Ověřit';
+ LANGcsCheckButtonCaptionStop = '_Stop';
+ LANGcsFileListTooltip = '[?] - Dosud neověřeno'#10'[OK] - Kontrolní součet je správný'#10'[BAD] - Kontrolní součet je špatný'#10'[N/A] - Soubor není k dispozici';
+ LANGcsFilenameColumnCaption = 'Soubor';
+ LANGcsTheFileSYouAreTryingToOpenIsQuiteBig = 'Soubor ''%s'' který se pokoušíte načíst, je velký (%s bajtů). Nemusí se jednat o platný soubor s kontrolními součty.'#10#10'Přejete si pokračovat?';
+ LANGcsAnErrorOccuredWhileInitializingMemoryBlock = 'Nastala chyba při alokaci místa v paměti. Pokuste se uvolnit paměť uzavřením několika aplikací a zkuste to znovu.';
+ LANGcsAnErrorOccuredWhileOpeningFileSS = 'Nelze otevřít soubor ''%s'':'#10' %s';
+ LANGcsAnErrorOccuredWhileReadingFileSS = 'Nelze číst ze souboru ''%s'':'#10' %s';
+ LANGcsChecksumNotChecked = '<span weight="bold">Stav:</span> Nekontrolováno';
+ LANGcsChecksumChecking = '<span weight="bold">Stav:</span> Probíhá kontrola...';
+ LANGcsChecksumInterrupted = '<span weight="bold">Stav:</span> Přerušeno';
+ LANGcsChecksumDOK = '<span weight="bold">Stav:</span> %d%% OK';
+
+ LANGcsmiCreateChecksumsCaption = '_Vytvořit kontrolní součty...';
+ LANGcsYouMustSelectAtLeastOneFileToCalculateChecksum = 'Musíte označit alespoň jeden platný soubor, pro který chcete vytvořit kontrolní součty!';
+ LANGcsCreateChecksumsCaption = 'Vytvořit kontrolní součty';
+ LANGcsCCHKSUMPage1Text = 'Chystáte se vytvořit kontrolní součty pro'#10'označené soubory v panelu. Jestliže nejsou'#10'označeny všechny potřebné soubory,'#10'ukončete tohoto průvodce a zkuste to znovu.';
+ LANGcsCCHKSUMPage4Text = 'Průvodce je připraven vytvořit kontrolní součty.'#10'Tato operace může trvat několik minut.'#10'Stiskněte Vpřed pro pokračování.';
+ LANGcsCCHKSUMPage6Text = 'Během operace nastaly následující chyby:';
+ LANGcsCCHKSUMPage7Text = 'Kontrolní součty jsou připraveny k použití.'#10#10'Stisknutím Dokončit ukončíte průvodce.';
+ LANGcsCCHKSUMPage1Title = '<span size="xx-large" weight="ultrabold">Příprava souborů</span>';
+ LANGcsCCHKSUMPage2Title = '<span size="xx-large" weight="ultrabold">Vyberte typ součtového souboru</span>';
+ LANGcsCCHKSUMPage3Title = '<span size="xx-large" weight="ultrabold">Zvolte jméno souboru</span>';
+ LANGcsCCHKSUMPage4Title = '<span size="xx-large" weight="ultrabold">Připraveno pro operaci</span>';
+ LANGcsCCHKSUMPage5Title = '<span size="xx-large" weight="ultrabold">Probíhá kontrola...</span>';
+ LANGcsCCHKSUMPage6Title = '<span size="xx-large" weight="ultrabold">Chyba!</span>';
+ LANGcsCCHKSUMPage7Title = '<span size="xx-large" weight="ultrabold">Dokončeno</span>';
+ LANGcsCCHKSUMSFVFile = 'soubor SFV';
+ LANGcsCCHKSUMMD5sumFile = 'soubor MD5';
+ LANGcsCCHKSUMFileName = '_Název souboru:';
+ LANGcsCCHKSUMCreateSeparateChecksumFiles = 'Samostatné _soubory se součty';
+ LANGcsCCHKSUMNowProcessingFileS = 'Kontroluje se soubor: %s';
+ LANGcsCCHKSUMFinishCaption = '_Dokončit';
+ LANGcsCCHKSUMAreYouSureYouWantToAbortTheProcessing = 'Opravdu si přejete přerušit kontrolu?';
+ LANGcsCCHKSUMAnErrorOccuredWhileOpeningFileSS = 'Nastala chyba při otevírání souboru ''%s'': %s'#10;
+ LANGcsCCHKSUMAnErrorOccuredWhileReadingFileSS = 'Nastala chyba při čtení souboru ''%s'': %s'#10;
+ LANGcsCCHKSUMAnErrorOccuredWhileWritingFileSS = 'Nastala chyba při pokusu o zápis do souboru ''%s'': %s'#10;
+
+ LANGcsAnErrorOccuredWhileWritingFileSS = 'Nelze zapisovat do souboru ''%s'':'#10' %s';
+ LANGcsTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt = 'Cílový soubor ''%s'' existuje. Přejete si ho přepsat?';
+ LANGcsTheTargetFileSCannotBeRemovedS = 'Cílový soubor ''%s'' nemohl být odstraněn: %s';
+ LANGcsMergeCaption = 'Spojit';
+ LANGcsPleaseInsertNextDiskOrGiveDifferentLocation = 'Prosím vložte další disk nebo zadejte jiné umístění:';
+ LANGcsMergeOfSSucceeded = 'Spojení souboru ''%s'' bylo úspěšně dokončeno (správný kontrolní součet).';
+ LANGcsWarningCreatedFileFailsCRCCheck = 'Upozornění: Vytvořený soubor nemá správný kontrolní součet!';
+ LANGcsMergeOfSSucceeded_NoCRCFileAvailable = 'Spojení souboru ''%s'' bylo úspěšně dokončeno (kontrolní součet není k dispozici).';
+ LANGcsMergeSAndAllFilesWithAscendingNamesToTheFollowingDirectory = 'Spojit ''%s'' a všechny soubory s navazujícími jmény do následujícího adresáře:';
+ LANGcsMergeSC = 'Spojit:';
+ LANGcsmiSplitFileCaption = '_Rozdělit soubor...';
+ LANGcsmiMergeFilesCaption = 'S_pojit soubory...';
+
+ LANGcsSplitTheFileSToDirectory = '_Rozdělit soubor ''%s'' do cílového adresáře:';
+ LANGcsSplitSC = 'Rozdělit:';
+ LANGcsSplitFile = 'Rozdělit soubor';
+ LANGcsBytesPerFile = '_Bajtů na soubor:';
+ LANGcsAutomatic = 'Automaticky';
+ LANGcsDeleteFilesOnTargetDisk = '_Smazat soubory na cílovém disku (vhodné pro vyjímatelné disky)';
+ LANGcsSplitCaption = 'Rozdělit';
+ LANGcsCannotOpenFileS = 'Nelze otevřít soubor ''%s''';
+ LANGcsCannotSplitTheFileToMoreThan999Parts = 'Soubor nelze rozdělit do více než 999 částí!';
+ LANGcsThereAreSomeFilesInTheTargetDirectorySDoYouWantToDeleteThem = 'V cílovém adresáři se nacházejí tyto soubory:'#10'%s'#10'Přejete si je smazat?';
+ LANGcsThereAreDFilesInTheTargetDirectoryDoYouWantToDeleteThem = 'V cílovém adresáři se nachází %d souborů. Přejete si je smazat?';
+ LANGcsAnErrorOccuredWhileOperationS = 'Při provádění operace nastala chyba : %s';
+ LANGcsSplitOfSSucceeded = 'Rozdělení souboru ''%s'' bylo úspěšně dokončeno.';
+ LANGcsSplitOfSFailed = 'Rozdělení souboru ''%s'' nebylo úspěšné!';
+
+ LANGcsmnuShow_Caption = '_Zobrazení';
+ LANGcsmiShowDotFiles_Caption = 'Zobrazit _skryté soubory';
+ LANGcsTheFileYouAreTryingToOpenIsQuiteBig = 'Soubor, který se pokoušíte načíst, je velký. Otevřením v externí aplikaci (např. gedit) může dojít ke zpomalení reakcí systému.'#10'Přejete si pokračovat?';
+ LANGcsCannotExecuteSPleaseCheckTheConfiguration = 'Nelze spustit ''%s''. Prosím zkontrolujte nastavení.';
+ LANGcsEdit = 'Upravit';
+ LANGcsEnterFilenameToEdit = 'Zad_ejte jméno souboru, který chcete upravit:';
+
+ LANGcsmnuSettings_Caption = 'Nas_tavení';
+ LANGcsmiFileTypes_Caption = '_Typy souborů...';
+ LANGcsThereIsNoApplicationAssociatedWithS = 'Žádná aplikace není přiřazena k souboru "%s".'#10#10'Přejete si otevřít dialog s nastavením akcí k typům souborů?';
+ LANGcsErrorExecutingCommand = 'Zadaný příkaz nelze vykonat!';
+ LANGcsEditFileTypesCaption = 'Nastavení přiřazení';
+ LANGcsTitleLabel_Caption = '<span size="x-large" weight="ultrabold">Typy souborů</span>';
+ LANGcsExtensionsColumn = 'Přípony';
+ LANGcsDescriptionColumn = 'Popis';
+ LANGcsFileTypesList = 'Seznam typů souborů';
+ LANGcsActionName = 'Název akce';
+ LANGcsCommand = 'Příkaz';
+ LANGcsSetDefaultActionButton_Caption = '_Nastavit jako výchozí';
+ LANGcsRunInTerminalCheckBox_Caption = 'Spustit v _terminálu';
+ LANGcsAutodetectCheckBox_Caption = 'Autodetekce _okenní aplikace';
+ LANGcsBrowseButton_Caption = '_Prohledat...';
+ LANGcsCommandLabel_Caption = 'Pří_kaz:';
+ LANGcsDescriptionLabel_Caption = 'Náz_ev akce:';
+ LANGcsFNameExtLabel_Caption = 'Při_dat typ:';
+ LANGcsNotebookPageExtensions = 'Typ souboru';
+ LANGcsNotebookPageActions = 'Akce';
+ LANGcsDefault = ' (výchozí)';
+ LANGcsCannotSaveFileTypeAssociationsBecauseOtherProcess = 'Nelze uložit seznam typů souborů, protože jiný proces mezitím uložený seznam změnil.';
+
+ LANGcsDefaultColor = 'Výchozí _barva';
+ LANGcsIcon = '_Ikona:';
+ LANGcsBrowseForIcon = 'Vyhledat ikonu';
+ LANGcsSelectFileTypeColor = 'Zvolit barvu typu souborů';
+ LANGcsColor = 'Ba_rva:';
+
+ LANGcsmiChangePermissions_Caption = 'Změnit oprá_vnění...';
+ LANGcsmiChangeOwner_Caption = 'Změnit v_lastníka/skupinu...';
+ LANGcsmiCreateSymlink_Caption = 'Vytvořit od_kaz...';
+ LANGcsmiEditSymlink_Caption = '_Upravit odkaz...';
+ LANGcsChmodProgress = 'Změna oprávnění:';
+ LANGcsChownProgress = 'Změna vlastníka:';
+ LANGcsYouMustSelectAValidSymbolicLink = 'Musíte vybrat platný odkaz!';
+ LANGcsPopupRunS = 'Spus_tit %s';
+ LANGcsPopupOpenS = '_Otevřít %s';
+ LANGcsPopupGoUp = 'Přejít d_o nadřazeného adresáře';
+ LANGcsPopupOpenWithS = 'Otevřít v %s';
+ LANGcsPopupDefault = ' (výchozí)';
+ LANGcsPopupOpenWith = '_Otevřít v...';
+ LANGcsPopupViewFile = '_Zobrazit soubor';
+ LANGcsPopupEditFile = 'Upravit _soubor';
+ LANGcsPopupMakeSymlink = 'Vytvořit od_kaz';
+ LANGcsPopupRename = '_Přejmenovat';
+ LANGcsPopupDelete = 'O_dstranit';
+ LANGcsDialogChangePermissions = 'Změnit oprávnění';
+ LANGcsCouldNotBeChmoddedS = 'nelze změnit oprávnění: %s';
+ LANGcsDialogChangeOwner = 'Změnit vlastníka/skupinu';
+ LANGcsCouldNotBeChownedS = 'nelze změnit vlastníka: %s';
+ LANGcsDialogMakeSymlink = 'Vytvořit odkaz';
+ LANGcsDialogEditSymlink = 'Upravit odkaz';
+ LANGcsFEditSymlink_Caption = 'Upravit symbolický odkaz';
+ LANGcsFEditSymlink_SymbolicLinkFilename = '_Název odkazu:';
+ LANGcsFEditSymlink_SymbolicLinkPointsTo = 'Odkaz _ukazuje na:';
+
+ LANGcsFChmod_Caption = 'Oprávnění';
+ LANGcsFChmod_PermissionFrame = 'Příznaky oprávnění';
+ LANGcsFChmod_FileFrame = 'Soubor';
+ LANGcsFChmod_ApplyRecursivelyFor = 'Použít _opakovaně pro';
+ LANGcsFChmod_miAllFiles = 'Všechny soubory a adresáře';
+ LANGcsFChmod_miDirectories = 'Pouze pro adresáře';
+ LANGcsFChmod_OctalLabel = 'Čí_selné vyjádření:';
+ LANGcsFChmod_SUID = 'SUID - Nastavit ID uživatele při spuštění';
+ LANGcsFChmod_SGID = 'SGID - Nastavit ID skupiny při spuštění';
+ LANGcsFChmod_Sticky = 'bit ''sticky''';
+ LANGcsFChmod_RUSR = 'RUSR - Čtení vlastníkem';
+ LANGcsFChmod_WUSR = 'WUSR - Zápis vlastníkem';
+ LANGcsFChmod_XUSR = 'XUSR - Spouštění vlastníkem';
+ LANGcsFChmod_RGRP = 'RGRP - Čtení skupinou';
+ LANGcsFChmod_WGRP = 'WGRP - Zápis skupinou';
+ LANGcsFChmod_XGRP = 'XGRP - Spouštění skupinou';
+ LANGcsFChmod_ROTH = 'ROTH - Čtení ostatními';
+ LANGcsFChmod_WOTH = 'WOTH - Zápis ostatními';
+ LANGcsFChmod_XOTH = 'XOTH - Spouštění ostatními';
+ LANGcsFChmod_TextLabel = '<span weight="ultrabold">Textové vyjádření:</span> %s';
+ LANGcsFChmod_FileLabel = '<span weight="ultrabold">Zvolený soubor:</span> %s'#10'<span weight="ultrabold">Textové vyjádření:</span> %s'#10 +
+ '<span weight="ultrabold">Číselné vyjádření:</span> %d'#10'<span weight="ultrabold">Vlastník:</span> %s'#10 +
+ '<span weight="ultrabold">Skupina:</span> %s';
+
+ LANGcsFChown_Caption = 'Změnit vlastníka/skupinu';
+ LANGcsFChown_OwnerFrame = 'Vlastník';
+ LANGcsFChown_GroupFrame = 'Název skupiny';
+ LANGcsFChown_FileFrame = 'Soubor';
+ LANGcsFChown_ApplyRecursively = 'Použít _opakovaně';
+
+ LANGcsFSymlink_Caption = 'Vytvořit symbolický odkaz';
+ LANGcsFSymlink_ExistingFilename = '_Existující soubor (na který se bude odkazovat):';
+ LANGcsFSymlink_SymlinkFilename = '_Název odkazu:';
+
+ LANGcsmnuBookmarks_Caption = 'Záložk_y';
+ LANGcsmiAddBookmark_Caption = 'Přidat záložku';
+ LANGcsmiEditBookmarks_Caption = 'Upravit záložky';
+ LANGcsBookmarkPopupDelete_Caption = '_Smazat';
+ LANGcsmiPreferences_Caption = '_Nastavení...';
+ LANGcsTheCurrentDirectoryAlreadyExistsInTheBookmarksList = 'Adresář který se pokoušíte přidat již existuje v seznamu záložek';
+ LANGcsSomeOtherInstanceChanged = 'V některé další spuštěné instanci programu bylo změněno nastavení. Přejete si použít nové nastavení i pro aktuální okno?'#10#10'Upozornění: Pokud nepovolíte provedení změn, bude toto nové nastavení přepsáno při ukončení programu!';
+
+ LANGcsPreferences_Caption = 'Nastavení aplikace';
+ LANGcsPreferences_TitleLabel_Caption = '<span size="x-large" weight="ultrabold">Nastavení aplikace</span>';
+ LANGcsPreferences_GeneralPage = 'Obecné';
+ LANGcsPreferences_FontsPage = 'Písma';
+ LANGcsPreferences_ColorsPage = 'Barvy';
+ LANGcsPreferences_RowHeight = 'Výš_ka řádku:';
+ LANGcsPreferences_NumHistoryItems = 'Položek v _historii příkazové řádky:';
+ LANGcsPreferences_Default = 'Výchozí';
+ LANGcsPreferences_ClearReadonlyAttribute = '_Odstranit atribut jen pro čtení při kopírování z CD-ROM';
+ LANGcsPreferences_DisableMouseRenaming = 'Zakázat _rychlé přejmenování myší';
+ LANGcsPreferences_ShowFiletypeIconsInList = 'Zobrazit přidružené _ikony typů souborů ';
+ LANGcsPreferences_ExternalAppsLabel = '<span weight="ultrabold">Externí programy</span>';
+ LANGcsPreferences_Viewer = '_Prohlížeč:';
+ LANGcsPreferences_Editor = '_Editor:';
+ LANGcsPreferences_Terminal = '_Terminál:';
+ LANGcsPreferences_ListFont = 'Písmo v panelech:';
+ LANGcsPreferences_Change = '_Změnit...';
+ LANGcsPreferences_UseDefaultFont = 'Použít _výchozí písmo';
+ LANGcsPreferences_Foreground = 'Text';
+ LANGcsPreferences_Background = 'Pozadí';
+ LANGcsPreferences_NormalItem = 'Normální položky:';
+ LANGcsPreferences_SetToDefaultToUseGTKThemeColors = 'Při výchozím nastavení se použije barva aktuálního tématu systému GTK';
+ LANGcsPreferences_Cursor = 'Kurzor:';
+ LANGcsPreferences_InactiveItem = 'Neaktivní položky:';
+ LANGcsPreferences_SelectedItem = 'Označené položky:';
+ LANGcsPreferences_LinkItem = 'Symbolické odkazy:';
+ LANGcsPreferences_LinkItemHint = 'Při výchozím nastavení se použije barva normálních položek';
+ LANGcsPreferences_DotFileItem = 'Skryté soubory:';
+ LANGcsPreferences_DotFileItemHint = 'Při výchozím nastavení se použije barva normálních položek';
+ LANGcsPreferences_BrowseForApplication = 'Zvolit aplikaci';
+ LANGcsPreferences_DefaultS = 'Výchozí: %s';
+ LANGcsPreferences_SelectFont = 'Zvolit písmo';
+
+ (*************** STRINGS ADDED TO v0.4.101 **********************************************************************************)
+ LANGcsBookmarkButton_Tooltip = 'Zobrazit záložky';
+ LANGcsUpButton_Tooltip = 'Přesunout se o adresář výš';
+ LANGcsRootButton_Tooltip = 'Přesunout se do kořenového adresáře (/)';
+ LANGcsHomeButton_Tooltip = 'Přesunout se do domovského adresáře (/home/user)';
+ LANGcsLeftEqualButton_Tooltip = 'Změnit adresář v pravém panelu na aktuální';
+ LANGcsRightEqualButton_Tooltip = 'Změnit adresář v levém panelu na aktuální';
+ LANGcsmiShowDirectorySizes_Caption = 'Spočítat obsazený prostor';
+ LANGcsmiTargetSource_Caption = 'Cílový adresář = Aktuální adresář';
+ LANGcsFileTypeDirectory = 'Adresáře';
+ LANGcsFileTypeFile = 'Soubory';
+ LANGcsFileTypeMetafile = 'Společná položka';
+ LANGcsPreferencesPanelsPage = 'Panely';
+ LANGcsPreferencesApplicationsPage = 'Aplikace';
+ LANGcsPreferencesExperimentalPage = 'Experimentální funkce';
+ LANGcsPreferencesSelectAllDirectoriesCheckBox_Caption = 'Při hromadném označování zahrnout i _adresáře';
+ LANGcsPreferencesNewStyleAltOCheckBox_Caption = 'No_vý styl Alt+O';
+ LANGcsPreferencesNewStyleAltOCheckBox_Tooltip = 'Při přepnutí nemění aktuální adresář';
+ LANGcsPreferencesShowFuncButtonsCheckBox_Caption = 'Zobrazit _funkční tlačítka (spodní lišta)';
+ LANGcsPreferencesSizeFormatLabel_Caption = 'For_mát čísel:';
+ LANGcsPreferencesmiSizeFormat1 = 'Systémový';
+ LANGcsPreferencesmiSizeFormat6 = 'Dynamický';
+ LANGcsPreferencesAutodetectXApp = 'Autodetekce X aplikace';
+ LANGcsPreferencesAlwaysRunInTerminal = 'Spustit v terminálu';
+ LANGcsPreferencesNeverRunInTerminal = 'Nespouštět v terminálu';
+ LANGcsPreferencesCmdLineBehaviourLabel_Caption = 'Spouštění z _příkazové řádky:';
+ LANGcsPreferencesFeatures = 'Funkce';
+ LANGcsPreferencesDisableMouseRename_Tooltip = 'Pro rychlé přejmenování můžete vždy použít klávesovou kombinaci Shift+F6 i při zakázané této volbě';
+ LANGcsPreferencesDisableFileTipsCheckBox_Caption = 'Zakázat plovoucí okno s plným _jménem souboru';
+ LANGcsPreferencesDisableFileTipsCheckBox_Tooltip = 'Nezobrazovat plovoucí okno s plným jménem souboru jestliže je název souboru/adresáře v panelu zkrácený';
+ LANGcsPreferencesShow = 'Zobrazení';
+ LANGcsPreferencesDirsInBoldCheckBox_Caption = 'Adresáře _tučným fontem';
+ LANGcsPreferencesDisableDirectoryBracketsCheckBox_Caption = 'Nezobrazovat _hranaté závorky v názvech adresářů';
+ LANGcsPreferencesOctalPermissionsCheckBox_Caption = 'Zobrazit _oprávnění číselně';
+ LANGcsPreferencesOctalPermissionsCheckBox_Tooltip = 'Zobrazit oprávnění souboru/adresáře v číselné formě';
+ LANGcsPreferencesMovement = 'Pohyb v panelech';
+ LANGcsPreferencesLynxLikeMotionCheckBox_Caption = 'Pohyb ve stylu prohlížeče _Lynx';
+ LANGcsPreferencesInsertMovesDownCheckBox_Caption = 'In_sert posune kurzor dolů';
+ LANGcsPreferencesSpaceMovesDownCheckBox_Caption = '_Mezerník posune kurzor dolů';
+ LANGcsPreferencesViewer = 'Prohlížeč';
+ LANGcsPreferencesCommandSC = 'Příkaz:';
+ LANGcsPreferencesUseInternalViewer = 'Použít _interní prohlížeč';
+ LANGcsPreferencesEditor = 'Editor';
+ LANGcsPreferencesTerminal = 'Terminál';
+ LANGcsPreferencesExperimentalFeatures = 'Experimentální funkce';
+ LANGcsPreferencesExperimentalWarningLabel_Caption = '<span weight="ultrabold">Varování:</span> Tyto funkce jsou momentálně ve vývoji a není zaručena jejich bezchybná funkčnost. Používejte jen na vlastní nebezpečí!';
+ LANGcsPreferencesFocusRefreshCheckBox_Caption = 'P_rovést znovunačtení panelů při vstupu do okna aplikace';
+ LANGcsPreferencesFocusRefreshCheckBox_Tooltip = 'Tato operace trvá delší dobu v závislosti na počtu souborů v panelech';
+ LANGcsPreferencesWMCompatModeCheckBox_Caption = 'Mód _kompatibility s okenními manažery';
+ LANGcsPreferencesWMCompatModeCheckBox_Tooltip = 'Použijte v případě potíží s některými okenními manažery (např. IceWM neprovádí maximalizaci okna korektně)';
+ LANGcsPreferencesCompatUseLibcSystemCheckBox_Caption = 'Použít funkci libc _system() pro spouštění procesů';
+ LANGcsPreferencesCompatUseLibcSystemCheckBox_Tooltip = 'Použijte v případě potíží se zamrznutím nebo pády aplikace při spouštění programů';
+
+ (*************** STRINGS ADDED TO v0.5.70 **********************************************************************************)
+ LANGcsmiSearchCaption2 = '_Vyhledat soubory...';
+ LANGcsmiNoMounterBarCaption = 'Nez_obrazovat pruh disků';
+ LANGcsmiShowOneMounterBarCaption = 'Zobrazit _jeden pruh disků';
+ LANGcsmiShowTwoMounterBarCaption = 'Zobrazit _dva pruhy disků';
+ LANGcsmnuNetworkCaption = 'S_íť';
+ LANGcsmiConnectionsCaption = '_Správce připojení...';
+ LANGcsmiOpenConnectionCaption = '_Připojit se...';
+ LANGcsmiQuickConnectCaption = '_Rychlé připojení...';
+ LANGcsmnuPluginsCaption = '_Moduly';
+ LANGcsmiTestPluginCaption = '_Test modulu...';
+ LANGcsmiMounterSettingsCaption = 'Nastavení pruhu _disků...';
+ LANGcsmiColumnsCaption = 'Nastavení sloup_ců...';
+ LANGcsmiSavePositionCaption = '_Uložit pozici';
+ LANGcsmiMountCaption = '_Připojit';
+ LANGcsmiUmountCaption = '_Odpojit';
+ LANGcsmiEjectCaption = '_Vysunout';
+ LANGcsmiDuplicateTabCaption = '_Otevřít nový panel';
+ LANGcsmiCloseTabCaption = '_Zavřít aktuální panel';
+ LANGcsmiCloseAllTabsCaption = 'Zavřít _všechny panely';
+ LANGcsCannotDetermineDestinationEngine = 'Nelze určit cílový adresář. Prosím zkontrolujte zadanou cestu a zkuste to znovu.';
+ LANGcsCannotLoadFile = 'Nelze otevřít soubor ''%s''. Prosím zkontrolujte oprávnění a zkuste to znovu.';
+ LANGcsMountPointDevice = 'Přípojný bod: %s'#10'Zařízení: %s';
+ LANGcsMountSC = 'Připojit:';
+ LANGcsNoPluginsFound = 'Modul nenalezen';
+ LANGcsPluginAbout = 'O modulu...';
+ LANGcsCouldntOpenURI = 'Nepodařilo se otevřít vzdálené připojení. Prosím zkontrolujte platnost adresy a přístupová práva.';
+ LANGcsPluginAboutInside = 'Modul: %s'#10#10'%s'#10'%s';
+ LANGcsAreYouSureCloseAllTabs = 'Opravdu si přejete zavřít všechny ostatní panely?';
+ LANGcsCouldntOpenURIArchive = 'Nepodařilo se otevřít archív, pravděpodobně bude poškozen. Prosím zkontrolujte soubor a přístupová práva.';
+ LANGcsThereIsNoModuleAvailable = 'Nelze nalézt odpovídající modul potřebný pro otevření tohoto spojení. Prosím zkontrolujte aktivní moduly.';
+ LANGcsIgnoreError = 'Opravdu si přejete ignorovat tuto chybu? Zdrojový soubor bude smazán';
+ LANGcsErrorMount = 'Nastala chyba při připojování zařízení ''%s'':'#10#10;
+ LANGcsErrorUmount = 'Nastala chyba při odpojování zařízení ''%s'':'#10#10;
+ LANGcsErrorEject = 'Nastala chyba při vysouvání zařízení ''%s'':'#10#10;
+
+ LANGcsMounterPrefs_Caption = 'Nastavení panelu disků';
+ LANGcsMounterPrefs_TitleLabelCaption = 'Nastavení panelu disků';
+ LANGcsMounterPrefs_ListViewFrameCaption = 'Přípojné body';
+ LANGcsMounterPrefs_MountName = 'Název';
+ LANGcsMounterPrefs_MountPoint = 'Přípojný bod';
+ LANGcsMounterPrefs_Device = 'Zařízení';
+ LANGcsMounterPrefs_MoveUpButtonTooltip = 'Přesunout nahoru';
+ LANGcsMounterPrefs_MoveDownButtonTooltip = 'Přesunout dolů';
+ LANGcsMounterPrefs_UseFSTabDefaultsCheckBox = 'Použít _systémový seznam přípojných bodů';
+ LANGcsMounterPrefs_UseFSTabDefaultsCheckBoxTooltip = 'Je-li tato možnost aktivní, použije se seznam přípojných bodů ze systémového souboru /etc/fstab';
+ LANGcsMounterPrefs_ToggleModeCheckBox = 'Zamáčklá tlačítka _disků u připojených zařízení';
+ LANGcsMounterPrefs_ToggleModeCheckBoxTooltip = 'Je-li tato položka aktivní, zůstanou tlačítka v panelu zamáčklá v případě, že je zařízení připojeno. Kliknutím zařízení odpojíte, příp. vysunete';
+ LANGcsMounterPrefs_PropertiesFrameCaption = 'Vlastnosti přípojného bodu';
+ LANGcsMounterPrefs_DisplayTextLabelCaption = '_Název:';
+ LANGcsMounterPrefs_MountPointLabelCaption = 'Přípojný _bod:';
+ LANGcsMounterPrefs_MountDeviceLabelCaption = '_Zařízení:';
+ LANGcsMounterPrefs_DeviceTypeLabelCaption = 'T_yp zařízení:';
+ LANGcsMounterPrefs_miLocalDiskCaption = 'Místní disk';
+ LANGcsMounterPrefs_miRemovableCaption = 'Výměnný disk';
+ LANGcsMounterPrefs_miCDCaption = 'CD/DVD jednotka';
+ LANGcsMounterPrefs_miFloppyCaption = 'Disketová mechanika';
+ LANGcsMounterPrefs_miNetworkCaption = 'Síťový prostředek';
+ LANGcsMounterPrefs_MountCommandLabelCaption = 'Příkaz pro _připojení:';
+ LANGcsMounterPrefs_UmountCommandLabelCaption = 'Příkaz pro _odpojení:';
+ LANGcsMounterPrefs_MountCommandEntryTooltip = 'Syntaxe: použijte %dev místo zařízení a %dir pro cestu přípojného bodu. V případě, že nepoužíváte nestandardní příkaz pro připojení zařízení, nechte toto pole nevyplněné.'#10 + 'Upozornění: nepoužívejte příkazy vyžadující vstupy z klávesnice uživatele, program je nedokáže obsloužit!'#10'Příklad: smbmount %dev %dir -o username=netuser,password=heslo';
+ LANGcsMounterPrefs_UmountCommandEntryTooltip = 'Syntaxe: použijte %dev místo zařízení a %dir pro cestu přípojného bodu. V případě, že nepoužíváte nestandardní příkaz pro odpojení zařízení, nechte toto pole nevyplněné.'#10'Příklad: smbumount %dir';
+ LANGcsMounterPrefs_IconLabelCaption = '_Ikona:';
+
+ LANGcsConnMgr_Caption = 'Otevřít nové spojení';
+ LANGcsConnMgr_ConnectButton = '_Připojit';
+ LANGcsConnMgr_OpenConnection = 'Otevřít nové spojení';
+ LANGcsConnMgr_NameColumn = 'Název';
+ LANGcsConnMgr_URIColumn = 'Adresa';
+ LANGcsConnMgr_AddConnectionButtonCaption = 'N_ové spojení...';
+ LANGcsConnMgr_AddConnectionButtonTooltip = 'Vytvořit nové spojení';
+ LANGcsConnMgr_EditButtonCaption = '_Upravit...';
+ LANGcsConnMgr_EditButtonTooltip = 'Upravit vybrané spojení';
+ LANGcsConnMgr_RemoveButtonCaption = 'O_dstranit';
+ LANGcsConnMgr_RemoveButtonTooltip = 'Odstranit vybrané spojení';
+ LANGcsConnMgr_DoYouWantDelete = 'Opravdu si přejete odstranit vybrané spojení ''%s''?';
+
+ LANGcsConnProp_FTP = 'FTP';
+ LANGcsConnProp_SFTP = 'SFTP (ssh podsystém)';
+ LANGcsConnProp_SMB = 'Sdílení v síti Windows (SMB)';
+ LANGcsConnProp_HTTP = 'WebDAV (HTTP)';
+ LANGcsConnProp_HTTPS = 'Zabezpečené WebDAV (HTTPS)';
+ LANGcsConnProp_Other = 'Ostatní <span style="italic">(prosím upřesněte v adrese)</span>';
+ LANGcsConnProp_Caption = 'Vlastnosti připojení';
+ LANGcsConnProp_VFSModule = '_VFS modul:';
+ LANGcsConnProp_URI = '_Adresa (URI):';
+ LANGcsConnProp_URIEntryTooltip = 'Platná adresa URI by měla obsahovat řetězec typu služby a adresu síťového serveru';
+ LANGcsConnProp_DetailedInformations = 'Upřesňující informace';
+ LANGcsConnProp_Name = '_Název:';
+ LANGcsConnProp_Server = 'Serve_r[:port]:';
+ LANGcsConnProp_Username = 'Uživa_telské jméno:';
+ LANGcsConnProp_UserNameEntryTooltip = 'Nevyplňujte, jedná-li se o anonymní přístup';
+ LANGcsConnProp_Password = '_Heslo:';
+ LANGcsConnProp_TargetDirectory = '_Cílový adresář:';
+ LANGcsConnProp_ServiceType = 'Typ _služby:';
+ LANGcsConnProp_MaskPassword = 'S_krýt heslo';
+ LANGcsConnProp_MenuItemCaption = 'Výchozí <span style="italic">(všsechny dostupné moduly)</span>';
+
+ LANGcsConnLogin_Caption = 'Přihlášení';
+ LANGcsConnLogin_Login = 'Přihlášení';
+ LANGcsConnLogin_ExperimentalWarningLabelCaption = 'Pro přístup k prostředku %s musíte být přihlášeni';
+ LANGcsConnLogin_Username = '_Uživatelské jméno:';
+ LANGcsConnLogin_Password = '_Heslo:';
+ LANGcsConnLogin_AnonymousCheckButton = '_Anonymní přístup';
+
+ LANGcsColumns_Caption = 'Nastavení sloupců hlavního panelu';
+ LANGcsColumns_Title = 'Nastavení sloupců panelu';
+ LANGcsColumns_MoveUpButtonTooltip = 'Přesunout položku nahoru';
+ LANGcsColumns_MoveDownButtonTooltip = 'Přesunout položku dolů';
+ LANGcsColumns_TitlesLongName = 'Jméno';
+ LANGcsColumns_TitlesLongNameExt = 'Jméno + typ';
+ LANGcsColumns_TitlesLongExt = 'Typ';
+ LANGcsColumns_TitlesLongSize = 'Velikost';
+ LANGcsColumns_TitlesLongDateTime = 'Datum změny + čas změny';
+ LANGcsColumns_TitlesLongDate = 'Datum poslední změny';
+ LANGcsColumns_TitlesLongTime = 'Čas poslední změny';
+ LANGcsColumns_TitlesLongUser = 'Uživatel';
+ LANGcsColumns_TitlesLongGroup = 'Skupina';
+ LANGcsColumns_TitlesLongAttr = 'Atributy';
+ LANGcsColumns_TitlesShortName = 'Jméno';
+ LANGcsColumns_TitlesShortNameExt = 'Jméno';
+ LANGcsColumns_TitlesShortExt = 'Typ';
+ LANGcsColumns_TitlesShortSize = 'Velikost';
+ LANGcsColumns_TitlesShortDateTime = 'Datum';
+ LANGcsColumns_TitlesShortDate = 'Datum';
+ LANGcsColumns_TitlesShortTime = 'Čas';
+ LANGcsColumns_TitlesShortUser = 'Uživatel';
+ LANGcsColumns_TitlesShortGroup = 'Skupina';
+ LANGcsColumns_TitlesShortAttr = 'Atrib.';
+
+ LANGcsTestPlugin_Caption = 'Test VFS modulu';
+ LANGcsTestPlugin_Title = 'Test VFS modulu';
+ LANGcsTestPlugin_ExperimentalWarningLabelCaption = '<span weight="ultrabold">Varování:</span> Podystém virtuálního souborového systému (VFS) a integrované moduly jsou momentálně ve vývoji a mohou obsahovat kritické chyby';
+ LANGcsTestPlugin_Plugin = '_Modul:';
+ LANGcsTestPlugin_Command = '_Adresa:';
+ LANGcsTestPlugin_Username = '_Uživatel:';
+ LANGcsTestPlugin_Password = '_Heslo:';
+ LANGcsTestPlugin_AnonymousCheckButton = '_Anonymní přístup (bez volání funkce VFSLogin)';
+ LANGcsTestPlugin_NoPluginsFound = 'Žádný modul není k dispozici';
+
+ LANGcsRemoteWait_Caption = 'Probíhá operace';
+ LANGcsRemoteWait_OperationInProgress = 'Aplikace nyní zpracovává váš požadavek, prosím o strpení...';
+ LANGcsRemoteWait_ItemsFound = 'Nalezených položek: %d';
+
+ LANGcsSearch_Bytes = 'bajtů';
+ LANGcsSearch_kB = 'kB';
+ LANGcsSearch_MB = 'MB';
+ LANGcsSearch_days = 'dnech';
+ LANGcsSearch_weeks = 'týdnech';
+ LANGcsSearch_months = 'měsícech';
+ LANGcsSearch_years = 'letech';
+ LANGcsSearch_Caption = 'Vyhledat soubory';
+ LANGcsSearch_General = 'Obecné';
+ LANGcsSearch_Advanced = 'Upřesnění';
+ LANGcsSearch_SearchResults = '_Výsledky hledání:';
+ LANGcsSearch_SearchFor = '_Najít:';
+ LANGcsSearch_FileMaskEntryTooltip = 'Tip: Použijte středník pro oddělení více hledaných výrazů';
+ LANGcsSearch_SearchIn = 'Hledat _v:';
+ LANGcsSearch_SearchArchivesCheckButton = 'Prohledávat _archívy';
+ LANGcsSearch_FindText = 'Najít _text:';
+ LANGcsSearch_FindTextEntryTooltip = 'Nechte toto pole nevyplněné, nechcete-li vyhledávat text v souboru'#10'Upozornění: řetězce jsou v kódování UTF-8';
+ LANGcsSearch_CaseSensitiveCheckButton = '_Rozlišovat velká a malá písmena';
+ LANGcsSearch_StayCurrentFSCheckButton = 'Vyhledávat i na připojených _zařízeních';
+ LANGcsSearch_CaseSensitiveMatchCheckButton = 'Rozlišovat vel_ká a malá písmena';
+ LANGcsSearch_Size = 'Velikost';
+ LANGcsSearch_Date = 'Datum';
+ LANGcsSearch_BiggerThan = '_Větší než';
+ LANGcsSearch_SmallerThan = '_Menší než';
+ LANGcsSearch_ModifiedBetweenRadioButton = '_Změněno mezi daty';
+ LANGcsSearch_NotModifiedAfterRadioButton = '_Nebylo změněno po datu';
+ LANGcsSearch_ModifiedLastRadioButton = 'Změněno v po_sledních';
+ LANGcsSearch_ModifiedNotLastRadionButton = 'Nezměněn_o v posledních';
+ LANGcsSearch_ModifiedBetweenEntry1 = '"Prosím použijte tento formát data:" c';
+ LANGcsSearch_ViewButtonCaption = 'Prohlížet sou_bor';
+ LANGcsSearch_NewSearchButtonCaption = 'Nové hle_dání';
+ LANGcsSearch_GoToFileButtonCaption = 'Přejít na so_ubor';
+ LANGcsSearch_FeedToListboxButtonCaption = 'Nap_lnit hlavní panel';
+ LANGcsSearch_StatusSC = 'Stav:';
+ LANGcsSearch_Ready = 'Připraveno.';
+ LANGcsSearch_PreparingToSearch = 'Příprava hledání.';
+ LANGcsSearch_SearchInProgress = 'Probíhá vyhledávání:';
+ LANGcsSearch_UserCancelled = 'Přerušeno uživatelem.';
+ LANGcsSearch_SearchFinished = 'Vyhledávání dokončeno';
+ LANGcsSearch_FilesFound = 'Nalezeno %d souborů';
+ LANGcsSearch_And = 'a';
+
+ (*************** STRINGS ADDED TO v0.5.82 **********************************************************************************)
+ LANGcsCloseOpenConnection = 'Pokoušíte se otevřít druhé spojení přes další aktivní spojení. Pokračováním bude původní spojení uzavřeno a nahrazeno novým.'#10#10'Přejete si pokračovat?';
+ LANGcsDuplicateTabWarning = 'Pokoušíte se otevřít nový panel obsahující otevřené vzdálené spojení. Tato operace nemůže být provedena, protože duplikace spojení není podporováno. Nový panel bude přesměrován na lokální souborový systém.';
+ LANGcsDontShowAgain = '_Příště tento dotaz nezobrazovat';
+ LANGcsSwitchOtherPanelWarning = 'Pokoušíte se otevřít adresář vzdáleného spojení v druhém panelu. Tato operace nemůže být provedena, protože duplikace spojení není podporováno.';
+ LANGcsOpenConnectionsWarning = 'V panelu stále existují otevřená spojení. Ukončením aplikace budou odpojeny.'#10#10'Přejete si aplikaci opravdu ukončit?';
+ LANGcsmiDisconnect_Caption = 'O_dpojit';
+ LANGcsDisconnectButton_Tooltip = 'Odpojit aktuální spojení';
+ LANGcsLeaveArchiveButton_Tooltip = 'Zavřít archiv';
+ LANGcsOpenTerminalButton_Tooltip = 'Otevře nové terminálové okno v aktuálním adresáři';
+ LANGcsOpenTerminalButton_Caption = 'Te_rminál';
+ LANGcsShowTextUIDsCheckBox_Caption = 'Zobrazit vlastníka a sk_upinu textově';
+ LANGcsShowTextUIDsCheckBox_Tooltip = 'Použít textové vyjádření vlastníka a skupiny namísto číselné formy (UID/GID)';
+
+ (*************** STRINGS ADDED TO v0.5.100 **********************************************************************************)
+ LANGcsmiNewTab_Caption = 'Nový _panel';
+ LANGcsFilePopupMenu_Properties = 'Vl_astnosti';
+ LANGcsCommandEntry_Tooltip = 'Použijte ''%s'' jako zástupce pro jméno souboru/adresáře';
+ LANGcsmiFiles_Caption = 'Pouze pro soubory';
+
+ (*************** STRINGS ADDED TO v0.6.31 **********************************************************************************)
+ LANGcsPasswordButton_Tooltip = 'Archív je zabezpečen heslem.'#10'Kliknutím nastavíte heslo.';
+ LANGcsHandleRunFromArchive_Bytes = 'bajtů';
+ LANGcsHandleRunFromArchive_FileTypeDesc_Unknown = '(není k dispozici)';
+ LANGcsHandleRunFromArchive_NotAssociated = '(bez asociace)';
+ LANGcsHandleRunFromArchive_SelfExecutable = '(spustitelný)';
+ LANGcsHandleRunFromArchive_CouldntCreateTemporaryDirectory = 'Nepodařilo se vytvořit adresář "%s" pro dočasné soubory: %s.'#10#10'Zkontrolujte prosím zadanou cestu a operaci opakujte.';
+ LANGcsFRunFromVFS_Caption = 'Vlastnosti souboru';
+ LANGcsFRunFromVFS_TitleLabel = 'Vlastnosti';
+ LANGcsFRunFromVFS_FileNameLabel = 'Název souboru:';
+ LANGcsFRunFromVFS_FileTypeLabel = 'Typ souboru:';
+ LANGcsFRunFromVFS_SizeLabel = 'Velikost:';
+ LANGcsFRunFromVFS_PackedSizeLabel = 'Komprimovaná velikost:';
+ LANGcsFRunFromVFS_DateLabel = 'Datum změny:';
+ LANGcsFRunFromVFS_InfoLabel = 'Zobrazení souborů přímo z archívu není možné. Klepnutím na tlačítka níže se vámi vybrané soubory (resp. celý archív) rozbalí do dočasného adresáře, z nějž je lze jednoduše otevřít ve zvolené aplikaci.' +
+ #10'Všechny dočasné soubory budou smazány při ukončení aplikace Tux Commander.';
+ LANGcsFRunFromVFS_OpensWithLabel = 'Otevřít v:';
+ LANGcsFRunFromVFS_ExecuteButton = 'E_xtrahovat a otevřít';
+ LANGcsFRunFromVFS_ExecuteAllButton = 'Extrahovat _vše a otevřít';
+ LANGcsFSetPassword_Caption = 'Heslo archívu';
+ LANGcsFSetPassword_Label1_Caption = 'Zadejte prosím heslo';
+ LANGcsFSetPassword_Label2_Caption = 'Pro přístup a práci s obsahem archívu je potřeba zadat heslo';
+ LANGcsFSetPassword_ShowPasswordCheckButton = 'Od_krýt heslo';
+
+
+
+
+(********************************************************************************************************************************)
+procedure SetTranslation;
+begin
+ LANGF2Button_Caption := LANGcsF2Button_Caption;
+ LANGF3Button_Caption := LANGcsF3Button_Caption;
+ LANGF4Button_Caption := LANGcsF4Button_Caption;
+ LANGF5Button_Caption := LANGcsF5Button_Caption;
+ LANGF6Button_Caption := LANGcsF6Button_Caption;
+ LANGF7Button_Caption := LANGcsF7Button_Caption;
+ LANGF8Button_Caption := LANGcsF8Button_Caption;
+
+ LANGmnuFile_Caption := LANGcsmnuFile_Caption;
+ LANGmnuMark_Caption := LANGcsmnuMark_Caption;
+ LANGmnuCommands_Caption := LANGcsmnuCommands_Caption;
+ LANGmnuHelp_Caption := LANGcsmnuHelp_Caption;
+ LANGmiExit_Caption := LANGcsmiExit_Caption;
+ LANGmiSelectGroup_Caption := LANGcsmiSelectGroup_Caption;
+ LANGmiUnselectGroup_Caption := LANGcsmiUnselectGroup_Caption;
+ LANGmiSelectAll_Caption := LANGcsmiSelectAll_Caption;
+ LANGmiUnselectAll_Caption := LANGcsmiUnselectAll_Caption;
+ LANGmiInvertSelection_Caption := LANGcsmiInvertSelection_Caption;
+ LANGmiRefresh_Caption := LANGcsmiRefresh_Caption;
+ LANGmiAbout_Caption := LANGcsmiAbout_Caption;
+
+ LANGColumn1_Caption := LANGcsColumn1_Caption;
+ LANGColumn2_Caption := LANGcsColumn2_Caption;
+ LANGColumn3_Caption := LANGcsColumn3_Caption;
+ LANGColumn4_Caption := LANGcsColumn4_Caption;
+ LANGColumn5_Caption := LANGcsColumn5_Caption;
+
+ LANGExpandSelection := LANGcsExpandSelection;
+ LANGShrinkSelection := LANGcsShrinkSelection;
+ LANGNoMatchesFound := LANGcsNoMatchesFound;
+ LANGNoFilesSelected := LANGcsNoFilesSelected;
+ LANGSelectedFilesDirectories := LANGcsSelectedFilesDirectories;
+ LANGDirectoryS := LANGcsDirectoryS;
+ LANGFileS := LANGcsFileS;
+ LANGDoYouReallyWantToDeleteTheS := LANGcsDoYouReallyWantToDeleteTheS;
+ LANGDoYouReallyWantToDeleteTheSS := LANGcsDoYouReallyWantToDeleteTheSS;
+ LANGCopyFiles := LANGcsCopyFiles;
+ LANGMoveRenameFiles := LANGcsMoveRenameFiles;
+ LANGCopyDFileDirectoriesTo := LANGcsCopyDFileDirectoriesTo;
+ LANGMoveRenameDFileDirectoriesTo := LANGcsMoveRenameDFileDirectoriesTo;
+ LANGCopySC := LANGcsCopySC;
+ LANGMoveRenameSC := LANGcsMoveRenameSC;
+
+ LANGQuickFind := LANGcsQuickFind;
+
+ LANGAboutString := LANGcsAboutString;
+ LANGAboutStringGnome := LANGcsAboutStringGnome;
+ LANGDiskStatFmt := LANGcsDiskStatFmt;
+ LANGDiskStatVolNameFmt := LANGcsDiskStatVolNameFmt;
+ LANGStatusLineFmt := LANGcsStatusLineFmt;
+ LANGPanelStrings[False] := LANGcsPanelStrings[False];
+ LANGPanelStrings[True] := LANGcsPanelStrings[True];
+ LANGDIR := LANGcsDIR;
+ LANGErrorGettingListingForSPanel := LANGcsErrorGettingListingForSPanel;
+ LANGErrorGettingListingForSPanelNoPath := LANGcsErrorGettingListingForSPanelNoPath;
+ LANGErrorCreatingNewDirectorySInSPanel := LANGcsErrorCreatingNewDirectorySInSPanel;
+ LANGErrorCreatingNewDirectorySInSPanelNoPath := LANGcsErrorCreatingNewDirectorySInSPanelNoPath;
+ LANGTheFileDirectory := LANGcsTheFileDirectory;
+ LANGCouldNotBeDeleted := LANGcsCouldNotBeDeleted;
+ LANGCouldNotBeDeletedS := LANGcsCouldNotBeDeletedS;
+ LANGUserCancelled := LANGcsUserCancelled;
+ LANGTheDirectorySIsNotEmpty := LANGcsTheDirectorySIsNotEmpty;
+ LANGCannotCopyFile := LANGcsCannotCopyFile;
+ LANGCopyError := LANGcsCopyError;
+ LANGMoveError := LANGcsMoveError;
+ LANGOverwriteS := LANGcsOverwriteS;
+ LANGWithFileS := LANGcsWithFileS;
+ LANGOvewriteSBytesS := LANGcsOvewriteSBytesS;
+ LANGTheFile := LANGcsTheFile;
+ LANGCopy := LANGcsCopy;
+ LANGMove := LANGcsMove;
+ LANGTheDirectory := LANGcsTheDirectory;
+ LANGTheSymbolicLink := LANGcsTheSymbolicLink;
+ LANGCannotMoveFile := LANGcsCannotMoveFile;
+ LANGCouldNotBeCreated := LANGcsCouldNotBeCreated;
+ LANGCouldNotBeCreatedS := LANGcsCouldNotBeCreatedS;
+ LANGFromS := LANGcsFromS;
+ LANGToS := LANGcsToS;
+ LANGCannotCopyFileToItself := LANGcsCannotCopyFileToItself;
+ LANGMemoryAllocationFailed := LANGcsMemoryAllocationFailed;
+ LANGCannotOpenSourceFile := LANGcsCannotOpenSourceFile;
+ LANGCannotOpenDestinationFile := LANGcsCannotOpenDestinationFile;
+ LANGCannotCloseDestinationFile := LANGcsCannotCloseDestinationFile;
+ LANGCannotCloseSourceFile := LANGcsCannotCloseSourceFile;
+ LANGCannotReadFromSourceFile := LANGcsCannotReadFromSourceFile;
+ LANGCannotWriteToDestinationFile := LANGcsCannotWriteToDestinationFile;
+
+ LANGUnknownException := LANGcsUnknownException;
+ LANGNoAccess := LANGcsNoAccess;
+ LANGUnknownError := LANGcsUnknownError;
+
+ LANGCreateANewDirectory := LANGcsCreateANewDirectory;
+ LANGEnterDirectoryName := LANGcsEnterDirectoryName;
+
+ LANGOverwriteQuestion := LANGcsOverwriteQuestion;
+ LANGOverwriteButton_Caption := LANGcsOverwriteButton_Caption;
+ LANGOverwriteAllButton_Caption := LANGcsOverwriteAllButton_Caption;
+ LANGSkipButton_Caption := LANGcsSkipButton_Caption;
+ LANGOverwriteAllOlderButton_Caption := LANGcsOverwriteAllOlderButton_Caption;
+ LANGSkipAllButton_Caption := LANGcsSkipAllButton_Caption;
+ LANGRenameButton_Caption := LANGcsRenameButton_Caption;
+ LANGAppendButton_Caption := LANGcsAppendButton_Caption;
+ LANGRename := LANGcsRename;
+ LANGRenameFile := LANGcsRenameFile;
+ LANGIgnoreButton_Caption := LANGcsIgnoreButton_Caption;
+
+ LANGProgress := LANGcsProgress;
+ LANGCancel := LANGcsCancel;
+ LANGDelete := LANGcsDelete;
+
+ LANGSpecifyFileType := LANGcsSpecifyFileType;
+
+ LANGRemoveDirectory := LANGcsRemoveDirectory;
+ LANGDoYouWantToDeleteItWithAllItsFilesAndSubdirectories := LANGcsDoYouWantToDeleteItWithAllItsFilesAndSubdirectories;
+ LANGRetry := LANGcsRetry;
+ LANGDeleteButton_Caption := LANGcsDeleteButton_Caption;
+ LANGAll := LANGcsAll;
+
+ LANGCopyFilesSC := LANGcsCopyFilesSC;
+ LANGAppendQuestion := LANGcsAppendQuestion;
+ LANGPreparingList := LANGcsPreparingList;
+
+ LANGYouMustSelectAValidFile := LANGcsYouMustSelectAValidFile;
+ LANGmiVerifyChecksums := LANGcsmiVerifyChecksums;
+ LANGVerifyChecksumsCaption := LANGcsVerifyChecksumsCaption;
+ LANGCheckButtonCaptionCheck := LANGcsCheckButtonCaptionCheck;
+ LANGCheckButtonCaptionStop := LANGcsCheckButtonCaptionStop;
+ LANGFileListTooltip := LANGcsFileListTooltip;
+ LANGFilenameColumnCaption := LANGcsFilenameColumnCaption;
+ LANGTheFileSYouAreTryingToOpenIsQuiteBig := LANGcsTheFileSYouAreTryingToOpenIsQuiteBig;
+ LANGAnErrorOccuredWhileInitializingMemoryBlock := LANGcsAnErrorOccuredWhileInitializingMemoryBlock;
+ LANGAnErrorOccuredWhileOpeningFileSS := LANGcsAnErrorOccuredWhileOpeningFileSS;
+ LANGAnErrorOccuredWhileReadingFileSS := LANGcsAnErrorOccuredWhileReadingFileSS;
+ LANGChecksumNotChecked := LANGcsChecksumNotChecked;
+ LANGChecksumChecking := LANGcsChecksumChecking;
+ LANGChecksumInterrupted := LANGcsChecksumInterrupted;
+ LANGChecksumDOK := LANGcsChecksumDOK;
+
+ LANGmiCreateChecksumsCaption := LANGcsmiCreateChecksumsCaption;
+ LANGYouMustSelectAtLeastOneFileToCalculateChecksum := LANGcsYouMustSelectAtLeastOneFileToCalculateChecksum;
+ LANGCreateChecksumsCaption := LANGcsCreateChecksumsCaption;
+ LANGCCHKSUMPage1Text := LANGcsCCHKSUMPage1Text;
+ LANGCCHKSUMPage4Text := LANGcsCCHKSUMPage4Text;
+ LANGCCHKSUMPage6Text := LANGcsCCHKSUMPage6Text;
+ LANGCCHKSUMPage7Text := LANGcsCCHKSUMPage7Text;
+ LANGCCHKSUMPage1Title := LANGcsCCHKSUMPage1Title;
+ LANGCCHKSUMPage2Title := LANGcsCCHKSUMPage2Title;
+ LANGCCHKSUMPage3Title := LANGcsCCHKSUMPage3Title;
+ LANGCCHKSUMPage4Title := LANGcsCCHKSUMPage4Title;
+ LANGCCHKSUMPage5Title := LANGcsCCHKSUMPage5Title;
+ LANGCCHKSUMPage6Title := LANGcsCCHKSUMPage6Title;
+ LANGCCHKSUMPage7Title := LANGcsCCHKSUMPage7Title;
+ LANGCCHKSUMSFVFile := LANGcsCCHKSUMSFVFile;
+ LANGCCHKSUMMD5sumFile := LANGcsCCHKSUMMD5sumFile;
+ LANGCCHKSUMFileName := LANGcsCCHKSUMFileName;
+ LANGCCHKSUMCreateSeparateChecksumFiles := LANGcsCCHKSUMCreateSeparateChecksumFiles;
+ LANGCCHKSUMNowProcessingFileS := LANGcsCCHKSUMNowProcessingFileS;
+ LANGCCHKSUMFinishCaption := LANGcsCCHKSUMFinishCaption;
+ LANGCCHKSUMAreYouSureYouWantToAbortTheProcessing := LANGcsCCHKSUMAreYouSureYouWantToAbortTheProcessing;
+ LANGCCHKSUMAnErrorOccuredWhileOpeningFileSS := LANGcsCCHKSUMAnErrorOccuredWhileOpeningFileSS;
+ LANGCCHKSUMAnErrorOccuredWhileReadingFileSS := LANGcsCCHKSUMAnErrorOccuredWhileReadingFileSS;
+ LANGCCHKSUMAnErrorOccuredWhileWritingFileSS := LANGcsCCHKSUMAnErrorOccuredWhileWritingFileSS;
+
+ LANGAnErrorOccuredWhileWritingFileSS := LANGcsAnErrorOccuredWhileWritingFileSS;
+ LANGTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt := LANGcsTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt;
+ LANGTheTargetFileSCannotBeRemovedS := LANGcsTheTargetFileSCannotBeRemovedS;
+ LANGMergeCaption := LANGcsMergeCaption;
+ LANGPleaseInsertNextDiskOrGiveDifferentLocation := LANGcsPleaseInsertNextDiskOrGiveDifferentLocation;
+ LANGMergeOfSSucceeded := LANGcsMergeOfSSucceeded;
+ LANGWarningCreatedFileFailsCRCCheck := LANGcsWarningCreatedFileFailsCRCCheck;
+ LANGMergeOfSSucceeded_NoCRCFileAvailable := LANGcsMergeOfSSucceeded_NoCRCFileAvailable;
+ LANGMergeSAndAllFilesWithAscendingNamesToTheFollowingDirectory := LANGcsMergeSAndAllFilesWithAscendingNamesToTheFollowingDirectory;
+ LANGMergeSC := LANGcsMergeSC;
+ LANGmiSplitFileCaption := LANGcsmiSplitFileCaption;
+ LANGmiMergeFilesCaption := LANGcsmiMergeFilesCaption;
+
+ LANGSplitTheFileSToDirectory := LANGcsSplitTheFileSToDirectory;
+ LANGSplitSC := LANGcsSplitSC;
+ LANGSplitFile := LANGcsSplitFile;
+ LANGBytesPerFile := LANGcsBytesPerFile;
+ LANGAutomatic := LANGcsAutomatic;
+ LANGDeleteFilesOnTargetDisk := LANGcsDeleteFilesOnTargetDisk;
+ LANGSplitCaption := LANGcsSplitCaption;
+ LANGCannotOpenFileS := LANGcsCannotOpenFileS;
+ LANGCannotSplitTheFileToMoreThan999Parts := LANGcsCannotSplitTheFileToMoreThan999Parts;
+ LANGThereAreSomeFilesInTheTargetDirectorySDoYouWantToDeleteThem := LANGcsThereAreSomeFilesInTheTargetDirectorySDoYouWantToDeleteThem;
+ LANGThereAreDFilesInTheTargetDirectoryDoYouWantToDeleteThem := LANGcsThereAreDFilesInTheTargetDirectoryDoYouWantToDeleteThem;
+ LANGAnErrorOccuredWhileOperationS := LANGcsAnErrorOccuredWhileOperationS;
+ LANGSplitOfSSucceeded := LANGcsSplitOfSSucceeded;
+ LANGSplitOfSFailed := LANGcsSplitOfSFailed;
+
+ LANGmnuShow_Caption := LANGcsmnuShow_Caption;
+ LANGmiShowDotFiles_Caption := LANGcsmiShowDotFiles_Caption;
+ LANGTheFileYouAreTryingToOpenIsQuiteBig := LANGcsTheFileYouAreTryingToOpenIsQuiteBig;
+ LANGCannotExecuteSPleaseCheckTheConfiguration := LANGcsCannotExecuteSPleaseCheckTheConfiguration;
+ LANGEdit := LANGcsEdit;
+ LANGEnterFilenameToEdit := LANGcsEnterFilenameToEdit;
+
+ LANGmnuSettings_Caption := LANGcsmnuSettings_Caption;
+ LANGmiFileTypes_Caption := LANGcsmiFileTypes_Caption;
+ LANGThereIsNoApplicationAssociatedWithS := LANGcsThereIsNoApplicationAssociatedWithS;
+ LANGErrorExecutingCommand := LANGcsErrorExecutingCommand;
+ LANGEditFileTypesCaption := LANGcsEditFileTypesCaption;
+ LANGTitleLabel_Caption := LANGcsTitleLabel_Caption;
+ LANGExtensionsColumn := LANGcsExtensionsColumn;
+ LANGDescriptionColumn := LANGcsDescriptionColumn;
+ LANGFileTypesList := LANGcsFileTypesList;
+ LANGActionName := LANGcsActionName;
+ LANGCommand := LANGcsCommand;
+ LANGSetDefaultActionButton_Caption := LANGcsSetDefaultActionButton_Caption;
+ LANGRunInTerminalCheckBox_Caption := LANGcsRunInTerminalCheckBox_Caption;
+ LANGAutodetectCheckBox_Caption := LANGcsAutodetectCheckBox_Caption;
+ LANGBrowseButton_Caption := LANGcsBrowseButton_Caption;
+ LANGCommandLabel_Caption := LANGcsCommandLabel_Caption;
+ LANGDescriptionLabel_Caption := LANGcsDescriptionLabel_Caption;
+ LANGFNameExtLabel_Caption := LANGcsFNameExtLabel_Caption;
+ LANGNotebookPageExtensions := LANGcsNotebookPageExtensions;
+ LANGNotebookPageActions := LANGcsNotebookPageActions;
+ LANGDefault := LANGcsDefault;
+ LANGCannotSaveFileTypeAssociationsBecauseOtherProcess := LANGcsCannotSaveFileTypeAssociationsBecauseOtherProcess;
+
+ LANGDefaultColor := LANGcsDefaultColor;
+ LANGIcon := LANGcsIcon;
+ LANGBrowseForIcon := LANGcsBrowseForIcon;
+ LANGSelectFileTypeColor := LANGcsSelectFileTypeColor;
+ LANGColor := LANGcsColor;
+
+ LANGmiChangePermissions_Caption := LANGcsmiChangePermissions_Caption;
+ LANGmiChangeOwner_Caption := LANGcsmiChangeOwner_Caption;
+ LANGmiCreateSymlink_Caption := LANGcsmiCreateSymlink_Caption;
+ LANGmiEditSymlink_Caption := LANGcsmiEditSymlink_Caption;
+ LANGChmodProgress := LANGcsChmodProgress;
+ LANGChownProgress := LANGcsChownProgress;
+ LANGYouMustSelectAValidSymbolicLink := LANGcsYouMustSelectAValidSymbolicLink;
+ LANGPopupRunS := LANGcsPopupRunS;
+ LANGPopupOpenS := LANGcsPopupOpenS;
+ LANGPopupGoUp := LANGcsPopupGoUp;
+ LANGPopupOpenWithS := LANGcsPopupOpenWithS;
+ LANGPopupDefault := LANGcsPopupDefault;
+ LANGPopupOpenWith := LANGcsPopupOpenWith;
+ LANGPopupViewFile := LANGcsPopupViewFile;
+ LANGPopupEditFile := LANGcsPopupEditFile;
+ LANGPopupMakeSymlink := LANGcsPopupMakeSymlink;
+ LANGPopupRename := LANGcsPopupRename;
+ LANGPopupDelete := LANGcsPopupDelete;
+ LANGDialogChangePermissions := LANGcsDialogChangePermissions;
+ LANGCouldNotBeChmoddedS := LANGcsCouldNotBeChmoddedS;
+ LANGDialogChangeOwner := LANGcsDialogChangeOwner;
+ LANGCouldNotBeChownedS := LANGcsCouldNotBeChownedS;
+ LANGDialogMakeSymlink := LANGcsDialogMakeSymlink;
+ LANGDialogEditSymlink := LANGcsDialogEditSymlink;
+ LANGFEditSymlink_Caption := LANGcsFEditSymlink_Caption;
+ LANGFEditSymlink_SymbolicLinkFilename := LANGcsFEditSymlink_SymbolicLinkFilename;
+ LANGFEditSymlink_SymbolicLinkPointsTo := LANGcsFEditSymlink_SymbolicLinkPointsTo;
+
+ LANGFChmod_Caption := LANGcsFChmod_Caption;
+ LANGFChmod_PermissionFrame := LANGcsFChmod_PermissionFrame;
+ LANGFChmod_FileFrame := LANGcsFChmod_FileFrame;
+ LANGFChmod_ApplyRecursivelyFor := LANGcsFChmod_ApplyRecursivelyFor;
+ LANGFChmod_miAllFiles := LANGcsFChmod_miAllFiles;
+ LANGFChmod_miDirectories := LANGcsFChmod_miDirectories;
+ LANGFChmod_OctalLabel := LANGcsFChmod_OctalLabel;
+ LANGFChmod_SUID := LANGcsFChmod_SUID;
+ LANGFChmod_SGID := LANGcsFChmod_SGID;
+ LANGFChmod_Sticky := LANGcsFChmod_Sticky;
+ LANGFChmod_RUSR := LANGcsFChmod_RUSR;
+ LANGFChmod_WUSR := LANGcsFChmod_WUSR;
+ LANGFChmod_XUSR := LANGcsFChmod_XUSR;
+ LANGFChmod_RGRP := LANGcsFChmod_RGRP;
+ LANGFChmod_WGRP := LANGcsFChmod_WGRP;
+ LANGFChmod_XGRP := LANGcsFChmod_XGRP;
+ LANGFChmod_ROTH := LANGcsFChmod_ROTH;
+ LANGFChmod_WOTH := LANGcsFChmod_WOTH;
+ LANGFChmod_XOTH := LANGcsFChmod_XOTH;
+ LANGFChmod_TextLabel := LANGcsFChmod_TextLabel;
+ LANGFChmod_FileLabel := LANGcsFChmod_FileLabel;
+ LANGFChown_Caption := LANGcsFChown_Caption;
+ LANGFChown_OwnerFrame := LANGcsFChown_OwnerFrame;
+ LANGFChown_GroupFrame := LANGcsFChown_GroupFrame;
+ LANGFChown_FileFrame := LANGcsFChown_FileFrame;
+ LANGFChown_ApplyRecursively := LANGcsFChown_ApplyRecursively;
+
+ LANGFSymlink_Caption := LANGcsFSymlink_Caption;
+ LANGFSymlink_ExistingFilename := LANGcsFSymlink_ExistingFilename;
+ LANGFSymlink_SymlinkFilename := LANGcsFSymlink_SymlinkFilename;
+
+ LANGmnuBookmarks_Caption := LANGcsmnuBookmarks_Caption;
+ LANGmiAddBookmark_Caption := LANGcsmiAddBookmark_Caption;
+ LANGmiEditBookmarks_Caption := LANGcsmiEditBookmarks_Caption;
+ LANGBookmarkPopupDelete_Caption := LANGcsBookmarkPopupDelete_Caption;
+ LANGmiPreferences_Caption := LANGcsmiPreferences_Caption;
+ LANGTheCurrentDirectoryAlreadyExistsInTheBookmarksList := LANGcsTheCurrentDirectoryAlreadyExistsInTheBookmarksList;
+ LANGSomeOtherInstanceChanged := LANGcsSomeOtherInstanceChanged;
+
+ LANGPreferences_Caption := LANGcsPreferences_Caption;
+ LANGPreferences_TitleLabel_Caption := LANGcsPreferences_TitleLabel_Caption;
+ LANGPreferences_GeneralPage := LANGcsPreferences_GeneralPage;
+ LANGPreferences_FontsPage := LANGcsPreferences_FontsPage;
+ LANGPreferences_ColorsPage := LANGcsPreferences_ColorsPage;
+ LANGPreferences_RowHeight := LANGcsPreferences_RowHeight;
+ LANGPreferences_NumHistoryItems := LANGcsPreferences_NumHistoryItems;
+ LANGPreferences_Default := LANGcsPreferences_Default;
+ LANGPreferences_ClearReadonlyAttribute := LANGcsPreferences_ClearReadonlyAttribute;
+ LANGPreferences_DisableMouseRenaming := LANGcsPreferences_DisableMouseRenaming;
+ LANGPreferences_ShowFiletypeIconsInList := LANGcsPreferences_ShowFiletypeIconsInList;
+ LANGPreferences_ExternalAppsLabel := LANGcsPreferences_ExternalAppsLabel;
+ LANGPreferences_Viewer := LANGcsPreferences_Viewer;
+ LANGPreferences_Editor := LANGcsPreferences_Editor;
+ LANGPreferences_Terminal := LANGcsPreferences_Terminal;
+ LANGPreferences_ListFont := LANGcsPreferences_ListFont;
+ LANGPreferences_Change := LANGcsPreferences_Change;
+ LANGPreferences_UseDefaultFont := LANGcsPreferences_UseDefaultFont;
+ LANGPreferences_Foreground := LANGcsPreferences_Foreground;
+ LANGPreferences_Background := LANGcsPreferences_Background;
+ LANGPreferences_NormalItem := LANGcsPreferences_NormalItem;
+ LANGPreferences_SetToDefaultToUseGTKThemeColors := LANGcsPreferences_SetToDefaultToUseGTKThemeColors;
+ LANGPreferences_Cursor := LANGcsPreferences_Cursor;
+ LANGPreferences_InactiveItem := LANGcsPreferences_InactiveItem;
+ LANGPreferences_SelectedItem := LANGcsPreferences_SelectedItem;
+ LANGPreferences_LinkItem := LANGcsPreferences_LinkItem;
+ LANGPreferences_LinkItemHint := LANGcsPreferences_LinkItemHint;
+ LANGPreferences_DotFileItem := LANGcsPreferences_DotFileItem;
+ LANGPreferences_DotFileItemHint := LANGcsPreferences_DotFileItemHint;
+ LANGPreferences_BrowseForApplication := LANGcsPreferences_BrowseForApplication;
+ LANGPreferences_DefaultS := LANGcsPreferences_DefaultS;
+ LANGPreferences_SelectFont := LANGcsPreferences_SelectFont;
+
+ LANGBookmarkButton_Tooltip := LANGcsBookmarkButton_Tooltip;
+ LANGUpButton_Tooltip := LANGcsUpButton_Tooltip;
+ LANGRootButton_Tooltip := LANGcsRootButton_Tooltip;
+ LANGHomeButton_Tooltip := LANGcsHomeButton_Tooltip;
+ LANGLeftEqualButton_Tooltip := LANGcsLeftEqualButton_Tooltip;
+ LANGRightEqualButton_Tooltip := LANGcsRightEqualButton_Tooltip;
+ LANGmiShowDirectorySizes_Caption := LANGcsmiShowDirectorySizes_Caption;
+ LANGmiTargetSource_Caption := LANGcsmiTargetSource_Caption;
+ LANGFileTypeDirectory := LANGcsFileTypeDirectory;
+ LANGFileTypeFile := LANGcsFileTypeFile;
+ LANGFileTypeMetafile := LANGcsFileTypeMetafile;
+ LANGPreferencesPanelsPage := LANGcsPreferencesPanelsPage;
+ LANGPreferencesApplicationsPage := LANGcsPreferencesApplicationsPage;
+ LANGPreferencesExperimentalPage := LANGcsPreferencesExperimentalPage;
+ LANGPreferencesSelectAllDirectoriesCheckBox_Caption := LANGcsPreferencesSelectAllDirectoriesCheckBox_Caption;
+ LANGPreferencesNewStyleAltOCheckBox_Caption := LANGcsPreferencesNewStyleAltOCheckBox_Caption;
+ LANGPreferencesNewStyleAltOCheckBox_Tooltip := LANGcsPreferencesNewStyleAltOCheckBox_Tooltip;
+ LANGPreferencesShowFuncButtonsCheckBox_Caption := LANGcsPreferencesShowFuncButtonsCheckBox_Caption;
+ LANGPreferencesSizeFormatLabel_Caption := LANGcsPreferencesSizeFormatLabel_Caption;
+ LANGPreferencesmiSizeFormat1 := LANGcsPreferencesmiSizeFormat1;
+ LANGPreferencesmiSizeFormat6 := LANGcsPreferencesmiSizeFormat6;
+ LANGPreferencesAutodetectXApp := LANGcsPreferencesAutodetectXApp;
+ LANGPreferencesAlwaysRunInTerminal := LANGcsPreferencesAlwaysRunInTerminal;
+ LANGPreferencesNeverRunInTerminal := LANGcsPreferencesNeverRunInTerminal;
+ LANGPreferencesCmdLineBehaviourLabel_Caption := LANGcsPreferencesCmdLineBehaviourLabel_Caption;
+ LANGPreferencesFeatures := LANGcsPreferencesFeatures;
+ LANGPreferencesDisableMouseRename_Tooltip := LANGcsPreferencesDisableMouseRename_Tooltip;
+ LANGPreferencesDisableFileTipsCheckBox_Caption := LANGcsPreferencesDisableFileTipsCheckBox_Caption;
+ LANGPreferencesDisableFileTipsCheckBox_Tooltip := LANGcsPreferencesDisableFileTipsCheckBox_Tooltip;
+ LANGPreferencesShow := LANGcsPreferencesShow;
+ LANGPreferencesDirsInBoldCheckBox_Caption := LANGcsPreferencesDirsInBoldCheckBox_Caption;
+ LANGPreferencesDisableDirectoryBracketsCheckBox_Caption := LANGcsPreferencesDisableDirectoryBracketsCheckBox_Caption;
+ LANGPreferencesOctalPermissionsCheckBox_Caption := LANGcsPreferencesOctalPermissionsCheckBox_Caption;
+ LANGPreferencesOctalPermissionsCheckBox_Tooltip := LANGcsPreferencesOctalPermissionsCheckBox_Tooltip;
+ LANGPreferencesMovement := LANGcsPreferencesMovement;
+ LANGPreferencesLynxLikeMotionCheckBox_Caption := LANGcsPreferencesLynxLikeMotionCheckBox_Caption;
+ LANGPreferencesInsertMovesDownCheckBox_Caption := LANGcsPreferencesInsertMovesDownCheckBox_Caption;
+ LANGPreferencesSpaceMovesDownCheckBox_Caption := LANGcsPreferencesSpaceMovesDownCheckBox_Caption;
+ LANGPreferencesViewer := LANGcsPreferencesViewer;
+ LANGPreferencesCommandSC := LANGcsPreferencesCommandSC;
+ LANGPreferencesUseInternalViewer := LANGcsPreferencesUseInternalViewer;
+ LANGPreferencesEditor := LANGcsPreferencesEditor;
+ LANGPreferencesTerminal := LANGcsPreferencesTerminal;
+ LANGPreferencesExperimentalFeatures := LANGcsPreferencesExperimentalFeatures;
+ LANGPreferencesExperimentalWarningLabel_Caption := LANGcsPreferencesExperimentalWarningLabel_Caption;
+ LANGPreferencesFocusRefreshCheckBox_Caption := LANGcsPreferencesFocusRefreshCheckBox_Caption;
+ LANGPreferencesFocusRefreshCheckBox_Tooltip := LANGcsPreferencesFocusRefreshCheckBox_Tooltip;
+ LANGPreferencesWMCompatModeCheckBox_Caption := LANGcsPreferencesWMCompatModeCheckBox_Caption;
+ LANGPreferencesWMCompatModeCheckBox_Tooltip := LANGcsPreferencesWMCompatModeCheckBox_Tooltip;
+ LANGPreferencesCompatUseLibcSystemCheckBox_Caption := LANGcsPreferencesCompatUseLibcSystemCheckBox_Caption;
+ LANGPreferencesCompatUseLibcSystemCheckBox_Tooltip := LANGcsPreferencesCompatUseLibcSystemCheckBox_Tooltip;
+
+ LANGmiSearchCaption2 := LANGcsmiSearchCaption2;
+ LANGmiNoMounterBarCaption := LANGcsmiNoMounterBarCaption;
+ LANGmiShowOneMounterBarCaption := LANGcsmiShowOneMounterBarCaption;
+ LANGmiShowTwoMounterBarCaption := LANGcsmiShowTwoMounterBarCaption;
+ LANGmnuNetworkCaption := LANGcsmnuNetworkCaption;
+ LANGmiConnectionsCaption := LANGcsmiConnectionsCaption;
+ LANGmiOpenConnectionCaption := LANGcsmiOpenConnectionCaption;
+ LANGmiQuickConnectCaption := LANGcsmiQuickConnectCaption;
+ LANGmnuPluginsCaption := LANGcsmnuPluginsCaption;
+ LANGmiTestPluginCaption := LANGcsmiTestPluginCaption;
+ LANGmiMounterSettingsCaption := LANGcsmiMounterSettingsCaption;
+ LANGmiColumnsCaption := LANGcsmiColumnsCaption;
+ LANGmiSavePositionCaption := LANGcsmiSavePositionCaption;
+ LANGmiMountCaption := LANGcsmiMountCaption;
+ LANGmiUmountCaption := LANGcsmiUmountCaption;
+ LANGmiEjectCaption := LANGcsmiEjectCaption;
+ LANGmiDuplicateTabCaption := LANGcsmiDuplicateTabCaption;
+ LANGmiCloseTabCaption := LANGcsmiCloseTabCaption;
+ LANGmiCloseAllTabsCaption := LANGcsmiCloseAllTabsCaption;
+ LANGCannotDetermineDestinationEngine := LANGcsCannotDetermineDestinationEngine;
+ LANGCannotLoadFile := LANGcsCannotLoadFile;
+ LANGMountPointDevice := LANGcsMountPointDevice;
+ LANGMountSC := LANGcsMountSC;
+ LANGNoPluginsFound := LANGcsNoPluginsFound;
+ LANGPluginAbout := LANGcsPluginAbout;
+ LANGCouldntOpenURI := LANGcsCouldntOpenURI;
+ LANGPluginAboutInside := LANGcsPluginAboutInside;
+ LANGAreYouSureCloseAllTabs := LANGcsAreYouSureCloseAllTabs;
+ LANGCouldntOpenURIArchive := LANGcsCouldntOpenURIArchive;
+ LANGThereIsNoModuleAvailable := LANGcsThereIsNoModuleAvailable;
+ LANGIgnoreError := LANGcsIgnoreError;
+ LANGErrorMount := LANGcsErrorMount;
+ LANGErrorUmount := LANGcsErrorUmount;
+ LANGErrorEject := LANGcsErrorEject;
+
+ LANGMounterPrefs_Caption := LANGcsMounterPrefs_Caption;
+ LANGMounterPrefs_TitleLabelCaption := LANGcsMounterPrefs_TitleLabelCaption;
+ LANGMounterPrefs_ListViewFrameCaption := LANGcsMounterPrefs_ListViewFrameCaption;
+ LANGMounterPrefs_MountName := LANGcsMounterPrefs_MountName;
+ LANGMounterPrefs_MountPoint := LANGcsMounterPrefs_MountPoint;
+ LANGMounterPrefs_Device := LANGcsMounterPrefs_Device;
+ LANGMounterPrefs_MoveUpButtonTooltip := LANGcsMounterPrefs_MoveUpButtonTooltip;
+ LANGMounterPrefs_MoveDownButtonTooltip := LANGcsMounterPrefs_MoveDownButtonTooltip;
+ LANGMounterPrefs_UseFSTabDefaultsCheckBox := LANGcsMounterPrefs_UseFSTabDefaultsCheckBox;
+ LANGMounterPrefs_UseFSTabDefaultsCheckBoxTooltip := LANGcsMounterPrefs_UseFSTabDefaultsCheckBoxTooltip;
+ LANGMounterPrefs_ToggleModeCheckBox := LANGcsMounterPrefs_ToggleModeCheckBox;
+ LANGMounterPrefs_ToggleModeCheckBoxTooltip := LANGcsMounterPrefs_ToggleModeCheckBoxTooltip;
+ LANGMounterPrefs_PropertiesFrameCaption := LANGcsMounterPrefs_PropertiesFrameCaption;
+ LANGMounterPrefs_DisplayTextLabelCaption := LANGcsMounterPrefs_DisplayTextLabelCaption;
+ LANGMounterPrefs_MountPointLabelCaption := LANGcsMounterPrefs_MountPointLabelCaption;
+ LANGMounterPrefs_MountDeviceLabelCaption := LANGcsMounterPrefs_MountDeviceLabelCaption;
+ LANGMounterPrefs_DeviceTypeLabelCaption := LANGcsMounterPrefs_DeviceTypeLabelCaption;
+ LANGMounterPrefs_miLocalDiskCaption := LANGcsMounterPrefs_miLocalDiskCaption;
+ LANGMounterPrefs_miRemovableCaption := LANGcsMounterPrefs_miRemovableCaption;
+ LANGMounterPrefs_miCDCaption := LANGcsMounterPrefs_miCDCaption;
+ LANGMounterPrefs_miFloppyCaption := LANGcsMounterPrefs_miFloppyCaption;
+ LANGMounterPrefs_miNetworkCaption := LANGcsMounterPrefs_miNetworkCaption;
+ LANGMounterPrefs_MountCommandLabelCaption := LANGcsMounterPrefs_MountCommandLabelCaption;
+ LANGMounterPrefs_UmountCommandLabelCaption := LANGcsMounterPrefs_UmountCommandLabelCaption;
+ LANGMounterPrefs_MountCommandEntryTooltip := LANGcsMounterPrefs_MountCommandEntryTooltip;
+ LANGMounterPrefs_UmountCommandEntryTooltip := LANGcsMounterPrefs_UmountCommandEntryTooltip;
+ LANGMounterPrefs_IconLabelCaption := LANGcsMounterPrefs_IconLabelCaption;
+
+ LANGConnMgr_Caption := LANGcsConnMgr_Caption;
+ LANGConnMgr_ConnectButton := LANGcsConnMgr_ConnectButton;
+ LANGConnMgr_OpenConnection := LANGcsConnMgr_OpenConnection;
+ LANGConnMgr_NameColumn := LANGcsConnMgr_NameColumn;
+ LANGConnMgr_URIColumn := LANGcsConnMgr_URIColumn;
+ LANGConnMgr_AddConnectionButtonCaption := LANGcsConnMgr_AddConnectionButtonCaption;
+ LANGConnMgr_AddConnectionButtonTooltip := LANGcsConnMgr_AddConnectionButtonTooltip;
+ LANGConnMgr_EditButtonCaption := LANGcsConnMgr_EditButtonCaption;
+ LANGConnMgr_EditButtonTooltip := LANGcsConnMgr_EditButtonTooltip;
+ LANGConnMgr_RemoveButtonCaption := LANGcsConnMgr_RemoveButtonCaption;
+ LANGConnMgr_RemoveButtonTooltip := LANGcsConnMgr_RemoveButtonTooltip;
+ LANGConnMgr_DoYouWantDelete := LANGcsConnMgr_DoYouWantDelete;
+
+ LANGConnProp_FTP := LANGcsConnProp_FTP;
+ LANGConnProp_SFTP := LANGcsConnProp_SFTP;
+ LANGConnProp_SMB := LANGcsConnProp_SMB;
+ LANGConnProp_HTTP := LANGcsConnProp_HTTP;
+ LANGConnProp_HTTPS := LANGcsConnProp_HTTPS;
+ LANGConnProp_Other := LANGcsConnProp_Other;
+ LANGConnProp_Caption := LANGcsConnProp_Caption;
+ LANGConnProp_VFSModule := LANGcsConnProp_VFSModule;
+ LANGConnProp_URI := LANGcsConnProp_URI;
+ LANGConnProp_URIEntryTooltip := LANGcsConnProp_URIEntryTooltip;
+ LANGConnProp_DetailedInformations := LANGcsConnProp_DetailedInformations;
+ LANGConnProp_Name := LANGcsConnProp_Name;
+ LANGConnProp_Server := LANGcsConnProp_Server;
+ LANGConnProp_Username := LANGcsConnProp_Username;
+ LANGConnProp_UserNameEntryTooltip := LANGcsConnProp_UserNameEntryTooltip;
+ LANGConnProp_Password := LANGcsConnProp_Password;
+ LANGConnProp_TargetDirectory := LANGcsConnProp_TargetDirectory;
+ LANGConnProp_ServiceType := LANGcsConnProp_ServiceType;
+ LANGConnProp_MaskPassword := LANGcsConnProp_MaskPassword;
+ LANGConnProp_MenuItemCaption := LANGcsConnProp_MenuItemCaption;
+
+ LANGConnLogin_Caption := LANGcsConnLogin_Caption;
+ LANGConnLogin_Login := LANGcsConnLogin_Login;
+ LANGConnLogin_ExperimentalWarningLabelCaption := LANGcsConnLogin_ExperimentalWarningLabelCaption;
+ LANGConnLogin_Username := LANGcsConnLogin_Username;
+ LANGConnLogin_Password := LANGcsConnLogin_Password;
+ LANGConnLogin_AnonymousCheckButton := LANGcsConnLogin_AnonymousCheckButton;
+
+ LANGColumns_Caption := LANGcsColumns_Caption;
+ LANGColumns_Title := LANGcsColumns_Title;
+ LANGColumns_MoveUpButtonTooltip := LANGcsColumns_MoveUpButtonTooltip;
+ LANGColumns_MoveDownButtonTooltip := LANGcsColumns_MoveDownButtonTooltip;
+ LANGColumns_TitlesLongName := LANGcsColumns_TitlesLongName;
+ LANGColumns_TitlesLongNameExt := LANGcsColumns_TitlesLongNameExt;
+ LANGColumns_TitlesLongExt := LANGcsColumns_TitlesLongExt;
+ LANGColumns_TitlesLongSize := LANGcsColumns_TitlesLongSize;
+ LANGColumns_TitlesLongDateTime := LANGcsColumns_TitlesLongDateTime;
+ LANGColumns_TitlesLongDate := LANGcsColumns_TitlesLongDate;
+ LANGColumns_TitlesLongTime := LANGcsColumns_TitlesLongTime;
+ LANGColumns_TitlesLongUser := LANGcsColumns_TitlesLongUser;
+ LANGColumns_TitlesLongGroup := LANGcsColumns_TitlesLongGroup;
+ LANGColumns_TitlesLongAttr := LANGcsColumns_TitlesLongAttr;
+ LANGColumns_TitlesShortName := LANGcsColumns_TitlesShortName;
+ LANGColumns_TitlesShortNameExt := LANGcsColumns_TitlesShortNameExt;
+ LANGColumns_TitlesShortExt := LANGcsColumns_TitlesShortExt;
+ LANGColumns_TitlesShortSize := LANGcsColumns_TitlesShortSize;
+ LANGColumns_TitlesShortDateTime := LANGcsColumns_TitlesShortDateTime;
+ LANGColumns_TitlesShortDate := LANGcsColumns_TitlesShortDate;
+ LANGColumns_TitlesShortTime := LANGcsColumns_TitlesShortTime;
+ LANGColumns_TitlesShortUser := LANGcsColumns_TitlesShortUser;
+ LANGColumns_TitlesShortGroup := LANGcsColumns_TitlesShortGroup;
+ LANGColumns_TitlesShortAttr := LANGcsColumns_TitlesShortAttr;
+
+ LANGTestPlugin_Caption := LANGcsTestPlugin_Caption;
+ LANGTestPlugin_Title := LANGcsTestPlugin_Title;
+ LANGTestPlugin_ExperimentalWarningLabelCaption := LANGcsTestPlugin_ExperimentalWarningLabelCaption;
+ LANGTestPlugin_Plugin := LANGcsTestPlugin_Plugin;
+ LANGTestPlugin_Command := LANGcsTestPlugin_Command;
+ LANGTestPlugin_Username := LANGcsTestPlugin_Username;
+ LANGTestPlugin_Password := LANGcsTestPlugin_Password;
+ LANGTestPlugin_AnonymousCheckButton := LANGcsTestPlugin_AnonymousCheckButton;
+ LANGTestPlugin_NoPluginsFound := LANGcsTestPlugin_NoPluginsFound;
+
+ LANGRemoteWait_Caption := LANGcsRemoteWait_Caption;
+ LANGRemoteWait_OperationInProgress := LANGcsRemoteWait_OperationInProgress;
+ LANGRemoteWait_ItemsFound := LANGcsRemoteWait_ItemsFound;
+
+ LANGSearch_Bytes := LANGcsSearch_Bytes;
+ LANGSearch_kB := LANGcsSearch_kB;
+ LANGSearch_MB := LANGcsSearch_MB;
+ LANGSearch_days := LANGcsSearch_days;
+ LANGSearch_weeks := LANGcsSearch_weeks;
+ LANGSearch_months := LANGcsSearch_months;
+ LANGSearch_years := LANGcsSearch_years;
+ LANGSearch_Caption := LANGcsSearch_Caption;
+ LANGSearch_General := LANGcsSearch_General;
+ LANGSearch_Advanced := LANGcsSearch_Advanced;
+ LANGSearch_SearchResults := LANGcsSearch_SearchResults;
+ LANGSearch_SearchFor := LANGcsSearch_SearchFor;
+ LANGSearch_FileMaskEntryTooltip := LANGcsSearch_FileMaskEntryTooltip;
+ LANGSearch_SearchIn := LANGcsSearch_SearchIn;
+ LANGSearch_SearchArchivesCheckButton := LANGcsSearch_SearchArchivesCheckButton;
+ LANGSearch_FindText := LANGcsSearch_FindText;
+ LANGSearch_FindTextEntryTooltip := LANGcsSearch_FindTextEntryTooltip;
+ LANGSearch_CaseSensitiveCheckButton := LANGcsSearch_CaseSensitiveCheckButton;
+ LANGSearch_StayCurrentFSCheckButton := LANGcsSearch_StayCurrentFSCheckButton;
+ LANGSearch_CaseSensitiveMatchCheckButton := LANGcsSearch_CaseSensitiveMatchCheckButton;
+ LANGSearch_Size := LANGcsSearch_Size;
+ LANGSearch_Date := LANGcsSearch_Date;
+ LANGSearch_BiggerThan := LANGcsSearch_BiggerThan;
+ LANGSearch_SmallerThan := LANGcsSearch_SmallerThan;
+ LANGSearch_ModifiedBetweenRadioButton := LANGcsSearch_ModifiedBetweenRadioButton;
+ LANGSearch_NotModifiedAfterRadioButton := LANGcsSearch_NotModifiedAfterRadioButton;
+ LANGSearch_ModifiedLastRadioButton := LANGcsSearch_ModifiedLastRadioButton;
+ LANGSearch_ModifiedNotLastRadionButton := LANGcsSearch_ModifiedNotLastRadionButton;
+ LANGSearch_ModifiedBetweenEntry1 := LANGcsSearch_ModifiedBetweenEntry1;
+ LANGSearch_ViewButtonCaption := LANGcsSearch_ViewButtonCaption;
+ LANGSearch_NewSearchButtonCaption := LANGcsSearch_NewSearchButtonCaption;
+ LANGSearch_GoToFileButtonCaption := LANGcsSearch_GoToFileButtonCaption;
+ LANGSearch_FeedToListboxButtonCaption := LANGcsSearch_FeedToListboxButtonCaption;
+ LANGSearch_StatusSC := LANGcsSearch_StatusSC;
+ LANGSearch_Ready := LANGcsSearch_Ready;
+ LANGSearch_PreparingToSearch := LANGcsSearch_PreparingToSearch;
+ LANGSearch_SearchInProgress := LANGcsSearch_SearchInProgress;
+ LANGSearch_UserCancelled := LANGcsSearch_UserCancelled;
+ LANGSearch_SearchFinished := LANGcsSearch_SearchFinished;
+ LANGSearch_FilesFound := LANGcsSearch_FilesFound;
+ LANGSearch_And := LANGcsSearch_And;
+
+ LANGCloseOpenConnection := LANGcsCloseOpenConnection;
+ LANGDuplicateTabWarning := LANGcsDuplicateTabWarning;
+ LANGDontShowAgain := LANGcsDontShowAgain;
+ LANGSwitchOtherPanelWarning := LANGcsSwitchOtherPanelWarning;
+ LANGOpenConnectionsWarning := LANGcsOpenConnectionsWarning;
+ LANGmiDisconnect_Caption := LANGcsmiDisconnect_Caption;
+ LANGDisconnectButton_Tooltip := LANGcsDisconnectButton_Tooltip;
+ LANGLeaveArchiveButton_Tooltip := LANGcsLeaveArchiveButton_Tooltip;
+ LANGOpenTerminalButton_Tooltip := LANGcsOpenTerminalButton_Tooltip;
+ LANGOpenTerminalButton_Caption := LANGcsOpenTerminalButton_Caption;
+ LANGShowTextUIDsCheckBox_Caption := LANGcsShowTextUIDsCheckBox_Caption;
+ LANGShowTextUIDsCheckBox_Tooltip := LANGcsShowTextUIDsCheckBox_Tooltip;
+
+ LANGmiNewTab_Caption := LANGcsmiNewTab_Caption;
+ LANGFilePopupMenu_Properties := LANGcsFilePopupMenu_Properties;
+ LANGCommandEntry_Tooltip := LANGcsCommandEntry_Tooltip;
+ LANGmiFiles_Caption := LANGcsmiFiles_Caption;
+
+ LANGPasswordButton_Tooltip := LANGcsPasswordButton_Tooltip;
+ LANGHandleRunFromArchive_Bytes := LANGcsHandleRunFromArchive_Bytes;
+ LANGHandleRunFromArchive_FileTypeDesc_Unknown := LANGcsHandleRunFromArchive_FileTypeDesc_Unknown;
+ LANGHandleRunFromArchive_NotAssociated := LANGcsHandleRunFromArchive_NotAssociated;
+ LANGHandleRunFromArchive_SelfExecutable := LANGcsHandleRunFromArchive_SelfExecutable;
+ LANGHandleRunFromArchive_CouldntCreateTemporaryDirectory := LANGcsHandleRunFromArchive_CouldntCreateTemporaryDirectory;
+ LANGFRunFromVFS_Caption := LANGcsFRunFromVFS_Caption;
+ LANGFRunFromVFS_TitleLabel := LANGcsFRunFromVFS_TitleLabel;
+ LANGFRunFromVFS_FileNameLabel := LANGcsFRunFromVFS_FileNameLabel;
+ LANGFRunFromVFS_FileTypeLabel := LANGcsFRunFromVFS_FileTypeLabel;
+ LANGFRunFromVFS_SizeLabel := LANGcsFRunFromVFS_SizeLabel;
+ LANGFRunFromVFS_PackedSizeLabel := LANGcsFRunFromVFS_PackedSizeLabel;
+ LANGFRunFromVFS_DateLabel := LANGcsFRunFromVFS_DateLabel;
+ LANGFRunFromVFS_InfoLabel := LANGcsFRunFromVFS_InfoLabel;
+ LANGFRunFromVFS_OpensWithLabel := LANGcsFRunFromVFS_OpensWithLabel;
+ LANGFRunFromVFS_ExecuteButton := LANGcsFRunFromVFS_ExecuteButton;
+ LANGFRunFromVFS_ExecuteAllButton := LANGcsFRunFromVFS_ExecuteAllButton;
+ LANGFSetPassword_Caption := LANGcsFSetPassword_Caption;
+ LANGFSetPassword_Label1_Caption := LANGcsFSetPassword_Label1_Caption;
+ LANGFSetPassword_Label2_Caption := LANGcsFSetPassword_Label2_Caption;
+ LANGFSetPassword_ShowPasswordCheckButton := LANGcsFSetPassword_ShowPasswordCheckButton;
+end;
+
+initialization
+ AddTranslation('cz_CZ', @SetTranslation);
+ AddTranslation('CS', @SetTranslation);
+ AddTranslation('CZ', @SetTranslation);
+end.
diff --git a/translations/UTranslation_DE.pas b/translations/UTranslation_DE.pas
new file mode 100644
index 0000000..f44b80a
--- /dev/null
+++ b/translations/UTranslation_DE.pas
@@ -0,0 +1,1236 @@
+(*
+ Tux Commander - UTranslation_DE - German Localization constants
+ Copyright (C) 2004 Sven Laufersweiler <laufersweiler@bettercad.de>
+ !! Currently unmaintained, new translator needed !!
+
+ 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
+*)
+unit UTranslation_DE;
+
+interface
+
+implementation
+
+uses ULocale;
+
+const LANGdeF2Button_Caption = 'F2 - Umbenenne';
+ LANGdeF3Button_Caption = 'F3 - Ansehen';
+ LANGdeF4Button_Caption = 'F4 - Bearbeiten';
+ LANGdeF5Button_Caption = 'F5 - Kopieren';
+ LANGdeF6Button_Caption = 'F6 - Verschieben';
+ LANGdeF7Button_Caption = 'F7 - Verz. erstellen';
+ LANGdeF8Button_Caption = 'F8 - Löschen';
+ LANGdemnuFile_Caption = '_Datei';
+ LANGdemnuMark_Caption = '_Markierung';
+ LANGdemnuCommands_Caption = '_Befehle';
+ LANGdemnuHelp_Caption = '_Hilfe';
+ LANGdemiExit_Caption = 'B_eenden';
+ LANGdemiSelectGroup_Caption = '_Gruppe auswählen...';
+ LANGdemiUnselectGroup_Caption = 'Gruppenauswahl _rückgängig...';
+ LANGdemiSelectAll_Caption = '_Alles auswählen';
+ LANGdemiUnselectAll_Caption = '_Keine Auswahl';
+ LANGdemiInvertSelection_Caption = 'Auswahl _umkehren';
+ LANGdemiRefresh_Caption = '_Aktualisieren';
+ LANGdemiAbout_Caption = 'Ü_ber...';
+ LANGdeColumn1_Caption = 'Name';
+ LANGdeColumn2_Caption = 'Erw.';
+ LANGdeColumn3_Caption = 'Gräße';
+ LANGdeColumn4_Caption = 'Datum';
+ LANGdeColumn5_Caption = 'Attr';
+ LANGdeExpandSelection = 'Auswahl aufblättern';
+ LANGdeShrinkSelection = 'Auswahl zusammenschrumpfen';
+ LANGdeNoMatchesFound = 'Keine Übereinstimmung gefunden';
+ LANGdeNoFilesSelected = 'Keine Dateien ausgewählt!';
+ LANGdeSelectedFilesDirectories = '%d Dateien/Verzeichnisse ausgewählt';
+ LANGdeDirectoryS = 'Verzeichnis %s';
+ LANGdeFileS = 'Datei %s';
+ LANGdeDoYouReallyWantToDeleteTheS = 'Wollen Sie %s wirklich löschen?';
+ LANGdeDoYouReallyWantToDeleteTheSS = 'Wollen Sie %s wirklich löschen?'#10'%s';
+ LANGdeCopyFiles = 'Dateien kopieren';
+ LANGdeMoveRenameFiles = 'Dateien verschieben/umbenennen';
+ LANGdeCopyDFileDirectoriesTo = 'Kopiere %d Dateien/Verzeichnisse nach';
+ LANGdeMoveRenameDFileDirectoriesTo = 'Verschieben/Umbenennen von %d Dateien/Verzeichnissen nach';
+ LANGdeCopySC = 'Kopiere:';
+ LANGdeMoveRenameSC = 'Verschiebe/Umbenennen:';
+ LANGdeQuickFind = ' Schnellfinder:';
+ LANGdeAboutString = 'Tux Commander'#10'Version %s'#10'Erstellungsdatum: %s'#10#10'Copyright (c) 2008 Tomas Bzatek'#10'E-mail: tbzatek@users.sourceforge.net'#10'Website: http://tuxcmd.sourceforge.net/';
+ LANGdeAboutStringGnome = 'Version %s'#10'Erstellungsdatum: %s'#10'Website: http://tuxcmd.sourceforge.net/';
+ LANGdeDiskStatFmt = '%s von %s frei';
+ LANGdeDiskStatVolNameFmt = '[%s] %s von %s frei';
+ LANGdeStatusLineFmt = '%s von %s in %d von %d Dateien ausgewählt';
+ LANGdePanelStrings : array[boolean] of string = ('Rechts', 'Links');
+ LANGdeDIR = '<DIR>';
+ LANGdeErrorGettingListingForSPanel = 'Fehler beim Erhalten der Auflistung für %s Feld:'#10' %s'#10#10'Pfad = ''%s''';
+ LANGdeErrorGettingListingForSPanelNoPath = 'Fehler beim Erhalten der Auflistung für %s Feld:'#10' %s';
+ LANGdeErrorCreatingNewDirectorySInSPanel = 'Fehler beim Erstellen des neuen Verzeichnisses ''%s'' in %s Feld:'#10' %s';
+ LANGdeErrorCreatingNewDirectorySInSPanelNoPath = 'Fehler beim Erstellen des neuen Verzeichnisses in %s Feld:'#10' %s';
+ LANGdeTheFileDirectory = 'Die Datei/Das Verzeichniss';
+ LANGdeCouldNotBeDeleted = 'kann nicht gelöscht werden';
+ LANGdeCouldNotBeDeletedS = 'Kann nicht gelöscht werden: %s';
+ LANGdeUserCancelled = 'Abbruch durch Benutzer!';
+ LANGdeTheDirectorySIsNotEmpty = 'Das Verzeichnis %s ist nicht leer!';
+ LANGdeCannotCopyFile = 'Kann Datei nicht kopieren';
+ LANGdeCopyError = 'Fehler beim kopieren';
+ LANGdeMoveError = 'Fehler beim verschieben';
+ LANGdeOverwriteS = 'Überschreibe: %s';
+ LANGdeWithFileS = 'mit Datei: %s';
+ LANGdeOvewriteSBytesS = '%s bytes, %s';
+ LANGdeTheFile = 'Die Datei';
+ LANGdeCopy = 'Kopieren';
+ LANGdeMove = 'Verschieben';
+ LANGdeTheDirectory = 'Das Verzeichnis';
+ LANGdeTheSymbolicLink = 'Der symbolische Link';
+ LANGdeCannotMoveFile = 'Kann Datei nicht verschieben';
+ LANGdeCouldNotBeCreated = 'kann nicht erstellt werden';
+ LANGdeCouldNotBeCreatedS = 'kann nicht erstellt werden: %s';
+ LANGdeFromS = 'Von: %s';
+ LANGdeToS = 'Nach: %s';
+ LANGdeCannotCopyFileToItself = 'Datei kann nicht auf sich selber kopiert werden';
+ LANGdeMemoryAllocationFailed = 'Speicherallozierung schlug fehl:';
+ LANGdeCannotOpenSourceFile = 'Kann Quelldatei nicht öffnen';
+ LANGdeCannotOpenDestinationFile = 'Kann Zieldatei nicht öffnen';
+ LANGdeCannotCloseDestinationFile = 'Kann Zieldatei nicht schließen';
+ LANGdeCannotCloseSourceFile = 'Kann Quelldateii nicht schließen';
+ LANGdeCannotReadFromSourceFile = 'Kann von Quelldatei nicht lesen';
+ LANGdeCannotWriteToDestinationFile = 'Kann nicht in Zieldatei schreiben';
+ LANGdeUnknownException = 'Unbekannter Ausnahmefehler';
+ LANGdeNoAccess = 'Kein Zugriff';
+ LANGdeUnknownError = 'Unbekannter Fehler';
+ LANGdeCreateANewDirectory = 'Erstelle neues Verzeichnis';
+ LANGdeEnterDirectoryName = 'Gebe _Verzeichnisnamen ein:';
+ LANGdeOverwriteQuestion = 'Überschreibe Frage';
+ LANGdeOverwriteButton_Caption = '_Überschreiben';
+ LANGdeOverwriteAllButton_Caption = 'Überschreibe _alles';
+ LANGdeSkipButton_Caption = '_Überspringe';
+ LANGdeOverwriteAllOlderButton_Caption = 'Überschreibe alles _was älter';
+ LANGdeSkipAllButton_Caption = 'Ü_berspringe alles';
+ LANGdeRenameButton_Caption = '_Umbenennen';
+ LANGdeAppendButton_Caption = 'A_nhängen';
+ LANGdeRename = 'Umbenennen';
+ LANGdeRenameFile = 'Datei ''%s'' umbenennen nach';
+ LANGdeIgnoreButton_Caption = '_Ignorieren';
+ LANGdeProgress = 'Fortschritt';
+ LANGdeCancel = '_Abbruch';
+ LANGdeDelete = 'Lösche:';
+ LANGdeSpecifyFileType = '_Spezifiziere Dateityp:';
+ LANGdeRemoveDirectory = 'Verschiebe Verzeichnis';
+ LANGdeDoYouWantToDeleteItWithAllItsFilesAndSubdirectories = 'Wollen Sie es mit allen Datei und Unterverzeichnissen löschen?';
+ LANGdeRetry = '_Wiederholen';
+ LANGdeDeleteButton_Caption = '_Löschen';
+ LANGdeAll = '_Alles';
+ LANGdeCopyFilesSC = 'Dateien kopieren:';
+ LANGdeAppendQuestion = 'Sind Sie sicher, daß Sie die Datei ''%s'' an Datei ''%s'' anhängen wollen?';
+ LANGdePreparingList = 'Bereite Liste vor...';
+ LANGdeYouMustSelectAValidFile = 'Sie müssen ein gültige Datei auswählen!';
+ LANGdemiVerifyChecksums = '_Prüfe Checksumme';
+ LANGdeVerifyChecksumsCaption = 'Prüfe Checksumme';
+ LANGdeCheckButtonCaptionCheck = '_Prüfen';
+ LANGdeCheckButtonCaptionStop = '_Stop';
+ LANGdeFileListTooltip = '[?] - Nicht kontrolliert'#10'[OK] Checksumme richtig'#10'[BAD] - Checksumme falsch'#10'[N/A] Datei nicht verfügbar';
+ LANGdeFilenameColumnCaption = 'Dateiname';
+ LANGdeTheFileSYouAreTryingToOpenIsQuiteBig = 'Die Datei ''%s'', die Sie versuchen zu öffnen ist zu groß. Es kann möglicherweise eine ungültige Prüfsummendatei sein.'#10#10'Wollen Sie trotzdem laden?';
+ LANGdeAnErrorOccuredWhileInitializingMemoryBlock = 'Es trat ein Fehler mit dem Speicher auf. Schließen Sie einige Programme und versuchen Sie es erneut.';
+ LANGdeAnErrorOccuredWhileOpeningFileSS = 'Beim öffnen der Datei ''%s'' trat ein fehler auf:'#10' %s';
+ LANGdeAnErrorOccuredWhileReadingFileSS = 'Beim lesen der Datei ''%s'' trat ein Fehler auf:'#10' %s';
+ LANGdeChecksumNotChecked = '<span weight="bold">Status:</span> Nicht geprüft';
+ LANGdeChecksumChecking = '<span weight="bold">Status:</span> Prüfe...';
+ LANGdeChecksumInterrupted = '<span weight="bold">Status:</span> Unterbrochen';
+ LANGdeChecksumDOK = '<span weight="bold">Status:</span> %d%% OK';
+ LANGdemiCreateChecksumsCaption = '_Erstelle Checksummen...';
+ LANGdeYouMustSelectAtLeastOneFileToCalculateChecksum = 'Sie müssen mindestens eine Datei ausgewählt haben, um Checksummen zu berechnen!';
+ LANGdeCreateChecksumsCaption = 'Erstelle Checksummen';
+ LANGdeCCHKSUMPage1Text = 'Sie werden Prüfsummen für die ausgewählten'#10'Dateien erstellen. Wenn Sie noch nicht alle'#10'Dateine ausgewählt haben, schließen sie diesen Dialog'#10'und wählen Sie weitere Dateien aus.';
+ LANGdeCCHKSUMPage4Text = 'Der Druide ist bereit die Checksummen für Ihre'#10'ausgewählten Dateien zu erstellen. Dieser Vorgang kann ein paar Minuten dauern.'#10'Um Fortzufahren klicken Sie auf "Weiter".';
+ LANGdeCCHKSUMPage6Text = 'Beim Erstellen der Checksummen traten Fehler auf:';
+ LANGdeCCHKSUMPage7Text = 'Das Erstellen der Checksummen ist beendet und '#10' Ihre Dateien sind bereit.'#10#10'Zum Beenden klicke auf "Beenden".';
+ LANGdeCCHKSUMPage1Title = '<span size="xx-large" weight="ultrabold">Vorbereiten der Dateien zur Checksummenberechnung</span>';
+ LANGdeCCHKSUMPage2Title = '<span size="xx-large" weight="ultrabold">Wählen Sie den Prüfsummen Dateityp aus</span>';
+ LANGdeCCHKSUMPage3Title = '<span size="xx-large" weight="ultrabold">Dateiname auswählen</span>';
+ LANGdeCCHKSUMPage4Title = '<span size="xx-large" weight="ultrabold">Bereit zum prüfen</span>';
+ LANGdeCCHKSUMPage5Title = '<span size="xx-large" weight="ultrabold">Ausführung...</span>';
+ LANGdeCCHKSUMPage6Title = '<span size="xx-large" weight="ultrabold">Fehler!</span>';
+ LANGdeCCHKSUMPage7Title = '<span size="xx-large" weight="ultrabold">Fertig</span>';
+ LANGdeCCHKSUMSFVFile = 'SFV Datei';
+ LANGdeCCHKSUMMD5sumFile = 'MD5sum Datei';
+ LANGdeCCHKSUMFileName = 'Datei_name:';
+ LANGdeCCHKSUMCreateSeparateChecksumFiles = 'Erstelle _separate Prüfsummendateien';
+ LANGdeCCHKSUMNowProcessingFileS = 'Verarbeite jetzt Datei: %s';
+ LANGdeCCHKSUMFinishCaption = '_Fertig';
+ LANGdeCCHKSUMAreYouSureYouWantToAbortTheProcessing = 'Wollen Sie wirklich die Bearbeitung abbrechen?';
+ LANGdeCCHKSUMAnErrorOccuredWhileOpeningFileSS = 'Beim Öffnen der Datei ''%s'' trat ein Fehler auf: %s'#10;
+ LANGdeCCHKSUMAnErrorOccuredWhileReadingFileSS = 'Beim Lesen der Datei ''%s'' trat ein Fehler auf: %s'#10;
+ LANGdeCCHKSUMAnErrorOccuredWhileWritingFileSS = 'Beim Schreiben der Datei ''%s'' trat ein Fehler auf: %s'#10;
+ LANGdeAnErrorOccuredWhileWritingFileSS = 'Beim Schreiben der Datei ''%s'' trat ein Fehler auf:'#10' %s';
+ LANGdeTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt = 'Die Zieldatei ''%s'' existiert bereits. Soll diese überschrieben werden?';
+ LANGdeTheTargetFileSCannotBeRemovedS = 'Die Zieldatei ''%s'' kann nicht entfernt werden: %s';
+ LANGdeMergeCaption = 'Zusammenfügen';
+ LANGdePleaseInsertNextDiskOrGiveDifferentLocation = 'Nächste Diskette einlegen, oder anderen Ort auswählen:';
+ LANGdeMergeOfSSucceeded = 'Zusammenfügen von ''%s'' erfolgreich (CRC Checksumme OK).';
+ LANGdeWarningCreatedFileFailsCRCCheck = 'Warnung: CRC-Check für neue Datei schlug fehl!';
+ LANGdeMergeOfSSucceeded_NoCRCFileAvailable = 'Zusammenfügen von ''%s'' erfolgreich (keine CRC-Datei verfügbar).';
+ LANGdeMergeSAndAllFilesWithAscendingNamesToTheFollowingDirectory = 'Zusammenfügen von ''%s'' und alle Dateien mit aufsteigenden Namen in folgendes Verzeichnis:';
+ LANGdeMergeSC = 'Zusammenfügen:';
+ LANGdemiSplitFileCaption = 'Dateien _teilen...';
+ LANGdemiMergeFilesCaption = 'Dateien _verbinden...';
+ LANGdeSplitTheFileSToDirectory = '_Teile die Datei ''%s'' ins Verzeichnis:';
+ LANGdeSplitSC = 'Teilen:';
+ LANGdeSplitFile = 'Datei teilen';
+ LANGdeBytesPerFile = '_Bytes pro Datei:';
+ LANGdeAutomatic = 'Automatisch';
+ LANGdeDeleteFilesOnTargetDisk = '_Lüsche Dateien auf Zieldiskette (verwendbar für entfernbare Medien)';
+ LANGdeSplitCaption = 'Teilen';
+ LANGdeCannotOpenFileS = 'Kann Datei ''%s'' nicht öffnen';
+ LANGdeCannotSplitTheFileToMoreThan999Parts = 'Kann die Datei nicht in mehr als 999 Teile aufteilen!';
+ LANGdeThereAreSomeFilesInTheTargetDirectorySDoYouWantToDeleteThem = 'Es befinden sich einige Dateien im Zielverzeichnis:'#10'%s'#10'Wollen Sie diese löschen?';
+ LANGdeThereAreDFilesInTheTargetDirectoryDoYouWantToDeleteThem = 'Es sind %d Dateien im Zielverzeichnis. Wollen Sie diese löschen?';
+ LANGdeAnErrorOccuredWhileOperationS = 'Während folgender Operation trat ein Fehler auf: %s';
+ LANGdeSplitOfSSucceeded = '''%s'' erfolgreich geteilt.';
+ LANGdeSplitOfSFailed = 'Das Teilen von ''%s'' schlug fehl!';
+ LANGdemnuShow_Caption = 'An_zeigen';
+ LANGdemiShowDotFiles_Caption = 'Zeige _versteckte Dateien';
+ LANGdeTheFileYouAreTryingToOpenIsQuiteBig = 'Die Datei, die Sie versuchen zu öffnen, ist sehr groß. Das Laden der Datei mit einer externen Anwendung (wie gedit) kann eine Verlangsamung des Systems verursachen.'#10'Wollen Sie fortfahren?';
+ LANGdeCannotExecuteSPleaseCheckTheConfiguration = 'Kann ''%s'' nicht ausführen. Bitte prüfen Sie die Konfiguration, oder setzen Sie die korrekte Verknüpfung zum Dateityp.';
+ LANGdeEdit = 'Bearbeiten';
+ LANGdeEnterFilenameToEdit = '_Eingabe des zu editierenden Dateinamens:';
+
+ LANGdemnuSettings_Caption = 'Eins_tellungen';
+ LANGdemiFileTypes_Caption = 'Date_itypen...';
+ LANGdeThereIsNoApplicationAssociatedWithS = 'Es ist kein Programm mit "%s" verknüpft.'#10#10'Sie können Tux Commander konfigurieren um Programm mit Dateitypen zu verknüpfen. Wollen Sie jetzt ein Programm mit diesem Dateityp verknüpfen?';
+ LANGdeErrorExecutingCommand = 'Fehler beim Ausführen des Befehls!';
+ LANGdeEditFileTypesCaption = 'Bearbeiten der Dateitypen';
+ LANGdeTitleLabel_Caption = '<span size="x-large" weight="ultrabold">Konfiguration der Dateitypen</span>';
+ LANGdeExtensionsColumn = 'Erweiterungen';
+ LANGdeDescriptionColumn = 'Beschreibung';
+ LANGdeFileTypesList = 'Dateitypenliste';
+ LANGdeActionName = 'Aktionsname';
+ LANGdeCommand = 'Befehl';
+ LANGdeSetDefaultActionButton_Caption = 'Als _Standard setzen';
+ LANGdeRunInTerminalCheckBox_Caption = 'Im _Terminal ausführen';
+ LANGdeAutodetectCheckBox_Caption = '_GUI Programm automatisch erkennen';
+ LANGdeBrowseButton_Caption = '_Browse...';
+ LANGdeCommandLabel_Caption = 'Be_fehl:';
+ LANGdeDescriptionLabel_Caption = 'B_schreibung:';
+ LANGdeFNameExtLabel_Caption = 'Hi_nzufügen:';
+ LANGdeNotebookPageExtensions = 'Dateityp';
+ LANGdeNotebookPageActions = 'Aktionen';
+ LANGdeDefault = ' (Standard)';
+ LANGdeCannotSaveFileTypeAssociationsBecauseOtherProcess = 'Kann die Dateityp-Verknüpfung nicht speichern, weil ein anderer Prozess diesen aktualisiert hat während dieses Programm läuft.';
+ LANGdeDefaultColor = 'St_andard Farbe';
+ LANGdeIcon = '_Icon:';
+ LANGdeBrowseForIcon = 'Nach Icon suchen';
+ LANGdeSelectFileTypeColor = 'Dateitypenfarbe auswählen';
+ LANGdeColor = 'Fa_rbe:';
+
+ LANGdemiChangePermissions_Caption = 'Be_rechtigungen ändern...';
+ LANGdemiChangeOwner_Caption = '_Eigentümer/Gruppe ändern...';
+ LANGdemiCreateSymlink_Caption = 'Symbolischen _Link erstellen...';
+ LANGdemiEditSymlink_Caption = '_Symbolischen Link bearbeiten...';
+ LANGdeChmodProgress = 'Berechtigungen ändern:';
+ LANGdeChownProgress = 'Eigentümer ändern:';
+ LANGdeYouMustSelectAValidSymbolicLink = 'Sie müssen einen zulässigen symbolischen Link auswählen!';
+ LANGdePopupRunS = 'A_usführen %s';
+ LANGdePopupOpenS = 'Ö_ffnen %s';
+ LANGdePopupGoUp = '_Aufwärts';
+ LANGdePopupOpenWithS = 'Öffnen _mit %s';
+ LANGdePopupDefault = ' (Standard)';
+ LANGdePopupOpenWith = 'Ö_ffnen mit...';
+ LANGdePopupViewFile = '_Datei ansehen';
+ LANGdePopupEditFile = 'D_atei bearbeiten';
+ LANGdePopupMakeSymlink = 'S_ymbolischen Link erstellen';
+ LANGdePopupRename = '_Umbenennen';
+ LANGdePopupDelete = '_Löschen';
+ LANGdeDialogChangePermissions = 'Berechtigungen ändern';
+ LANGdeCouldNotBeChmoddedS = 'could not be chmodded: %s';
+ LANGdeDialogChangeOwner = 'Eigentümer ändern';
+ LANGdeCouldNotBeChownedS = 'Kann Eigentümer nicht ändern: %s';
+ LANGdeDialogMakeSymlink = 'Symbolischen Link erstellen';
+ LANGdeDialogEditSymlink = 'Symbolischen Link bearbeiten';
+ LANGdeFEditSymlink_Caption = 'Symbolischen Link bearbeiten';
+ LANGdeFEditSymlink_SymbolicLinkFilename = '_Symbolischer Verbindungs-Dateiname:';
+ LANGdeFEditSymlink_SymbolicLinkPointsTo = 'Symbolicher Link _zeigt auf:';
+
+ LANGdeFChmod_Caption = 'Zugangsberechtigungen';
+ LANGdeFChmod_PermissionFrame = 'Berechtigungen';
+ LANGdeFChmod_FileFrame = 'Datei';
+ LANGdeFChmod_ApplyRecursivelyFor = '_Rrekursiv anlegen für';
+ LANGdeFChmod_miAllFiles = 'Alle Dateien und Verzeichnisse';
+ LANGdeFChmod_miDirectories = 'nur Verzeichnisse';
+ LANGdeFChmod_OctalLabel = '_Oktal:';
+ LANGdeFChmod_SUID = 'SUID - Setze Benutzer-ID auf Ausführung ein';
+ LANGdeFChmod_SGID = 'SGID - Setze Gruppen-ID auf Ausführung ein';
+ LANGdeFChmod_Sticky = 'Sticky bit';
+ LANGdeFChmod_RUSR = 'RUSR - Eigentümer hat Leserecht';
+ LANGdeFChmod_WUSR = 'WUSR - Eigentümer hat Schreibrecht';
+ LANGdeFChmod_XUSR = 'XUSR - Ausführung/Suchen durch Eigentümer';
+ LANGdeFChmod_RGRP = 'RGRP - Gruppe hat Leserecht';
+ LANGdeFChmod_WGRP = 'WGRP - Gruppe hat Schreibrecht';
+ LANGdeFChmod_XGRP = 'XGRP - Ausführung/Suchen durch Gruppe';
+ LANGdeFChmod_ROTH = 'ROTH - Andere haben Leserecht';
+ LANGdeFChmod_WOTH = 'WOTH - Andere haben Schreibrecht';
+ LANGdeFChmod_XOTH = 'XOTH - Ausführung/Suchen durch andere';
+ LANGdeFChmod_TextLabel = '<span weight="ultrabold">Text:</span> %s';
+ LANGdeFChmod_FileLabel = '<span weight="ultrabold">Datei:</span> %s'#10'<span weight="ultrabold">Text:</span> %s'#10 +
+ '<span weight="ultrabold">Oktal:</span> %d'#10'<span weight="ultrabold">Eigentuemer:</span> %s'#10 +
+ '<span weight="ultrabold">Gruppe:</span> %s';
+
+ LANGdeFChown_Caption = 'Eigentümer/Gruppe ändern';
+ LANGdeFChown_OwnerFrame = 'Benutzername';
+ LANGdeFChown_GroupFrame = 'Gruppenname';
+ LANGdeFChown_FileFrame = 'Datei';
+ LANGdeFChown_ApplyRecursively = '_Rekursiv zuweisen';
+
+ LANGdeFSymlink_Caption = 'Symbolischen Link erstellen';
+ LANGdeFSymlink_ExistingFilename = '_Existierenden Dateinamen (Dateiname symbolischer Link zeigt auf):';
+ LANGdeFSymlink_SymlinkFilename = '_Symbolischer Verbindungs-Dateiname:';
+
+ LANGdemnuBookmarks_Caption = '_Lesezeichen';
+ LANGdemiAddBookmark_Caption = 'Lesezeichen hinzufügen';
+ LANGdemiEditBookmarks_Caption = 'Lesezeichen bearbeiten';
+ LANGdeBookmarkPopupDelete_Caption = '_Löschen';
+ LANGdemiPreferences_Caption = '_Einstellungen...';
+ LANGdeTheCurrentDirectoryAlreadyExistsInTheBookmarksList = 'Das aktuelle Verzeichnis is bereits in der Liste der Lesezeichen enthalten';
+ LANGdeSomeOtherInstanceChanged = 'Eine andere Instanz von Tux-Commander hat die Einstellungen geändert. Möchten Sie die neuen Einstellungen übernehmen?'#10#10'Warnung: Wenn Sie Nein drücken, werden die Einstellungen dieser Instanz überschrieben'' Verlassen!';
+
+ LANGdePreferences_Caption = 'Einstellungen';
+ LANGdePreferences_TitleLabel_Caption = '<span size="x-large" weight="ultrabold">Programm Einstellungen</span>';
+ LANGdePreferences_GeneralPage = 'Allgemein';
+ LANGdePreferences_FontsPage = 'Schriften';
+ LANGdePreferences_ColorsPage = 'Farben';
+ LANGdePreferences_RowHeight = 'Zeilen_höhe:';
+ LANGdePreferences_NumHistoryItems = '_Kommandozeilen history Eintragungen:';
+ LANGdePreferences_Default = 'Vorgabe';
+ LANGdePreferences_ClearReadonlyAttribute = 'Lösche _NurLesen-Attribute wenn von CD-ROM kopiert wird';
+ LANGdePreferences_DisableMouseRenaming = 'Umbenennen mit _Maus abschalten ';
+ LANGdePreferences_ShowFiletypeIconsInList = 'Zeige _Dateitypenbilder';
+ LANGdePreferences_ExternalAppsLabel = '<span weight="ultrabold">Externe Programme</span>';
+ LANGdePreferences_Viewer = '_Betrachter:';
+ LANGdePreferences_Editor = '_Editor:';
+ LANGdePreferences_Terminal = '_Terminal:';
+ LANGdePreferences_ListFont = 'Liste der Schriften:';
+ LANGdePreferences_Change = 'Ãndern...';
+ LANGdePreferences_UseDefaultFont = 'Benutze _Standardschriftsatz';
+ LANGdePreferences_Foreground = 'Vordergrund';
+ LANGdePreferences_Background = 'Hintergrund';
+ LANGdePreferences_NormalItem = 'Normale Elemente:';
+ LANGdePreferences_SetToDefaultToUseGTKThemeColors = 'Verwende standardmäßig GTK-Thema Farben';
+ LANGdePreferences_Cursor = 'Cursor:';
+ LANGdePreferences_InactiveItem = 'Nicht aktives Element:';
+ LANGdePreferences_SelectedItem = 'Aktives Element:';
+ LANGdePreferences_LinkItem = 'Symbolische Verknüpfungen:';
+ LANGdePreferences_LinkItemHint = 'Verwende standardmäßig die Standardelementfarbe für Symbolische Verknüpfungen';
+ LANGdePreferences_DotFileItem = 'Versteckte Dateien:';
+ LANGdePreferences_DotFileItemHint = 'Verwende standardmäßig die Standardelementfarbe für versteckte Dateien';
+ LANGdePreferences_BrowseForApplication = 'Nach Programm suchen';
+ LANGdePreferences_DefaultS = 'Standard: %s';
+ LANGdePreferences_SelectFont = 'Schriftfont auswählen';
+ (*************** STRINGS ADDED TO v0.4.101 **********************************************************************************)
+ LANGdeBookmarkButton_Tooltip = 'Zeige Lesezeichen';
+ LANGdeUpButton_Tooltip = 'Gehe eine Verzeichnisebene höher';
+ LANGdeRootButton_Tooltip = 'Gehe zum Wurzelverzeichnis (/)';
+ LANGdeHomeButton_Tooltip = 'Gehe zum Benutzerverzeichnis (/home/user)';
+ LANGdeLeftEqualButton_Tooltip = 'Wechsle rechte Verzeichnistafel zum selben Verzeichnis';
+ LANGdeRightEqualButton_Tooltip = 'Wechsle linke Verzeichnistafel zum selben Verzeichnis';
+ LANGdemiShowDirectorySizes_Caption = 'Zeige V_erzeichnisgröße';
+ LANGdemiTargetSource_Caption = 'Ziel = Quelle';
+ LANGdeFileTypeDirectory = 'Verzeichnis';
+ LANGdeFileTypeFile = 'Datei';
+ LANGdeFileTypeMetafile = 'Dies ist ein allgemeines Meta-Item';
+ LANGdePreferencesPanelsPage = 'Tafel';
+ LANGdePreferencesApplicationsPage = 'Programme';
+ LANGdePreferencesExperimentalPage = 'Experimentell';
+ LANGdePreferencesSelectAllDirectoriesCheckBox_Caption = 'Wenn alles ausgewählt, auch Verzeichnisse auswählen';
+ LANGdePreferencesNewStyleAltOCheckBox_Caption = '_Neuer Stil Alt+O';
+ LANGdePreferencesNewStyleAltOCheckBox_Tooltip = 'Bleibe in demselben Verzeichnis wenn durch drücken von Strg/Alt-0 die andere Verzeichnistafel wechselt';
+ LANGdePreferencesShowFuncButtonsCheckBox_Caption = 'Zeige Funktions_tasten Schaltflächen';
+ LANGdePreferencesSizeFormatLabel_Caption = '_Größenformat:';
+ LANGdePreferencesmiSizeFormat1 = 'System';
+ LANGdePreferencesmiSizeFormat6 = 'Gruppiert';
+ LANGdePreferencesAutodetectXApp = 'Automatisch X-Programm feststellen';
+ LANGdePreferencesAlwaysRunInTerminal = 'Immer im Terminal ausführen';
+ LANGdePreferencesNeverRunInTerminal = 'Niemals im Terminal ausführen';
+ LANGdePreferencesCmdLineBehaviourLabel_Caption = 'Von der Kommandozeile _ausführen:';
+ LANGdePreferencesFeatures = 'Eigenschaften';
+ LANGdePreferencesDisableMouseRename_Tooltip = 'Sie können eine schnell Umbenenung dürchführen, indem Sie Shift+F6 drücken';
+ LANGdePreferencesDisableFileTipsCheckBox_Caption = 'Keine _Tooltips für Dateien';
+ LANGdePreferencesDisableFileTipsCheckBox_Tooltip = 'Wenn Text in einer Spalte unvollständig ist, dann keine Tooltips im Verzeichnisfeld anzeigen';
+ LANGdePreferencesShow = 'Zeige';
+ LANGdePreferencesDirsInBoldCheckBox_Caption = 'Verzeichnisse _fett';
+ LANGdePreferencesDisableDirectoryBracketsCheckBox_Caption = 'Keine eckigen _Klammer für Verzeichnisse';
+ LANGdePreferencesOctalPermissionsCheckBox_Caption = 'Zeige Rechte _oktal';
+ LANGdePreferencesOctalPermissionsCheckBox_Tooltip = 'Zeige Datei-/Verzeichnisrechte als Zahl anstelle von Text (-rw-rw-rw-)';
+ LANGdePreferencesMovement = 'Bewegung';
+ LANGdePreferencesLynxLikeMotionCheckBox_Caption = '_Lynx ähnliche Bewegung ';
+ LANGdePreferencesInsertMovesDownCheckBox_Caption = '_Einfügen bewegt nach unten';
+ LANGdePreferencesSpaceMovesDownCheckBox_Caption = '_Leertaste bewegt nach unten';
+ LANGdePreferencesViewer = 'Betrachter';
+ LANGdePreferencesCommandSC = 'Befehl:';
+ LANGdePreferencesUseInternalViewer = 'Benutze _internen Betrachter';
+ LANGdePreferencesEditor = 'Editor';
+ LANGdePreferencesTerminal = 'Terminal';
+ LANGdePreferencesExperimentalFeatures = 'Experimentelle Eigenschaften';
+ LANGdePreferencesExperimentalWarningLabel_Caption = '<span weight="ultrabold">Warning:</span> Diese Eigenschaften sind noch in der Entwicklung und könnten nicht korrekt funktionieren. Benutzung geschieht auf eigene Gefahr!';
+ LANGdePreferencesFocusRefreshCheckBox_Caption = 'Wenn Fenster Fokus erhält, Auffrischung veranlassen';
+ LANGdePreferencesFocusRefreshCheckBox_Tooltip = 'Vereichnisfeld wird im Moment sehr langsam aufgefrischt';
+ LANGdePreferencesWMCompatModeCheckBox_Caption = '_WM Kompatibilitäts modus';
+ LANGdePreferencesWMCompatModeCheckBox_Tooltip = 'Verwendung, wenn eineige Windows-Manager Probleme verursachen (z.B. IceWM kann Fenstermaximierung nicht richtig durchführen)';
+ LANGdePreferencesCompatUseLibcSystemCheckBox_Caption = 'Verwendung von Libc _system() um Programme zu starten';
+ LANGdePreferencesCompatUseLibcSystemCheckBox_Tooltip = 'Verwendung, falls das starten externen Programme ein einfieren, oder einen Absturz verursacht';
+
+ (*************** STRINGS ADDED TO v0.5.70 **********************************************************************************)
+ LANGdemiSearchCaption2 = '_Search...';
+ LANGdemiNoMounterBarCaption = 'Do_n''t show mounter bar';
+ LANGdemiShowOneMounterBarCaption = 'Show _one mounter bar';
+ LANGdemiShowTwoMounterBarCaption = 'Show _two mounter bars';
+ LANGdemnuNetworkCaption = 'N_etwork';
+ LANGdemiConnectionsCaption = '_Connections...';
+ LANGdemiOpenConnectionCaption = '_Open connection...';
+ LANGdemiQuickConnectCaption = '_Quick connect...';
+ LANGdemnuPluginsCaption = 'Pl_ugins';
+ LANGdemiTestPluginCaption = '_Test plugin...';
+ LANGdemiMounterSettingsCaption = '_Mounter Settings...';
+ LANGdemiColumnsCaption = 'P_anel Columns...';
+ LANGdemiSavePositionCaption = '_Save position';
+ LANGdemiMountCaption = '_Mount';
+ LANGdemiUmountCaption = '_Umount';
+ LANGdemiEjectCaption = '_Eject';
+ LANGdemiDuplicateTabCaption = 'Duplicate current tab';
+ LANGdemiCloseTabCaption = 'Close current tab';
+ LANGdemiCloseAllTabsCaption = 'Close all tabs';
+ LANGdeCannotDetermineDestinationEngine = 'Cannot determine destination engine. Please enter correct path and try it again.';
+ LANGdeCannotLoadFile = 'Cannot load file ''%s''. Please check the permissions.';
+ LANGdeMountPointDevice = 'Mount Point: %s'#10'Device: %s';
+ LANGdeMountSC = 'Mount:';
+ LANGdeNoPluginsFound = 'No plugins found';
+ LANGdePluginAbout = 'About...';
+ LANGdeCouldntOpenURI = 'Couldn''t open the URI specified. Please check the consistency of the resource identifier and the access permission.';
+ LANGdePluginAboutInside = 'Plugin: %s'#10#10'%s'#10'%s';
+ LANGdeAreYouSureCloseAllTabs = 'Are you sure you want to close all inactive tabs?';
+ LANGdeCouldntOpenURIArchive = 'Couldn''t open the archive. Please check consistency and access permissions.';
+ LANGdeThereIsNoModuleAvailable = 'There are no VFS modules available that can handle this connection';
+ LANGdeIgnoreError = 'Do you really want to ignore the error? The source file will be then deleted';
+ LANGdeErrorMount = 'There was an error while mounting the device ''%s'':'#10#10;
+ LANGdeErrorUmount = 'There was an error while umounting the device ''%s'':'#10#10;
+ LANGdeErrorEject = 'There was an error while ejecting the device ''%s'':'#10#10;
+
+ LANGdeMounterPrefs_Caption = 'Mounter Settings';
+ LANGdeMounterPrefs_TitleLabelCaption = 'Mounter Settings';
+ LANGdeMounterPrefs_ListViewFrameCaption = 'Mounter';
+ LANGdeMounterPrefs_MountName = 'Mount Name';
+ LANGdeMounterPrefs_MountPoint = 'Mount Point';
+ LANGdeMounterPrefs_Device = 'Device';
+ LANGdeMounterPrefs_MoveUpButtonTooltip = 'Move item up';
+ LANGdeMounterPrefs_MoveDownButtonTooltip = 'Move item down';
+ LANGdeMounterPrefs_UseFSTabDefaultsCheckBox = 'Use _fstab default items';
+ LANGdeMounterPrefs_UseFSTabDefaultsCheckBoxTooltip = 'By checking this, the mounter bar will be filled by default items found in the /etc/fstab (system mountlist file)';
+ LANGdeMounterPrefs_ToggleModeCheckBox = 'Buttons stay _down when mounted';
+ LANGdeMounterPrefs_ToggleModeCheckBoxTooltip = 'When checked, the mounter buttons will stay down if the device is mounted; another click will cause umounting them (eject in this case)';
+ LANGdeMounterPrefs_PropertiesFrameCaption = 'Mounter item properties';
+ LANGdeMounterPrefs_DisplayTextLabelCaption = 'Displayed _Text:';
+ LANGdeMounterPrefs_MountPointLabelCaption = 'Mount _Point:';
+ LANGdeMounterPrefs_MountDeviceLabelCaption = '_Device:';
+ LANGdeMounterPrefs_DeviceTypeLabelCaption = 'Device T_ype:';
+ LANGdeMounterPrefs_miLocalDiskCaption = 'Local disk';
+ LANGdeMounterPrefs_miRemovableCaption = 'Removable';
+ LANGdeMounterPrefs_miCDCaption = 'CD/DVD drive';
+ LANGdeMounterPrefs_miFloppyCaption = 'Floppy drive';
+ LANGdeMounterPrefs_miNetworkCaption = 'Network';
+ LANGdeMounterPrefs_MountCommandLabelCaption = 'Mount _Command:';
+ LANGdeMounterPrefs_UmountCommandLabelCaption = 'Umount C_ommand:';
+ LANGdeMounterPrefs_MountCommandEntryTooltip = 'Syntax: use %dev for substitution of the device and %dir for the mount point or leave blank for default mount'#10'Note: beware of interactive commands, tuxcmd could freeze!'#10'Example: smbmount %dev %dir -o username=netuser,password=somepass';
+ LANGdeMounterPrefs_UmountCommandEntryTooltip = 'Syntax: use %dev for substitution of the device and %dir for the mount point or leave blank for default umount'#10'Example: smbumount $dir';
+ LANGdeMounterPrefs_IconLabelCaption = '_Icon:';
+
+ LANGdeConnMgr_Caption = 'Open New Connection';
+ LANGdeConnMgr_ConnectButton = 'Co_nnect';
+ LANGdeConnMgr_OpenConnection = 'Open Connection';
+ LANGdeConnMgr_NameColumn = 'Name';
+ LANGdeConnMgr_URIColumn = 'URI';
+ LANGdeConnMgr_AddConnectionButtonCaption = '_Add site...';
+ LANGdeConnMgr_AddConnectionButtonTooltip = 'Add new connection';
+ LANGdeConnMgr_EditButtonCaption = '_Edit...';
+ LANGdeConnMgr_EditButtonTooltip = 'Edit selected connection';
+ LANGdeConnMgr_RemoveButtonCaption = '_Remove site';
+ LANGdeConnMgr_RemoveButtonTooltip = 'Delete selected connection';
+ LANGdeConnMgr_DoYouWantDelete = 'Do you really want to delete the connection ''%s''?';
+
+ LANGdeConnProp_FTP = 'FTP';
+ LANGdeConnProp_SFTP = 'SFTP (ssh subsystem)';
+ LANGdeConnProp_SMB = 'Windows share (SMB)';
+ LANGdeConnProp_HTTP = 'WebDAV (HTTP)';
+ LANGdeConnProp_HTTPS = 'Secure WebDAV (HTTPS)';
+ LANGdeConnProp_Other = 'Other <span style="italic">(please specify in URI)</span>';
+ LANGdeConnProp_Caption = 'Connection properties';
+ LANGdeConnProp_VFSModule = '_VFS module:';
+ LANGdeConnProp_URI = '_URI:';
+ LANGdeConnProp_URIEntryTooltip = 'Correct URI should contain service type prefix and server address';
+ LANGdeConnProp_DetailedInformations = 'Detailed informations';
+ LANGdeConnProp_Name = '_Name:';
+ LANGdeConnProp_Server = 'Ser_ver[:port]:';
+ LANGdeConnProp_Username = 'Userna_me:';
+ LANGdeConnProp_UserNameEntryTooltip = 'Leave blank for anonymous login';
+ LANGdeConnProp_Password = '_Password:';
+ LANGdeConnProp_TargetDirectory = 'Target _directory:';
+ LANGdeConnProp_ServiceType = '_Service type:';
+ LANGdeConnProp_MaskPassword = '_Mask password';
+ LANGdeConnProp_MenuItemCaption = 'Default <span style="italic">(all suitable modules)</span>';
+
+ LANGdeConnLogin_Caption = 'Authentication required';
+ LANGdeConnLogin_Login = 'Login';
+ LANGdeConnLogin_ExperimentalWarningLabelCaption = 'You must log in to access %s';
+ LANGdeConnLogin_Username = '_Username:';
+ LANGdeConnLogin_Password = '_Password:';
+ LANGdeConnLogin_AnonymousCheckButton = '_Anonymous';
+
+ LANGdeColumns_Caption = 'Panel Columns Settings';
+ LANGdeColumns_Title = 'Panel Columns Settings';
+ LANGdeColumns_MoveUpButtonTooltip = 'Move item up';
+ LANGdeColumns_MoveDownButtonTooltip = 'Move item down';
+ LANGdeColumns_TitlesLongName = 'Name';
+ LANGdeColumns_TitlesLongNameExt = 'Name + Extension';
+ LANGdeColumns_TitlesLongExt = 'Extension';
+ LANGdeColumns_TitlesLongSize = 'Size';
+ LANGdeColumns_TitlesLongDateTime = 'Date + Time';
+ LANGdeColumns_TitlesLongDate = 'Date';
+ LANGdeColumns_TitlesLongTime = 'Time';
+ LANGdeColumns_TitlesLongUser = 'User';
+ LANGdeColumns_TitlesLongGroup = 'Group';
+ LANGdeColumns_TitlesLongAttr = 'Attributes';
+ LANGdeColumns_TitlesShortName = 'Name';
+ LANGdeColumns_TitlesShortNameExt = 'Name';
+ LANGdeColumns_TitlesShortExt = 'Ext';
+ LANGdeColumns_TitlesShortSize = 'Size';
+ LANGdeColumns_TitlesShortDateTime = 'Date';
+ LANGdeColumns_TitlesShortDate = 'Date';
+ LANGdeColumns_TitlesShortTime = 'Time';
+ LANGdeColumns_TitlesShortUser = 'User';
+ LANGdeColumns_TitlesShortGroup = 'Group';
+ LANGdeColumns_TitlesShortAttr = 'Attr';
+
+ LANGdeTestPlugin_Caption = 'Test VFS Plugin';
+ LANGdeTestPlugin_Title = 'Test VFS Plugin';
+ LANGdeTestPlugin_ExperimentalWarningLabelCaption = '<span weight="ultrabold">Warning:</span> The VFS subsystem and its plugins are under heavy development and may contain bugs. Use this function under your own risk!';
+ LANGdeTestPlugin_Plugin = '_Plugin:';
+ LANGdeTestPlugin_Command = 'Co_mmand:';
+ LANGdeTestPlugin_Username = '_Username:';
+ LANGdeTestPlugin_Password = '_Password:';
+ LANGdeTestPlugin_AnonymousCheckButton = '_Anonymous login (doesn''t call VFSLogin)';
+ LANGdeTestPlugin_NoPluginsFound = 'No plugins found';
+
+ LANGdeRemoteWait_Caption = 'Operation in progress';
+ LANGdeRemoteWait_OperationInProgress = 'Operation in progress, please be patient...';
+ LANGdeRemoteWait_ItemsFound = 'Items found so far: %d';
+
+ LANGdeSearch_Bytes = 'Bytes';
+ LANGdeSearch_kB = 'kB';
+ LANGdeSearch_MB = 'MB';
+ LANGdeSearch_days = 'days';
+ LANGdeSearch_weeks = 'weeks';
+ LANGdeSearch_months = 'months';
+ LANGdeSearch_years = 'years';
+ LANGdeSearch_Caption = 'Find Files';
+ LANGdeSearch_General = 'General';
+ LANGdeSearch_Advanced = 'Advanced';
+ LANGdeSearch_SearchResults = 'Search _Results:';
+ LANGdeSearch_SearchFor = 'Search _for:';
+ LANGdeSearch_FileMaskEntryTooltip = 'Tip: Use colons (";") to specify multiple files to find';
+ LANGdeSearch_SearchIn = 'Search _in:';
+ LANGdeSearch_SearchArchivesCheckButton = 'Search _archives';
+ LANGdeSearch_FindText = 'Find _text:';
+ LANGdeSearch_FindTextEntryTooltip = 'Leave blank for no text matching'#10'Please note that we are using UTF-8 in GUI part';
+ LANGdeSearch_CaseSensitiveCheckButton = 'Cas_e sensitive';
+ LANGdeSearch_StayCurrentFSCheckButton = 'Include other files_ystems';
+ LANGdeSearch_CaseSensitiveMatchCheckButton = 'Ca_se sensitive';
+ LANGdeSearch_Size = 'Size';
+ LANGdeSearch_Date = 'Date';
+ LANGdeSearch_BiggerThan = '_Bigger than';
+ LANGdeSearch_SmallerThan = '_Smaller than';
+ LANGdeSearch_ModifiedBetweenRadioButton = '_Modified between';
+ LANGdeSearch_NotModifiedAfterRadioButton = '_Not modified after';
+ LANGdeSearch_ModifiedLastRadioButton = 'Mod_ified in the last';
+ LANGdeSearch_ModifiedNotLastRadionButton = 'No_t modified in the last';
+ LANGdeSearch_ModifiedBetweenEntry1 = '"Please use this date format:" c';
+ LANGdeSearch_ViewButtonCaption = '_View file';
+ LANGdeSearch_NewSearchButtonCaption = '_New search';
+ LANGdeSearch_GoToFileButtonCaption = '_Go to file';
+ LANGdeSearch_FeedToListboxButtonCaption = 'Feed to _listbox';
+ LANGdeSearch_StatusSC = 'Status:';
+ LANGdeSearch_Ready = 'Ready.';
+ LANGdeSearch_PreparingToSearch = 'Preparing to search.';
+ LANGdeSearch_SearchInProgress = 'Search in progress:';
+ LANGdeSearch_UserCancelled = 'User cancelled.';
+ LANGdeSearch_SearchFinished = 'Search finished';
+ LANGdeSearch_FilesFound = '%d files found';
+ LANGdeSearch_And = 'and';
+
+ (*************** STRINGS ADDED TO v0.5.82 **********************************************************************************)
+ LANGdeCloseOpenConnection = 'You''re trying to open new connection over the another active connection. By continuing, the previous connection will be closed and replaced by the new requested one.'#10#10'Do you want to continue?';
+ LANGdeDuplicateTabWarning = 'You are trying to open a new tab from a remote directory. However, engine cloning is not supported. The directory in the new tab will point to a local filesystem.';
+ LANGdeDontShowAgain = '_Don''t show this message again';
+ LANGdeSwitchOtherPanelWarning = 'You are trying to open the remote directory in the opposite panel. However, engine cloning is not supported. The target directory will not be switched.';
+ LANGdeOpenConnectionsWarning = 'There are some active connections opened in the panel. By closing the application, these connections will be disconnected.'#10#10'Do you want to continue quit?';
+ LANGdemiDisconnect_Caption = '_Disconnect';
+ LANGdeDisconnectButton_Tooltip = 'Disconnect active connection';
+ LANGdeLeaveArchiveButton_Tooltip = 'Close current archive';
+ LANGdeOpenTerminalButton_Tooltip = 'Opens a new terminal windows from the current directory';
+ LANGdeOpenTerminalButton_Caption = 'Open Te_rminal';
+ LANGdeShowTextUIDsCheckBox_Caption = 'Show text _UIDs';
+ LANGdeShowTextUIDsCheckBox_Tooltip = 'Show textual User and Group informations instead of numbers (UID/GID)';
+
+ (*************** STRINGS ADDED TO v0.5.100 **********************************************************************************)
+ LANGdemiNewTab_Caption = 'New folder _tab';
+ LANGdeFilePopupMenu_Properties = '_Properties';
+ LANGdeCommandEntry_Tooltip = 'Use %s as file/directory placeholder';
+ LANGdemiFiles_Caption = 'Files only';
+
+ (*************** STRINGS ADDED TO v0.6.31 **********************************************************************************)
+ LANGdePasswordButton_Tooltip = 'Archive requires password.'#10'Click to set';
+ LANGdeHandleRunFromArchive_Bytes = 'bytes';
+ LANGdeHandleRunFromArchive_FileTypeDesc_Unknown = '(unknown)';
+ LANGdeHandleRunFromArchive_NotAssociated = '(not associated)';
+ LANGdeHandleRunFromArchive_SelfExecutable = '(self-executable)';
+ LANGdeHandleRunFromArchive_CouldntCreateTemporaryDirectory = 'Couldn''t create temporary directory "%s": %s.'#10#10'Please check the temporary directory settings and try it again.';
+ LANGdeFRunFromVFS_Caption = 'Packed file properties';
+ LANGdeFRunFromVFS_TitleLabel = 'File Properties';
+ LANGdeFRunFromVFS_FileNameLabel = 'File name:';
+ LANGdeFRunFromVFS_FileTypeLabel = 'File type:';
+ LANGdeFRunFromVFS_SizeLabel = 'Size:';
+ LANGdeFRunFromVFS_PackedSizeLabel = 'Compressed size:';
+ LANGdeFRunFromVFS_DateLabel = 'Modify date:';
+ LANGdeFRunFromVFS_InfoLabel = 'Opening files directly from archives is not supported. By clicking the buttons below the file (all files respectively) will be extracted to a temporary location. Temporary files will be deleted when you close Tux Commander.';
+ LANGdeFRunFromVFS_OpensWithLabel = 'Open with:';
+ LANGdeFRunFromVFS_ExecuteButton = 'E_xtract and open';
+ LANGdeFRunFromVFS_ExecuteAllButton = 'Extract _all and open';
+ LANGdeFSetPassword_Caption = 'Set password';
+ LANGdeFSetPassword_Label1_Caption = 'Password required';
+ LANGdeFSetPassword_Label2_Caption = 'The archive is encrypted and requires password in order to extract the data';
+ LANGdeFSetPassword_ShowPasswordCheckButton = 'Un_mask password';
+
+
+
+(********************************************************************************************************************************)
+procedure SetTranslation;
+begin
+ LANGF2Button_Caption := LANGdeF2Button_Caption;
+ LANGF3Button_Caption := LANGdeF3Button_Caption;
+ LANGF4Button_Caption := LANGdeF4Button_Caption;
+ LANGF5Button_Caption := LANGdeF5Button_Caption;
+ LANGF6Button_Caption := LANGdeF6Button_Caption;
+ LANGF7Button_Caption := LANGdeF7Button_Caption;
+ LANGF8Button_Caption := LANGdeF8Button_Caption;
+
+ LANGmnuFile_Caption := LANGdemnuFile_Caption;
+ LANGmnuMark_Caption := LANGdemnuMark_Caption;
+ LANGmnuCommands_Caption := LANGdemnuCommands_Caption;
+ LANGmnuHelp_Caption := LANGdemnuHelp_Caption;
+ LANGmiExit_Caption := LANGdemiExit_Caption;
+ LANGmiSelectGroup_Caption := LANGdemiSelectGroup_Caption;
+ LANGmiUnselectGroup_Caption := LANGdemiUnselectGroup_Caption;
+ LANGmiSelectAll_Caption := LANGdemiSelectAll_Caption;
+ LANGmiUnselectAll_Caption := LANGdemiUnselectAll_Caption;
+ LANGmiInvertSelection_Caption := LANGdemiInvertSelection_Caption;
+ LANGmiRefresh_Caption := LANGdemiRefresh_Caption;
+ LANGmiAbout_Caption := LANGdemiAbout_Caption;
+
+ LANGColumn1_Caption := LANGdeColumn1_Caption;
+ LANGColumn2_Caption := LANGdeColumn2_Caption;
+ LANGColumn3_Caption := LANGdeColumn3_Caption;
+ LANGColumn4_Caption := LANGdeColumn4_Caption;
+ LANGColumn5_Caption := LANGdeColumn5_Caption;
+
+ LANGExpandSelection := LANGdeExpandSelection;
+ LANGShrinkSelection := LANGdeShrinkSelection;
+ LANGNoMatchesFound := LANGdeNoMatchesFound;
+ LANGNoFilesSelected := LANGdeNoFilesSelected;
+ LANGSelectedFilesDirectories := LANGdeSelectedFilesDirectories;
+ LANGDirectoryS := LANGdeDirectoryS;
+ LANGFileS := LANGdeFileS;
+ LANGDoYouReallyWantToDeleteTheS := LANGdeDoYouReallyWantToDeleteTheS;
+ LANGDoYouReallyWantToDeleteTheSS := LANGdeDoYouReallyWantToDeleteTheSS;
+ LANGCopyFiles := LANGdeCopyFiles;
+ LANGMoveRenameFiles := LANGdeMoveRenameFiles;
+ LANGCopyDFileDirectoriesTo := LANGdeCopyDFileDirectoriesTo;
+ LANGMoveRenameDFileDirectoriesTo := LANGdeMoveRenameDFileDirectoriesTo;
+ LANGCopySC := LANGdeCopySC;
+ LANGMoveRenameSC := LANGdeMoveRenameSC;
+
+ LANGQuickFind := LANGdeQuickFind;
+
+ LANGAboutString := LANGdeAboutString;
+ LANGAboutStringGnome := LANGdeAboutStringGnome;
+ LANGDiskStatFmt := LANGdeDiskStatFmt;
+ LANGDiskStatVolNameFmt := LANGdeDiskStatVolNameFmt;
+ LANGStatusLineFmt := LANGdeStatusLineFmt;
+ LANGPanelStrings[False] := LANGdePanelStrings[False];
+ LANGPanelStrings[True] := LANGdePanelStrings[True];
+ LANGDIR := LANGdeDIR;
+ LANGErrorGettingListingForSPanel := LANGdeErrorGettingListingForSPanel;
+ LANGErrorGettingListingForSPanelNoPath := LANGdeErrorGettingListingForSPanelNoPath;
+ LANGErrorCreatingNewDirectorySInSPanel := LANGdeErrorCreatingNewDirectorySInSPanel;
+ LANGErrorCreatingNewDirectorySInSPanelNoPath := LANGdeErrorCreatingNewDirectorySInSPanelNoPath;
+ LANGTheFileDirectory := LANGdeTheFileDirectory;
+ LANGCouldNotBeDeleted := LANGdeCouldNotBeDeleted;
+ LANGCouldNotBeDeletedS := LANGdeCouldNotBeDeletedS;
+ LANGUserCancelled := LANGdeUserCancelled;
+ LANGTheDirectorySIsNotEmpty := LANGdeTheDirectorySIsNotEmpty;
+ LANGCannotCopyFile := LANGdeCannotCopyFile;
+ LANGCopyError := LANGdeCopyError;
+ LANGMoveError := LANGdeMoveError;
+ LANGOverwriteS := LANGdeOverwriteS;
+ LANGWithFileS := LANGdeWithFileS;
+ LANGOvewriteSBytesS := LANGdeOvewriteSBytesS;
+ LANGTheFile := LANGdeTheFile;
+ LANGCopy := LANGdeCopy;
+ LANGMove := LANGdeMove;
+ LANGTheDirectory := LANGdeTheDirectory;
+ LANGTheSymbolicLink := LANGdeTheSymbolicLink;
+ LANGCannotMoveFile := LANGdeCannotMoveFile;
+ LANGCouldNotBeCreated := LANGdeCouldNotBeCreated;
+ LANGCouldNotBeCreatedS := LANGdeCouldNotBeCreatedS;
+ LANGFromS := LANGdeFromS;
+ LANGToS := LANGdeToS;
+ LANGCannotCopyFileToItself := LANGdeCannotCopyFileToItself;
+ LANGMemoryAllocationFailed := LANGdeMemoryAllocationFailed;
+ LANGCannotOpenSourceFile := LANGdeCannotOpenSourceFile;
+ LANGCannotOpenDestinationFile := LANGdeCannotOpenDestinationFile;
+ LANGCannotCloseDestinationFile := LANGdeCannotCloseDestinationFile;
+ LANGCannotCloseSourceFile := LANGdeCannotCloseSourceFile;
+ LANGCannotReadFromSourceFile := LANGdeCannotReadFromSourceFile;
+ LANGCannotWriteToDestinationFile := LANGdeCannotWriteToDestinationFile;
+
+ LANGUnknownException := LANGdeUnknownException;
+ LANGNoAccess := LANGdeNoAccess;
+ LANGUnknownError := LANGdeUnknownError;
+
+ LANGCreateANewDirectory := LANGdeCreateANewDirectory;
+ LANGEnterDirectoryName := LANGdeEnterDirectoryName;
+
+ LANGOverwriteQuestion := LANGdeOverwriteQuestion;
+ LANGOverwriteButton_Caption := LANGdeOverwriteButton_Caption;
+ LANGOverwriteAllButton_Caption := LANGdeOverwriteAllButton_Caption;
+ LANGSkipButton_Caption := LANGdeSkipButton_Caption;
+ LANGOverwriteAllOlderButton_Caption := LANGdeOverwriteAllOlderButton_Caption;
+ LANGSkipAllButton_Caption := LANGdeSkipAllButton_Caption;
+ LANGRenameButton_Caption := LANGdeRenameButton_Caption;
+ LANGAppendButton_Caption := LANGdeAppendButton_Caption;
+ LANGRename := LANGdeRename;
+ LANGRenameFile := LANGdeRenameFile;
+ LANGIgnoreButton_Caption := LANGdeIgnoreButton_Caption;
+
+ LANGProgress := LANGdeProgress;
+ LANGCancel := LANGdeCancel;
+ LANGDelete := LANGdeDelete;
+
+ LANGSpecifyFileType := LANGdeSpecifyFileType;
+
+ LANGRemoveDirectory := LANGdeRemoveDirectory;
+ LANGDoYouWantToDeleteItWithAllItsFilesAndSubdirectories := LANGdeDoYouWantToDeleteItWithAllItsFilesAndSubdirectories;
+ LANGRetry := LANGdeRetry;
+ LANGDeleteButton_Caption := LANGdeDeleteButton_Caption;
+ LANGAll := LANGdeAll;
+
+ LANGCopyFilesSC := LANGdeCopyFilesSC;
+ LANGAppendQuestion := LANGdeAppendQuestion;
+ LANGPreparingList := LANGdePreparingList;
+
+ LANGYouMustSelectAValidFile := LANGdeYouMustSelectAValidFile;
+ LANGmiVerifyChecksums := LANGdemiVerifyChecksums;
+ LANGVerifyChecksumsCaption := LANGdeVerifyChecksumsCaption;
+
+ LANGCheckButtonCaptionCheck := LANGdeCheckButtonCaptionCheck;
+ LANGCheckButtonCaptionStop := LANGdeCheckButtonCaptionStop;
+ LANGFileListTooltip := LANGdeFileListTooltip;
+ LANGFilenameColumnCaption := LANGdeFilenameColumnCaption;
+ LANGTheFileSYouAreTryingToOpenIsQuiteBig := LANGdeTheFileSYouAreTryingToOpenIsQuiteBig;
+ LANGAnErrorOccuredWhileInitializingMemoryBlock := LANGdeAnErrorOccuredWhileInitializingMemoryBlock;
+ LANGAnErrorOccuredWhileOpeningFileSS := LANGdeAnErrorOccuredWhileOpeningFileSS;
+ LANGAnErrorOccuredWhileReadingFileSS := LANGdeAnErrorOccuredWhileReadingFileSS;
+ LANGChecksumNotChecked := LANGdeChecksumNotChecked;
+ LANGChecksumChecking := LANGdeChecksumChecking;
+ LANGChecksumInterrupted := LANGdeChecksumInterrupted;
+ LANGChecksumDOK := LANGdeChecksumDOK;
+
+ LANGmiCreateChecksumsCaption := LANGdemiCreateChecksumsCaption;
+ LANGYouMustSelectAtLeastOneFileToCalculateChecksum := LANGdeYouMustSelectAtLeastOneFileToCalculateChecksum;
+ LANGCreateChecksumsCaption := LANGdeCreateChecksumsCaption;
+ LANGCCHKSUMPage1Text := LANGdeCCHKSUMPage1Text;
+ LANGCCHKSUMPage4Text := LANGdeCCHKSUMPage4Text;
+ LANGCCHKSUMPage6Text := LANGdeCCHKSUMPage6Text;
+ LANGCCHKSUMPage7Text := LANGdeCCHKSUMPage7Text;
+ LANGCCHKSUMPage1Title := LANGdeCCHKSUMPage1Title;
+ LANGCCHKSUMPage2Title := LANGdeCCHKSUMPage2Title;
+ LANGCCHKSUMPage3Title := LANGdeCCHKSUMPage3Title;
+ LANGCCHKSUMPage4Title := LANGdeCCHKSUMPage4Title;
+ LANGCCHKSUMPage5Title := LANGdeCCHKSUMPage5Title;
+ LANGCCHKSUMPage6Title := LANGdeCCHKSUMPage6Title;
+ LANGCCHKSUMPage7Title := LANGdeCCHKSUMPage7Title;
+ LANGCCHKSUMSFVFile := LANGdeCCHKSUMSFVFile;
+ LANGCCHKSUMMD5sumFile := LANGdeCCHKSUMMD5sumFile;
+ LANGCCHKSUMFileName := LANGdeCCHKSUMFileName;
+ LANGCCHKSUMCreateSeparateChecksumFiles := LANGdeCCHKSUMCreateSeparateChecksumFiles;
+ LANGCCHKSUMNowProcessingFileS := LANGdeCCHKSUMNowProcessingFileS;
+ LANGCCHKSUMFinishCaption := LANGdeCCHKSUMFinishCaption;
+ LANGCCHKSUMAreYouSureYouWantToAbortTheProcessing := LANGdeCCHKSUMAreYouSureYouWantToAbortTheProcessing;
+ LANGCCHKSUMAnErrorOccuredWhileOpeningFileSS := LANGdeCCHKSUMAnErrorOccuredWhileOpeningFileSS;
+ LANGCCHKSUMAnErrorOccuredWhileReadingFileSS := LANGdeCCHKSUMAnErrorOccuredWhileReadingFileSS;
+ LANGCCHKSUMAnErrorOccuredWhileWritingFileSS := LANGdeCCHKSUMAnErrorOccuredWhileWritingFileSS;
+
+ LANGAnErrorOccuredWhileWritingFileSS := LANGdeAnErrorOccuredWhileWritingFileSS;
+ LANGTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt := LANGdeTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt;
+ LANGTheTargetFileSCannotBeRemovedS := LANGdeTheTargetFileSCannotBeRemovedS;
+ LANGMergeCaption := LANGdeMergeCaption;
+ LANGPleaseInsertNextDiskOrGiveDifferentLocation := LANGdePleaseInsertNextDiskOrGiveDifferentLocation;
+ LANGMergeOfSSucceeded := LANGdeMergeOfSSucceeded;
+ LANGWarningCreatedFileFailsCRCCheck := LANGdeWarningCreatedFileFailsCRCCheck;
+ LANGMergeOfSSucceeded_NoCRCFileAvailable := LANGdeMergeOfSSucceeded_NoCRCFileAvailable;
+ LANGMergeSAndAllFilesWithAscendingNamesToTheFollowingDirectory := LANGdeMergeSAndAllFilesWithAscendingNamesToTheFollowingDirectory;
+ LANGMergeSC := LANGdeMergeSC;
+ LANGmiSplitFileCaption := LANGdemiSplitFileCaption;
+ LANGmiMergeFilesCaption := LANGdemiMergeFilesCaption;
+
+ LANGSplitTheFileSToDirectory := LANGdeSplitTheFileSToDirectory;
+ LANGSplitSC := LANGdeSplitSC;
+ LANGSplitFile := LANGdeSplitFile;
+ LANGBytesPerFile := LANGdeBytesPerFile;
+ LANGAutomatic := LANGdeAutomatic;
+ LANGDeleteFilesOnTargetDisk := LANGdeDeleteFilesOnTargetDisk;
+ LANGSplitCaption := LANGdeSplitCaption;
+ LANGCannotOpenFileS := LANGdeCannotOpenFileS;
+ LANGCannotSplitTheFileToMoreThan999Parts := LANGdeCannotSplitTheFileToMoreThan999Parts;
+ LANGThereAreSomeFilesInTheTargetDirectorySDoYouWantToDeleteThem := LANGdeThereAreSomeFilesInTheTargetDirectorySDoYouWantToDeleteThem;
+ LANGThereAreDFilesInTheTargetDirectoryDoYouWantToDeleteThem := LANGdeThereAreDFilesInTheTargetDirectoryDoYouWantToDeleteThem;
+ LANGAnErrorOccuredWhileOperationS := LANGdeAnErrorOccuredWhileOperationS;
+ LANGSplitOfSSucceeded := LANGdeSplitOfSSucceeded;
+ LANGSplitOfSFailed := LANGdeSplitOfSFailed;
+
+ LANGmnuShow_Caption := LANGdemnuShow_Caption;
+ LANGmiShowDotFiles_Caption := LANGdemiShowDotFiles_Caption;
+ LANGTheFileYouAreTryingToOpenIsQuiteBig := LANGdeTheFileYouAreTryingToOpenIsQuiteBig;
+ LANGCannotExecuteSPleaseCheckTheConfiguration := LANGdeCannotExecuteSPleaseCheckTheConfiguration;
+ LANGEdit := LANGdeEdit;
+ LANGEnterFilenameToEdit := LANGdeEnterFilenameToEdit;
+
+ LANGmnuSettings_Caption := LANGdemnuSettings_Caption;
+ LANGmiFileTypes_Caption := LANGdemiFileTypes_Caption;
+ LANGThereIsNoApplicationAssociatedWithS := LANGdeThereIsNoApplicationAssociatedWithS;
+ LANGErrorExecutingCommand := LANGdeErrorExecutingCommand;
+ LANGEditFileTypesCaption := LANGdeEditFileTypesCaption;
+ LANGTitleLabel_Caption := LANGdeTitleLabel_Caption;
+ LANGExtensionsColumn := LANGdeExtensionsColumn;
+ LANGDescriptionColumn := LANGdeDescriptionColumn;
+ LANGFileTypesList := LANGdeFileTypesList;
+ LANGActionName := LANGdeActionName;
+ LANGCommand := LANGdeCommand;
+ LANGSetDefaultActionButton_Caption := LANGdeSetDefaultActionButton_Caption;
+ LANGRunInTerminalCheckBox_Caption := LANGdeRunInTerminalCheckBox_Caption;
+ LANGAutodetectCheckBox_Caption := LANGdeAutodetectCheckBox_Caption;
+ LANGBrowseButton_Caption := LANGdeBrowseButton_Caption;
+ LANGCommandLabel_Caption := LANGdeCommandLabel_Caption;
+ LANGDescriptionLabel_Caption := LANGdeDescriptionLabel_Caption;
+ LANGFNameExtLabel_Caption := LANGdeFNameExtLabel_Caption;
+ LANGNotebookPageExtensions := LANGdeNotebookPageExtensions;
+ LANGNotebookPageActions := LANGdeNotebookPageActions;
+ LANGDefault := LANGdeDefault;
+ LANGCannotSaveFileTypeAssociationsBecauseOtherProcess := LANGdeCannotSaveFileTypeAssociationsBecauseOtherProcess;
+
+ LANGDefaultColor := LANGdeDefaultColor;
+ LANGIcon := LANGdeIcon;
+ LANGBrowseForIcon := LANGdeBrowseForIcon;
+ LANGSelectFileTypeColor := LANGdeSelectFileTypeColor;
+ LANGColor := LANGdeColor;
+
+ LANGmiChangePermissions_Caption := LANGdemiChangePermissions_Caption;
+ LANGmiChangeOwner_Caption := LANGdemiChangeOwner_Caption;
+ LANGmiCreateSymlink_Caption := LANGdemiCreateSymlink_Caption;
+ LANGmiEditSymlink_Caption := LANGdemiEditSymlink_Caption;
+ LANGChmodProgress := LANGdeChmodProgress;
+ LANGChownProgress := LANGdeChownProgress;
+ LANGYouMustSelectAValidSymbolicLink := LANGdeYouMustSelectAValidSymbolicLink;
+ LANGPopupRunS := LANGdePopupRunS;
+ LANGPopupOpenS := LANGdePopupOpenS;
+ LANGPopupGoUp := LANGdePopupGoUp;
+ LANGPopupOpenWithS := LANGdePopupOpenWithS;
+ LANGPopupDefault := LANGdePopupDefault;
+ LANGPopupOpenWith := LANGdePopupOpenWith;
+ LANGPopupViewFile := LANGdePopupViewFile;
+ LANGPopupEditFile := LANGdePopupEditFile;
+ LANGPopupMakeSymlink := LANGdePopupMakeSymlink;
+ LANGPopupRename := LANGdePopupRename;
+ LANGPopupDelete := LANGdePopupDelete;
+ LANGDialogChangePermissions := LANGdeDialogChangePermissions;
+ LANGCouldNotBeChmoddedS := LANGdeCouldNotBeChmoddedS;
+ LANGDialogChangeOwner := LANGdeDialogChangeOwner;
+ LANGCouldNotBeChownedS := LANGdeCouldNotBeChownedS;
+ LANGDialogMakeSymlink := LANGdeDialogMakeSymlink;
+ LANGDialogEditSymlink := LANGdeDialogEditSymlink;
+ LANGFEditSymlink_Caption := LANGdeFEditSymlink_Caption;
+ LANGFEditSymlink_SymbolicLinkFilename := LANGdeFEditSymlink_SymbolicLinkFilename;
+ LANGFEditSymlink_SymbolicLinkPointsTo := LANGdeFEditSymlink_SymbolicLinkPointsTo;
+
+ LANGFChmod_Caption := LANGdeFChmod_Caption;
+ LANGFChmod_PermissionFrame := LANGdeFChmod_PermissionFrame;
+ LANGFChmod_FileFrame := LANGdeFChmod_FileFrame;
+ LANGFChmod_ApplyRecursivelyFor := LANGdeFChmod_ApplyRecursivelyFor;
+ LANGFChmod_miAllFiles := LANGdeFChmod_miAllFiles;
+ LANGFChmod_miDirectories := LANGdeFChmod_miDirectories;
+ LANGFChmod_OctalLabel := LANGdeFChmod_OctalLabel;
+ LANGFChmod_SUID := LANGdeFChmod_SUID;
+ LANGFChmod_SGID := LANGdeFChmod_SGID;
+ LANGFChmod_Sticky := LANGdeFChmod_Sticky;
+ LANGFChmod_RUSR := LANGdeFChmod_RUSR;
+ LANGFChmod_WUSR := LANGdeFChmod_WUSR;
+ LANGFChmod_XUSR := LANGdeFChmod_XUSR;
+ LANGFChmod_RGRP := LANGdeFChmod_RGRP;
+ LANGFChmod_WGRP := LANGdeFChmod_WGRP;
+ LANGFChmod_XGRP := LANGdeFChmod_XGRP;
+ LANGFChmod_ROTH := LANGdeFChmod_ROTH;
+ LANGFChmod_WOTH := LANGdeFChmod_WOTH;
+ LANGFChmod_XOTH := LANGdeFChmod_XOTH;
+ LANGFChmod_TextLabel := LANGdeFChmod_TextLabel;
+ LANGFChmod_FileLabel := LANGdeFChmod_FileLabel;
+ LANGFChown_Caption := LANGdeFChown_Caption;
+ LANGFChown_OwnerFrame := LANGdeFChown_OwnerFrame;
+ LANGFChown_GroupFrame := LANGdeFChown_GroupFrame;
+ LANGFChown_FileFrame := LANGdeFChown_FileFrame;
+ LANGFChown_ApplyRecursively := LANGdeFChown_ApplyRecursively;
+
+ LANGFSymlink_Caption := LANGdeFSymlink_Caption;
+ LANGFSymlink_ExistingFilename := LANGdeFSymlink_ExistingFilename;
+ LANGFSymlink_SymlinkFilename := LANGdeFSymlink_SymlinkFilename;
+
+ LANGmnuBookmarks_Caption := LANGdemnuBookmarks_Caption;
+ LANGmiAddBookmark_Caption := LANGdemiAddBookmark_Caption;
+ LANGmiEditBookmarks_Caption := LANGdemiEditBookmarks_Caption;
+ LANGBookmarkPopupDelete_Caption := LANGdeBookmarkPopupDelete_Caption;
+ LANGmiPreferences_Caption := LANGdemiPreferences_Caption;
+ LANGTheCurrentDirectoryAlreadyExistsInTheBookmarksList := LANGdeTheCurrentDirectoryAlreadyExistsInTheBookmarksList;
+ LANGSomeOtherInstanceChanged := LANGdeSomeOtherInstanceChanged;
+
+ LANGPreferences_Caption := LANGdePreferences_Caption;
+ LANGPreferences_TitleLabel_Caption := LANGdePreferences_TitleLabel_Caption;
+ LANGPreferences_GeneralPage := LANGdePreferences_GeneralPage;
+ LANGPreferences_FontsPage := LANGdePreferences_FontsPage;
+ LANGPreferences_ColorsPage := LANGdePreferences_ColorsPage;
+ LANGPreferences_RowHeight := LANGdePreferences_RowHeight;
+ LANGPreferences_NumHistoryItems := LANGdePreferences_NumHistoryItems;
+ LANGPreferences_Default := LANGdePreferences_Default;
+ LANGPreferences_ClearReadonlyAttribute := LANGdePreferences_ClearReadonlyAttribute;
+ LANGPreferences_DisableMouseRenaming := LANGdePreferences_DisableMouseRenaming;
+ LANGPreferences_ShowFiletypeIconsInList := LANGdePreferences_ShowFiletypeIconsInList;
+ LANGPreferences_ExternalAppsLabel := LANGdePreferences_ExternalAppsLabel;
+ LANGPreferences_Viewer := LANGdePreferences_Viewer;
+ LANGPreferences_Editor := LANGdePreferences_Editor;
+ LANGPreferences_Terminal := LANGdePreferences_Terminal;
+ LANGPreferences_ListFont := LANGdePreferences_ListFont;
+ LANGPreferences_Change := LANGdePreferences_Change;
+ LANGPreferences_UseDefaultFont := LANGdePreferences_UseDefaultFont;
+ LANGPreferences_Foreground := LANGdePreferences_Foreground;
+ LANGPreferences_Background := LANGdePreferences_Background;
+ LANGPreferences_NormalItem := LANGdePreferences_NormalItem;
+ LANGPreferences_SetToDefaultToUseGTKThemeColors := LANGdePreferences_SetToDefaultToUseGTKThemeColors;
+ LANGPreferences_Cursor := LANGdePreferences_Cursor;
+ LANGPreferences_InactiveItem := LANGdePreferences_InactiveItem;
+ LANGPreferences_SelectedItem := LANGdePreferences_SelectedItem;
+ LANGPreferences_LinkItem := LANGdePreferences_LinkItem;
+ LANGPreferences_LinkItemHint := LANGdePreferences_LinkItemHint;
+ LANGPreferences_DotFileItem := LANGdePreferences_DotFileItem;
+ LANGPreferences_DotFileItemHint := LANGdePreferences_DotFileItemHint;
+ LANGPreferences_BrowseForApplication := LANGdePreferences_BrowseForApplication;
+ LANGPreferences_DefaultS := LANGdePreferences_DefaultS;
+ LANGPreferences_SelectFont := LANGdePreferences_SelectFont;
+
+ LANGBookmarkButton_Tooltip := LANGdeBookmarkButton_Tooltip;
+ LANGUpButton_Tooltip := LANGdeUpButton_Tooltip;
+ LANGRootButton_Tooltip := LANGdeRootButton_Tooltip;
+ LANGHomeButton_Tooltip := LANGdeHomeButton_Tooltip;
+ LANGLeftEqualButton_Tooltip := LANGdeLeftEqualButton_Tooltip;
+ LANGRightEqualButton_Tooltip := LANGdeRightEqualButton_Tooltip;
+ LANGmiShowDirectorySizes_Caption := LANGdemiShowDirectorySizes_Caption;
+ LANGmiTargetSource_Caption := LANGdemiTargetSource_Caption;
+ LANGFileTypeDirectory := LANGdeFileTypeDirectory;
+ LANGFileTypeFile := LANGdeFileTypeFile;
+ LANGFileTypeMetafile := LANGdeFileTypeMetafile;
+ LANGPreferencesPanelsPage := LANGdePreferencesPanelsPage;
+ LANGPreferencesApplicationsPage := LANGdePreferencesApplicationsPage;
+ LANGPreferencesExperimentalPage := LANGdePreferencesExperimentalPage;
+ LANGPreferencesSelectAllDirectoriesCheckBox_Caption := LANGdePreferencesSelectAllDirectoriesCheckBox_Caption;
+ LANGPreferencesNewStyleAltOCheckBox_Caption := LANGdePreferencesNewStyleAltOCheckBox_Caption;
+ LANGPreferencesNewStyleAltOCheckBox_Tooltip := LANGdePreferencesNewStyleAltOCheckBox_Tooltip;
+ LANGPreferencesShowFuncButtonsCheckBox_Caption := LANGdePreferencesShowFuncButtonsCheckBox_Caption;
+ LANGPreferencesSizeFormatLabel_Caption := LANGdePreferencesSizeFormatLabel_Caption;
+ LANGPreferencesmiSizeFormat1 := LANGdePreferencesmiSizeFormat1;
+ LANGPreferencesmiSizeFormat6 := LANGdePreferencesmiSizeFormat6;
+ LANGPreferencesAutodetectXApp := LANGdePreferencesAutodetectXApp;
+ LANGPreferencesAlwaysRunInTerminal := LANGdePreferencesAlwaysRunInTerminal;
+ LANGPreferencesNeverRunInTerminal := LANGdePreferencesNeverRunInTerminal;
+ LANGPreferencesCmdLineBehaviourLabel_Caption := LANGdePreferencesCmdLineBehaviourLabel_Caption;
+ LANGPreferencesFeatures := LANGdePreferencesFeatures;
+ LANGPreferencesDisableMouseRename_Tooltip := LANGdePreferencesDisableMouseRename_Tooltip;
+ LANGPreferencesDisableFileTipsCheckBox_Caption := LANGdePreferencesDisableFileTipsCheckBox_Caption;
+ LANGPreferencesDisableFileTipsCheckBox_Tooltip := LANGdePreferencesDisableFileTipsCheckBox_Tooltip;
+ LANGPreferencesShow := LANGdePreferencesShow;
+ LANGPreferencesDirsInBoldCheckBox_Caption := LANGdePreferencesDirsInBoldCheckBox_Caption;
+ LANGPreferencesDisableDirectoryBracketsCheckBox_Caption := LANGdePreferencesDisableDirectoryBracketsCheckBox_Caption;
+ LANGPreferencesOctalPermissionsCheckBox_Caption := LANGdePreferencesOctalPermissionsCheckBox_Caption;
+ LANGPreferencesOctalPermissionsCheckBox_Tooltip := LANGdePreferencesOctalPermissionsCheckBox_Tooltip;
+ LANGPreferencesMovement := LANGdePreferencesMovement;
+ LANGPreferencesLynxLikeMotionCheckBox_Caption := LANGdePreferencesLynxLikeMotionCheckBox_Caption;
+ LANGPreferencesInsertMovesDownCheckBox_Caption := LANGdePreferencesInsertMovesDownCheckBox_Caption;
+ LANGPreferencesSpaceMovesDownCheckBox_Caption := LANGdePreferencesSpaceMovesDownCheckBox_Caption;
+ LANGPreferencesViewer := LANGdePreferencesViewer;
+ LANGPreferencesCommandSC := LANGdePreferencesCommandSC;
+ LANGPreferencesUseInternalViewer := LANGdePreferencesUseInternalViewer;
+ LANGPreferencesEditor := LANGdePreferencesEditor;
+ LANGPreferencesTerminal := LANGdePreferencesTerminal;
+ LANGPreferencesExperimentalFeatures := LANGdePreferencesExperimentalFeatures;
+ LANGPreferencesExperimentalWarningLabel_Caption := LANGdePreferencesExperimentalWarningLabel_Caption;
+ LANGPreferencesFocusRefreshCheckBox_Caption := LANGdePreferencesFocusRefreshCheckBox_Caption;
+ LANGPreferencesFocusRefreshCheckBox_Tooltip := LANGdePreferencesFocusRefreshCheckBox_Tooltip;
+ LANGPreferencesWMCompatModeCheckBox_Caption := LANGdePreferencesWMCompatModeCheckBox_Caption;
+ LANGPreferencesWMCompatModeCheckBox_Tooltip := LANGdePreferencesWMCompatModeCheckBox_Tooltip;
+ LANGPreferencesCompatUseLibcSystemCheckBox_Caption := LANGdePreferencesCompatUseLibcSystemCheckBox_Caption;
+ LANGPreferencesCompatUseLibcSystemCheckBox_Tooltip := LANGdePreferencesCompatUseLibcSystemCheckBox_Tooltip;
+
+ LANGmiSearchCaption2 := LANGdemiSearchCaption2;
+ LANGmiNoMounterBarCaption := LANGdemiNoMounterBarCaption;
+ LANGmiShowOneMounterBarCaption := LANGdemiShowOneMounterBarCaption;
+ LANGmiShowTwoMounterBarCaption := LANGdemiShowTwoMounterBarCaption;
+ LANGmnuNetworkCaption := LANGdemnuNetworkCaption;
+ LANGmiConnectionsCaption := LANGdemiConnectionsCaption;
+ LANGmiOpenConnectionCaption := LANGdemiOpenConnectionCaption;
+ LANGmiQuickConnectCaption := LANGdemiQuickConnectCaption;
+ LANGmnuPluginsCaption := LANGdemnuPluginsCaption;
+ LANGmiTestPluginCaption := LANGdemiTestPluginCaption;
+ LANGmiMounterSettingsCaption := LANGdemiMounterSettingsCaption;
+ LANGmiColumnsCaption := LANGdemiColumnsCaption;
+ LANGmiSavePositionCaption := LANGdemiSavePositionCaption;
+ LANGmiMountCaption := LANGdemiMountCaption;
+ LANGmiUmountCaption := LANGdemiUmountCaption;
+ LANGmiEjectCaption := LANGdemiEjectCaption;
+ LANGmiDuplicateTabCaption := LANGdemiDuplicateTabCaption;
+ LANGmiCloseTabCaption := LANGdemiCloseTabCaption;
+ LANGmiCloseAllTabsCaption := LANGdemiCloseAllTabsCaption;
+ LANGCannotDetermineDestinationEngine := LANGdeCannotDetermineDestinationEngine;
+ LANGCannotLoadFile := LANGdeCannotLoadFile;
+ LANGMountPointDevice := LANGdeMountPointDevice;
+ LANGMountSC := LANGdeMountSC;
+ LANGNoPluginsFound := LANGdeNoPluginsFound;
+ LANGPluginAbout := LANGdePluginAbout;
+ LANGCouldntOpenURI := LANGdeCouldntOpenURI;
+ LANGPluginAboutInside := LANGdePluginAboutInside;
+ LANGAreYouSureCloseAllTabs := LANGdeAreYouSureCloseAllTabs;
+ LANGCouldntOpenURIArchive := LANGdeCouldntOpenURIArchive;
+ LANGThereIsNoModuleAvailable := LANGdeThereIsNoModuleAvailable;
+ LANGIgnoreError := LANGdeIgnoreError;
+ LANGErrorMount := LANGdeErrorMount;
+ LANGErrorUmount := LANGdeErrorUmount;
+ LANGErrorEject := LANGdeErrorEject;
+
+ LANGMounterPrefs_Caption := LANGdeMounterPrefs_Caption;
+ LANGMounterPrefs_TitleLabelCaption := LANGdeMounterPrefs_TitleLabelCaption;
+ LANGMounterPrefs_ListViewFrameCaption := LANGdeMounterPrefs_ListViewFrameCaption;
+ LANGMounterPrefs_MountName := LANGdeMounterPrefs_MountName;
+ LANGMounterPrefs_MountPoint := LANGdeMounterPrefs_MountPoint;
+ LANGMounterPrefs_Device := LANGdeMounterPrefs_Device;
+ LANGMounterPrefs_MoveUpButtonTooltip := LANGdeMounterPrefs_MoveUpButtonTooltip;
+ LANGMounterPrefs_MoveDownButtonTooltip := LANGdeMounterPrefs_MoveDownButtonTooltip;
+ LANGMounterPrefs_UseFSTabDefaultsCheckBox := LANGdeMounterPrefs_UseFSTabDefaultsCheckBox;
+ LANGMounterPrefs_UseFSTabDefaultsCheckBoxTooltip := LANGdeMounterPrefs_UseFSTabDefaultsCheckBoxTooltip;
+ LANGMounterPrefs_ToggleModeCheckBox := LANGdeMounterPrefs_ToggleModeCheckBox;
+ LANGMounterPrefs_ToggleModeCheckBoxTooltip := LANGdeMounterPrefs_ToggleModeCheckBoxTooltip;
+ LANGMounterPrefs_PropertiesFrameCaption := LANGdeMounterPrefs_PropertiesFrameCaption;
+ LANGMounterPrefs_DisplayTextLabelCaption := LANGdeMounterPrefs_DisplayTextLabelCaption;
+ LANGMounterPrefs_MountPointLabelCaption := LANGdeMounterPrefs_MountPointLabelCaption;
+ LANGMounterPrefs_MountDeviceLabelCaption := LANGdeMounterPrefs_MountDeviceLabelCaption;
+ LANGMounterPrefs_DeviceTypeLabelCaption := LANGdeMounterPrefs_DeviceTypeLabelCaption;
+ LANGMounterPrefs_miLocalDiskCaption := LANGdeMounterPrefs_miLocalDiskCaption;
+ LANGMounterPrefs_miRemovableCaption := LANGdeMounterPrefs_miRemovableCaption;
+ LANGMounterPrefs_miCDCaption := LANGdeMounterPrefs_miCDCaption;
+ LANGMounterPrefs_miFloppyCaption := LANGdeMounterPrefs_miFloppyCaption;
+ LANGMounterPrefs_miNetworkCaption := LANGdeMounterPrefs_miNetworkCaption;
+ LANGMounterPrefs_MountCommandLabelCaption := LANGdeMounterPrefs_MountCommandLabelCaption;
+ LANGMounterPrefs_UmountCommandLabelCaption := LANGdeMounterPrefs_UmountCommandLabelCaption;
+ LANGMounterPrefs_MountCommandEntryTooltip := LANGdeMounterPrefs_MountCommandEntryTooltip;
+ LANGMounterPrefs_UmountCommandEntryTooltip := LANGdeMounterPrefs_UmountCommandEntryTooltip;
+ LANGMounterPrefs_IconLabelCaption := LANGdeMounterPrefs_IconLabelCaption;
+
+ LANGConnMgr_Caption := LANGdeConnMgr_Caption;
+ LANGConnMgr_ConnectButton := LANGdeConnMgr_ConnectButton;
+ LANGConnMgr_OpenConnection := LANGdeConnMgr_OpenConnection;
+ LANGConnMgr_NameColumn := LANGdeConnMgr_NameColumn;
+ LANGConnMgr_URIColumn := LANGdeConnMgr_URIColumn;
+ LANGConnMgr_AddConnectionButtonCaption := LANGdeConnMgr_AddConnectionButtonCaption;
+ LANGConnMgr_AddConnectionButtonTooltip := LANGdeConnMgr_AddConnectionButtonTooltip;
+ LANGConnMgr_EditButtonCaption := LANGdeConnMgr_EditButtonCaption;
+ LANGConnMgr_EditButtonTooltip := LANGdeConnMgr_EditButtonTooltip;
+ LANGConnMgr_RemoveButtonCaption := LANGdeConnMgr_RemoveButtonCaption;
+ LANGConnMgr_RemoveButtonTooltip := LANGdeConnMgr_RemoveButtonTooltip;
+ LANGConnMgr_DoYouWantDelete := LANGdeConnMgr_DoYouWantDelete;
+
+ LANGConnProp_FTP := LANGdeConnProp_FTP;
+ LANGConnProp_SFTP := LANGdeConnProp_SFTP;
+ LANGConnProp_SMB := LANGdeConnProp_SMB;
+ LANGConnProp_HTTP := LANGdeConnProp_HTTP;
+ LANGConnProp_HTTPS := LANGdeConnProp_HTTPS;
+ LANGConnProp_Other := LANGdeConnProp_Other;
+ LANGConnProp_Caption := LANGdeConnProp_Caption;
+ LANGConnProp_VFSModule := LANGdeConnProp_VFSModule;
+ LANGConnProp_URI := LANGdeConnProp_URI;
+ LANGConnProp_URIEntryTooltip := LANGdeConnProp_URIEntryTooltip;
+ LANGConnProp_DetailedInformations := LANGdeConnProp_DetailedInformations;
+ LANGConnProp_Name := LANGdeConnProp_Name;
+ LANGConnProp_Server := LANGdeConnProp_Server;
+ LANGConnProp_Username := LANGdeConnProp_Username;
+ LANGConnProp_UserNameEntryTooltip := LANGdeConnProp_UserNameEntryTooltip;
+ LANGConnProp_Password := LANGdeConnProp_Password;
+ LANGConnProp_TargetDirectory := LANGdeConnProp_TargetDirectory;
+ LANGConnProp_ServiceType := LANGdeConnProp_ServiceType;
+ LANGConnProp_MaskPassword := LANGdeConnProp_MaskPassword;
+ LANGConnProp_MenuItemCaption := LANGdeConnProp_MenuItemCaption;
+
+ LANGConnLogin_Caption := LANGdeConnLogin_Caption;
+ LANGConnLogin_Login := LANGdeConnLogin_Login;
+ LANGConnLogin_ExperimentalWarningLabelCaption := LANGdeConnLogin_ExperimentalWarningLabelCaption;
+ LANGConnLogin_Username := LANGdeConnLogin_Username;
+ LANGConnLogin_Password := LANGdeConnLogin_Password;
+ LANGConnLogin_AnonymousCheckButton := LANGdeConnLogin_AnonymousCheckButton;
+
+ LANGColumns_Caption := LANGdeColumns_Caption;
+ LANGColumns_Title := LANGdeColumns_Title;
+ LANGColumns_MoveUpButtonTooltip := LANGdeColumns_MoveUpButtonTooltip;
+ LANGColumns_MoveDownButtonTooltip := LANGdeColumns_MoveDownButtonTooltip;
+ LANGColumns_TitlesLongName := LANGdeColumns_TitlesLongName;
+ LANGColumns_TitlesLongNameExt := LANGdeColumns_TitlesLongNameExt;
+ LANGColumns_TitlesLongExt := LANGdeColumns_TitlesLongExt;
+ LANGColumns_TitlesLongSize := LANGdeColumns_TitlesLongSize;
+ LANGColumns_TitlesLongDateTime := LANGdeColumns_TitlesLongDateTime;
+ LANGColumns_TitlesLongDate := LANGdeColumns_TitlesLongDate;
+ LANGColumns_TitlesLongTime := LANGdeColumns_TitlesLongTime;
+ LANGColumns_TitlesLongUser := LANGdeColumns_TitlesLongUser;
+ LANGColumns_TitlesLongGroup := LANGdeColumns_TitlesLongGroup;
+ LANGColumns_TitlesLongAttr := LANGdeColumns_TitlesLongAttr;
+ LANGColumns_TitlesShortName := LANGdeColumns_TitlesShortName;
+ LANGColumns_TitlesShortNameExt := LANGdeColumns_TitlesShortNameExt;
+ LANGColumns_TitlesShortExt := LANGdeColumns_TitlesShortExt;
+ LANGColumns_TitlesShortSize := LANGdeColumns_TitlesShortSize;
+ LANGColumns_TitlesShortDateTime := LANGdeColumns_TitlesShortDateTime;
+ LANGColumns_TitlesShortDate := LANGdeColumns_TitlesShortDate;
+ LANGColumns_TitlesShortTime := LANGdeColumns_TitlesShortTime;
+ LANGColumns_TitlesShortUser := LANGdeColumns_TitlesShortUser;
+ LANGColumns_TitlesShortGroup := LANGdeColumns_TitlesShortGroup;
+ LANGColumns_TitlesShortAttr := LANGdeColumns_TitlesShortAttr;
+
+ LANGTestPlugin_Caption := LANGdeTestPlugin_Caption;
+ LANGTestPlugin_Title := LANGdeTestPlugin_Title;
+ LANGTestPlugin_ExperimentalWarningLabelCaption := LANGdeTestPlugin_ExperimentalWarningLabelCaption;
+ LANGTestPlugin_Plugin := LANGdeTestPlugin_Plugin;
+ LANGTestPlugin_Command := LANGdeTestPlugin_Command;
+ LANGTestPlugin_Username := LANGdeTestPlugin_Username;
+ LANGTestPlugin_Password := LANGdeTestPlugin_Password;
+ LANGTestPlugin_AnonymousCheckButton := LANGdeTestPlugin_AnonymousCheckButton;
+ LANGTestPlugin_NoPluginsFound := LANGdeTestPlugin_NoPluginsFound;
+
+ LANGRemoteWait_Caption := LANGdeRemoteWait_Caption;
+ LANGRemoteWait_OperationInProgress := LANGdeRemoteWait_OperationInProgress;
+ LANGRemoteWait_ItemsFound := LANGdeRemoteWait_ItemsFound;
+
+ LANGSearch_Bytes := LANGdeSearch_Bytes;
+ LANGSearch_kB := LANGdeSearch_kB;
+ LANGSearch_MB := LANGdeSearch_MB;
+ LANGSearch_days := LANGdeSearch_days;
+ LANGSearch_weeks := LANGdeSearch_weeks;
+ LANGSearch_months := LANGdeSearch_months;
+ LANGSearch_years := LANGdeSearch_years;
+ LANGSearch_Caption := LANGdeSearch_Caption;
+ LANGSearch_General := LANGdeSearch_General;
+ LANGSearch_Advanced := LANGdeSearch_Advanced;
+ LANGSearch_SearchResults := LANGdeSearch_SearchResults;
+ LANGSearch_SearchFor := LANGdeSearch_SearchFor;
+ LANGSearch_FileMaskEntryTooltip := LANGdeSearch_FileMaskEntryTooltip;
+ LANGSearch_SearchIn := LANGdeSearch_SearchIn;
+ LANGSearch_SearchArchivesCheckButton := LANGdeSearch_SearchArchivesCheckButton;
+ LANGSearch_FindText := LANGdeSearch_FindText;
+ LANGSearch_FindTextEntryTooltip := LANGdeSearch_FindTextEntryTooltip;
+ LANGSearch_CaseSensitiveCheckButton := LANGdeSearch_CaseSensitiveCheckButton;
+ LANGSearch_StayCurrentFSCheckButton := LANGdeSearch_StayCurrentFSCheckButton;
+ LANGSearch_CaseSensitiveMatchCheckButton := LANGdeSearch_CaseSensitiveMatchCheckButton;
+ LANGSearch_Size := LANGdeSearch_Size;
+ LANGSearch_Date := LANGdeSearch_Date;
+ LANGSearch_BiggerThan := LANGdeSearch_BiggerThan;
+ LANGSearch_SmallerThan := LANGdeSearch_SmallerThan;
+ LANGSearch_ModifiedBetweenRadioButton := LANGdeSearch_ModifiedBetweenRadioButton;
+ LANGSearch_NotModifiedAfterRadioButton := LANGdeSearch_NotModifiedAfterRadioButton;
+ LANGSearch_ModifiedLastRadioButton := LANGdeSearch_ModifiedLastRadioButton;
+ LANGSearch_ModifiedNotLastRadionButton := LANGdeSearch_ModifiedNotLastRadionButton;
+ LANGSearch_ModifiedBetweenEntry1 := LANGdeSearch_ModifiedBetweenEntry1;
+ LANGSearch_ViewButtonCaption := LANGdeSearch_ViewButtonCaption;
+ LANGSearch_NewSearchButtonCaption := LANGdeSearch_NewSearchButtonCaption;
+ LANGSearch_GoToFileButtonCaption := LANGdeSearch_GoToFileButtonCaption;
+ LANGSearch_FeedToListboxButtonCaption := LANGdeSearch_FeedToListboxButtonCaption;
+ LANGSearch_StatusSC := LANGdeSearch_StatusSC;
+ LANGSearch_Ready := LANGdeSearch_Ready;
+ LANGSearch_PreparingToSearch := LANGdeSearch_PreparingToSearch;
+ LANGSearch_SearchInProgress := LANGdeSearch_SearchInProgress;
+ LANGSearch_UserCancelled := LANGdeSearch_UserCancelled;
+ LANGSearch_SearchFinished := LANGdeSearch_SearchFinished;
+ LANGSearch_FilesFound := LANGdeSearch_FilesFound;
+ LANGSearch_And := LANGdeSearch_And;
+
+ LANGCloseOpenConnection := LANGdeCloseOpenConnection;
+ LANGDuplicateTabWarning := LANGdeDuplicateTabWarning;
+ LANGDontShowAgain := LANGdeDontShowAgain;
+ LANGSwitchOtherPanelWarning := LANGdeSwitchOtherPanelWarning;
+ LANGOpenConnectionsWarning := LANGdeOpenConnectionsWarning;
+ LANGmiDisconnect_Caption := LANGdemiDisconnect_Caption;
+ LANGDisconnectButton_Tooltip := LANGdeDisconnectButton_Tooltip;
+ LANGLeaveArchiveButton_Tooltip := LANGdeLeaveArchiveButton_Tooltip;
+ LANGOpenTerminalButton_Tooltip := LANGdeOpenTerminalButton_Tooltip;
+ LANGOpenTerminalButton_Caption := LANGdeOpenTerminalButton_Caption;
+ LANGShowTextUIDsCheckBox_Caption := LANGdeShowTextUIDsCheckBox_Caption;
+ LANGShowTextUIDsCheckBox_Tooltip := LANGdeShowTextUIDsCheckBox_Tooltip;
+
+ LANGmiNewTab_Caption := LANGdemiNewTab_Caption;
+ LANGFilePopupMenu_Properties := LANGdeFilePopupMenu_Properties;
+ LANGCommandEntry_Tooltip := LANGdeCommandEntry_Tooltip;
+ LANGmiFiles_Caption := LANGdemiFiles_Caption;
+
+ LANGPasswordButton_Tooltip := LANGdePasswordButton_Tooltip;
+ LANGHandleRunFromArchive_Bytes := LANGdeHandleRunFromArchive_Bytes;
+ LANGHandleRunFromArchive_FileTypeDesc_Unknown := LANGdeHandleRunFromArchive_FileTypeDesc_Unknown;
+ LANGHandleRunFromArchive_NotAssociated := LANGdeHandleRunFromArchive_NotAssociated;
+ LANGHandleRunFromArchive_SelfExecutable := LANGdeHandleRunFromArchive_SelfExecutable;
+ LANGHandleRunFromArchive_CouldntCreateTemporaryDirectory := LANGdeHandleRunFromArchive_CouldntCreateTemporaryDirectory;
+ LANGFRunFromVFS_Caption := LANGdeFRunFromVFS_Caption;
+ LANGFRunFromVFS_TitleLabel := LANGdeFRunFromVFS_TitleLabel;
+ LANGFRunFromVFS_FileNameLabel := LANGdeFRunFromVFS_FileNameLabel;
+ LANGFRunFromVFS_FileTypeLabel := LANGdeFRunFromVFS_FileTypeLabel;
+ LANGFRunFromVFS_SizeLabel := LANGdeFRunFromVFS_SizeLabel;
+ LANGFRunFromVFS_PackedSizeLabel := LANGdeFRunFromVFS_PackedSizeLabel;
+ LANGFRunFromVFS_DateLabel := LANGdeFRunFromVFS_DateLabel;
+ LANGFRunFromVFS_InfoLabel := LANGdeFRunFromVFS_InfoLabel;
+ LANGFRunFromVFS_OpensWithLabel := LANGdeFRunFromVFS_OpensWithLabel;
+ LANGFRunFromVFS_ExecuteButton := LANGdeFRunFromVFS_ExecuteButton;
+ LANGFRunFromVFS_ExecuteAllButton := LANGdeFRunFromVFS_ExecuteAllButton;
+ LANGFSetPassword_Caption := LANGdeFSetPassword_Caption;
+ LANGFSetPassword_Label1_Caption := LANGdeFSetPassword_Label1_Caption;
+ LANGFSetPassword_Label2_Caption := LANGdeFSetPassword_Label2_Caption;
+ LANGFSetPassword_ShowPasswordCheckButton := LANGdeFSetPassword_ShowPasswordCheckButton;
+end;
+
+initialization
+ AddTranslation('DE', @SetTranslation);
+ AddTranslation('de_DE', @SetTranslation);
+end.
+
+
diff --git a/translations/UTranslation_EN.pas b/translations/UTranslation_EN.pas
new file mode 100644
index 0000000..9a562a2
--- /dev/null
+++ b/translations/UTranslation_EN.pas
@@ -0,0 +1,1267 @@
+(*
+ Tux Commander - UTranslation_EN - English Localization constants
+ Copyright (C) 2008 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit UTranslation_EN;
+
+(***************************************************************************
+ * Info for translators:
+ - please use UTF-8 encoding when making translations, the whole GTK+ 2
+ is using it to display non-ASCII characters properly
+ - please change the few lines at the bottom of this file to your
+ locale string (e.g. en_US for English translation)
+***************************************************************************)
+
+interface
+
+implementation
+
+uses ULocale;
+
+const LANGenF2Button_Caption = 'F2 - Rename';
+ LANGenF3Button_Caption = 'F3 - View';
+ LANGenF4Button_Caption = 'F4 - Edit';
+ LANGenF5Button_Caption = 'F5 - Copy';
+ LANGenF6Button_Caption = 'F6 - Move';
+ LANGenF7Button_Caption = 'F7 - MkDir';
+ LANGenF8Button_Caption = 'F8 - Delete';
+
+ LANGenmnuFile_Caption = '_File';
+ LANGenmnuMark_Caption = '_Mark';
+ LANGenmnuCommands_Caption = '_Commands';
+ LANGenmnuHelp_Caption = '_Help';
+ LANGenmiExit_Caption = 'E_xit';
+ LANGenmiSelectGroup_Caption = 'Select _Group...';
+ LANGenmiUnselectGroup_Caption = '_Unselect Group...';
+ LANGenmiSelectAll_Caption = '_Select All';
+ LANGenmiUnselectAll_Caption = 'U_nselect All';
+ LANGenmiInvertSelection_Caption = '_Invert Selection';
+ LANGenmiRefresh_Caption = '_Refresh';
+ LANGenmiAbout_Caption = '_About...';
+
+ LANGenColumn1_Caption = 'Name';
+ LANGenColumn2_Caption = 'Ext';
+ LANGenColumn3_Caption = 'Size';
+ LANGenColumn4_Caption = 'Date';
+ LANGenColumn5_Caption = 'Attr';
+
+ LANGenExpandSelection = 'Expand selection';
+ LANGenShrinkSelection = 'Shrink selection';
+ LANGenNoMatchesFound = 'No matches found';
+ LANGenNoFilesSelected = 'No files selected!';
+ LANGenSelectedFilesDirectories = '%d selected files/directories';
+ LANGenDirectoryS = 'directory %s';
+ LANGenFileS = 'file %s';
+ LANGenDoYouReallyWantToDeleteTheS = 'Do you really want to delete the %s ?';
+ LANGenDoYouReallyWantToDeleteTheSS = 'Do you really want to delete the %s ?'#10'%s';
+ LANGenCopyFiles = 'Copy files';
+ LANGenMoveRenameFiles = 'Move/Rename files';
+ LANGenCopyDFileDirectoriesTo = 'Copy %d file/directories to';
+ LANGenMoveRenameDFileDirectoriesTo = 'Move/Rename %d file/directories to';
+ LANGenCopySC = 'Copy:';
+ LANGenMoveRenameSC = 'Move/Rename:';
+
+ LANGenQuickFind = ' Quick Find:';
+
+ LANGenAboutString = 'Tux Commander'#10'Version %s'#10'Build date: %s'#10#10'Copyright (c) 2008 Tomas Bzatek'#10'E-mail: tbzatek@users.sourceforge.net'#10'Website: http://tuxcmd.sourceforge.net/';
+ LANGenAboutStringGnome = 'version %s'#10'Build date: %s'#10'Website: http://tuxcmd.sourceforge.net/';
+ LANGenDiskStatFmt = '%s of %s free';
+// LANGenDiskStatFmt = '<span weight="bold">%s</span> of <span weight="bold">%s</span> free';
+ LANGenDiskStatVolNameFmt = '[%s] %s of %s free';
+// LANGenDiskStatVolNameFmt = '[%s] <span weight="bold">%s</span> of <span weight="bold">%s</span> free';
+// LANGenDiskStatVolNameFmt = '<span style="italic">[%s]</span> <span weight="bold">%s</span> of <span weight="bold">%s</span> free';
+ LANGenStatusLineFmt = '%s of %s in %d of %d files selected';
+ LANGenPanelStrings : array[boolean] of string = ('right', 'left');
+
+ LANGenDIR = '<DIR>';
+ LANGenErrorGettingListingForSPanel = 'Error getting listing for %s panel:'#10' %s'#10#10'Path = ''%s''';
+ LANGenErrorGettingListingForSPanelNoPath = 'Error getting listing for %s panel:'#10' %s';
+ LANGenErrorCreatingNewDirectorySInSPanel = 'Error creating new directory ''%s'' in %s panel:'#10' %s';
+ LANGenErrorCreatingNewDirectorySInSPanelNoPath = 'Error creating new directory in %s panel:'#10' %s';
+ LANGenTheFileDirectory = 'The file/directory';
+ LANGenCouldNotBeDeleted = 'could not be deleted';
+ LANGenCouldNotBeDeletedS = 'could not be deleted: %s';
+ LANGenUserCancelled = 'User cancelled!';
+ LANGenTheDirectorySIsNotEmpty = 'The directory %s is not empty!';
+ LANGenCannotCopyFile = 'Cannot copy file';
+ LANGenCopyError = 'Copy error';
+ LANGenMoveError = 'Move error';
+ LANGenOverwriteS = 'Overwrite: %s';
+ LANGenWithFileS = 'With file: %s';
+ LANGenOvewriteSBytesS = '%s bytes, %s';
+ LANGenTheFile = 'The file';
+ LANGenCopy = 'Copy';
+ LANGenMove = 'Move';
+ LANGenTheDirectory = 'The directory';
+ LANGenTheSymbolicLink = 'The symbolic link';
+ LANGenCannotMoveFile = 'Cannot move file';
+ LANGenCouldNotBeCreated = 'could not be created';
+ LANGenCouldNotBeCreatedS = 'could not be created: %s';
+ LANGenFromS = 'From: %s';
+ LANGenToS = 'To: %s';
+ LANGenCannotCopyFileToItself = 'Cannot copy file to itself';
+ LANGenMemoryAllocationFailed = 'Memory allocation failed:';
+ LANGenCannotOpenSourceFile = 'Cannot open source file';
+ LANGenCannotOpenDestinationFile = 'Cannot open destination file';
+ LANGenCannotCloseDestinationFile = 'Cannot close destination file';
+ LANGenCannotCloseSourceFile = 'Cannot close source file';
+ LANGenCannotReadFromSourceFile = 'Cannot read from source file';
+ LANGenCannotWriteToDestinationFile = 'Cannot write to destination file';
+
+ LANGenUnknownException = 'Unknown Exception';
+ LANGenNoAccess = 'No Access';
+ LANGenUnknownError = 'Unknown Error';
+
+ LANGenCreateANewDirectory = 'Create a new directory';
+ LANGenEnterDirectoryName = 'Enter _directory name:';
+
+ LANGenOverwriteQuestion = 'Overwrite question';
+ LANGenOverwriteButton_Caption = '_Overwrite';
+ LANGenOverwriteAllButton_Caption = 'Overwrite _all';
+ LANGenSkipButton_Caption = '_Skip';
+ LANGenOverwriteAllOlderButton_Caption = 'Overwrite all ol_der';
+ LANGenSkipAllButton_Caption = 'S_kip all';
+ LANGenRenameButton_Caption = '_Rename';
+ LANGenAppendButton_Caption = 'A_ppend';
+ LANGenRename = 'Rename';
+ LANGenRenameFile = 'Rename file ''%s'' to';
+ LANGenIgnoreButton_Caption = '_Ignore';
+
+ LANGenProgress = 'Progress';
+ LANGenCancel = '_Cancel';
+ LANGenDelete = 'Delete:';
+
+ LANGenSpecifyFileType = '_Specify file type:';
+
+ LANGenRemoveDirectory = 'Remove directory';
+ LANGenDoYouWantToDeleteItWithAllItsFilesAndSubdirectories = 'Do you want to delete it with all its files and subdirectories?';
+ LANGenRetry = '_Retry';
+ LANGenDeleteButton_Caption = '_Delete';
+ LANGenAll = '_All';
+
+ LANGenCopyFilesSC = 'Copy files:';
+ LANGenAppendQuestion = 'Are you sure you want to append file ''%s'' to ''%s''?';
+ LANGenPreparingList = 'Preparing list...';
+
+ LANGenYouMustSelectAValidFile = 'You must select a valid file!';
+ LANGenmiVerifyChecksums = '_Verify checksums';
+ LANGenVerifyChecksumsCaption = 'Verify checksums';
+ LANGenCheckButtonCaptionCheck = '_Check';
+ LANGenCheckButtonCaptionStop = '_Stop';
+ LANGenFileListTooltip = '[?] - Not checked'#10'[OK] - Checksum OK'#10'[BAD] - Checksum BAD'#10'[N/A] - File not available';
+ LANGenFilenameColumnCaption = 'Filename';
+ LANGenTheFileSYouAreTryingToOpenIsQuiteBig = 'The file ''%s'' you are trying to open is quite big (%s bytes). It may not be a valid checksum file.'#10#10'Do you want to load it anyway?';
+ LANGenAnErrorOccuredWhileInitializingMemoryBlock = 'An error occured while initializing memory block. Close some programs and try it again.';
+ LANGenAnErrorOccuredWhileOpeningFileSS = 'An error occured while opening file ''%s'':'#10' %s';
+ LANGenAnErrorOccuredWhileReadingFileSS = 'An error occured while reading file ''%s'':'#10' %s';
+ LANGenChecksumNotChecked = '<span weight="bold">Status:</span> Not checked';
+ LANGenChecksumChecking = '<span weight="bold">Status:</span> Checking...';
+ LANGenChecksumInterrupted = '<span weight="bold">Status:</span> Interrupted';
+ LANGenChecksumDOK = '<span weight="bold">Status:</span> %d%% OK';
+
+ LANGenmiCreateChecksumsCaption = '_Create checksums...';
+ LANGenYouMustSelectAtLeastOneFileToCalculateChecksum = 'You must select at least one file to calculate checksum!';
+ LANGenCreateChecksumsCaption = 'Create checksums';
+ LANGenCCHKSUMPage1Text = 'You are going to make checksums for'#10'the selected files. If you didn''t selected'#10'all files you want, close this druid and'#10'select more files.';
+ LANGenCCHKSUMPage4Text = 'The druid is ready to make checksums for your'#10'selected files. This operation can take a few minutes.'#10'Press Forward to continue.';
+ LANGenCCHKSUMPage6Text = 'There were errors making the checksum:';
+ LANGenCCHKSUMPage7Text = 'The checksum creation is finished and'#10'your files are ready.'#10#10'Click "Finish" to exit.';
+ LANGenCCHKSUMPage1Title = '<span size="xx-large" weight="ultrabold">Prepare files for checksum</span>';
+ LANGenCCHKSUMPage2Title = '<span size="xx-large" weight="ultrabold">Select checksums file type</span>';
+ LANGenCCHKSUMPage3Title = '<span size="xx-large" weight="ultrabold">Choose filename</span>';
+ LANGenCCHKSUMPage4Title = '<span size="xx-large" weight="ultrabold">Ready to check</span>';
+ LANGenCCHKSUMPage5Title = '<span size="xx-large" weight="ultrabold">Processing...</span>';
+ LANGenCCHKSUMPage6Title = '<span size="xx-large" weight="ultrabold">Error!</span>';
+ LANGenCCHKSUMPage7Title = '<span size="xx-large" weight="ultrabold">Finished</span>';
+ LANGenCCHKSUMSFVFile = 'SFV File';
+ LANGenCCHKSUMMD5sumFile = 'MD5sum File';
+ LANGenCCHKSUMFileName = 'File _Name:';
+ LANGenCCHKSUMCreateSeparateChecksumFiles = 'Create _separate checksum files';
+ LANGenCCHKSUMNowProcessingFileS = 'Now processing file: %s';
+ LANGenCCHKSUMFinishCaption = '_Finish';
+ LANGenCCHKSUMAreYouSureYouWantToAbortTheProcessing = 'Are you sure you want to abort the processing?';
+ LANGenCCHKSUMAnErrorOccuredWhileOpeningFileSS = 'An error occured while opening file ''%s'': %s'#10;
+ LANGenCCHKSUMAnErrorOccuredWhileReadingFileSS = 'An error occured while reading file ''%s'': %s'#10;
+ LANGenCCHKSUMAnErrorOccuredWhileWritingFileSS = 'An error occured while writing file ''%s'': %s'#10;
+
+ LANGenAnErrorOccuredWhileWritingFileSS = 'An error occured while writing file ''%s'':'#10' %s';
+ LANGenTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt = 'The target file ''%s'' already exists. Do you want to overwrite it?';
+ LANGenTheTargetFileSCannotBeRemovedS = 'The target file ''%s'' cannot be removed: %s';
+ LANGenMergeCaption = 'Merge';
+ LANGenPleaseInsertNextDiskOrGiveDifferentLocation = 'Please insert next disk, or give different location:';
+ LANGenMergeOfSSucceeded = 'Merge of ''%s'' succeeded (CRC checksum OK).';
+ LANGenWarningCreatedFileFailsCRCCheck = 'Warning: Created file fails CRC check!';
+ LANGenMergeOfSSucceeded_NoCRCFileAvailable = 'Merge of ''%s'' succeeded (no CRC file available).';
+ LANGenMergeSAndAllFilesWithAscendingNamesToTheFollowingDirectory = 'Merge ''%s'' and all files with ascending names to the following directory:';
+ LANGenMergeSC = 'Merge:';
+ LANGenmiSplitFileCaption = '_Split File...';
+ LANGenmiMergeFilesCaption = '_Merge Files...';
+
+ LANGenSplitTheFileSToDirectory = '_Split the file ''%s'' to directory:';
+ LANGenSplitSC = 'Split:';
+ LANGenSplitFile = 'Split File';
+ LANGenBytesPerFile = '_Bytes per file:';
+ LANGenAutomatic = 'Automatic';
+ LANGenDeleteFilesOnTargetDisk = '_Delete files on target disk (usable for removable media)';
+ LANGenSplitCaption = 'Split';
+ LANGenCannotOpenFileS = 'Cannot open file ''%s''';
+ LANGenCannotSplitTheFileToMoreThan999Parts = 'Cannot split the file to more than 999 parts!';
+ LANGenThereAreSomeFilesInTheTargetDirectorySDoYouWantToDeleteThem = 'There are some files in the target directory:'#10'%s'#10'Do you want to delete them?';
+ LANGenThereAreDFilesInTheTargetDirectoryDoYouWantToDeleteThem = 'There are %d files in the target directory. Do you want to delete them?';
+ LANGenAnErrorOccuredWhileOperationS = 'An error occured while operation: %s';
+ LANGenSplitOfSSucceeded = 'Split of ''%s'' succeeded.';
+ LANGenSplitOfSFailed = 'Split of ''%s'' failed!';
+
+ LANGenmnuShow_Caption = 'Sho_w';
+ LANGenmiShowDotFiles_Caption = 'Show _dot files';
+ LANGenTheFileYouAreTryingToOpenIsQuiteBig = 'The file you are trying to open is quite big. Loading it in an externel application (such as gedit) can cause system slowdown.'#10'Do you want to continue?';
+ LANGenCannotExecuteSPleaseCheckTheConfiguration = 'Cannot execute ''%s''. Please check the configuration or set the file type association correctly.';
+ LANGenEdit = 'Edit';
+ LANGenEnterFilenameToEdit = '_Enter filename to edit:';
+
+ LANGenmnuSettings_Caption = 'Se_ttings';
+ LANGenmiFileTypes_Caption = 'File _types...';
+ LANGenThereIsNoApplicationAssociatedWithS = 'There is no application associated with "%s".'#10#10'You can configure Tux Commander to associate applications with file types. Do you want to associate an application with this file type now?';
+ LANGenErrorExecutingCommand = 'Error executing command!';
+ LANGenEditFileTypesCaption = 'Edit File Types';
+ LANGenTitleLabel_Caption = '<span size="x-large" weight="ultrabold">File Types Configuration</span>';
+ LANGenExtensionsColumn = 'Extensions';
+ LANGenDescriptionColumn = 'Description';
+ LANGenFileTypesList = 'File types list';
+ LANGenActionName = 'Action Name';
+ LANGenCommand = 'Command';
+ LANGenSetDefaultActionButton_Caption = '_Set as default';
+ LANGenRunInTerminalCheckBox_Caption = 'Run in _Terminal';
+ LANGenAutodetectCheckBox_Caption = 'Autodetect _GUI application';
+ LANGenBrowseButton_Caption = '_Browse...';
+ LANGenCommandLabel_Caption = 'Co_mmand:';
+ LANGenDescriptionLabel_Caption = 'D_escription:';
+ LANGenFNameExtLabel_Caption = 'A_dd extension:';
+ LANGenNotebookPageExtensions = 'File type';
+ LANGenNotebookPageActions = 'Actions';
+ LANGenDefault = ' (default)';
+ LANGenCannotSaveFileTypeAssociationsBecauseOtherProcess = 'Cannot save file type associations, because other process has updated it while running this instance of application.';
+
+ LANGenDefaultColor = 'De_fault color';
+ LANGenIcon = '_Icon:';
+ LANGenBrowseForIcon = 'Browse for icon';
+ LANGenSelectFileTypeColor = 'Select File Type Color';
+ LANGenColor = 'Co_lor:';
+
+ LANGenmiChangePermissions_Caption = 'Change Per_missions...';
+ LANGenmiChangeOwner_Caption = 'Change _Owner/Group...';
+ LANGenmiCreateSymlink_Caption = 'Create Sym_link...';
+ LANGenmiEditSymlink_Caption = '_Edit Symlink...';
+ LANGenChmodProgress = 'Change permissions:';
+ LANGenChownProgress = 'Change owner:';
+ LANGenYouMustSelectAValidSymbolicLink = 'You must select a valid symbolic link!';
+ LANGenPopupRunS = 'E_xecute %s';
+ LANGenPopupOpenS = 'O_pen %s';
+ LANGenPopupGoUp = '_Go up';
+ LANGenPopupOpenWithS = 'Open with %s';
+ LANGenPopupDefault = ' (default)';
+ LANGenPopupOpenWith = 'O_pen with...';
+ LANGenPopupViewFile = '_View file';
+ LANGenPopupEditFile = 'Ed_it file';
+ LANGenPopupMakeSymlink = 'Make _symlink';
+ LANGenPopupRename = '_Rename';
+ LANGenPopupDelete = '_Delete';
+ LANGenDialogChangePermissions = 'Change permissions';
+ LANGenCouldNotBeChmoddedS = 'could not be chmodded: %s';
+ LANGenDialogChangeOwner = 'Change owner';
+ LANGenCouldNotBeChownedS = 'could not be chowned: %s';
+ LANGenDialogMakeSymlink = 'Make symlink';
+ LANGenDialogEditSymlink = 'Edit symlink';
+ LANGenFEditSymlink_Caption = 'Edit symbolic link';
+ LANGenFEditSymlink_SymbolicLinkFilename = '_Symbolic link filename:';
+ LANGenFEditSymlink_SymbolicLinkPointsTo = 'Symbolic link points _to:';
+
+ LANGenFChmod_Caption = 'Access Permissions';
+ LANGenFChmod_PermissionFrame = 'Permissions';
+ LANGenFChmod_FileFrame = 'File';
+ LANGenFChmod_ApplyRecursivelyFor = 'Apply _recursively for';
+ LANGenFChmod_miAllFiles = 'All files and directories';
+ LANGenFChmod_miDirectories = 'Directories only';
+ LANGenFChmod_OctalLabel = '_Octal:';
+ LANGenFChmod_SUID = 'SUID - Set user ID on execution';
+ LANGenFChmod_SGID = 'SGID - Set group ID on execution';
+ LANGenFChmod_Sticky = 'Sticky bit';
+ LANGenFChmod_RUSR = 'RUSR - Read by owner';
+ LANGenFChmod_WUSR = 'WUSR - Write by owner';
+ LANGenFChmod_XUSR = 'XUSR - Execute/Search by owner';
+ LANGenFChmod_RGRP = 'RGRP - Read by group';
+ LANGenFChmod_WGRP = 'WGRP - Write by group';
+ LANGenFChmod_XGRP = 'XGRP - Execute/Search by group';
+ LANGenFChmod_ROTH = 'ROTH - Read by others';
+ LANGenFChmod_WOTH = 'WOTH - Write by others';
+ LANGenFChmod_XOTH = 'XOTH - Execute/Search by others';
+ LANGenFChmod_TextLabel = '<span weight="ultrabold">Text:</span> %s';
+ LANGenFChmod_FileLabel = '<span weight="ultrabold">File:</span> %s'#10'<span weight="ultrabold">Text:</span> %s'#10 +
+ '<span weight="ultrabold">Octal:</span> %d'#10'<span weight="ultrabold">Owner:</span> %s'#10 +
+ '<span weight="ultrabold">Group:</span> %s';
+
+ LANGenFChown_Caption = 'Change owner/group';
+ LANGenFChown_OwnerFrame = 'User name';
+ LANGenFChown_GroupFrame = 'Group name';
+ LANGenFChown_FileFrame = 'File';
+ LANGenFChown_ApplyRecursively = 'Apply _recursively';
+
+ LANGenFSymlink_Caption = 'Create symbolic link';
+ LANGenFSymlink_ExistingFilename = '_Existing filename (filename symlink will point to):';
+ LANGenFSymlink_SymlinkFilename = '_Symbolic link filename:';
+
+ LANGenmnuBookmarks_Caption = '_Bookmarks';
+ LANGenmiAddBookmark_Caption = 'Add Bookmark';
+ LANGenmiEditBookmarks_Caption = 'Edit Bookmarks';
+ LANGenBookmarkPopupDelete_Caption = '_Delete';
+ LANGenmiPreferences_Caption = '_Preferences...';
+ LANGenTheCurrentDirectoryAlreadyExistsInTheBookmarksList = 'The current directory already exists in the bookmarks list';
+ LANGenSomeOtherInstanceChanged = 'Some other instance of Tux Commander changed the configuration. Do you want to apply the new settings?'#10#10'Warning: If you press No at this point, the configuration will be overwritten on this instance'' exit!';
+
+ LANGenPreferences_Caption = 'Preferences';
+ LANGenPreferences_TitleLabel_Caption = '<span size="x-large" weight="ultrabold">Application Preferences</span>';
+ LANGenPreferences_GeneralPage = 'General';
+ LANGenPreferences_FontsPage = 'Fonts';
+ LANGenPreferences_ColorsPage = 'Colors';
+ LANGenPreferences_RowHeight = 'Row _height:';
+ LANGenPreferences_NumHistoryItems = 'Co_mmandline history items:';
+ LANGenPreferences_Default = '_Default';
+ LANGenPreferences_ClearReadonlyAttribute = 'Clear _readonly attribute when copying from CD-ROM';
+ LANGenPreferences_DisableMouseRenaming = 'Disable _mouse renaming';
+ LANGenPreferences_ShowFiletypeIconsInList = 'Show _filetype icons';
+ LANGenPreferences_ExternalAppsLabel = '<span weight="ultrabold">External programs</span>';
+ LANGenPreferences_Viewer = '_Viewer:';
+ LANGenPreferences_Editor = '_Editor:';
+ LANGenPreferences_Terminal = '_Terminal:';
+ LANGenPreferences_ListFont = 'List Font:';
+ LANGenPreferences_Change = 'Change...';
+ LANGenPreferences_UseDefaultFont = 'Use _default font';
+ LANGenPreferences_Foreground = 'Foreground';
+ LANGenPreferences_Background = 'Background';
+ LANGenPreferences_NormalItem = 'Normal Item:';
+ LANGenPreferences_SetToDefaultToUseGTKThemeColors = 'Set to default to use GTK theme colors';
+ LANGenPreferences_Cursor = 'Cursor:';
+ LANGenPreferences_InactiveItem = 'Inactive Item:';
+ LANGenPreferences_SelectedItem = 'Selected Item:';
+ LANGenPreferences_LinkItem = 'Symbolic links:';
+ LANGenPreferences_LinkItemHint = 'Set to default to show symlinks using default normal item colors';
+ LANGenPreferences_DotFileItem = 'Dot files:';
+ LANGenPreferences_DotFileItemHint = 'Set to default to show dot-files using default normal item colors';
+ LANGenPreferences_BrowseForApplication = 'Browse for application';
+ LANGenPreferences_DefaultS = 'Default: %s';
+ LANGenPreferences_SelectFont = 'Select font';
+
+ (*************** STRINGS ADDED TO v0.4.101 **********************************************************************************)
+ LANGenBookmarkButton_Tooltip = 'Show bookmarks';
+ LANGenUpButton_Tooltip = 'Go to the upper directory';
+ LANGenRootButton_Tooltip = 'Go to the root directory (/)';
+ LANGenHomeButton_Tooltip = 'Go to the home directory (/home/user)';
+ LANGenLeftEqualButton_Tooltip = 'Switch the right panel to the same directory';
+ LANGenRightEqualButton_Tooltip = 'Switch the left panel to the same directory';
+ LANGenmiShowDirectorySizes_Caption = 'Show d_irectory sizes';
+ LANGenmiTargetSource_Caption = 'Target = S_ource';
+ LANGenFileTypeDirectory = 'Directory';
+ LANGenFileTypeFile = 'File';
+ LANGenFileTypeMetafile = 'This is a common meta-item';
+ LANGenPreferencesPanelsPage = 'Panels';
+ LANGenPreferencesApplicationsPage = 'Applications';
+ LANGenPreferencesExperimentalPage = 'Experimental';
+ LANGenPreferencesSelectAllDirectoriesCheckBox_Caption = 'Select _also directories when selecting all';
+ LANGenPreferencesNewStyleAltOCheckBox_Caption = '_New style Alt+O';
+ LANGenPreferencesNewStyleAltOCheckBox_Tooltip = 'Stay in the same directory when switching directory opposite panel by pressing Ctrl/Alt+O';
+ LANGenPreferencesShowFuncButtonsCheckBox_Caption = 'Show function _key buttons';
+ LANGenPreferencesSizeFormatLabel_Caption = '_Size format:';
+ LANGenPreferencesmiSizeFormat1 = 'System';
+ LANGenPreferencesmiSizeFormat6 = 'Grouped';
+ LANGenPreferencesAutodetectXApp = 'Autodetect X app';
+ LANGenPreferencesAlwaysRunInTerminal = 'Always run in terminal';
+ LANGenPreferencesNeverRunInTerminal = 'Never run in terminal';
+ LANGenPreferencesCmdLineBehaviourLabel_Caption = '_Executing from commandline:';
+ LANGenPreferencesFeatures = 'Features';
+ LANGenPreferencesDisableMouseRename_Tooltip = 'You can still perform quick-rename by pressing Shift+F6';
+ LANGenPreferencesDisableFileTipsCheckBox_Caption = 'Disable file _tooltips';
+ LANGenPreferencesDisableFileTipsCheckBox_Tooltip = 'Don''t show panel tooltips if the text in a comlumn is truncated';
+ LANGenPreferencesShow = 'Show';
+ LANGenPreferencesDirsInBoldCheckBox_Caption = 'Directories in _bold';
+ LANGenPreferencesDisableDirectoryBracketsCheckBox_Caption = 'Hide directory b_rackets';
+ LANGenPreferencesOctalPermissionsCheckBox_Caption = 'Show _octal permissions';
+ LANGenPreferencesOctalPermissionsCheckBox_Tooltip = 'Show file/directory permissions as a number instead of text form (-rw-rw-rw-)';
+ LANGenPreferencesMovement = 'Movement';
+ LANGenPreferencesLynxLikeMotionCheckBox_Caption = '_Lynx-like motion';
+ LANGenPreferencesInsertMovesDownCheckBox_Caption = '_Insert moves down';
+ LANGenPreferencesSpaceMovesDownCheckBox_Caption = '_Space moves down';
+ LANGenPreferencesViewer = 'Viewer';
+ LANGenPreferencesCommandSC = 'Command:';
+ LANGenPreferencesUseInternalViewer = 'Use _internal viewer';
+ LANGenPreferencesEditor = 'Editor';
+ LANGenPreferencesTerminal = 'Terminal';
+ LANGenPreferencesExperimentalFeatures = 'Experimental features';
+ LANGenPreferencesExperimentalWarningLabel_Caption = '<span weight="ultrabold">Warning:</span> These features are currently under development and may not work properly. Use them at your own risk!';
+ LANGenPreferencesFocusRefreshCheckBox_Caption = 'Perform _refresh on window focus';
+ LANGenPreferencesFocusRefreshCheckBox_Tooltip = 'Very slow panel refreshing at this moment';
+ LANGenPreferencesWMCompatModeCheckBox_Caption = '_WM Compatibility mode';
+ LANGenPreferencesWMCompatModeCheckBox_Tooltip = 'Use if you have some window manager issues (for example IceWM doesn''t perform window maximize correctly)';
+ LANGenPreferencesCompatUseLibcSystemCheckBox_Caption = 'Use libc _system() for executing programs';
+ LANGenPreferencesCompatUseLibcSystemCheckBox_Tooltip = 'Use in case of freeze or crash problems when launching external applications';
+
+ (*************** STRINGS ADDED TO v0.5.70 **********************************************************************************)
+ LANGenmiSearchCaption2 = '_Search...';
+ LANGenmiNoMounterBarCaption = 'Do_n''t show mounter bar';
+ LANGenmiShowOneMounterBarCaption = 'Show _one mounter bar';
+ LANGenmiShowTwoMounterBarCaption = 'Show _two mounter bars';
+ LANGenmnuNetworkCaption = 'N_etwork';
+ LANGenmiConnectionsCaption = '_Connections...';
+ LANGenmiOpenConnectionCaption = '_Open connection...';
+ LANGenmiQuickConnectCaption = '_Quick connect...';
+ LANGenmnuPluginsCaption = 'Pl_ugins';
+ LANGenmiTestPluginCaption = '_Test plugin...';
+ LANGenmiMounterSettingsCaption = '_Mounter Settings...';
+ LANGenmiColumnsCaption = 'P_anel Columns...';
+ LANGenmiSavePositionCaption = '_Save position';
+ LANGenmiMountCaption = '_Mount';
+ LANGenmiUmountCaption = '_Umount';
+ LANGenmiEjectCaption = '_Eject';
+ LANGenmiDuplicateTabCaption = 'Duplicate current tab';
+ LANGenmiCloseTabCaption = 'Close current tab';
+ LANGenmiCloseAllTabsCaption = 'Close all tabs';
+ LANGenCannotDetermineDestinationEngine = 'Cannot determine destination engine. Please enter correct path and try it again.';
+ LANGenCannotLoadFile = 'Cannot load file ''%s''. Please check the permissions.';
+ LANGenMountPointDevice = 'Mount Point: %s'#10'Device: %s';
+ LANGenMountSC = 'Mount:';
+ LANGenNoPluginsFound = 'No plugins found';
+ LANGenPluginAbout = 'About...';
+ LANGenCouldntOpenURI = 'Couldn''t open the URI specified. Please check the consistency of the resource identifier and the access permission.';
+ LANGenPluginAboutInside = 'Plugin: %s'#10#10'%s'#10'%s';
+ LANGenAreYouSureCloseAllTabs = 'Are you sure you want to close all inactive tabs?';
+ LANGenCouldntOpenURIArchive = 'Couldn''t open the archive. Please check consistency and access permissions.';
+ LANGenThereIsNoModuleAvailable = 'There are no VFS modules available that can handle this connection';
+ LANGenIgnoreError = 'Do you really want to ignore the error? The source file will be then deleted';
+ LANGenErrorMount = 'There was an error while mounting the device ''%s'':'#10#10;
+ LANGenErrorUmount = 'There was an error while umounting the device ''%s'':'#10#10;
+ LANGenErrorEject = 'There was an error while ejecting the device ''%s'':'#10#10;
+
+ LANGenMounterPrefs_Caption = 'Mounter Settings';
+ LANGenMounterPrefs_TitleLabelCaption = 'Mounter Settings';
+ LANGenMounterPrefs_ListViewFrameCaption = 'Mounter';
+ LANGenMounterPrefs_MountName = 'Mount Name';
+ LANGenMounterPrefs_MountPoint = 'Mount Point';
+ LANGenMounterPrefs_Device = 'Device';
+ LANGenMounterPrefs_MoveUpButtonTooltip = 'Move item up';
+ LANGenMounterPrefs_MoveDownButtonTooltip = 'Move item down';
+ LANGenMounterPrefs_UseFSTabDefaultsCheckBox = 'Use _fstab default items';
+ LANGenMounterPrefs_UseFSTabDefaultsCheckBoxTooltip = 'By checking this, the mounter bar will be filled by default items found in the /etc/fstab (system mountlist file)';
+ LANGenMounterPrefs_ToggleModeCheckBox = 'Buttons stay _down when mounted';
+ LANGenMounterPrefs_ToggleModeCheckBoxTooltip = 'When checked, the mounter buttons will stay down if the device is mounted; another click will cause umounting them (eject in this case)';
+ LANGenMounterPrefs_PropertiesFrameCaption = 'Mounter item properties';
+ LANGenMounterPrefs_DisplayTextLabelCaption = 'Displayed _Text:';
+ LANGenMounterPrefs_MountPointLabelCaption = 'Mount _Point:';
+ LANGenMounterPrefs_MountDeviceLabelCaption = '_Device:';
+ LANGenMounterPrefs_DeviceTypeLabelCaption = 'Device T_ype:';
+ LANGenMounterPrefs_miLocalDiskCaption = 'Local disk';
+ LANGenMounterPrefs_miRemovableCaption = 'Removable';
+ LANGenMounterPrefs_miCDCaption = 'CD/DVD drive';
+ LANGenMounterPrefs_miFloppyCaption = 'Floppy drive';
+ LANGenMounterPrefs_miNetworkCaption = 'Network';
+ LANGenMounterPrefs_MountCommandLabelCaption = 'Mount _Command:';
+ LANGenMounterPrefs_UmountCommandLabelCaption = 'Umount C_ommand:';
+ LANGenMounterPrefs_MountCommandEntryTooltip = 'Syntax: use %dev for substitution of the device and %dir for the mount point or leave blank for default mount'#10'Note: beware of interactive commands, tuxcmd could freeze!'#10'Example: smbmount %dev %dir -o username=netuser,password=somepass';
+ LANGenMounterPrefs_UmountCommandEntryTooltip = 'Syntax: use %dev for substitution of the device and %dir for the mount point or leave blank for default umount'#10'Example: smbumount $dir';
+ LANGenMounterPrefs_IconLabelCaption = '_Icon:';
+
+ LANGenConnMgr_Caption = 'Open New Connection';
+ LANGenConnMgr_ConnectButton = 'Co_nnect';
+ LANGenConnMgr_OpenConnection = 'Open Connection';
+ LANGenConnMgr_NameColumn = 'Name';
+ LANGenConnMgr_URIColumn = 'URI';
+ LANGenConnMgr_AddConnectionButtonCaption = '_Add site...';
+ LANGenConnMgr_AddConnectionButtonTooltip = 'Add new connection';
+ LANGenConnMgr_EditButtonCaption = '_Edit...';
+ LANGenConnMgr_EditButtonTooltip = 'Edit selected connection';
+ LANGenConnMgr_RemoveButtonCaption = '_Remove site';
+ LANGenConnMgr_RemoveButtonTooltip = 'Delete selected connection';
+ LANGenConnMgr_DoYouWantDelete = 'Do you really want to delete the connection ''%s''?';
+
+ LANGenConnProp_FTP = 'FTP';
+ LANGenConnProp_SFTP = 'SFTP (ssh subsystem)';
+ LANGenConnProp_SMB = 'Windows share (SMB)';
+ LANGenConnProp_HTTP = 'WebDAV (HTTP)';
+ LANGenConnProp_HTTPS = 'Secure WebDAV (HTTPS)';
+ LANGenConnProp_Other = 'Other <span style="italic">(please specify in URI)</span>';
+ LANGenConnProp_Caption = 'Connection properties';
+ LANGenConnProp_VFSModule = '_VFS module:';
+ LANGenConnProp_URI = '_URI:';
+ LANGenConnProp_URIEntryTooltip = 'Correct URI should contain service type prefix and server address';
+ LANGenConnProp_DetailedInformations = 'Detailed informations';
+ LANGenConnProp_Name = '_Name:';
+ LANGenConnProp_Server = 'Ser_ver[:port]:';
+ LANGenConnProp_Username = 'Userna_me:';
+ LANGenConnProp_UserNameEntryTooltip = 'Leave blank for anonymous login';
+ LANGenConnProp_Password = '_Password:';
+ LANGenConnProp_TargetDirectory = 'Target _directory:';
+ LANGenConnProp_ServiceType = '_Service type:';
+ LANGenConnProp_MaskPassword = '_Mask password';
+ LANGenConnProp_MenuItemCaption = 'Default <span style="italic">(all suitable modules)</span>';
+
+ LANGenConnLogin_Caption = 'Authentication required';
+ LANGenConnLogin_Login = 'Login';
+ LANGenConnLogin_ExperimentalWarningLabelCaption = 'You must log in to access %s';
+ LANGenConnLogin_Username = '_Username:';
+ LANGenConnLogin_Password = '_Password:';
+ LANGenConnLogin_AnonymousCheckButton = '_Anonymous';
+
+ LANGenColumns_Caption = 'Panel Columns Settings';
+ LANGenColumns_Title = 'Panel Columns Settings';
+ LANGenColumns_MoveUpButtonTooltip = 'Move item up';
+ LANGenColumns_MoveDownButtonTooltip = 'Move item down';
+ LANGenColumns_TitlesLongName = 'Name';
+ LANGenColumns_TitlesLongNameExt = 'Name + Extension';
+ LANGenColumns_TitlesLongExt = 'Extension';
+ LANGenColumns_TitlesLongSize = 'Size';
+ LANGenColumns_TitlesLongDateTime = 'Date + Time';
+ LANGenColumns_TitlesLongDate = 'Date';
+ LANGenColumns_TitlesLongTime = 'Time';
+ LANGenColumns_TitlesLongUser = 'User';
+ LANGenColumns_TitlesLongGroup = 'Group';
+ LANGenColumns_TitlesLongAttr = 'Attributes';
+ LANGenColumns_TitlesShortName = 'Name';
+ LANGenColumns_TitlesShortNameExt = 'Name';
+ LANGenColumns_TitlesShortExt = 'Ext';
+ LANGenColumns_TitlesShortSize = 'Size';
+ LANGenColumns_TitlesShortDateTime = 'Date';
+ LANGenColumns_TitlesShortDate = 'Date';
+ LANGenColumns_TitlesShortTime = 'Time';
+ LANGenColumns_TitlesShortUser = 'User';
+ LANGenColumns_TitlesShortGroup = 'Group';
+ LANGenColumns_TitlesShortAttr = 'Attr';
+
+ LANGenTestPlugin_Caption = 'Test VFS Plugin';
+ LANGenTestPlugin_Title = 'Test VFS Plugin';
+ LANGenTestPlugin_ExperimentalWarningLabelCaption = '<span weight="ultrabold">Warning:</span> The VFS subsystem and its plugins are under heavy development and may contain bugs. Use this function under your own risk!';
+ LANGenTestPlugin_Plugin = '_Plugin:';
+ LANGenTestPlugin_Command = 'Co_mmand:';
+ LANGenTestPlugin_Username = '_Username:';
+ LANGenTestPlugin_Password = '_Password:';
+ LANGenTestPlugin_AnonymousCheckButton = '_Anonymous login (doesn''t call VFSLogin)';
+ LANGenTestPlugin_NoPluginsFound = 'No plugins found';
+
+ LANGenRemoteWait_Caption = 'Operation in progress';
+ LANGenRemoteWait_OperationInProgress = 'Operation in progress, please be patient...';
+ LANGenRemoteWait_ItemsFound = 'Items found so far: %d';
+
+ LANGenSearch_Bytes = 'Bytes';
+ LANGenSearch_kB = 'kB';
+ LANGenSearch_MB = 'MB';
+ LANGenSearch_days = 'days';
+ LANGenSearch_weeks = 'weeks';
+ LANGenSearch_months = 'months';
+ LANGenSearch_years = 'years';
+ LANGenSearch_Caption = 'Find Files';
+ LANGenSearch_General = 'General';
+ LANGenSearch_Advanced = 'Advanced';
+ LANGenSearch_SearchResults = 'Search _Results:';
+ LANGenSearch_SearchFor = 'Search _for:';
+ LANGenSearch_FileMaskEntryTooltip = 'Tip: Use colons (";") to specify multiple files to find';
+ LANGenSearch_SearchIn = 'Search _in:';
+ LANGenSearch_SearchArchivesCheckButton = 'Search _archives';
+ LANGenSearch_FindText = 'Find _text:';
+ LANGenSearch_FindTextEntryTooltip = 'Leave blank for no text matching'#10'Please note that we are using UTF-8 in GUI part';
+ LANGenSearch_CaseSensitiveCheckButton = 'Cas_e sensitive';
+ LANGenSearch_StayCurrentFSCheckButton = 'Include other files_ystems';
+ LANGenSearch_CaseSensitiveMatchCheckButton = 'Ca_se sensitive';
+ LANGenSearch_Size = 'Size';
+ LANGenSearch_Date = 'Date';
+ LANGenSearch_BiggerThan = '_Bigger than';
+ LANGenSearch_SmallerThan = '_Smaller than';
+ LANGenSearch_ModifiedBetweenRadioButton = '_Modified between';
+ LANGenSearch_NotModifiedAfterRadioButton = '_Not modified after';
+ LANGenSearch_ModifiedLastRadioButton = 'Mod_ified in the last';
+ LANGenSearch_ModifiedNotLastRadionButton = 'No_t modified in the last';
+ LANGenSearch_ModifiedBetweenEntry1 = '"Please use this date format:" c';
+ LANGenSearch_ViewButtonCaption = '_View file';
+ LANGenSearch_NewSearchButtonCaption = '_New search';
+ LANGenSearch_GoToFileButtonCaption = '_Go to file';
+ LANGenSearch_FeedToListboxButtonCaption = 'Feed to _listbox';
+ LANGenSearch_StatusSC = 'Status:';
+ LANGenSearch_Ready = 'Ready.';
+ LANGenSearch_PreparingToSearch = 'Preparing to search.';
+ LANGenSearch_SearchInProgress = 'Search in progress:';
+ LANGenSearch_UserCancelled = 'User cancelled.';
+ LANGenSearch_SearchFinished = 'Search finished';
+ LANGenSearch_FilesFound = '%d files found';
+ LANGenSearch_And = 'and';
+
+ (*************** STRINGS ADDED TO v0.5.82 **********************************************************************************)
+ LANGenCloseOpenConnection = 'You''re trying to open new connection over the another active connection. By continuing, the previous connection will be closed and replaced by the new requested one.'#10#10'Do you want to continue?';
+ LANGenDuplicateTabWarning = 'You are trying to open a new tab from a remote directory. However, engine cloning is not supported. The directory in the new tab will point to a local filesystem.';
+ LANGenDontShowAgain = '_Don''t show this message again';
+ LANGenSwitchOtherPanelWarning = 'You are trying to open the remote directory in the opposite panel. However, engine cloning is not supported. The target directory will not be switched.';
+ LANGenOpenConnectionsWarning = 'There are some active connections opened in the panel. By closing the application, these connections will be disconnected.'#10#10'Do you want to continue quit?';
+ LANGenmiDisconnect_Caption = '_Disconnect';
+ LANGenDisconnectButton_Tooltip = 'Disconnect active connection';
+ LANGenLeaveArchiveButton_Tooltip = 'Close current archive';
+ LANGenOpenTerminalButton_Tooltip = 'Opens a new terminal windows from the current directory';
+ LANGenOpenTerminalButton_Caption = 'Open Te_rminal';
+ LANGenShowTextUIDsCheckBox_Caption = 'Show text _UIDs';
+ LANGenShowTextUIDsCheckBox_Tooltip = 'Show textual User and Group informations instead of numbers (UID/GID)';
+
+ (*************** STRINGS ADDED TO v0.5.100 **********************************************************************************)
+ LANGenmiNewTab_Caption = 'New folder _tab';
+ LANGenFilePopupMenu_Properties = '_Properties';
+ LANGenCommandEntry_Tooltip = 'Use %s as file/directory placeholder';
+ LANGenmiFiles_Caption = 'Files only';
+
+ (*************** STRINGS ADDED TO v0.6.31 **********************************************************************************)
+ LANGenPasswordButton_Tooltip = 'Archive requires password.'#10'Click to set';
+ LANGenHandleRunFromArchive_Bytes = 'bytes';
+ LANGenHandleRunFromArchive_FileTypeDesc_Unknown = '(unknown)';
+ LANGenHandleRunFromArchive_NotAssociated = '(not associated)';
+ LANGenHandleRunFromArchive_SelfExecutable = '(self-executable)';
+ LANGenHandleRunFromArchive_CouldntCreateTemporaryDirectory = 'Couldn''t create temporary directory "%s": %s.'#10#10'Please check the temporary directory settings and try it again.';
+ LANGenFRunFromVFS_Caption = 'Packed file properties';
+ LANGenFRunFromVFS_TitleLabel = 'File Properties';
+ LANGenFRunFromVFS_FileNameLabel = 'File name:';
+ LANGenFRunFromVFS_FileTypeLabel = 'File type:';
+ LANGenFRunFromVFS_SizeLabel = 'Size:';
+ LANGenFRunFromVFS_PackedSizeLabel = 'Compressed size:';
+ LANGenFRunFromVFS_DateLabel = 'Modify date:';
+ LANGenFRunFromVFS_InfoLabel = 'Opening files directly from archives is not supported. By clicking the buttons below the file (all files respectively) will be extracted to a temporary location. Temporary files will be deleted when you close Tux Commander.';
+ LANGenFRunFromVFS_OpensWithLabel = 'Open with:';
+ LANGenFRunFromVFS_ExecuteButton = 'E_xtract and open';
+ LANGenFRunFromVFS_ExecuteAllButton = 'Extract _all and open';
+ LANGenFSetPassword_Caption = 'Set password';
+ LANGenFSetPassword_Label1_Caption = 'Password required';
+ LANGenFSetPassword_Label2_Caption = 'The archive is encrypted and requires password in order to extract the data';
+ LANGenFSetPassword_ShowPasswordCheckButton = 'Un_mask password';
+
+
+
+
+(********************************************************************************************************************************)
+procedure SetTranslation;
+begin
+ LANGF2Button_Caption := LANGenF2Button_Caption;
+ LANGF3Button_Caption := LANGenF3Button_Caption;
+ LANGF4Button_Caption := LANGenF4Button_Caption;
+ LANGF5Button_Caption := LANGenF5Button_Caption;
+ LANGF6Button_Caption := LANGenF6Button_Caption;
+ LANGF7Button_Caption := LANGenF7Button_Caption;
+ LANGF8Button_Caption := LANGenF8Button_Caption;
+
+ LANGmnuFile_Caption := LANGenmnuFile_Caption;
+ LANGmnuMark_Caption := LANGenmnuMark_Caption;
+ LANGmnuCommands_Caption := LANGenmnuCommands_Caption;
+ LANGmnuHelp_Caption := LANGenmnuHelp_Caption;
+ LANGmiExit_Caption := LANGenmiExit_Caption;
+ LANGmiSelectGroup_Caption := LANGenmiSelectGroup_Caption;
+ LANGmiUnselectGroup_Caption := LANGenmiUnselectGroup_Caption;
+ LANGmiSelectAll_Caption := LANGenmiSelectAll_Caption;
+ LANGmiUnselectAll_Caption := LANGenmiUnselectAll_Caption;
+ LANGmiInvertSelection_Caption := LANGenmiInvertSelection_Caption;
+ LANGmiRefresh_Caption := LANGenmiRefresh_Caption;
+ LANGmiAbout_Caption := LANGenmiAbout_Caption;
+
+ LANGColumn1_Caption := LANGenColumn1_Caption;
+ LANGColumn2_Caption := LANGenColumn2_Caption;
+ LANGColumn3_Caption := LANGenColumn3_Caption;
+ LANGColumn4_Caption := LANGenColumn4_Caption;
+ LANGColumn5_Caption := LANGenColumn5_Caption;
+
+ LANGExpandSelection := LANGenExpandSelection;
+ LANGShrinkSelection := LANGenShrinkSelection;
+ LANGNoMatchesFound := LANGenNoMatchesFound;
+ LANGNoFilesSelected := LANGenNoFilesSelected;
+ LANGSelectedFilesDirectories := LANGenSelectedFilesDirectories;
+ LANGDirectoryS := LANGenDirectoryS;
+ LANGFileS := LANGenFileS;
+ LANGDoYouReallyWantToDeleteTheS := LANGenDoYouReallyWantToDeleteTheS;
+ LANGDoYouReallyWantToDeleteTheSS := LANGenDoYouReallyWantToDeleteTheSS;
+ LANGCopyFiles := LANGenCopyFiles;
+ LANGMoveRenameFiles := LANGenMoveRenameFiles;
+ LANGCopyDFileDirectoriesTo := LANGenCopyDFileDirectoriesTo;
+ LANGMoveRenameDFileDirectoriesTo := LANGenMoveRenameDFileDirectoriesTo;
+ LANGCopySC := LANGenCopySC;
+ LANGMoveRenameSC := LANGenMoveRenameSC;
+
+ LANGQuickFind := LANGenQuickFind;
+
+ LANGAboutString := LANGenAboutString;
+ LANGAboutStringGnome := LANGenAboutStringGnome;
+ LANGDiskStatFmt := LANGenDiskStatFmt;
+ LANGDiskStatVolNameFmt := LANGenDiskStatVolNameFmt;
+ LANGStatusLineFmt := LANGenStatusLineFmt;
+ LANGPanelStrings[False] := LANGenPanelStrings[False];
+ LANGPanelStrings[True] := LANGenPanelStrings[True];
+ LANGDIR := LANGenDIR;
+ LANGErrorGettingListingForSPanel := LANGenErrorGettingListingForSPanel;
+ LANGErrorGettingListingForSPanelNoPath := LANGenErrorGettingListingForSPanelNoPath;
+ LANGErrorCreatingNewDirectorySInSPanel := LANGenErrorCreatingNewDirectorySInSPanel;
+ LANGErrorCreatingNewDirectorySInSPanelNoPath := LANGenErrorCreatingNewDirectorySInSPanelNoPath;
+ LANGTheFileDirectory := LANGenTheFileDirectory;
+ LANGCouldNotBeDeleted := LANGenCouldNotBeDeleted;
+ LANGCouldNotBeDeletedS := LANGenCouldNotBeDeletedS;
+ LANGUserCancelled := LANGenUserCancelled;
+ LANGTheDirectorySIsNotEmpty := LANGenTheDirectorySIsNotEmpty;
+ LANGCannotCopyFile := LANGenCannotCopyFile;
+ LANGCopyError := LANGenCopyError;
+ LANGMoveError := LANGenMoveError;
+ LANGOverwriteS := LANGenOverwriteS;
+ LANGWithFileS := LANGenWithFileS;
+ LANGOvewriteSBytesS := LANGenOvewriteSBytesS;
+ LANGTheFile := LANGenTheFile;
+ LANGCopy := LANGenCopy;
+ LANGMove := LANGenMove;
+ LANGTheDirectory := LANGenTheDirectory;
+ LANGTheSymbolicLink := LANGenTheSymbolicLink;
+ LANGCannotMoveFile := LANGenCannotMoveFile;
+ LANGCouldNotBeCreated := LANGenCouldNotBeCreated;
+ LANGCouldNotBeCreatedS := LANGenCouldNotBeCreatedS;
+ LANGFromS := LANGenFromS;
+ LANGToS := LANGenToS;
+ LANGCannotCopyFileToItself := LANGenCannotCopyFileToItself;
+ LANGMemoryAllocationFailed := LANGenMemoryAllocationFailed;
+ LANGCannotOpenSourceFile := LANGenCannotOpenSourceFile;
+ LANGCannotOpenDestinationFile := LANGenCannotOpenDestinationFile;
+ LANGCannotCloseDestinationFile := LANGenCannotCloseDestinationFile;
+ LANGCannotCloseSourceFile := LANGenCannotCloseSourceFile;
+ LANGCannotReadFromSourceFile := LANGenCannotReadFromSourceFile;
+ LANGCannotWriteToDestinationFile := LANGenCannotWriteToDestinationFile;
+
+ LANGUnknownException := LANGenUnknownException;
+ LANGNoAccess := LANGenNoAccess;
+ LANGUnknownError := LANGenUnknownError;
+
+ LANGCreateANewDirectory := LANGenCreateANewDirectory;
+ LANGEnterDirectoryName := LANGenEnterDirectoryName;
+
+ LANGOverwriteQuestion := LANGenOverwriteQuestion;
+ LANGOverwriteButton_Caption := LANGenOverwriteButton_Caption;
+ LANGOverwriteAllButton_Caption := LANGenOverwriteAllButton_Caption;
+ LANGSkipButton_Caption := LANGenSkipButton_Caption;
+ LANGOverwriteAllOlderButton_Caption := LANGenOverwriteAllOlderButton_Caption;
+ LANGSkipAllButton_Caption := LANGenSkipAllButton_Caption;
+ LANGRenameButton_Caption := LANGenRenameButton_Caption;
+ LANGAppendButton_Caption := LANGenAppendButton_Caption;
+ LANGRename := LANGenRename;
+ LANGRenameFile := LANGenRenameFile;
+ LANGIgnoreButton_Caption := LANGenIgnoreButton_Caption;
+
+ LANGProgress := LANGenProgress;
+ LANGCancel := LANGenCancel;
+ LANGDelete := LANGenDelete;
+
+ LANGSpecifyFileType := LANGenSpecifyFileType;
+
+ LANGRemoveDirectory := LANGenRemoveDirectory;
+ LANGDoYouWantToDeleteItWithAllItsFilesAndSubdirectories := LANGenDoYouWantToDeleteItWithAllItsFilesAndSubdirectories;
+ LANGRetry := LANGenRetry;
+ LANGDeleteButton_Caption := LANGenDeleteButton_Caption;
+ LANGAll := LANGenAll;
+
+ LANGCopyFilesSC := LANGenCopyFilesSC;
+ LANGAppendQuestion := LANGenAppendQuestion;
+ LANGPreparingList := LANGenPreparingList;
+
+ LANGYouMustSelectAValidFile := LANGenYouMustSelectAValidFile;
+ LANGmiVerifyChecksums := LANGenmiVerifyChecksums;
+ LANGVerifyChecksumsCaption := LANGenVerifyChecksumsCaption;
+ LANGCheckButtonCaptionCheck := LANGenCheckButtonCaptionCheck;
+ LANGCheckButtonCaptionStop := LANGenCheckButtonCaptionStop;
+ LANGFileListTooltip := LANGenFileListTooltip;
+ LANGFilenameColumnCaption := LANGenFilenameColumnCaption;
+ LANGTheFileSYouAreTryingToOpenIsQuiteBig := LANGenTheFileSYouAreTryingToOpenIsQuiteBig;
+ LANGAnErrorOccuredWhileInitializingMemoryBlock := LANGenAnErrorOccuredWhileInitializingMemoryBlock;
+ LANGAnErrorOccuredWhileOpeningFileSS := LANGenAnErrorOccuredWhileOpeningFileSS;
+ LANGAnErrorOccuredWhileReadingFileSS := LANGenAnErrorOccuredWhileReadingFileSS;
+ LANGChecksumNotChecked := LANGenChecksumNotChecked;
+ LANGChecksumChecking := LANGenChecksumChecking;
+ LANGChecksumInterrupted := LANGenChecksumInterrupted;
+ LANGChecksumDOK := LANGenChecksumDOK;
+
+ LANGmiCreateChecksumsCaption := LANGenmiCreateChecksumsCaption;
+ LANGYouMustSelectAtLeastOneFileToCalculateChecksum := LANGenYouMustSelectAtLeastOneFileToCalculateChecksum;
+ LANGCreateChecksumsCaption := LANGenCreateChecksumsCaption;
+ LANGCCHKSUMPage1Text := LANGenCCHKSUMPage1Text;
+ LANGCCHKSUMPage4Text := LANGenCCHKSUMPage4Text;
+ LANGCCHKSUMPage6Text := LANGenCCHKSUMPage6Text;
+ LANGCCHKSUMPage7Text := LANGenCCHKSUMPage7Text;
+ LANGCCHKSUMPage1Title := LANGenCCHKSUMPage1Title;
+ LANGCCHKSUMPage2Title := LANGenCCHKSUMPage2Title;
+ LANGCCHKSUMPage3Title := LANGenCCHKSUMPage3Title;
+ LANGCCHKSUMPage4Title := LANGenCCHKSUMPage4Title;
+ LANGCCHKSUMPage5Title := LANGenCCHKSUMPage5Title;
+ LANGCCHKSUMPage6Title := LANGenCCHKSUMPage6Title;
+ LANGCCHKSUMPage7Title := LANGenCCHKSUMPage7Title;
+ LANGCCHKSUMSFVFile := LANGenCCHKSUMSFVFile;
+ LANGCCHKSUMMD5sumFile := LANGenCCHKSUMMD5sumFile;
+ LANGCCHKSUMFileName := LANGenCCHKSUMFileName;
+ LANGCCHKSUMCreateSeparateChecksumFiles := LANGenCCHKSUMCreateSeparateChecksumFiles;
+ LANGCCHKSUMNowProcessingFileS := LANGenCCHKSUMNowProcessingFileS;
+ LANGCCHKSUMFinishCaption := LANGenCCHKSUMFinishCaption;
+ LANGCCHKSUMAreYouSureYouWantToAbortTheProcessing := LANGenCCHKSUMAreYouSureYouWantToAbortTheProcessing;
+ LANGCCHKSUMAnErrorOccuredWhileOpeningFileSS := LANGenCCHKSUMAnErrorOccuredWhileOpeningFileSS;
+ LANGCCHKSUMAnErrorOccuredWhileReadingFileSS := LANGenCCHKSUMAnErrorOccuredWhileReadingFileSS;
+ LANGCCHKSUMAnErrorOccuredWhileWritingFileSS := LANGenCCHKSUMAnErrorOccuredWhileWritingFileSS;
+
+ LANGAnErrorOccuredWhileWritingFileSS := LANGenAnErrorOccuredWhileWritingFileSS;
+ LANGTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt := LANGenTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt;
+ LANGTheTargetFileSCannotBeRemovedS := LANGenTheTargetFileSCannotBeRemovedS;
+ LANGMergeCaption := LANGenMergeCaption;
+ LANGPleaseInsertNextDiskOrGiveDifferentLocation := LANGenPleaseInsertNextDiskOrGiveDifferentLocation;
+ LANGMergeOfSSucceeded := LANGenMergeOfSSucceeded;
+ LANGWarningCreatedFileFailsCRCCheck := LANGenWarningCreatedFileFailsCRCCheck;
+ LANGMergeOfSSucceeded_NoCRCFileAvailable := LANGenMergeOfSSucceeded_NoCRCFileAvailable;
+ LANGMergeSAndAllFilesWithAscendingNamesToTheFollowingDirectory := LANGenMergeSAndAllFilesWithAscendingNamesToTheFollowingDirectory;
+ LANGMergeSC := LANGenMergeSC;
+ LANGmiSplitFileCaption := LANGenmiSplitFileCaption;
+ LANGmiMergeFilesCaption := LANGenmiMergeFilesCaption;
+
+ LANGSplitTheFileSToDirectory := LANGenSplitTheFileSToDirectory;
+ LANGSplitSC := LANGenSplitSC;
+ LANGSplitFile := LANGenSplitFile;
+ LANGBytesPerFile := LANGenBytesPerFile;
+ LANGAutomatic := LANGenAutomatic;
+ LANGDeleteFilesOnTargetDisk := LANGenDeleteFilesOnTargetDisk;
+ LANGSplitCaption := LANGenSplitCaption;
+ LANGCannotOpenFileS := LANGenCannotOpenFileS;
+ LANGCannotSplitTheFileToMoreThan999Parts := LANGenCannotSplitTheFileToMoreThan999Parts;
+ LANGThereAreSomeFilesInTheTargetDirectorySDoYouWantToDeleteThem := LANGenThereAreSomeFilesInTheTargetDirectorySDoYouWantToDeleteThem;
+ LANGThereAreDFilesInTheTargetDirectoryDoYouWantToDeleteThem := LANGenThereAreDFilesInTheTargetDirectoryDoYouWantToDeleteThem;
+ LANGAnErrorOccuredWhileOperationS := LANGenAnErrorOccuredWhileOperationS;
+ LANGSplitOfSSucceeded := LANGenSplitOfSSucceeded;
+ LANGSplitOfSFailed := LANGenSplitOfSFailed;
+
+ LANGmnuShow_Caption := LANGenmnuShow_Caption;
+ LANGmiShowDotFiles_Caption := LANGenmiShowDotFiles_Caption;
+ LANGTheFileYouAreTryingToOpenIsQuiteBig := LANGenTheFileYouAreTryingToOpenIsQuiteBig;
+ LANGCannotExecuteSPleaseCheckTheConfiguration := LANGenCannotExecuteSPleaseCheckTheConfiguration;
+ LANGEdit := LANGenEdit;
+ LANGEnterFilenameToEdit := LANGenEnterFilenameToEdit;
+
+ LANGmnuSettings_Caption := LANGenmnuSettings_Caption;
+ LANGmiFileTypes_Caption := LANGenmiFileTypes_Caption;
+ LANGThereIsNoApplicationAssociatedWithS := LANGenThereIsNoApplicationAssociatedWithS;
+ LANGErrorExecutingCommand := LANGenErrorExecutingCommand;
+ LANGEditFileTypesCaption := LANGenEditFileTypesCaption;
+ LANGTitleLabel_Caption := LANGenTitleLabel_Caption;
+ LANGExtensionsColumn := LANGenExtensionsColumn;
+ LANGDescriptionColumn := LANGenDescriptionColumn;
+ LANGFileTypesList := LANGenFileTypesList;
+ LANGActionName := LANGenActionName;
+ LANGCommand := LANGenCommand;
+ LANGSetDefaultActionButton_Caption := LANGenSetDefaultActionButton_Caption;
+ LANGRunInTerminalCheckBox_Caption := LANGenRunInTerminalCheckBox_Caption;
+ LANGAutodetectCheckBox_Caption := LANGenAutodetectCheckBox_Caption;
+ LANGBrowseButton_Caption := LANGenBrowseButton_Caption;
+ LANGCommandLabel_Caption := LANGenCommandLabel_Caption;
+ LANGDescriptionLabel_Caption := LANGenDescriptionLabel_Caption;
+ LANGFNameExtLabel_Caption := LANGenFNameExtLabel_Caption;
+ LANGNotebookPageExtensions := LANGenNotebookPageExtensions;
+ LANGNotebookPageActions := LANGenNotebookPageActions;
+ LANGDefault := LANGenDefault;
+ LANGCannotSaveFileTypeAssociationsBecauseOtherProcess := LANGenCannotSaveFileTypeAssociationsBecauseOtherProcess;
+
+ LANGDefaultColor := LANGenDefaultColor;
+ LANGIcon := LANGenIcon;
+ LANGBrowseForIcon := LANGenBrowseForIcon;
+ LANGSelectFileTypeColor := LANGenSelectFileTypeColor;
+ LANGColor := LANGenColor;
+
+ LANGmiChangePermissions_Caption := LANGenmiChangePermissions_Caption;
+ LANGmiChangeOwner_Caption := LANGenmiChangeOwner_Caption;
+ LANGmiCreateSymlink_Caption := LANGenmiCreateSymlink_Caption;
+ LANGmiEditSymlink_Caption := LANGenmiEditSymlink_Caption;
+ LANGChmodProgress := LANGenChmodProgress;
+ LANGChownProgress := LANGenChownProgress;
+ LANGYouMustSelectAValidSymbolicLink := LANGenYouMustSelectAValidSymbolicLink;
+ LANGPopupRunS := LANGenPopupRunS;
+ LANGPopupOpenS := LANGenPopupOpenS;
+ LANGPopupGoUp := LANGenPopupGoUp;
+ LANGPopupOpenWithS := LANGenPopupOpenWithS;
+ LANGPopupDefault := LANGenPopupDefault;
+ LANGPopupOpenWith := LANGenPopupOpenWith;
+ LANGPopupViewFile := LANGenPopupViewFile;
+ LANGPopupEditFile := LANGenPopupEditFile;
+ LANGPopupMakeSymlink := LANGenPopupMakeSymlink;
+ LANGPopupRename := LANGenPopupRename;
+ LANGPopupDelete := LANGenPopupDelete;
+ LANGDialogChangePermissions := LANGenDialogChangePermissions;
+ LANGCouldNotBeChmoddedS := LANGenCouldNotBeChmoddedS;
+ LANGDialogChangeOwner := LANGenDialogChangeOwner;
+ LANGCouldNotBeChownedS := LANGenCouldNotBeChownedS;
+ LANGDialogMakeSymlink := LANGenDialogMakeSymlink;
+ LANGDialogEditSymlink := LANGenDialogEditSymlink;
+ LANGFEditSymlink_Caption := LANGenFEditSymlink_Caption;
+ LANGFEditSymlink_SymbolicLinkFilename := LANGenFEditSymlink_SymbolicLinkFilename;
+ LANGFEditSymlink_SymbolicLinkPointsTo := LANGenFEditSymlink_SymbolicLinkPointsTo;
+
+ LANGFChmod_Caption := LANGenFChmod_Caption;
+ LANGFChmod_PermissionFrame := LANGenFChmod_PermissionFrame;
+ LANGFChmod_FileFrame := LANGenFChmod_FileFrame;
+ LANGFChmod_ApplyRecursivelyFor := LANGenFChmod_ApplyRecursivelyFor;
+ LANGFChmod_miAllFiles := LANGenFChmod_miAllFiles;
+ LANGFChmod_miDirectories := LANGenFChmod_miDirectories;
+ LANGFChmod_OctalLabel := LANGenFChmod_OctalLabel;
+ LANGFChmod_SUID := LANGenFChmod_SUID;
+ LANGFChmod_SGID := LANGenFChmod_SGID;
+ LANGFChmod_Sticky := LANGenFChmod_Sticky;
+ LANGFChmod_RUSR := LANGenFChmod_RUSR;
+ LANGFChmod_WUSR := LANGenFChmod_WUSR;
+ LANGFChmod_XUSR := LANGenFChmod_XUSR;
+ LANGFChmod_RGRP := LANGenFChmod_RGRP;
+ LANGFChmod_WGRP := LANGenFChmod_WGRP;
+ LANGFChmod_XGRP := LANGenFChmod_XGRP;
+ LANGFChmod_ROTH := LANGenFChmod_ROTH;
+ LANGFChmod_WOTH := LANGenFChmod_WOTH;
+ LANGFChmod_XOTH := LANGenFChmod_XOTH;
+ LANGFChmod_TextLabel := LANGenFChmod_TextLabel;
+ LANGFChmod_FileLabel := LANGenFChmod_FileLabel;
+ LANGFChown_Caption := LANGenFChown_Caption;
+ LANGFChown_OwnerFrame := LANGenFChown_OwnerFrame;
+ LANGFChown_GroupFrame := LANGenFChown_GroupFrame;
+ LANGFChown_FileFrame := LANGenFChown_FileFrame;
+ LANGFChown_ApplyRecursively := LANGenFChown_ApplyRecursively;
+
+ LANGFSymlink_Caption := LANGenFSymlink_Caption;
+ LANGFSymlink_ExistingFilename := LANGenFSymlink_ExistingFilename;
+ LANGFSymlink_SymlinkFilename := LANGenFSymlink_SymlinkFilename;
+
+ LANGmnuBookmarks_Caption := LANGenmnuBookmarks_Caption;
+ LANGmiAddBookmark_Caption := LANGenmiAddBookmark_Caption;
+ LANGmiEditBookmarks_Caption := LANGenmiEditBookmarks_Caption;
+ LANGBookmarkPopupDelete_Caption := LANGenBookmarkPopupDelete_Caption;
+ LANGmiPreferences_Caption := LANGenmiPreferences_Caption;
+ LANGTheCurrentDirectoryAlreadyExistsInTheBookmarksList := LANGenTheCurrentDirectoryAlreadyExistsInTheBookmarksList;
+ LANGSomeOtherInstanceChanged := LANGenSomeOtherInstanceChanged;
+
+ LANGPreferences_Caption := LANGenPreferences_Caption;
+ LANGPreferences_TitleLabel_Caption := LANGenPreferences_TitleLabel_Caption;
+ LANGPreferences_GeneralPage := LANGenPreferences_GeneralPage;
+ LANGPreferences_FontsPage := LANGenPreferences_FontsPage;
+ LANGPreferences_ColorsPage := LANGenPreferences_ColorsPage;
+ LANGPreferences_RowHeight := LANGenPreferences_RowHeight;
+ LANGPreferences_NumHistoryItems := LANGenPreferences_NumHistoryItems;
+ LANGPreferences_Default := LANGenPreferences_Default;
+ LANGPreferences_ClearReadonlyAttribute := LANGenPreferences_ClearReadonlyAttribute;
+ LANGPreferences_DisableMouseRenaming := LANGenPreferences_DisableMouseRenaming;
+ LANGPreferences_ShowFiletypeIconsInList := LANGenPreferences_ShowFiletypeIconsInList;
+ LANGPreferences_ExternalAppsLabel := LANGenPreferences_ExternalAppsLabel;
+ LANGPreferences_Viewer := LANGenPreferences_Viewer;
+ LANGPreferences_Editor := LANGenPreferences_Editor;
+ LANGPreferences_Terminal := LANGenPreferences_Terminal;
+ LANGPreferences_ListFont := LANGenPreferences_ListFont;
+ LANGPreferences_Change := LANGenPreferences_Change;
+ LANGPreferences_UseDefaultFont := LANGenPreferences_UseDefaultFont;
+ LANGPreferences_Foreground := LANGenPreferences_Foreground;
+ LANGPreferences_Background := LANGenPreferences_Background;
+ LANGPreferences_NormalItem := LANGenPreferences_NormalItem;
+ LANGPreferences_SetToDefaultToUseGTKThemeColors := LANGenPreferences_SetToDefaultToUseGTKThemeColors;
+ LANGPreferences_Cursor := LANGenPreferences_Cursor;
+ LANGPreferences_InactiveItem := LANGenPreferences_InactiveItem;
+ LANGPreferences_SelectedItem := LANGenPreferences_SelectedItem;
+ LANGPreferences_LinkItem := LANGenPreferences_LinkItem;
+ LANGPreferences_LinkItemHint := LANGenPreferences_LinkItemHint;
+ LANGPreferences_DotFileItem := LANGenPreferences_DotFileItem;
+ LANGPreferences_DotFileItemHint := LANGenPreferences_DotFileItemHint;
+ LANGPreferences_BrowseForApplication := LANGenPreferences_BrowseForApplication;
+ LANGPreferences_DefaultS := LANGenPreferences_DefaultS;
+ LANGPreferences_SelectFont := LANGenPreferences_SelectFont;
+
+ LANGBookmarkButton_Tooltip := LANGenBookmarkButton_Tooltip;
+ LANGUpButton_Tooltip := LANGenUpButton_Tooltip;
+ LANGRootButton_Tooltip := LANGenRootButton_Tooltip;
+ LANGHomeButton_Tooltip := LANGenHomeButton_Tooltip;
+ LANGLeftEqualButton_Tooltip := LANGenLeftEqualButton_Tooltip;
+ LANGRightEqualButton_Tooltip := LANGenRightEqualButton_Tooltip;
+ LANGmiShowDirectorySizes_Caption := LANGenmiShowDirectorySizes_Caption;
+ LANGmiTargetSource_Caption := LANGenmiTargetSource_Caption;
+ LANGFileTypeDirectory := LANGenFileTypeDirectory;
+ LANGFileTypeFile := LANGenFileTypeFile;
+ LANGFileTypeMetafile := LANGenFileTypeMetafile;
+ LANGPreferencesPanelsPage := LANGenPreferencesPanelsPage;
+ LANGPreferencesApplicationsPage := LANGenPreferencesApplicationsPage;
+ LANGPreferencesExperimentalPage := LANGenPreferencesExperimentalPage;
+ LANGPreferencesSelectAllDirectoriesCheckBox_Caption := LANGenPreferencesSelectAllDirectoriesCheckBox_Caption;
+ LANGPreferencesNewStyleAltOCheckBox_Caption := LANGenPreferencesNewStyleAltOCheckBox_Caption;
+ LANGPreferencesNewStyleAltOCheckBox_Tooltip := LANGenPreferencesNewStyleAltOCheckBox_Tooltip;
+ LANGPreferencesShowFuncButtonsCheckBox_Caption := LANGenPreferencesShowFuncButtonsCheckBox_Caption;
+ LANGPreferencesSizeFormatLabel_Caption := LANGenPreferencesSizeFormatLabel_Caption;
+ LANGPreferencesmiSizeFormat1 := LANGenPreferencesmiSizeFormat1;
+ LANGPreferencesmiSizeFormat6 := LANGenPreferencesmiSizeFormat6;
+ LANGPreferencesAutodetectXApp := LANGenPreferencesAutodetectXApp;
+ LANGPreferencesAlwaysRunInTerminal := LANGenPreferencesAlwaysRunInTerminal;
+ LANGPreferencesNeverRunInTerminal := LANGenPreferencesNeverRunInTerminal;
+ LANGPreferencesCmdLineBehaviourLabel_Caption := LANGenPreferencesCmdLineBehaviourLabel_Caption;
+ LANGPreferencesFeatures := LANGenPreferencesFeatures;
+ LANGPreferencesDisableMouseRename_Tooltip := LANGenPreferencesDisableMouseRename_Tooltip;
+ LANGPreferencesDisableFileTipsCheckBox_Caption := LANGenPreferencesDisableFileTipsCheckBox_Caption;
+ LANGPreferencesDisableFileTipsCheckBox_Tooltip := LANGenPreferencesDisableFileTipsCheckBox_Tooltip;
+ LANGPreferencesShow := LANGenPreferencesShow;
+ LANGPreferencesDirsInBoldCheckBox_Caption := LANGenPreferencesDirsInBoldCheckBox_Caption;
+ LANGPreferencesDisableDirectoryBracketsCheckBox_Caption := LANGenPreferencesDisableDirectoryBracketsCheckBox_Caption;
+ LANGPreferencesOctalPermissionsCheckBox_Caption := LANGenPreferencesOctalPermissionsCheckBox_Caption;
+ LANGPreferencesOctalPermissionsCheckBox_Tooltip := LANGenPreferencesOctalPermissionsCheckBox_Tooltip;
+ LANGPreferencesMovement := LANGenPreferencesMovement;
+ LANGPreferencesLynxLikeMotionCheckBox_Caption := LANGenPreferencesLynxLikeMotionCheckBox_Caption;
+ LANGPreferencesInsertMovesDownCheckBox_Caption := LANGenPreferencesInsertMovesDownCheckBox_Caption;
+ LANGPreferencesSpaceMovesDownCheckBox_Caption := LANGenPreferencesSpaceMovesDownCheckBox_Caption;
+ LANGPreferencesViewer := LANGenPreferencesViewer;
+ LANGPreferencesCommandSC := LANGenPreferencesCommandSC;
+ LANGPreferencesUseInternalViewer := LANGenPreferencesUseInternalViewer;
+ LANGPreferencesEditor := LANGenPreferencesEditor;
+ LANGPreferencesTerminal := LANGenPreferencesTerminal;
+ LANGPreferencesExperimentalFeatures := LANGenPreferencesExperimentalFeatures;
+ LANGPreferencesExperimentalWarningLabel_Caption := LANGenPreferencesExperimentalWarningLabel_Caption;
+ LANGPreferencesFocusRefreshCheckBox_Caption := LANGenPreferencesFocusRefreshCheckBox_Caption;
+ LANGPreferencesFocusRefreshCheckBox_Tooltip := LANGenPreferencesFocusRefreshCheckBox_Tooltip;
+ LANGPreferencesWMCompatModeCheckBox_Caption := LANGenPreferencesWMCompatModeCheckBox_Caption;
+ LANGPreferencesWMCompatModeCheckBox_Tooltip := LANGenPreferencesWMCompatModeCheckBox_Tooltip;
+ LANGPreferencesCompatUseLibcSystemCheckBox_Caption := LANGenPreferencesCompatUseLibcSystemCheckBox_Caption;
+ LANGPreferencesCompatUseLibcSystemCheckBox_Tooltip := LANGenPreferencesCompatUseLibcSystemCheckBox_Tooltip;
+
+ LANGmiSearchCaption2 := LANGenmiSearchCaption2;
+ LANGmiNoMounterBarCaption := LANGenmiNoMounterBarCaption;
+ LANGmiShowOneMounterBarCaption := LANGenmiShowOneMounterBarCaption;
+ LANGmiShowTwoMounterBarCaption := LANGenmiShowTwoMounterBarCaption;
+ LANGmnuNetworkCaption := LANGenmnuNetworkCaption;
+ LANGmiConnectionsCaption := LANGenmiConnectionsCaption;
+ LANGmiOpenConnectionCaption := LANGenmiOpenConnectionCaption;
+ LANGmiQuickConnectCaption := LANGenmiQuickConnectCaption;
+ LANGmnuPluginsCaption := LANGenmnuPluginsCaption;
+ LANGmiTestPluginCaption := LANGenmiTestPluginCaption;
+ LANGmiMounterSettingsCaption := LANGenmiMounterSettingsCaption;
+ LANGmiColumnsCaption := LANGenmiColumnsCaption;
+ LANGmiSavePositionCaption := LANGenmiSavePositionCaption;
+ LANGmiMountCaption := LANGenmiMountCaption;
+ LANGmiUmountCaption := LANGenmiUmountCaption;
+ LANGmiEjectCaption := LANGenmiEjectCaption;
+ LANGmiDuplicateTabCaption := LANGenmiDuplicateTabCaption;
+ LANGmiCloseTabCaption := LANGenmiCloseTabCaption;
+ LANGmiCloseAllTabsCaption := LANGenmiCloseAllTabsCaption;
+ LANGCannotDetermineDestinationEngine := LANGenCannotDetermineDestinationEngine;
+ LANGCannotLoadFile := LANGenCannotLoadFile;
+ LANGMountPointDevice := LANGenMountPointDevice;
+ LANGMountSC := LANGenMountSC;
+ LANGNoPluginsFound := LANGenNoPluginsFound;
+ LANGPluginAbout := LANGenPluginAbout;
+ LANGCouldntOpenURI := LANGenCouldntOpenURI;
+ LANGPluginAboutInside := LANGenPluginAboutInside;
+ LANGAreYouSureCloseAllTabs := LANGenAreYouSureCloseAllTabs;
+ LANGCouldntOpenURIArchive := LANGenCouldntOpenURIArchive;
+ LANGThereIsNoModuleAvailable := LANGenThereIsNoModuleAvailable;
+ LANGIgnoreError := LANGenIgnoreError;
+ LANGErrorMount := LANGenErrorMount;
+ LANGErrorUmount := LANGenErrorUmount;
+ LANGErrorEject := LANGenErrorEject;
+
+ LANGMounterPrefs_Caption := LANGenMounterPrefs_Caption;
+ LANGMounterPrefs_TitleLabelCaption := LANGenMounterPrefs_TitleLabelCaption;
+ LANGMounterPrefs_ListViewFrameCaption := LANGenMounterPrefs_ListViewFrameCaption;
+ LANGMounterPrefs_MountName := LANGenMounterPrefs_MountName;
+ LANGMounterPrefs_MountPoint := LANGenMounterPrefs_MountPoint;
+ LANGMounterPrefs_Device := LANGenMounterPrefs_Device;
+ LANGMounterPrefs_MoveUpButtonTooltip := LANGenMounterPrefs_MoveUpButtonTooltip;
+ LANGMounterPrefs_MoveDownButtonTooltip := LANGenMounterPrefs_MoveDownButtonTooltip;
+ LANGMounterPrefs_UseFSTabDefaultsCheckBox := LANGenMounterPrefs_UseFSTabDefaultsCheckBox;
+ LANGMounterPrefs_UseFSTabDefaultsCheckBoxTooltip := LANGenMounterPrefs_UseFSTabDefaultsCheckBoxTooltip;
+ LANGMounterPrefs_ToggleModeCheckBox := LANGenMounterPrefs_ToggleModeCheckBox;
+ LANGMounterPrefs_ToggleModeCheckBoxTooltip := LANGenMounterPrefs_ToggleModeCheckBoxTooltip;
+ LANGMounterPrefs_PropertiesFrameCaption := LANGenMounterPrefs_PropertiesFrameCaption;
+ LANGMounterPrefs_DisplayTextLabelCaption := LANGenMounterPrefs_DisplayTextLabelCaption;
+ LANGMounterPrefs_MountPointLabelCaption := LANGenMounterPrefs_MountPointLabelCaption;
+ LANGMounterPrefs_MountDeviceLabelCaption := LANGenMounterPrefs_MountDeviceLabelCaption;
+ LANGMounterPrefs_DeviceTypeLabelCaption := LANGenMounterPrefs_DeviceTypeLabelCaption;
+ LANGMounterPrefs_miLocalDiskCaption := LANGenMounterPrefs_miLocalDiskCaption;
+ LANGMounterPrefs_miRemovableCaption := LANGenMounterPrefs_miRemovableCaption;
+ LANGMounterPrefs_miCDCaption := LANGenMounterPrefs_miCDCaption;
+ LANGMounterPrefs_miFloppyCaption := LANGenMounterPrefs_miFloppyCaption;
+ LANGMounterPrefs_miNetworkCaption := LANGenMounterPrefs_miNetworkCaption;
+ LANGMounterPrefs_MountCommandLabelCaption := LANGenMounterPrefs_MountCommandLabelCaption;
+ LANGMounterPrefs_UmountCommandLabelCaption := LANGenMounterPrefs_UmountCommandLabelCaption;
+ LANGMounterPrefs_MountCommandEntryTooltip := LANGenMounterPrefs_MountCommandEntryTooltip;
+ LANGMounterPrefs_UmountCommandEntryTooltip := LANGenMounterPrefs_UmountCommandEntryTooltip;
+ LANGMounterPrefs_IconLabelCaption := LANGenMounterPrefs_IconLabelCaption;
+
+ LANGConnMgr_Caption := LANGenConnMgr_Caption;
+ LANGConnMgr_ConnectButton := LANGenConnMgr_ConnectButton;
+ LANGConnMgr_OpenConnection := LANGenConnMgr_OpenConnection;
+ LANGConnMgr_NameColumn := LANGenConnMgr_NameColumn;
+ LANGConnMgr_URIColumn := LANGenConnMgr_URIColumn;
+ LANGConnMgr_AddConnectionButtonCaption := LANGenConnMgr_AddConnectionButtonCaption;
+ LANGConnMgr_AddConnectionButtonTooltip := LANGenConnMgr_AddConnectionButtonTooltip;
+ LANGConnMgr_EditButtonCaption := LANGenConnMgr_EditButtonCaption;
+ LANGConnMgr_EditButtonTooltip := LANGenConnMgr_EditButtonTooltip;
+ LANGConnMgr_RemoveButtonCaption := LANGenConnMgr_RemoveButtonCaption;
+ LANGConnMgr_RemoveButtonTooltip := LANGenConnMgr_RemoveButtonTooltip;
+ LANGConnMgr_DoYouWantDelete := LANGenConnMgr_DoYouWantDelete;
+
+ LANGConnProp_FTP := LANGenConnProp_FTP;
+ LANGConnProp_SFTP := LANGenConnProp_SFTP;
+ LANGConnProp_SMB := LANGenConnProp_SMB;
+ LANGConnProp_HTTP := LANGenConnProp_HTTP;
+ LANGConnProp_HTTPS := LANGenConnProp_HTTPS;
+ LANGConnProp_Other := LANGenConnProp_Other;
+ LANGConnProp_Caption := LANGenConnProp_Caption;
+ LANGConnProp_VFSModule := LANGenConnProp_VFSModule;
+ LANGConnProp_URI := LANGenConnProp_URI;
+ LANGConnProp_URIEntryTooltip := LANGenConnProp_URIEntryTooltip;
+ LANGConnProp_DetailedInformations := LANGenConnProp_DetailedInformations;
+ LANGConnProp_Name := LANGenConnProp_Name;
+ LANGConnProp_Server := LANGenConnProp_Server;
+ LANGConnProp_Username := LANGenConnProp_Username;
+ LANGConnProp_UserNameEntryTooltip := LANGenConnProp_UserNameEntryTooltip;
+ LANGConnProp_Password := LANGenConnProp_Password;
+ LANGConnProp_TargetDirectory := LANGenConnProp_TargetDirectory;
+ LANGConnProp_ServiceType := LANGenConnProp_ServiceType;
+ LANGConnProp_MaskPassword := LANGenConnProp_MaskPassword;
+ LANGConnProp_MenuItemCaption := LANGenConnProp_MenuItemCaption;
+
+ LANGConnLogin_Caption := LANGenConnLogin_Caption;
+ LANGConnLogin_Login := LANGenConnLogin_Login;
+ LANGConnLogin_ExperimentalWarningLabelCaption := LANGenConnLogin_ExperimentalWarningLabelCaption;
+ LANGConnLogin_Username := LANGenConnLogin_Username;
+ LANGConnLogin_Password := LANGenConnLogin_Password;
+ LANGConnLogin_AnonymousCheckButton := LANGenConnLogin_AnonymousCheckButton;
+
+ LANGColumns_Caption := LANGenColumns_Caption;
+ LANGColumns_Title := LANGenColumns_Title;
+ LANGColumns_MoveUpButtonTooltip := LANGenColumns_MoveUpButtonTooltip;
+ LANGColumns_MoveDownButtonTooltip := LANGenColumns_MoveDownButtonTooltip;
+ LANGColumns_TitlesLongName := LANGenColumns_TitlesLongName;
+ LANGColumns_TitlesLongNameExt := LANGenColumns_TitlesLongNameExt;
+ LANGColumns_TitlesLongExt := LANGenColumns_TitlesLongExt;
+ LANGColumns_TitlesLongSize := LANGenColumns_TitlesLongSize;
+ LANGColumns_TitlesLongDateTime := LANGenColumns_TitlesLongDateTime;
+ LANGColumns_TitlesLongDate := LANGenColumns_TitlesLongDate;
+ LANGColumns_TitlesLongTime := LANGenColumns_TitlesLongTime;
+ LANGColumns_TitlesLongUser := LANGenColumns_TitlesLongUser;
+ LANGColumns_TitlesLongGroup := LANGenColumns_TitlesLongGroup;
+ LANGColumns_TitlesLongAttr := LANGenColumns_TitlesLongAttr;
+ LANGColumns_TitlesShortName := LANGenColumns_TitlesShortName;
+ LANGColumns_TitlesShortNameExt := LANGenColumns_TitlesShortNameExt;
+ LANGColumns_TitlesShortExt := LANGenColumns_TitlesShortExt;
+ LANGColumns_TitlesShortSize := LANGenColumns_TitlesShortSize;
+ LANGColumns_TitlesShortDateTime := LANGenColumns_TitlesShortDateTime;
+ LANGColumns_TitlesShortDate := LANGenColumns_TitlesShortDate;
+ LANGColumns_TitlesShortTime := LANGenColumns_TitlesShortTime;
+ LANGColumns_TitlesShortUser := LANGenColumns_TitlesShortUser;
+ LANGColumns_TitlesShortGroup := LANGenColumns_TitlesShortGroup;
+ LANGColumns_TitlesShortAttr := LANGenColumns_TitlesShortAttr;
+
+ LANGTestPlugin_Caption := LANGenTestPlugin_Caption;
+ LANGTestPlugin_Title := LANGenTestPlugin_Title;
+ LANGTestPlugin_ExperimentalWarningLabelCaption := LANGenTestPlugin_ExperimentalWarningLabelCaption;
+ LANGTestPlugin_Plugin := LANGenTestPlugin_Plugin;
+ LANGTestPlugin_Command := LANGenTestPlugin_Command;
+ LANGTestPlugin_Username := LANGenTestPlugin_Username;
+ LANGTestPlugin_Password := LANGenTestPlugin_Password;
+ LANGTestPlugin_AnonymousCheckButton := LANGenTestPlugin_AnonymousCheckButton;
+ LANGTestPlugin_NoPluginsFound := LANGenTestPlugin_NoPluginsFound;
+
+ LANGRemoteWait_Caption := LANGenRemoteWait_Caption;
+ LANGRemoteWait_OperationInProgress := LANGenRemoteWait_OperationInProgress;
+ LANGRemoteWait_ItemsFound := LANGenRemoteWait_ItemsFound;
+
+ LANGSearch_Bytes := LANGenSearch_Bytes;
+ LANGSearch_kB := LANGenSearch_kB;
+ LANGSearch_MB := LANGenSearch_MB;
+ LANGSearch_days := LANGenSearch_days;
+ LANGSearch_weeks := LANGenSearch_weeks;
+ LANGSearch_months := LANGenSearch_months;
+ LANGSearch_years := LANGenSearch_years;
+ LANGSearch_Caption := LANGenSearch_Caption;
+ LANGSearch_General := LANGenSearch_General;
+ LANGSearch_Advanced := LANGenSearch_Advanced;
+ LANGSearch_SearchResults := LANGenSearch_SearchResults;
+ LANGSearch_SearchFor := LANGenSearch_SearchFor;
+ LANGSearch_FileMaskEntryTooltip := LANGenSearch_FileMaskEntryTooltip;
+ LANGSearch_SearchIn := LANGenSearch_SearchIn;
+ LANGSearch_SearchArchivesCheckButton := LANGenSearch_SearchArchivesCheckButton;
+ LANGSearch_FindText := LANGenSearch_FindText;
+ LANGSearch_FindTextEntryTooltip := LANGenSearch_FindTextEntryTooltip;
+ LANGSearch_CaseSensitiveCheckButton := LANGenSearch_CaseSensitiveCheckButton;
+ LANGSearch_StayCurrentFSCheckButton := LANGenSearch_StayCurrentFSCheckButton;
+ LANGSearch_CaseSensitiveMatchCheckButton := LANGenSearch_CaseSensitiveMatchCheckButton;
+ LANGSearch_Size := LANGenSearch_Size;
+ LANGSearch_Date := LANGenSearch_Date;
+ LANGSearch_BiggerThan := LANGenSearch_BiggerThan;
+ LANGSearch_SmallerThan := LANGenSearch_SmallerThan;
+ LANGSearch_ModifiedBetweenRadioButton := LANGenSearch_ModifiedBetweenRadioButton;
+ LANGSearch_NotModifiedAfterRadioButton := LANGenSearch_NotModifiedAfterRadioButton;
+ LANGSearch_ModifiedLastRadioButton := LANGenSearch_ModifiedLastRadioButton;
+ LANGSearch_ModifiedNotLastRadionButton := LANGenSearch_ModifiedNotLastRadionButton;
+ LANGSearch_ModifiedBetweenEntry1 := LANGenSearch_ModifiedBetweenEntry1;
+ LANGSearch_ViewButtonCaption := LANGenSearch_ViewButtonCaption;
+ LANGSearch_NewSearchButtonCaption := LANGenSearch_NewSearchButtonCaption;
+ LANGSearch_GoToFileButtonCaption := LANGenSearch_GoToFileButtonCaption;
+ LANGSearch_FeedToListboxButtonCaption := LANGenSearch_FeedToListboxButtonCaption;
+ LANGSearch_StatusSC := LANGenSearch_StatusSC;
+ LANGSearch_Ready := LANGenSearch_Ready;
+ LANGSearch_PreparingToSearch := LANGenSearch_PreparingToSearch;
+ LANGSearch_SearchInProgress := LANGenSearch_SearchInProgress;
+ LANGSearch_UserCancelled := LANGenSearch_UserCancelled;
+ LANGSearch_SearchFinished := LANGenSearch_SearchFinished;
+ LANGSearch_FilesFound := LANGenSearch_FilesFound;
+ LANGSearch_And := LANGenSearch_And;
+
+ LANGCloseOpenConnection := LANGenCloseOpenConnection;
+ LANGDuplicateTabWarning := LANGenDuplicateTabWarning;
+ LANGDontShowAgain := LANGenDontShowAgain;
+ LANGSwitchOtherPanelWarning := LANGenSwitchOtherPanelWarning;
+ LANGOpenConnectionsWarning := LANGenOpenConnectionsWarning;
+ LANGmiDisconnect_Caption := LANGenmiDisconnect_Caption;
+ LANGDisconnectButton_Tooltip := LANGenDisconnectButton_Tooltip;
+ LANGLeaveArchiveButton_Tooltip := LANGenLeaveArchiveButton_Tooltip;
+ LANGOpenTerminalButton_Tooltip := LANGenOpenTerminalButton_Tooltip;
+ LANGOpenTerminalButton_Caption := LANGenOpenTerminalButton_Caption;
+ LANGShowTextUIDsCheckBox_Caption := LANGenShowTextUIDsCheckBox_Caption;
+ LANGShowTextUIDsCheckBox_Tooltip := LANGenShowTextUIDsCheckBox_Tooltip;
+
+ LANGmiNewTab_Caption := LANGenmiNewTab_Caption;
+ LANGFilePopupMenu_Properties := LANGenFilePopupMenu_Properties;
+ LANGCommandEntry_Tooltip := LANGenCommandEntry_Tooltip;
+ LANGmiFiles_Caption := LANGenmiFiles_Caption;
+
+ LANGPasswordButton_Tooltip := LANGenPasswordButton_Tooltip;
+ LANGHandleRunFromArchive_Bytes := LANGenHandleRunFromArchive_Bytes;
+ LANGHandleRunFromArchive_FileTypeDesc_Unknown := LANGenHandleRunFromArchive_FileTypeDesc_Unknown;
+ LANGHandleRunFromArchive_NotAssociated := LANGenHandleRunFromArchive_NotAssociated;
+ LANGHandleRunFromArchive_SelfExecutable := LANGenHandleRunFromArchive_SelfExecutable;
+ LANGHandleRunFromArchive_CouldntCreateTemporaryDirectory := LANGenHandleRunFromArchive_CouldntCreateTemporaryDirectory;
+ LANGFRunFromVFS_Caption := LANGenFRunFromVFS_Caption;
+ LANGFRunFromVFS_TitleLabel := LANGenFRunFromVFS_TitleLabel;
+ LANGFRunFromVFS_FileNameLabel := LANGenFRunFromVFS_FileNameLabel;
+ LANGFRunFromVFS_FileTypeLabel := LANGenFRunFromVFS_FileTypeLabel;
+ LANGFRunFromVFS_SizeLabel := LANGenFRunFromVFS_SizeLabel;
+ LANGFRunFromVFS_PackedSizeLabel := LANGenFRunFromVFS_PackedSizeLabel;
+ LANGFRunFromVFS_DateLabel := LANGenFRunFromVFS_DateLabel;
+ LANGFRunFromVFS_InfoLabel := LANGenFRunFromVFS_InfoLabel;
+ LANGFRunFromVFS_OpensWithLabel := LANGenFRunFromVFS_OpensWithLabel;
+ LANGFRunFromVFS_ExecuteButton := LANGenFRunFromVFS_ExecuteButton;
+ LANGFRunFromVFS_ExecuteAllButton := LANGenFRunFromVFS_ExecuteAllButton;
+ LANGFSetPassword_Caption := LANGenFSetPassword_Caption;
+ LANGFSetPassword_Label1_Caption := LANGenFSetPassword_Label1_Caption;
+ LANGFSetPassword_Label2_Caption := LANGenFSetPassword_Label2_Caption;
+ LANGFSetPassword_ShowPasswordCheckButton := LANGenFSetPassword_ShowPasswordCheckButton;
+end;
+
+initialization
+ AddTranslation('US', @SetTranslation);
+ AddTranslation('EN', @SetTranslation);
+ AddTranslation('en_US', @SetTranslation);
+ AddTranslation('C', @SetTranslation); // Please don't add this line to your translations, it is default "C" locale (of course English)
+end.
diff --git a/translations/UTranslation_ES.pas b/translations/UTranslation_ES.pas
new file mode 100644
index 0000000..72d7b8d
--- /dev/null
+++ b/translations/UTranslation_ES.pas
@@ -0,0 +1,1253 @@
+(*
+ Tux Commander - UTranslation_ES - Spanish Localization constants
+ Copyright (C) 2007 Daniel Areiza <nnoseman@hotmail.com>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit UTranslation_ES;
+
+interface
+
+implementation
+
+uses ULocale;
+
+const LANGesF2Button_Caption = 'F2 - Renombrar';
+ LANGesF3Button_Caption = 'F3 - Ver';
+ LANGesF4Button_Caption = 'F4 - Editar';
+ LANGesF5Button_Caption = 'F5 - Copiar';
+ LANGesF6Button_Caption = 'F6 - Mover';
+ LANGesF7Button_Caption = 'F7 - MkDir';
+ LANGesF8Button_Caption = 'F8 - Eliminar';
+
+ LANGesmnuFile_Caption = '_Archivo';
+ LANGesmnuMark_Caption = '_Seleccionar';
+ LANGesmnuCommands_Caption = '_Comandos';
+ LANGesmnuHelp_Caption = 'A_yuda';
+ LANGesmiExit_Caption = 'Sa_lir';
+ LANGesmiSelectGroup_Caption = 'Seleccionar _Grupo...';
+ LANGesmiUnselectGroup_Caption = '_Deseleccionar Grupo...';
+ LANGesmiSelectAll_Caption = '_Seleccionar Todo';
+ LANGesmiUnselectAll_Caption = 'D_eseleccinar Todo';
+ LANGesmiInvertSelection_Caption = '_Invertir Selección';
+ LANGesmiRefresh_Caption = '_Actualizar';
+ LANGesmiAbout_Caption = '_Acerca...';
+
+ LANGesColumn1_Caption = 'Nombre';
+ LANGesColumn2_Caption = 'Ext';
+ LANGesColumn3_Caption = 'Tamaño';
+ LANGesColumn4_Caption = 'Fecha';
+ LANGesColumn5_Caption = 'Atrib';
+
+ LANGesExpandSelection = 'Expandir selección';
+ LANGesShrinkSelection = 'Restringir selección';
+ LANGesNoMatchesFound = 'No se encontró nada';
+ LANGesNoFilesSelected = '¡No hay archivos seleccionados!';
+ LANGesSelectedFilesDirectories = '%d archivos/directorios seleccionados';
+ LANGesDirectoryS = 'directorio %s';
+ LANGesFileS = 'archivo %s';
+ LANGesDoYouReallyWantToDeleteTheS = '¿Realmente desea eliminar el %s?';
+ LANGesDoYouReallyWantToDeleteTheSS = '¿Realmente desea eliminar %s?'#10'%s';
+ LANGesCopyFiles = 'Copiar archivos';
+ LANGesMoveRenameFiles = 'Mover/Renombrar archivos';
+ LANGesCopyDFileDirectoriesTo = 'Copiar %d archivo/directorios a';
+ LANGesMoveRenameDFileDirectoriesTo = 'Mover/Renombrar %d archivo/directorios a';
+ LANGesCopySC = 'Copiar:';
+ LANGesMoveRenameSC = 'Mover/Renombrar:';
+
+ LANGesQuickFind = 'Búsqueda rápida:';
+
+ LANGesAboutString = 'Tux Commander'#10'Version %s'#10'Build date: %s'#10#10'Copyright (c) 2008 Tomas Bzatek'#10'E-mail: tbzatek@users.sourceforge.net'#10'Website: http://tuxcmd.sourceforge.net/';
+ LANGesAboutStringGnome = 'version %s'#10'Build date: %s'#10'Website: http://tuxcmd.sourceforge.net/';
+ LANGesDiskStatFmt = '%s de %s libres';
+ LANGesDiskStatVolNameFmt = '[%s] %s de %s libres';
+ LANGesStatusLineFmt = '%s de %s en %d de %d archivos seleccionados';
+ LANGesPanelStrings : array[boolean] of string = ('derecho', 'izquierdo');
+
+ LANGesDIR = '<DIR>';
+ LANGesErrorGettingListingForSPanel = 'Ha ocurrido un error listando el panel %s:'#10' %s'#10#10'Ruta = ''%s''';
+ LANGesErrorGettingListingForSPanelNoPath = 'Error listando el panel %s:'#10' %s';
+ LANGesErrorCreatingNewDirectorySInSPanel = 'Error creando el nuevo directorio ''%s'' en el panel %s:'#10' %s';
+ LANGesErrorCreatingNewDirectorySInSPanelNoPath = 'Error creando el nuevo directorio en el panel %s:'#10' %s';
+ LANGesTheFileDirectory = 'El archivo/directorio';
+ LANGesCouldNotBeDeleted = 'no se puede eliminar';
+ LANGesCouldNotBeDeletedS = 'no se puede eliminar: %s';
+ LANGesUserCancelled = '¡Cancelado por el usuario!';
+ LANGesTheDirectorySIsNotEmpty = '¡El directorio %s no esta vacío!';
+ LANGesCannotCopyFile = 'No se puede copiar el archivo';
+ LANGesCopyError = 'Ha ocurrido un error copiando';
+ LANGesMoveError = 'Ha ocurrido un error moviendo';
+ LANGesOverwriteS = 'Sobrescribir: %s';
+ LANGesWithFileS = 'Con el archivo: %s';
+ LANGesOvewriteSBytesS = '%s bytes, %s';
+ LANGesTheFile = 'El archivo';
+ LANGesCopy = 'Copiar';
+ LANGesMove = 'Mover';
+ LANGesTheDirectory = 'El directorio';
+ LANGesTheSymbolicLink = 'El enlace simbólico';
+ LANGesCannotMoveFile = 'No se puede mover el archivo';
+ LANGesCouldNotBeCreated = 'no se pudo crear';
+ LANGesCouldNotBeCreatedS = 'no se pudo crear: %s';
+ LANGesFromS = 'Desde: %s';
+ LANGesToS = 'Hasta: %s';
+ LANGesCannotCopyFileToItself = 'No se puede copiar el archivo a si mismo';
+ LANGesMemoryAllocationFailed = 'Fallo de alocación de memoria:';
+ LANGesCannotOpenSourceFile = 'No se puede abrir el archivo de origen';
+ LANGesCannotOpenDestinationFile = 'No se puede abrir el archivo de destino';
+ LANGesCannotCloseDestinationFile = 'No se puede cerrar el archivo de destino';
+ LANGesCannotCloseSourceFile = 'No se puede cerrar el archivo de origen';
+ LANGesCannotReadFromSourceFile = 'No se puede leer el archivo de origen';
+ LANGesCannotWriteToDestinationFile = 'No se puede escribir el archivo de destino';
+
+ LANGesUnknownException = 'Excepción Desconocida';
+ LANGesNoAccess = 'No Hay Acceso';
+ LANGesUnknownError = 'Error Desconocido';
+
+ LANGesCreateANewDirectory = 'Crear directorio';
+ LANGesEnterDirectoryName = 'Introduzca el nombre del _directorio:';
+
+ LANGesOverwriteQuestion = 'Advertencia';
+ LANGesOverwriteButton_Caption = '_Sobrescribir';
+ LANGesOverwriteAllButton_Caption = 'Sobrescribir t_odo';
+ LANGesSkipButton_Caption = 'S_altar';
+ LANGesOverwriteAllOlderButton_Caption = 'Sobrescribir lo vi_ejo';
+ LANGesSkipAllButton_Caption = 'Sal_tar todo';
+ LANGesRenameButton_Caption = '_Renombrar';
+ LANGesAppendButton_Caption = 'Aña_dir';
+ LANGesRename = 'Renombrar';
+ LANGesRenameFile = 'Renombrar el archivo ''%s'' a';
+ LANGesIgnoreButton_Caption = '_Ignorar';
+
+ LANGesProgress = 'Progreso';
+ LANGesCancel = '_Cancelar';
+ LANGesDelete = 'Eliminar:';
+
+ LANGesSpecifyFileType = 'E_specificar tipo de archivo:';
+
+ LANGesRemoveDirectory = 'Eliminar directorio';
+ LANGesDoYouWantToDeleteItWithAllItsFilesAndSubdirectories = '¿Lo quiere eliminar con todos sus archivos y subdirectorios?';
+ LANGesRetry = '_Reintentar';
+ LANGesDeleteButton_Caption = '_Eliminar';
+ LANGesAll = '_Todo';
+
+ LANGesCopyFilesSC = 'Copiar archivos:';
+ LANGesAppendQuestion = '¿Esta seguro que quiere añadir el archivo ''%s'' a ''%s''?';
+ LANGesPreparingList = 'Preparando lista...';
+
+ LANGesYouMustSelectAValidFile = 'Debe seleccionar un archivo valido';
+ LANGesmiVerifyChecksums = '_Verificar checksums';
+ LANGesVerifyChecksumsCaption = 'Verificar checksums';
+ LANGesCheckButtonCaptionCheck = '_Seleccionar';
+ LANGesCheckButtonCaptionStop = '_Parar';
+ LANGesFileListTooltip = '[?] - No seleccionado'#10'[OK] - Checksum OK'#10'[Malo] - Checksum Malo'#10'[N/A] - Archivo no disponible';
+ LANGesFilenameColumnCaption = 'Nombre de archivo';
+ LANGesTheFileSYouAreTryingToOpenIsQuiteBig = 'El archivo ''%s'', que esta tratando de abrir es muy grande (%s bytes). Puede que no sea un archivo valido.'#10#10'¿Lo desea abrir de todas formas?';
+ LANGesAnErrorOccuredWhileInitializingMemoryBlock = 'Ha ocurrido un error mientras se inicializaba el bloque de memoria. Cierre algunas aplicaciones e intente de nuevo.';
+ LANGesAnErrorOccuredWhileOpeningFileSS = 'Ha ocurrido un error abriendo el archivo ''%s'':'#10' %s';
+ LANGesAnErrorOccuredWhileReadingFileSS = 'Ha ocurrido un error leyendo el archivo ''%s'':'#10' %s';
+ LANGesChecksumNotChecked = '<span weight="bold">Estado:</span> No seleccionado';
+ LANGesChecksumChecking = '<span weight="bold">Estado:</span> Comprobando...';
+ LANGesChecksumInterrupted = '<span weight="bold">Estado:</span> Interrumpido';
+ LANGesChecksumDOK = '<span weight="bold">Estado:</span> %d%% OK';
+
+ LANGesmiCreateChecksumsCaption = '_Crear checksums...';
+ LANGesYouMustSelectAtLeastOneFileToCalculateChecksum = '¡Debe de seleccionar al menos un archivo para calcular el checksum!';
+ LANGesCreateChecksumsCaption = 'Crear checksums';
+ LANGesCCHKSUMPage1Text = 'Va a crear los checksums para'#10'los archivos seleccionados. Si no ha seleccionado'#10'todos los archivos que desea, cierre esta ventana y'#10'seleccione más archivos.';
+ LANGesCCHKSUMPage4Text = 'El programa esta listo para crear los checksums de'#10'los archivos seleccionados. Esta operacion puede tardar unos minutos.'#10'Presione Siguiente para continuar.';
+ LANGesCCHKSUMPage6Text = 'Hubo errores creando el/los checksum:';
+ LANGesCCHKSUMPage7Text = 'La creación del checksum a finalizado, y'#10'los archivos estan listos.'#10#10'Presione Finalizar para salir.';
+ LANGesCCHKSUMPage1Title = '<span size="xx-large" weight="ultrabold">Preparar archivos</span>';
+ LANGesCCHKSUMPage2Title = '<span size="xx-large" weight="ultrabold">Seleccione el tipo de archivo</span>';
+ LANGesCCHKSUMPage3Title = '<span size="xx-large" weight="ultrabold">Elige nombre de archivo</span>';
+ LANGesCCHKSUMPage4Title = '<span size="xx-large" weight="ultrabold">Listos</span>';
+ LANGesCCHKSUMPage5Title = '<span size="xx-large" weight="ultrabold">Procesando...</span>';
+ LANGesCCHKSUMPage6Title = '<span size="xx-large" weight="ultrabold">¡Error!</span>';
+ LANGesCCHKSUMPage7Title = '<span size="xx-large" weight="ultrabold">Finalizado</span>';
+ LANGesCCHKSUMSFVFile = 'Archivo SFV';
+ LANGesCCHKSUMMD5sumFile = 'Archivo MD5sum';
+ LANGesCCHKSUMFileName = '_Nombre de archivo:';
+ LANGesCCHKSUMCreateSeparateChecksumFiles = 'Crear archivos _individuales';
+ LANGesCCHKSUMNowProcessingFileS = 'Procesando archivo: %s';
+ LANGesCCHKSUMFinishCaption = '_Finalizar';
+ LANGesCCHKSUMAreYouSureYouWantToAbortTheProcessing = '¿Esta seguro que desea cancelarlo?';
+ LANGesCCHKSUMAnErrorOccuredWhileOpeningFileSS = 'Ha ocurrido un error abriendo el archivo ''%s'': %s'#10;
+ LANGesCCHKSUMAnErrorOccuredWhileReadingFileSS = 'Ha ocurrido un error leyendo el archivo ''%s'': %s'#10;
+ LANGesCCHKSUMAnErrorOccuredWhileWritingFileSS = 'Ha ocurrido un error escribiendo el archivo ''%s'': %s'#10;
+
+ LANGesAnErrorOccuredWhileWritingFileSS = 'Ha ocurrido un error escribiendo el archivo ''%s'':'#10' %s';
+ LANGesTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt = 'El archivo de destino ''%s'' ya existe. ¿Lo desea sobrescribir?';
+ LANGesTheTargetFileSCannotBeRemovedS = 'El archivo de destino ''%s'' no se puede eliminar: %s';
+ LANGesMergeCaption = 'Unir';
+ LANGesPleaseInsertNextDiskOrGiveDifferentLocation = 'Por favor inserte un nuevo disco, o una ruta diferente:';
+ LANGesMergeOfSSucceeded = 'Unión de ''%s'' exitosa (CRC checksum OK).';
+ LANGesWarningCreatedFileFailsCRCCheck = 'Advertencia: ¡El archivo creado falla la comprobación CRC!';
+ LANGesMergeOfSSucceeded_NoCRCFileAvailable = 'Unión de ''%s'' exitosa (no esta disponible el archivo CRC).';
+ LANGesMergeSAndAllFilesWithAscendingNamesToTheFollowingDirectory = 'Unir ''%s'' y todos los archivos con nombres ascendentes al siguiente directorio:';
+ LANGesMergeSC = 'Unir:';
+ LANGesmiSplitFileCaption = '_Dividir archivo...';
+ LANGesmiMergeFilesCaption = '_Unir archivos...';
+
+ LANGesSplitTheFileSToDirectory = '_Dividir el archivo ''%s'' al directorio:';
+ LANGesSplitSC = 'Dividir:';
+ LANGesSplitFile = 'Dividir archivo';
+ LANGesBytesPerFile = '_Bytes por archivo:';
+ LANGesAutomatic = 'Automático';
+ LANGesDeleteFilesOnTargetDisk = '_Eliminar archivos en el disco de destino (útil para discos extraibles)';
+ LANGesSplitCaption = 'Dividir';
+ LANGesCannotOpenFileS = 'No se puede abrir el archivo ''%s''';
+ LANGesCannotSplitTheFileToMoreThan999Parts = '¡No se puede dividir el archivo en más de 999 partes!';
+ LANGesThereAreSomeFilesInTheTargetDirectorySDoYouWantToDeleteThem = 'Hay algunos archivos en el directorio de destino:'#10'%s'#10'¿Los desea eliminar?';
+ LANGesThereAreDFilesInTheTargetDirectoryDoYouWantToDeleteThem = 'Hay %d archivos en el directorio de destino. ¿Los quiere eliminar?';
+ LANGesAnErrorOccuredWhileOperationS = 'Ha ocurrido un error: %s';
+ LANGesSplitOfSSucceeded = 'División de ''%s'' exitosa.';
+ LANGesSplitOfSFailed = '¡División de ''%s'' fallida!';
+
+ LANGesmnuShow_Caption = '_Ver';
+ LANGesmiShowDotFiles_Caption = 'Ver archiv_os ocultos';
+ LANGesTheFileYouAreTryingToOpenIsQuiteBig = 'El archivo que esta tratando de abrir es muy grande. Abrirlo en una aplicación externa (como gedit) puede causar que el sistema se torne lento.'#10'¿Desea continuar?';
+ LANGesCannotExecuteSPleaseCheckTheConfiguration = 'No se puede ejecutar ''%s''. Por favor compruebe la configuración o asigne correctamente el tipo de archivo.';
+ LANGesEdit = 'Editar';
+ LANGesEnterFilenameToEdit = '_Ingrese el nombre de archivo a editar:';
+
+ LANGesmnuSettings_Caption = 'C_onfiguración';
+ LANGesmiFileTypes_Caption = '_Tipos de archivo...';
+ LANGesThereIsNoApplicationAssociatedWithS = 'No hay una aplicación asociada con "%s".'#10#10'Puede configurar Tux Commander para asociar aplicaciones con los diferentes tipos de archivo. ¿Desea asociar una aplicación con este tipo de archivo?';
+ LANGesErrorExecutingCommand = '¡Error ejecutando el comando!';
+ LANGesEditFileTypesCaption = 'Editar Tipos de Archivo';
+ LANGesTitleLabel_Caption = '<span size="x-large" weight="ultrabold">Configuración de Tipos de Archivo</span>';
+ LANGesExtensionsColumn = 'Extensión';
+ LANGesDescriptionColumn = 'Descripción';
+ LANGesFileTypesList = 'Lista de tipos de archivo';
+ LANGesActionName = 'Nombre de la acción';
+ LANGesCommand = 'Comando';
+ LANGesSetDefaultActionButton_Caption = '_Valor predeterminado';
+ LANGesRunInTerminalCheckBox_Caption = 'Lanzar en _Terminal';
+ LANGesAutodetectCheckBox_Caption = 'Auto detectar aplicación _GUI';
+ LANGesBrowseButton_Caption = '_Buscar...';
+ LANGesCommandLabel_Caption = 'Co_mando:';
+ LANGesDescriptionLabel_Caption = 'D_escripción:';
+ LANGesFNameExtLabel_Caption = 'A_gregar extensión:';
+ LANGesNotebookPageExtensions = 'Tipo de archivo';
+ LANGesNotebookPageActions = 'Acción';
+ LANGesDefault = ' (predeterminado)';
+ LANGesCannotSaveFileTypeAssociationsBecauseOtherProcess = 'No se puede guardar el archivo de asociación, porque otro proceso lo ha actualizado.';
+
+ LANGesDefaultColor = 'Color p_redeterminado';
+ LANGesIcon = '_Icono:';
+ LANGesBrowseForIcon = 'Buscar icono';
+ LANGesSelectFileTypeColor = 'Seleccionar color para el tipo de archivo';
+ LANGesColor = 'Co_lor:';
+
+ LANGesmiChangePermissions_Caption = 'Cambiar Per_misos...';
+ LANGesmiChangeOwner_Caption = 'Cambiar Dueño/Grupo...';
+ LANGesmiCreateSymlink_Caption = 'Crear enlace simbólico...';
+ LANGesmiEditSymlink_Caption = '_Editar enlace simbólico...';
+ LANGesChmodProgress = 'Cambiar permisos:';
+ LANGesChownProgress = 'Cambiar dueño:';
+ LANGesYouMustSelectAValidSymbolicLink = '¡Debe seleccionar un enlace simbólico valido!';
+ LANGesPopupRunS = 'E_jecutar %s';
+ LANGesPopupOpenS = 'A_brir %s';
+ LANGesPopupGoUp = '_Subir';
+ LANGesPopupOpenWithS = 'Abrir con %s';
+ LANGesPopupDefault = ' (predeterminado)';
+ LANGesPopupOpenWith = 'A_brir con...';
+ LANGesPopupViewFile = '_Ver archivo';
+ LANGesPopupEditFile = 'Ed_itar archivo';
+ LANGesPopupMakeSymlink = 'Crear enlace simbólico';
+ LANGesPopupRename = '_Renombrar';
+ LANGesPopupDelete = '_Eliminar';
+ LANGesDialogChangePermissions = 'Cambiar permisos';
+ LANGesCouldNotBeChmoddedS = 'No se pudo cambiar los permisos: %s';
+ LANGesDialogChangeOwner = 'Cambiar dueño';
+ LANGesCouldNotBeChownedS = 'No se pudo cambiar de dueño: %s';
+ LANGesDialogMakeSymlink = 'Crear enlace simbólico';
+ LANGesDialogEditSymlink = 'Editar enlace simbólico';
+ LANGesFEditSymlink_Caption = 'Editar enlace simbólico';
+ LANGesFEditSymlink_SymbolicLinkFilename = 'Nombre del enlace _simbólico:';
+ LANGesFEditSymlink_SymbolicLinkPointsTo = 'El enlace simbólico apun_ta a:';
+
+ LANGesFChmod_Caption = 'Permisos de Acceso';
+ LANGesFChmod_PermissionFrame = 'Permisos';
+ LANGesFChmod_FileFrame = 'Archivo';
+ LANGesFChmod_ApplyRecursivelyFor = 'Aplicar _recursivamente para';
+ LANGesFChmod_miAllFiles = 'Todos los archivos y carpetas';
+ LANGesFChmod_miDirectories = 'Solo directorios';
+ LANGesFChmod_OctalLabel = '_Octal:';
+ LANGesFChmod_SUID = 'SUID - Asignar ID de usuario al ejecutar';
+ LANGesFChmod_SGID = 'SGID - Asignar ID de grupo al ejecutar';
+ LANGesFChmod_Sticky = 'Sticky bit';
+ LANGesFChmod_RUSR = 'RUSR - Leer por dueño';
+ LANGesFChmod_WUSR = 'WUSR - Escribir por dueño';
+ LANGesFChmod_XUSR = 'XUSR - Ejecutar/buscar por dueño';
+ LANGesFChmod_RGRP = 'RGRP - Leer por grupo';
+ LANGesFChmod_WGRP = 'WGRP - Escribir por grupo';
+ LANGesFChmod_XGRP = 'XGRP - Ejecutar/buscar por grupo';
+ LANGesFChmod_ROTH = 'ROTH - Leer por otros';
+ LANGesFChmod_WOTH = 'WOTH - Escribir por otros';
+ LANGesFChmod_XOTH = 'XOTH - Ejecutar/buscar por otros';
+ LANGesFChmod_TextLabel = '<span weight="ultrabold">Texto:</span> %s';
+ LANGesFChmod_FileLabel = '<span weight="ultrabold">Archivo:</span> %s'#10'<span weight="ultrabold">Texto:</span> %s'#10 +
+ '<span weight="ultrabold">Octal:</span> %d'#10'<span weight="ultrabold">Dueño:</span> %s'#10 +
+ '<span weight="ultrabold">Grupo:</span> %s';
+
+ LANGesFChown_Caption = 'Cambiar dueño/grupo';
+ LANGesFChown_OwnerFrame = 'Nombre de usuario';
+ LANGesFChown_GroupFrame = 'Nombre del grupo';
+ LANGesFChown_FileFrame = 'Archivo';
+ LANGesFChown_ApplyRecursively = 'Aplicar _recursivamente';
+
+ LANGesFSymlink_Caption = 'Crear enlace simbólico';
+ LANGesFSymlink_ExistingFilename = 'Nombre de archivo _existente (nombre de archivo al cual el enlace simbólico apuntara):';
+ LANGesFSymlink_SymlinkFilename = 'Nombre del enlace _simbólico:';
+
+ LANGesmnuBookmarks_Caption = '_Favoritos';
+ LANGesmiAddBookmark_Caption = 'Agregar Favorito';
+ LANGesmiEditBookmarks_Caption = 'Editar Favoritos';
+ LANGesBookmarkPopupDelete_Caption = 'E_liminar';
+ LANGesmiPreferences_Caption = '_Preferencias...';
+ LANGesTheCurrentDirectoryAlreadyExistsInTheBookmarksList = 'El directorio actual ya existe en la lista de favoritos';
+ LANGesSomeOtherInstanceChanged = 'Una segunda instancia de Tux Commander a cambiado la configución. ¿Desea aplicar la nueva configuración?'#10#10'Advertencia: Si presiona No en este punto, la configuración se sobrescribirá en esta instancia';
+
+ LANGesPreferences_Caption = 'Preferencias de la Aplicación';
+ LANGesPreferences_TitleLabel_Caption = '<span size="x-large" weight="ultrabold">Preferencias</span>';
+ LANGesPreferences_GeneralPage = 'General';
+ LANGesPreferences_FontsPage = 'Fuentes';
+ LANGesPreferences_ColorsPage = 'Colores';
+ LANGesPreferences_RowHeight = '_Altura del cuadro:';
+ LANGesPreferences_NumHistoryItems = 'Ele_mentos en el historial:';
+ LANGesPreferences_Default = 'P_redeterminado';
+ LANGesPreferences_ClearReadonlyAttribute = 'Borrar el atributo de solo lectura cuando se copia desde el CD-ROM';
+ LANGesPreferences_DisableMouseRenaming = 'Deshabilitar renombrar con el _mouse';
+ LANGesPreferences_ShowFiletypeIconsInList = 'Mostrar iconos del tipo de archivo';
+ LANGesPreferences_ExternalAppsLabel = '<span weight="ultrabold">Programas Externos</span>';
+ LANGesPreferences_Viewer = '_Visor:';
+ LANGesPreferences_Editor = '_Editor:';
+ LANGesPreferences_Terminal = '_Terminal:';
+ LANGesPreferences_ListFont = 'Fuente:';
+ LANGesPreferences_Change = 'Cambiar...';
+ LANGesPreferences_UseDefaultFont = 'Usar fuente _predeterminada';
+ LANGesPreferences_Foreground = 'Foreground';
+ LANGesPreferences_Background = 'Background';
+ LANGesPreferences_NormalItem = 'Item Normal:';
+ LANGesPreferences_SetToDefaultToUseGTKThemeColors = 'Aplicar lo predeterminado para usar los colores del tema GTK';
+ LANGesPreferences_Cursor = 'Cursor:';
+ LANGesPreferences_InactiveItem = 'Item Inactivo::';
+ LANGesPreferences_SelectedItem = 'Item Seleccionado:';
+ LANGesPreferences_LinkItem = 'Enlaces simbólicos:';
+ LANGesPreferences_LinkItemHint = 'Aplicar lo predeterminado para mostrar los enlaces simbólicos usando los colores de los ítems normales';
+ LANGesPreferences_DotFileItem = 'Archivos ocultos:';
+ LANGesPreferences_DotFileItemHint = 'Aplicar lo predeterminado para mostrar los archivos ocultos usando los colores de los ítems normales';
+ LANGesPreferences_BrowseForApplication = 'Buscar aplicación';
+ LANGesPreferences_DefaultS = 'Predeterminado: %s';
+ LANGesPreferences_SelectFont = 'Seleccionar fuente';
+
+ (*************** STRINGS ADDED TO v0.4.101 **********************************************************************************)
+ LANGesBookmarkButton_Tooltip = 'Mostrar favoritos';
+ LANGesUpButton_Tooltip = 'Ir al directorio anterior';
+ LANGesRootButton_Tooltip = 'Ir al directrio root (/)';
+ LANGesHomeButton_Tooltip = 'Ir al directorio de usuario (/home/user)';
+ LANGesLeftEqualButton_Tooltip = 'Cambiar el panel derecho al mismo directorio';
+ LANGesRightEqualButton_Tooltip = 'Cambiar el panel izquierdo al mismo directorio';
+ LANGesmiShowDirectorySizes_Caption = 'Mostar tamaño de los d_irectorios';
+ LANGesmiTargetSource_Caption = '_Destino = Origen';
+ LANGesFileTypeDirectory = 'Directorio';
+ LANGesFileTypeFile = 'Archivo';
+ LANGesFileTypeMetafile = 'Esto es un meta-ítem común';
+ LANGesPreferencesPanelsPage = 'Paneles';
+ LANGesPreferencesApplicationsPage = 'Aplicaciones';
+ LANGesPreferencesExperimentalPage = 'Experimental';
+ LANGesPreferencesSelectAllDirectoriesCheckBox_Caption = 'Seleccionar directorios _también cuando se selecciona todo';
+ LANGesPreferencesNewStyleAltOCheckBox_Caption = '_Nuevo estilo Alt+O';
+ LANGesPreferencesNewStyleAltOCheckBox_Tooltip = 'Mantenerse en el mismo directorio cuando se cambia el directorio del panel contrario al presionar Ctrl/Alt+O';
+ LANGesPreferencesShowFuncButtonsCheckBox_Caption = 'Mostrar los atajos de las _teclas';
+ LANGesPreferencesSizeFormatLabel_Caption = 'Formato del T_amaño:';
+ LANGesPreferencesmiSizeFormat1 = 'Sistema';
+ LANGesPreferencesmiSizeFormat6 = 'Agrupado';
+ LANGesPreferencesAutodetectXApp = 'Auto detectar la aplicación';
+ LANGesPreferencesAlwaysRunInTerminal = 'Siempre lanzar en terminal';
+ LANGesPreferencesNeverRunInTerminal = 'Nunca lanzar en terminal';
+ LANGesPreferencesCmdLineBehaviourLabel_Caption = '_Ejecutar desde la línea de comandos:';
+ LANGesPreferencesFeatures = 'Preferencias';
+ LANGesPreferencesDisableMouseRename_Tooltip = 'Aun podrá hacer un renombramiento rápido presionando Shift+F6';
+ LANGesPreferencesDisableFileTipsCheckBox_Caption = 'Deshabilitar _tooltips';
+ LANGesPreferencesDisableFileTipsCheckBox_Tooltip = 'No mostrar los tooltips del panel si el texto en una columna esta truncado';
+ LANGesPreferencesShow = 'Ver';
+ LANGesPreferencesDirsInBoldCheckBox_Caption = 'Directorios _resaltados';
+ LANGesPreferencesDisableDirectoryBracketsCheckBox_Caption = 'Deshabilitar los b_rackets de los directorios';
+ LANGesPreferencesOctalPermissionsCheckBox_Caption = 'Mostrar permisos en _octal';
+ LANGesPreferencesOctalPermissionsCheckBox_Tooltip = 'Mostrar permisos de archivo/directorio como un numero en vez de la forma de texto (-rw-rw-rw-)';
+ LANGesPreferencesMovement = 'Movimiento';
+ LANGesPreferencesLynxLikeMotionCheckBox_Caption = 'Movimiento como en _Lynx';
+ LANGesPreferencesInsertMovesDownCheckBox_Caption = '_Insertar desplaza hacia abajo';
+ LANGesPreferencesSpaceMovesDownCheckBox_Caption = 'E_spaciadora desplaza hacia abajo';
+ LANGesPreferencesViewer = 'Visor';
+ LANGesPreferencesCommandSC = 'Comando:';
+ LANGesPreferencesUseInternalViewer = 'Usar visor _interno';
+ LANGesPreferencesEditor = 'Editor';
+ LANGesPreferencesTerminal = 'Terminal';
+ LANGesPreferencesExperimentalFeatures = 'Preferencias Experimentales';
+ LANGesPreferencesExperimentalWarningLabel_Caption = '<span weight="ultrabold">Advertencia:</span> Estas opciones están actualmente en desarrollo y puede que no funcionen correctamente. ¡Uselas bajo su propio riesgo!';
+ LANGesPreferencesFocusRefreshCheckBox_Caption = '_Actualizar cuando se enfoque la ventana';
+ LANGesPreferencesFocusRefreshCheckBox_Tooltip = 'Actualización de los paneles muy lenta en este momento';
+ LANGesPreferencesWMCompatModeCheckBox_Caption = 'Compatibilidad con _WM';
+ LANGesPreferencesWMCompatModeCheckBox_Tooltip = 'Uselo si tiene problemas con su administrador de ventanas (por ejemplo IceWM no maximiza correctamente)';
+ LANGesPreferencesCompatUseLibcSystemCheckBox_Caption = 'Usar la librería libc del _sistema() para ejecutar programas';
+ LANGesPreferencesCompatUseLibcSystemCheckBox_Tooltip = 'Usar en caso de congelamientos o problemas de bloqueo cuando se lanza una aplicación externa';
+
+ (*************** STRINGS ADDED TO v0.5.70 **********************************************************************************)
+ LANGesmiSearchCaption2 = '_Buscar...';
+ LANGesmiNoMounterBarCaption = '_No mostrar la barra de montajes';
+ LANGesmiShowOneMounterBarCaption = 'Mostrar _una barra de montaje';
+ LANGesmiShowTwoMounterBarCaption = 'Mostrar _dos barras de montaje';
+ LANGesmnuNetworkCaption = 'R_ed';
+ LANGesmiConnectionsCaption = '_Conexiones...';
+ LANGesmiOpenConnectionCaption = '_Abrir conexión...';
+ LANGesmiQuickConnectCaption = 'Conexión _rápida...';
+ LANGesmnuPluginsCaption = 'Pl_ugins';
+ LANGesmiTestPluginCaption = '_Probar plugin...';
+ LANGesmiMounterSettingsCaption = '_Montajes...';
+ LANGesmiColumnsCaption = 'Columnas del P_anel...';
+ LANGesmiSavePositionCaption = '_Salvar posición';
+ LANGesmiMountCaption = '_Montar';
+ LANGesmiUmountCaption = '_Desmontar';
+ LANGesmiEjectCaption = '_Ejecutar';
+ LANGesmiDuplicateTabCaption = 'Duplicar tab actual';
+ LANGesmiCloseTabCaption = 'Cerrar tab actual';
+ LANGesmiCloseAllTabsCaption = 'Cerrar todos los tabs';
+ LANGesCannotDetermineDestinationEngine = 'No se puede determinar la maquina de destino. Por favor ingrese la ruta correcta e intente de nuevo.';
+ LANGesCannotLoadFile = 'No se puede cargar el archivo ''%s''. Por favor revise los permisos.';
+ LANGesMountPointDevice = 'Punto de montaje: %s'#10'Dispositivo: %s';
+ LANGesMountSC = 'Montar:';
+ LANGesNoPluginsFound = 'No se encontraron plugins';
+ LANGesPluginAbout = 'Acerca...';
+ LANGesCouldntOpenURI = 'No se puede abrir el URI especificado. Por favor revise la consistencia y los permisos de acceso.';
+ LANGesPluginAboutInside = 'Plugin: %s'#10#10'%s'#10'%s';
+ LANGesAreYouSureCloseAllTabs = '¿Esta seguro que desea cerrar todos los tabs inactivos?';
+ LANGesCouldntOpenURIArchive = 'No se puede abrir el archivo. Por favor revise la consistencia y los permisos de acceso.';
+ LANGesThereIsNoModuleAvailable = 'No hay módulos VFS disponibles que puedan realizar esta conexión';
+ LANGesIgnoreError = '¿Esta seguro que desea ignorar el error? El archivo de origen será eliminado';
+ LANGesErrorMount = 'Ocurrió un error montando el dispositivo ''%s'':'#10#10;
+ LANGesErrorUmount = 'Ocurrió un error desmontando el dispositivo ''%s'':'#10#10;
+ LANGesErrorEject = 'Ocurrió un error ejecutando el dispositivo ''%s'':'#10#10;
+
+ LANGesMounterPrefs_Caption = 'Configuración de Montajes';
+ LANGesMounterPrefs_TitleLabelCaption = 'Configuración de Montajes';
+ LANGesMounterPrefs_ListViewFrameCaption = 'Montajes';
+ LANGesMounterPrefs_MountName = 'Nombre del Montaje';
+ LANGesMounterPrefs_MountPoint = 'Punto del Montaje';
+ LANGesMounterPrefs_Device = 'Dispositivo';
+ LANGesMounterPrefs_MoveUpButtonTooltip = 'Mover arriba';
+ LANGesMounterPrefs_MoveDownButtonTooltip = 'Mover abajo';
+ LANGesMounterPrefs_UseFSTabDefaultsCheckBox = 'Usar _fstab como predeterminado';
+ LANGesMounterPrefs_UseFSTabDefaultsCheckBoxTooltip = 'Seleccionando esto, la barra de montaje mostrara los dispositivos encontrados en /etc/fstab (archivo de montajes del sistema)';
+ LANGesMounterPrefs_ToggleModeCheckBox = 'Los botones permanecen presionados cuando se monta';
+ LANGesMounterPrefs_ToggleModeCheckBoxTooltip = 'Seleccionándolo, los botones de montaje permanecerán presionados si el dispositivo es montado; Otro click lo desmontara (ejecutara en este caso)';
+ LANGesMounterPrefs_PropertiesFrameCaption = 'Propiedades del montaje';
+ LANGesMounterPrefs_DisplayTextLabelCaption = '_Texto Mostrado:';
+ LANGesMounterPrefs_MountPointLabelCaption = '_Punto de Montaje:';
+ LANGesMounterPrefs_MountDeviceLabelCaption = '_Dispositivo:';
+ LANGesMounterPrefs_DeviceTypeLabelCaption = 'T_ipo de Dispositivo:';
+ LANGesMounterPrefs_miLocalDiskCaption = 'Disco local';
+ LANGesMounterPrefs_miRemovableCaption = 'Removible';
+ LANGesMounterPrefs_miCDCaption = 'CD/DVD';
+ LANGesMounterPrefs_miFloppyCaption = 'Floppy';
+ LANGesMounterPrefs_miNetworkCaption = 'Red';
+ LANGesMounterPrefs_MountCommandLabelCaption = '_Comando Montaje:';
+ LANGesMounterPrefs_UmountCommandLabelCaption = 'C_omando desmontaje:';
+ LANGesMounterPrefs_MountCommandEntryTooltip = 'Sintaxis: utilice %dev para sustituir el dispositivo y %dir para el punto de montaje o deje en blanco para el montaje predeterminado'#10+'Nota: tenga cuidado con estos comandos, ¡tuxcmd puede congelarce!'#10'Ejemplo: smbmount %dev %dir -o username=netuser,password=somepass';
+ LANGesMounterPrefs_UmountCommandEntryTooltip = 'Sintaxis: utilice %dev para sustituir el dispositivo y %dir para el punto de montaje o deje en blanco para el desmontaje predeterminado'#10'Ejemplo: smbumount $dir';
+ LANGesMounterPrefs_IconLabelCaption = '_Icono:';
+
+ LANGesConnMgr_Caption = 'Abrir Nueva Conexión';
+ LANGesConnMgr_ConnectButton = 'Co_nectar';
+ LANGesConnMgr_OpenConnection = 'Abrir Conexión';
+ LANGesConnMgr_NameColumn = 'Nombre';
+ LANGesConnMgr_URIColumn = 'URI';
+ LANGesConnMgr_AddConnectionButtonCaption = '_Agregar sitio...';
+ LANGesConnMgr_AddConnectionButtonTooltip = 'Agregar nueva conexión';
+ LANGesConnMgr_EditButtonCaption = '_Editar...';
+ LANGesConnMgr_EditButtonTooltip = 'Editar conexión seleccionada';
+ LANGesConnMgr_RemoveButtonCaption = '_Remover sitio';
+ LANGesConnMgr_RemoveButtonTooltip = 'Eliminar conexión seleccionada';
+ LANGesConnMgr_DoYouWantDelete = '¿Realmente desea eliminar la conexión ''%s''?';
+
+ LANGesConnProp_FTP = 'FTP';
+ LANGesConnProp_SFTP = 'SFTP (subsistema ssh)';
+ LANGesConnProp_SMB = 'Carpeta compartida Windows (SMB)';
+ LANGesConnProp_HTTP = 'WebDAV (HTTP)';
+ LANGesConnProp_HTTPS = 'Secure WebDAV (HTTPS)';
+ LANGesConnProp_Other = 'Otro <span style="italic">(por favor especificarlo en URI)</span>';
+ LANGesConnProp_Caption = 'Propiedades de conexión';
+ LANGesConnProp_VFSModule = 'Modulo _VFS:';
+ LANGesConnProp_URI = '_URI:';
+ LANGesConnProp_URIEntryTooltip = 'Una correcta URI debe contener el prefijo del tipo de servicio y dirección del servidor';
+ LANGesConnProp_DetailedInformations = 'Información detallada';
+ LANGesConnProp_Name = '_Nombre:';
+ LANGesConnProp_Server = 'Ser_vidor[:puerto]:';
+ LANGesConnProp_Username = 'No_mbre de Usuario:';
+ LANGesConnProp_UserNameEntryTooltip = 'Dejar en blanco para un login anónimo';
+ LANGesConnProp_Password = '_Contraseña:';
+ LANGesConnProp_TargetDirectory = '_Directorio de destino:';
+ LANGesConnProp_ServiceType = 'Tipo de _Servicio:';
+ LANGesConnProp_MaskPassword = '_Ocultar Contraseña';
+ LANGesConnProp_MenuItemCaption = 'Predeterminado <span style="italic">(todos los módulos)</span>';
+
+ LANGesConnLogin_Caption = 'Autentificación requerida';
+ LANGesConnLogin_Login = 'Login';
+ LANGesConnLogin_ExperimentalWarningLabelCaption = 'Debe estar identificado para acceder a %s';
+ LANGesConnLogin_Username = 'Nombre de _Usuario:';
+ LANGesConnLogin_Password = '_Contraseña:';
+ LANGesConnLogin_AnonymousCheckButton = '_Anónimo';
+
+ LANGesColumns_Caption = 'Configuración de Columnas del Panel';
+ LANGesColumns_Title = 'Configuración de Columnas del Panel';
+ LANGesColumns_MoveUpButtonTooltip = 'Mover arriba';
+ LANGesColumns_MoveDownButtonTooltip = 'Mover abajo';
+ LANGesColumns_TitlesLongName = 'Nombre';
+ LANGesColumns_TitlesLongNameExt = 'Nombre + Extensión';
+ LANGesColumns_TitlesLongExt = 'Extensión';
+ LANGesColumns_TitlesLongSize = 'Tamaño';
+ LANGesColumns_TitlesLongDateTime = 'Fecha + Hora';
+ LANGesColumns_TitlesLongDate = 'Fecha';
+ LANGesColumns_TitlesLongTime = 'Hora';
+ LANGesColumns_TitlesLongUser = 'Usuario';
+ LANGesColumns_TitlesLongGroup = 'Grupo';
+ LANGesColumns_TitlesLongAttr = 'Atributos';
+ LANGesColumns_TitlesShortName = 'Nombre';
+ LANGesColumns_TitlesShortNameExt = 'Nombre';
+ LANGesColumns_TitlesShortExt = 'Ext';
+ LANGesColumns_TitlesShortSize = 'Tamaño';
+ LANGesColumns_TitlesShortDateTime = 'Fecha';
+ LANGesColumns_TitlesShortDate = 'Fecha';
+ LANGesColumns_TitlesShortTime = 'Hora';
+ LANGesColumns_TitlesShortUser = 'Usuario';
+ LANGesColumns_TitlesShortGroup = 'Grupo';
+ LANGesColumns_TitlesShortAttr = 'Atrib';
+
+ LANGesTestPlugin_Caption = 'Probar Plugin VFS';
+ LANGesTestPlugin_Title = 'Probar Plugin VFS';
+ LANGesTestPlugin_ExperimentalWarningLabelCaption = '<span weight="ultrabold">Advertencia:</span> El subsistema VFS y sus plugins están bajo desarrollo y pueden contener errores. ¡Use esta función bajo su propio riesgo!';
+ LANGesTestPlugin_Plugin = '_Plugin:';
+ LANGesTestPlugin_Command = 'Co_mando:';
+ LANGesTestPlugin_Username = 'Nombre de _Usuario:';
+ LANGesTestPlugin_Password = '_Contraseña:';
+ LANGesTestPlugin_AnonymousCheckButton = 'Login _Anónimo (no utiliza VFSLogin)';
+ LANGesTestPlugin_NoPluginsFound = 'No se encontraron plugins';
+
+ LANGesRemoteWait_Caption = 'Operación en progreso';
+ LANGesRemoteWait_OperationInProgress = 'Operación en progreso, por favor aguarde...';
+ LANGesRemoteWait_ItemsFound = 'Items encontrados: %d';
+
+ LANGesSearch_Bytes = 'Bytes';
+ LANGesSearch_kB = 'kB';
+ LANGesSearch_MB = 'MB';
+ LANGesSearch_days = 'días';
+ LANGesSearch_weeks = 'semanas';
+ LANGesSearch_months = 'meses';
+ LANGesSearch_years = 'años';
+ LANGesSearch_Caption = 'Buscar Archivos';
+ LANGesSearch_General = 'General';
+ LANGesSearch_Advanced = 'Avanzado';
+ LANGesSearch_SearchResults = '_Resultados de búsqueda:';
+ LANGesSearch_SearchFor = '_Buscar:';
+ LANGesSearch_FileMaskEntryTooltip = 'Sugerencia: Si desea buscar múltiples archivos, separelos por ";"';
+ LANGesSearch_SearchIn = 'Buscar _en:';
+ LANGesSearch_SearchArchivesCheckButton = 'Buscar _archivos';
+ LANGesSearch_FindText = 'Buscar _texto:';
+ LANGesSearch_FindTextEntryTooltip = 'Dejar en blanco para no buscar texto'#10'Por favor note que estamos usando UTF-8 en la parte del GUI';
+ LANGesSearch_CaseSensitiveCheckButton = 'Coincidir mayúscu_las y minúsculas';
+ LANGesSearch_StayCurrentFSCheckButton = 'Incluir otros archivos de s_istema';
+ LANGesSearch_CaseSensitiveMatchCheckButton = 'Coinci_dir mayúsculas y minúsculas';
+ LANGesSearch_Size = 'Tamaño';
+ LANGesSearch_Date = 'Fecha';
+ LANGesSearch_BiggerThan = '_Mayor que';
+ LANGesSearch_SmallerThan = 'Me_nor que';
+ LANGesSearch_ModifiedBetweenRadioButton = 'M_odificado entre';
+ LANGesSearch_NotModifiedAfterRadioButton = 'No modificado _después de';
+ LANGesSearch_ModifiedLastRadioButton = 'Mod_ificado en los ultimos';
+ LANGesSearch_ModifiedNotLastRadionButton = 'No modi_ficado en los ultimos';
+ LANGesSearch_ModifiedBetweenEntry1 = '"Por favor use este tipo de formato:" c';
+ LANGesSearch_ViewButtonCaption = '_Ver archivo';
+ LANGesSearch_NewSearchButtonCaption = '_Nueva búsqueda';
+ LANGesSearch_GoToFileButtonCaption = '_Ir al archivo';
+ LANGesSearch_FeedToListboxButtonCaption = 'Feed to _listbox';
+ LANGesSearch_StatusSC = 'Estado:';
+ LANGesSearch_Ready = 'Preparado.';
+ LANGesSearch_PreparingToSearch = 'Preparándose para buscar.';
+ LANGesSearch_SearchInProgress = 'Búsqueda en progreso:';
+ LANGesSearch_UserCancelled = 'Cancelado por el usuario.';
+ LANGesSearch_SearchFinished = 'Búsqueda finalizada';
+ LANGesSearch_FilesFound = '%d archivos encontrados';
+ LANGesSearch_And = 'y';
+
+ (*************** STRINGS ADDED TO v0.5.82 **********************************************************************************)
+ LANGesCloseOpenConnection = 'Esta tratando de hacer una nueva conexión sobre otra conexión activa. Si continua, la conexión anterior será cerrada y reemplazada por la nueva.'#10#10'¿Desea continuar?';
+ LANGesDuplicateTabWarning = 'Esta tratando de abrir un nuevo tab desde un directorio remoto. Sin embargo, la clonación no esta soportada. El directorio del nuevo tab apuntara a un sistema de archivos local.';
+ LANGesDontShowAgain = '_No mostrar este mensaje de nuevo';
+ LANGesSwitchOtherPanelWarning = 'Esta tratando de abrir el directorio remoto en el panel opuesto. Sin embargo, la clonación no esta soportada. El directorio de destino no será cambiado.';
+ LANGesOpenConnectionsWarning = 'Hay algunas conexiones activas en el panel abierto. Cerrando la aplicación, estas conexiones serán cerradas.'#10#10'¿Desea salir?';
+ LANGesmiDisconnect_Caption = '_Desconectar';
+ LANGesDisconnectButton_Tooltip = 'Desconectar conexión activa';
+ LANGesLeaveArchiveButton_Tooltip = 'Cierra archivo actual';
+ LANGesOpenTerminalButton_Tooltip = 'Abre una nueva terminal desde el directorio actual';
+ LANGesOpenTerminalButton_Caption = 'Abrir Te_rminal';
+ LANGesShowTextUIDsCheckBox_Caption = 'Mostrar _UIDs en texto';
+ LANGesShowTextUIDsCheckBox_Tooltip = 'Muestra la información de Usuario y Grupo en forma de texto en vez de números (UID/GID)';
+
+ (*************** STRINGS ADDED TO v0.5.100 **********************************************************************************)
+ LANGesmiNewTab_Caption = 'Nuevo _tab';
+ LANGesFilePopupMenu_Properties = '_Propiedades';
+ LANGesCommandEntry_Tooltip = 'Usar %s como el archivo/directorio contenedor';
+ LANGesmiFiles_Caption = 'Solo archivos';
+
+ (*************** STRINGS ADDED TO v0.6.31 **********************************************************************************)
+ LANGesPasswordButton_Tooltip = 'El archivo necesitara contraseña.'#10'Haga click para asignarla';
+ LANGesHandleRunFromArchive_Bytes = 'bytes';
+ LANGesHandleRunFromArchive_FileTypeDesc_Unknown = '(desconocido)';
+ LANGesHandleRunFromArchive_NotAssociated = '(sin aplicación asociada)';
+ LANGesHandleRunFromArchive_SelfExecutable = '(auto-ejecutable)';
+ LANGesHandleRunFromArchive_CouldntCreateTemporaryDirectory = 'No se pudo crear el directorio temporal "%s": %s.'#10#10'Por favor verifique la configuración del directorio temporal e intente de nuevo.';
+ LANGesFRunFromVFS_Caption = 'Propiedades del archivo comprimido';
+ LANGesFRunFromVFS_TitleLabel = 'Propiedades del archivo';
+ LANGesFRunFromVFS_FileNameLabel = 'Nombre del archivo:';
+ LANGesFRunFromVFS_FileTypeLabel = 'Tipo de archivo:';
+ LANGesFRunFromVFS_SizeLabel = 'Tamaño:';
+ LANGesFRunFromVFS_PackedSizeLabel = 'Tamaño comprimido:';
+ LANGesFRunFromVFS_DateLabel = 'Fecha de modificación:';
+ LANGesFRunFromVFS_InfoLabel = 'Abrir los archivos directamente no está soportado. Haciendo click en los botones bajo el archivo (todos los archivos respectivamente) será extraído a un directorio temporal. Los archivos temporales serán eliminados cuando cierre Tux Commander.';
+ LANGesFRunFromVFS_OpensWithLabel = 'Abrir con:';
+ LANGesFRunFromVFS_ExecuteButton = 'E_xtraer y abrir';
+ LANGesFRunFromVFS_ExecuteAllButton = 'Extraer _todo y abrir';
+ LANGesFSetPassword_Caption = 'Asignar contraseña';
+ LANGesFSetPassword_Label1_Caption = 'Se necesita contraseña';
+ LANGesFSetPassword_Label2_Caption = 'El archivo esta encriptado y necesita de una contraseña para poder extraer la información';
+ LANGesFSetPassword_ShowPasswordCheckButton = '_Mostrar contraseña';
+
+
+(********************************************************************************************************************************)
+procedure SetTranslation;
+begin
+ LANGF2Button_Caption := LANGesF2Button_Caption;
+ LANGF3Button_Caption := LANGesF3Button_Caption;
+ LANGF4Button_Caption := LANGesF4Button_Caption;
+ LANGF5Button_Caption := LANGesF5Button_Caption;
+ LANGF6Button_Caption := LANGesF6Button_Caption;
+ LANGF7Button_Caption := LANGesF7Button_Caption;
+ LANGF8Button_Caption := LANGesF8Button_Caption;
+
+ LANGmnuFile_Caption := LANGesmnuFile_Caption;
+ LANGmnuMark_Caption := LANGesmnuMark_Caption;
+ LANGmnuCommands_Caption := LANGesmnuCommands_Caption;
+ LANGmnuHelp_Caption := LANGesmnuHelp_Caption;
+ LANGmiExit_Caption := LANGesmiExit_Caption;
+ LANGmiSelectGroup_Caption := LANGesmiSelectGroup_Caption;
+ LANGmiUnselectGroup_Caption := LANGesmiUnselectGroup_Caption;
+ LANGmiSelectAll_Caption := LANGesmiSelectAll_Caption;
+ LANGmiUnselectAll_Caption := LANGesmiUnselectAll_Caption;
+ LANGmiInvertSelection_Caption := LANGesmiInvertSelection_Caption;
+ LANGmiRefresh_Caption := LANGesmiRefresh_Caption;
+ LANGmiAbout_Caption := LANGesmiAbout_Caption;
+
+ LANGColumn1_Caption := LANGesColumn1_Caption;
+ LANGColumn2_Caption := LANGesColumn2_Caption;
+ LANGColumn3_Caption := LANGesColumn3_Caption;
+ LANGColumn4_Caption := LANGesColumn4_Caption;
+ LANGColumn5_Caption := LANGesColumn5_Caption;
+
+ LANGExpandSelection := LANGesExpandSelection;
+ LANGShrinkSelection := LANGesShrinkSelection;
+ LANGNoMatchesFound := LANGesNoMatchesFound;
+ LANGNoFilesSelected := LANGesNoFilesSelected;
+ LANGSelectedFilesDirectories := LANGesSelectedFilesDirectories;
+ LANGDirectoryS := LANGesDirectoryS;
+ LANGFileS := LANGesFileS;
+ LANGDoYouReallyWantToDeleteTheS := LANGesDoYouReallyWantToDeleteTheS;
+ LANGDoYouReallyWantToDeleteTheSS := LANGesDoYouReallyWantToDeleteTheSS;
+ LANGCopyFiles := LANGesCopyFiles;
+ LANGMoveRenameFiles := LANGesMoveRenameFiles;
+ LANGCopyDFileDirectoriesTo := LANGesCopyDFileDirectoriesTo;
+ LANGMoveRenameDFileDirectoriesTo := LANGesMoveRenameDFileDirectoriesTo;
+ LANGCopySC := LANGesCopySC;
+ LANGMoveRenameSC := LANGesMoveRenameSC;
+
+ LANGQuickFind := LANGesQuickFind;
+
+ LANGAboutString := LANGesAboutString;
+ LANGAboutStringGnome := LANGesAboutStringGnome;
+ LANGDiskStatFmt := LANGesDiskStatFmt;
+ LANGDiskStatVolNameFmt := LANGesDiskStatVolNameFmt;
+ LANGStatusLineFmt := LANGesStatusLineFmt;
+ LANGPanelStrings[False] := LANGesPanelStrings[False];
+ LANGPanelStrings[True] := LANGesPanelStrings[True];
+ LANGDIR := LANGesDIR;
+ LANGErrorGettingListingForSPanel := LANGesErrorGettingListingForSPanel;
+ LANGErrorGettingListingForSPanelNoPath := LANGesErrorGettingListingForSPanelNoPath;
+ LANGErrorCreatingNewDirectorySInSPanel := LANGesErrorCreatingNewDirectorySInSPanel;
+ LANGErrorCreatingNewDirectorySInSPanelNoPath := LANGesErrorCreatingNewDirectorySInSPanelNoPath;
+ LANGTheFileDirectory := LANGesTheFileDirectory;
+ LANGCouldNotBeDeleted := LANGesCouldNotBeDeleted;
+ LANGCouldNotBeDeletedS := LANGesCouldNotBeDeletedS;
+ LANGUserCancelled := LANGesUserCancelled;
+ LANGTheDirectorySIsNotEmpty := LANGesTheDirectorySIsNotEmpty;
+ LANGCannotCopyFile := LANGesCannotCopyFile;
+ LANGCopyError := LANGesCopyError;
+ LANGMoveError := LANGesMoveError;
+ LANGOverwriteS := LANGesOverwriteS;
+ LANGWithFileS := LANGesWithFileS;
+ LANGOvewriteSBytesS := LANGesOvewriteSBytesS;
+ LANGTheFile := LANGesTheFile;
+ LANGCopy := LANGesCopy;
+ LANGMove := LANGesMove;
+ LANGTheDirectory := LANGesTheDirectory;
+ LANGTheSymbolicLink := LANGesTheSymbolicLink;
+ LANGCannotMoveFile := LANGesCannotMoveFile;
+ LANGCouldNotBeCreated := LANGesCouldNotBeCreated;
+ LANGCouldNotBeCreatedS := LANGesCouldNotBeCreatedS;
+ LANGFromS := LANGesFromS;
+ LANGToS := LANGesToS;
+ LANGCannotCopyFileToItself := LANGesCannotCopyFileToItself;
+ LANGMemoryAllocationFailed := LANGesMemoryAllocationFailed;
+ LANGCannotOpenSourceFile := LANGesCannotOpenSourceFile;
+ LANGCannotOpenDestinationFile := LANGesCannotOpenDestinationFile;
+ LANGCannotCloseDestinationFile := LANGesCannotCloseDestinationFile;
+ LANGCannotCloseSourceFile := LANGesCannotCloseSourceFile;
+ LANGCannotReadFromSourceFile := LANGesCannotReadFromSourceFile;
+ LANGCannotWriteToDestinationFile := LANGesCannotWriteToDestinationFile;
+
+ LANGUnknownException := LANGesUnknownException;
+ LANGNoAccess := LANGesNoAccess;
+ LANGUnknownError := LANGesUnknownError;
+
+ LANGCreateANewDirectory := LANGesCreateANewDirectory;
+ LANGEnterDirectoryName := LANGesEnterDirectoryName;
+
+ LANGOverwriteQuestion := LANGesOverwriteQuestion;
+ LANGOverwriteButton_Caption := LANGesOverwriteButton_Caption;
+ LANGOverwriteAllButton_Caption := LANGesOverwriteAllButton_Caption;
+ LANGSkipButton_Caption := LANGesSkipButton_Caption;
+ LANGOverwriteAllOlderButton_Caption := LANGesOverwriteAllOlderButton_Caption;
+ LANGSkipAllButton_Caption := LANGesSkipAllButton_Caption;
+ LANGRenameButton_Caption := LANGesRenameButton_Caption;
+ LANGAppendButton_Caption := LANGesAppendButton_Caption;
+ LANGRename := LANGesRename;
+ LANGRenameFile := LANGesRenameFile;
+ LANGIgnoreButton_Caption := LANGesIgnoreButton_Caption;
+
+ LANGProgress := LANGesProgress;
+ LANGCancel := LANGesCancel;
+ LANGDelete := LANGesDelete;
+
+ LANGSpecifyFileType := LANGesSpecifyFileType;
+
+ LANGRemoveDirectory := LANGesRemoveDirectory;
+ LANGDoYouWantToDeleteItWithAllItsFilesAndSubdirectories := LANGesDoYouWantToDeleteItWithAllItsFilesAndSubdirectories;
+ LANGRetry := LANGesRetry;
+ LANGDeleteButton_Caption := LANGesDeleteButton_Caption;
+ LANGAll := LANGesAll;
+
+ LANGCopyFilesSC := LANGesCopyFilesSC;
+ LANGAppendQuestion := LANGesAppendQuestion;
+ LANGPreparingList := LANGesPreparingList;
+
+ LANGYouMustSelectAValidFile := LANGesYouMustSelectAValidFile;
+ LANGmiVerifyChecksums := LANGesmiVerifyChecksums;
+ LANGVerifyChecksumsCaption := LANGesVerifyChecksumsCaption;
+ LANGCheckButtonCaptionCheck := LANGesCheckButtonCaptionCheck;
+ LANGCheckButtonCaptionStop := LANGesCheckButtonCaptionStop;
+ LANGFileListTooltip := LANGesFileListTooltip;
+ LANGFilenameColumnCaption := LANGesFilenameColumnCaption;
+ LANGTheFileSYouAreTryingToOpenIsQuiteBig := LANGesTheFileSYouAreTryingToOpenIsQuiteBig;
+ LANGAnErrorOccuredWhileInitializingMemoryBlock := LANGesAnErrorOccuredWhileInitializingMemoryBlock;
+ LANGAnErrorOccuredWhileOpeningFileSS := LANGesAnErrorOccuredWhileOpeningFileSS;
+ LANGAnErrorOccuredWhileReadingFileSS := LANGesAnErrorOccuredWhileReadingFileSS;
+ LANGChecksumNotChecked := LANGesChecksumNotChecked;
+ LANGChecksumChecking := LANGesChecksumChecking;
+ LANGChecksumInterrupted := LANGesChecksumInterrupted;
+ LANGChecksumDOK := LANGesChecksumDOK;
+
+ LANGmiCreateChecksumsCaption := LANGesmiCreateChecksumsCaption;
+ LANGYouMustSelectAtLeastOneFileToCalculateChecksum := LANGesYouMustSelectAtLeastOneFileToCalculateChecksum;
+ LANGCreateChecksumsCaption := LANGesCreateChecksumsCaption;
+ LANGCCHKSUMPage1Text := LANGesCCHKSUMPage1Text;
+ LANGCCHKSUMPage4Text := LANGesCCHKSUMPage4Text;
+ LANGCCHKSUMPage6Text := LANGesCCHKSUMPage6Text;
+ LANGCCHKSUMPage7Text := LANGesCCHKSUMPage7Text;
+ LANGCCHKSUMPage1Title := LANGesCCHKSUMPage1Title;
+ LANGCCHKSUMPage2Title := LANGesCCHKSUMPage2Title;
+ LANGCCHKSUMPage3Title := LANGesCCHKSUMPage3Title;
+ LANGCCHKSUMPage4Title := LANGesCCHKSUMPage4Title;
+ LANGCCHKSUMPage5Title := LANGesCCHKSUMPage5Title;
+ LANGCCHKSUMPage6Title := LANGesCCHKSUMPage6Title;
+ LANGCCHKSUMPage7Title := LANGesCCHKSUMPage7Title;
+ LANGCCHKSUMSFVFile := LANGesCCHKSUMSFVFile;
+ LANGCCHKSUMMD5sumFile := LANGesCCHKSUMMD5sumFile;
+ LANGCCHKSUMFileName := LANGesCCHKSUMFileName;
+ LANGCCHKSUMCreateSeparateChecksumFiles := LANGesCCHKSUMCreateSeparateChecksumFiles;
+ LANGCCHKSUMNowProcessingFileS := LANGesCCHKSUMNowProcessingFileS;
+ LANGCCHKSUMFinishCaption := LANGesCCHKSUMFinishCaption;
+ LANGCCHKSUMAreYouSureYouWantToAbortTheProcessing := LANGesCCHKSUMAreYouSureYouWantToAbortTheProcessing;
+ LANGCCHKSUMAnErrorOccuredWhileOpeningFileSS := LANGesCCHKSUMAnErrorOccuredWhileOpeningFileSS;
+ LANGCCHKSUMAnErrorOccuredWhileReadingFileSS := LANGesCCHKSUMAnErrorOccuredWhileReadingFileSS;
+ LANGCCHKSUMAnErrorOccuredWhileWritingFileSS := LANGesCCHKSUMAnErrorOccuredWhileWritingFileSS;
+
+ LANGAnErrorOccuredWhileWritingFileSS := LANGesAnErrorOccuredWhileWritingFileSS;
+ LANGTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt := LANGesTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt;
+ LANGTheTargetFileSCannotBeRemovedS := LANGesTheTargetFileSCannotBeRemovedS;
+ LANGMergeCaption := LANGesMergeCaption;
+ LANGPleaseInsertNextDiskOrGiveDifferentLocation := LANGesPleaseInsertNextDiskOrGiveDifferentLocation;
+ LANGMergeOfSSucceeded := LANGesMergeOfSSucceeded;
+ LANGWarningCreatedFileFailsCRCCheck := LANGesWarningCreatedFileFailsCRCCheck;
+ LANGMergeOfSSucceeded_NoCRCFileAvailable := LANGesMergeOfSSucceeded_NoCRCFileAvailable;
+ LANGMergeSAndAllFilesWithAscendingNamesToTheFollowingDirectory := LANGesMergeSAndAllFilesWithAscendingNamesToTheFollowingDirectory;
+ LANGMergeSC := LANGesMergeSC;
+ LANGmiSplitFileCaption := LANGesmiSplitFileCaption;
+ LANGmiMergeFilesCaption := LANGesmiMergeFilesCaption;
+
+ LANGSplitTheFileSToDirectory := LANGesSplitTheFileSToDirectory;
+ LANGSplitSC := LANGesSplitSC;
+ LANGSplitFile := LANGesSplitFile;
+ LANGBytesPerFile := LANGesBytesPerFile;
+ LANGAutomatic := LANGesAutomatic;
+ LANGDeleteFilesOnTargetDisk := LANGesDeleteFilesOnTargetDisk;
+ LANGSplitCaption := LANGesSplitCaption;
+ LANGCannotOpenFileS := LANGesCannotOpenFileS;
+ LANGCannotSplitTheFileToMoreThan999Parts := LANGesCannotSplitTheFileToMoreThan999Parts;
+ LANGThereAreSomeFilesInTheTargetDirectorySDoYouWantToDeleteThem := LANGesThereAreSomeFilesInTheTargetDirectorySDoYouWantToDeleteThem;
+ LANGThereAreDFilesInTheTargetDirectoryDoYouWantToDeleteThem := LANGesThereAreDFilesInTheTargetDirectoryDoYouWantToDeleteThem;
+ LANGAnErrorOccuredWhileOperationS := LANGesAnErrorOccuredWhileOperationS;
+ LANGSplitOfSSucceeded := LANGesSplitOfSSucceeded;
+ LANGSplitOfSFailed := LANGesSplitOfSFailed;
+
+ LANGmnuShow_Caption := LANGesmnuShow_Caption;
+ LANGmiShowDotFiles_Caption := LANGesmiShowDotFiles_Caption;
+ LANGTheFileYouAreTryingToOpenIsQuiteBig := LANGesTheFileYouAreTryingToOpenIsQuiteBig;
+ LANGCannotExecuteSPleaseCheckTheConfiguration := LANGesCannotExecuteSPleaseCheckTheConfiguration;
+ LANGEdit := LANGesEdit;
+ LANGEnterFilenameToEdit := LANGesEnterFilenameToEdit;
+
+ LANGmnuSettings_Caption := LANGesmnuSettings_Caption;
+ LANGmiFileTypes_Caption := LANGesmiFileTypes_Caption;
+ LANGThereIsNoApplicationAssociatedWithS := LANGesThereIsNoApplicationAssociatedWithS;
+ LANGErrorExecutingCommand := LANGesErrorExecutingCommand;
+ LANGEditFileTypesCaption := LANGesEditFileTypesCaption;
+ LANGTitleLabel_Caption := LANGesTitleLabel_Caption;
+ LANGExtensionsColumn := LANGesExtensionsColumn;
+ LANGDescriptionColumn := LANGesDescriptionColumn;
+ LANGFileTypesList := LANGesFileTypesList;
+ LANGActionName := LANGesActionName;
+ LANGCommand := LANGesCommand;
+ LANGSetDefaultActionButton_Caption := LANGesSetDefaultActionButton_Caption;
+ LANGRunInTerminalCheckBox_Caption := LANGesRunInTerminalCheckBox_Caption;
+ LANGAutodetectCheckBox_Caption := LANGesAutodetectCheckBox_Caption;
+ LANGBrowseButton_Caption := LANGesBrowseButton_Caption;
+ LANGCommandLabel_Caption := LANGesCommandLabel_Caption;
+ LANGDescriptionLabel_Caption := LANGesDescriptionLabel_Caption;
+ LANGFNameExtLabel_Caption := LANGesFNameExtLabel_Caption;
+ LANGNotebookPageExtensions := LANGesNotebookPageExtensions;
+ LANGNotebookPageActions := LANGesNotebookPageActions;
+ LANGDefault := LANGesDefault;
+ LANGCannotSaveFileTypeAssociationsBecauseOtherProcess := LANGesCannotSaveFileTypeAssociationsBecauseOtherProcess;
+
+ LANGDefaultColor := LANGesDefaultColor;
+ LANGIcon := LANGesIcon;
+ LANGBrowseForIcon := LANGesBrowseForIcon;
+ LANGSelectFileTypeColor := LANGesSelectFileTypeColor;
+ LANGColor := LANGesColor;
+
+ LANGmiChangePermissions_Caption := LANGesmiChangePermissions_Caption;
+ LANGmiChangeOwner_Caption := LANGesmiChangeOwner_Caption;
+ LANGmiCreateSymlink_Caption := LANGesmiCreateSymlink_Caption;
+ LANGmiEditSymlink_Caption := LANGesmiEditSymlink_Caption;
+ LANGChmodProgress := LANGesChmodProgress;
+ LANGChownProgress := LANGesChownProgress;
+ LANGYouMustSelectAValidSymbolicLink := LANGesYouMustSelectAValidSymbolicLink;
+ LANGPopupRunS := LANGesPopupRunS;
+ LANGPopupOpenS := LANGesPopupOpenS;
+ LANGPopupGoUp := LANGesPopupGoUp;
+ LANGPopupOpenWithS := LANGesPopupOpenWithS;
+ LANGPopupDefault := LANGesPopupDefault;
+ LANGPopupOpenWith := LANGesPopupOpenWith;
+ LANGPopupViewFile := LANGesPopupViewFile;
+ LANGPopupEditFile := LANGesPopupEditFile;
+ LANGPopupMakeSymlink := LANGesPopupMakeSymlink;
+ LANGPopupRename := LANGesPopupRename;
+ LANGPopupDelete := LANGesPopupDelete;
+ LANGDialogChangePermissions := LANGesDialogChangePermissions;
+ LANGCouldNotBeChmoddedS := LANGesCouldNotBeChmoddedS;
+ LANGDialogChangeOwner := LANGesDialogChangeOwner;
+ LANGCouldNotBeChownedS := LANGesCouldNotBeChownedS;
+ LANGDialogMakeSymlink := LANGesDialogMakeSymlink;
+ LANGDialogEditSymlink := LANGesDialogEditSymlink;
+ LANGFEditSymlink_Caption := LANGesFEditSymlink_Caption;
+ LANGFEditSymlink_SymbolicLinkFilename := LANGesFEditSymlink_SymbolicLinkFilename;
+ LANGFEditSymlink_SymbolicLinkPointsTo := LANGesFEditSymlink_SymbolicLinkPointsTo;
+
+ LANGFChmod_Caption := LANGesFChmod_Caption;
+ LANGFChmod_PermissionFrame := LANGesFChmod_PermissionFrame;
+ LANGFChmod_FileFrame := LANGesFChmod_FileFrame;
+ LANGFChmod_ApplyRecursivelyFor := LANGesFChmod_ApplyRecursivelyFor;
+ LANGFChmod_miAllFiles := LANGesFChmod_miAllFiles;
+ LANGFChmod_miDirectories := LANGesFChmod_miDirectories;
+ LANGFChmod_OctalLabel := LANGesFChmod_OctalLabel;
+ LANGFChmod_SUID := LANGesFChmod_SUID;
+ LANGFChmod_SGID := LANGesFChmod_SGID;
+ LANGFChmod_Sticky := LANGesFChmod_Sticky;
+ LANGFChmod_RUSR := LANGesFChmod_RUSR;
+ LANGFChmod_WUSR := LANGesFChmod_WUSR;
+ LANGFChmod_XUSR := LANGesFChmod_XUSR;
+ LANGFChmod_RGRP := LANGesFChmod_RGRP;
+ LANGFChmod_WGRP := LANGesFChmod_WGRP;
+ LANGFChmod_XGRP := LANGesFChmod_XGRP;
+ LANGFChmod_ROTH := LANGesFChmod_ROTH;
+ LANGFChmod_WOTH := LANGesFChmod_WOTH;
+ LANGFChmod_XOTH := LANGesFChmod_XOTH;
+ LANGFChmod_TextLabel := LANGesFChmod_TextLabel;
+ LANGFChmod_FileLabel := LANGesFChmod_FileLabel;
+ LANGFChown_Caption := LANGesFChown_Caption;
+ LANGFChown_OwnerFrame := LANGesFChown_OwnerFrame;
+ LANGFChown_GroupFrame := LANGesFChown_GroupFrame;
+ LANGFChown_FileFrame := LANGesFChown_FileFrame;
+ LANGFChown_ApplyRecursively := LANGesFChown_ApplyRecursively;
+
+ LANGFSymlink_Caption := LANGesFSymlink_Caption;
+ LANGFSymlink_ExistingFilename := LANGesFSymlink_ExistingFilename;
+ LANGFSymlink_SymlinkFilename := LANGesFSymlink_SymlinkFilename;
+
+ LANGmnuBookmarks_Caption := LANGesmnuBookmarks_Caption;
+ LANGmiAddBookmark_Caption := LANGesmiAddBookmark_Caption;
+ LANGmiEditBookmarks_Caption := LANGesmiEditBookmarks_Caption;
+ LANGBookmarkPopupDelete_Caption := LANGesBookmarkPopupDelete_Caption;
+ LANGmiPreferences_Caption := LANGesmiPreferences_Caption;
+ LANGTheCurrentDirectoryAlreadyExistsInTheBookmarksList := LANGesTheCurrentDirectoryAlreadyExistsInTheBookmarksList;
+ LANGSomeOtherInstanceChanged := LANGesSomeOtherInstanceChanged;
+
+ LANGPreferences_Caption := LANGesPreferences_Caption;
+ LANGPreferences_TitleLabel_Caption := LANGesPreferences_TitleLabel_Caption;
+ LANGPreferences_GeneralPage := LANGesPreferences_GeneralPage;
+ LANGPreferences_FontsPage := LANGesPreferences_FontsPage;
+ LANGPreferences_ColorsPage := LANGesPreferences_ColorsPage;
+ LANGPreferences_RowHeight := LANGesPreferences_RowHeight;
+ LANGPreferences_NumHistoryItems := LANGesPreferences_NumHistoryItems;
+ LANGPreferences_Default := LANGesPreferences_Default;
+ LANGPreferences_ClearReadonlyAttribute := LANGesPreferences_ClearReadonlyAttribute;
+ LANGPreferences_DisableMouseRenaming := LANGesPreferences_DisableMouseRenaming;
+ LANGPreferences_ShowFiletypeIconsInList := LANGesPreferences_ShowFiletypeIconsInList;
+ LANGPreferences_ExternalAppsLabel := LANGesPreferences_ExternalAppsLabel;
+ LANGPreferences_Viewer := LANGesPreferences_Viewer;
+ LANGPreferences_Editor := LANGesPreferences_Editor;
+ LANGPreferences_Terminal := LANGesPreferences_Terminal;
+ LANGPreferences_ListFont := LANGesPreferences_ListFont;
+ LANGPreferences_Change := LANGesPreferences_Change;
+ LANGPreferences_UseDefaultFont := LANGesPreferences_UseDefaultFont;
+ LANGPreferences_Foreground := LANGesPreferences_Foreground;
+ LANGPreferences_Background := LANGesPreferences_Background;
+ LANGPreferences_NormalItem := LANGesPreferences_NormalItem;
+ LANGPreferences_SetToDefaultToUseGTKThemeColors := LANGesPreferences_SetToDefaultToUseGTKThemeColors;
+ LANGPreferences_Cursor := LANGesPreferences_Cursor;
+ LANGPreferences_InactiveItem := LANGesPreferences_InactiveItem;
+ LANGPreferences_SelectedItem := LANGesPreferences_SelectedItem;
+ LANGPreferences_LinkItem := LANGesPreferences_LinkItem;
+ LANGPreferences_LinkItemHint := LANGesPreferences_LinkItemHint;
+ LANGPreferences_DotFileItem := LANGesPreferences_DotFileItem;
+ LANGPreferences_DotFileItemHint := LANGesPreferences_DotFileItemHint;
+ LANGPreferences_BrowseForApplication := LANGesPreferences_BrowseForApplication;
+ LANGPreferences_DefaultS := LANGesPreferences_DefaultS;
+ LANGPreferences_SelectFont := LANGesPreferences_SelectFont;
+
+ LANGBookmarkButton_Tooltip := LANGesBookmarkButton_Tooltip;
+ LANGUpButton_Tooltip := LANGesUpButton_Tooltip;
+ LANGRootButton_Tooltip := LANGesRootButton_Tooltip;
+ LANGHomeButton_Tooltip := LANGesHomeButton_Tooltip;
+ LANGLeftEqualButton_Tooltip := LANGesLeftEqualButton_Tooltip;
+ LANGRightEqualButton_Tooltip := LANGesRightEqualButton_Tooltip;
+ LANGmiShowDirectorySizes_Caption := LANGesmiShowDirectorySizes_Caption;
+ LANGmiTargetSource_Caption := LANGesmiTargetSource_Caption;
+ LANGFileTypeDirectory := LANGesFileTypeDirectory;
+ LANGFileTypeFile := LANGesFileTypeFile;
+ LANGFileTypeMetafile := LANGesFileTypeMetafile;
+ LANGPreferencesPanelsPage := LANGesPreferencesPanelsPage;
+ LANGPreferencesApplicationsPage := LANGesPreferencesApplicationsPage;
+ LANGPreferencesExperimentalPage := LANGesPreferencesExperimentalPage;
+ LANGPreferencesSelectAllDirectoriesCheckBox_Caption := LANGesPreferencesSelectAllDirectoriesCheckBox_Caption;
+ LANGPreferencesNewStyleAltOCheckBox_Caption := LANGesPreferencesNewStyleAltOCheckBox_Caption;
+ LANGPreferencesNewStyleAltOCheckBox_Tooltip := LANGesPreferencesNewStyleAltOCheckBox_Tooltip;
+ LANGPreferencesShowFuncButtonsCheckBox_Caption := LANGesPreferencesShowFuncButtonsCheckBox_Caption;
+ LANGPreferencesSizeFormatLabel_Caption := LANGesPreferencesSizeFormatLabel_Caption;
+ LANGPreferencesmiSizeFormat1 := LANGesPreferencesmiSizeFormat1;
+ LANGPreferencesmiSizeFormat6 := LANGesPreferencesmiSizeFormat6;
+ LANGPreferencesAutodetectXApp := LANGesPreferencesAutodetectXApp;
+ LANGPreferencesAlwaysRunInTerminal := LANGesPreferencesAlwaysRunInTerminal;
+ LANGPreferencesNeverRunInTerminal := LANGesPreferencesNeverRunInTerminal;
+ LANGPreferencesCmdLineBehaviourLabel_Caption := LANGesPreferencesCmdLineBehaviourLabel_Caption;
+ LANGPreferencesFeatures := LANGesPreferencesFeatures;
+ LANGPreferencesDisableMouseRename_Tooltip := LANGesPreferencesDisableMouseRename_Tooltip;
+ LANGPreferencesDisableFileTipsCheckBox_Caption := LANGesPreferencesDisableFileTipsCheckBox_Caption;
+ LANGPreferencesDisableFileTipsCheckBox_Tooltip := LANGesPreferencesDisableFileTipsCheckBox_Tooltip;
+ LANGPreferencesShow := LANGesPreferencesShow;
+ LANGPreferencesDirsInBoldCheckBox_Caption := LANGesPreferencesDirsInBoldCheckBox_Caption;
+ LANGPreferencesDisableDirectoryBracketsCheckBox_Caption := LANGesPreferencesDisableDirectoryBracketsCheckBox_Caption;
+ LANGPreferencesOctalPermissionsCheckBox_Caption := LANGesPreferencesOctalPermissionsCheckBox_Caption;
+ LANGPreferencesOctalPermissionsCheckBox_Tooltip := LANGesPreferencesOctalPermissionsCheckBox_Tooltip;
+ LANGPreferencesMovement := LANGesPreferencesMovement;
+ LANGPreferencesLynxLikeMotionCheckBox_Caption := LANGesPreferencesLynxLikeMotionCheckBox_Caption;
+ LANGPreferencesInsertMovesDownCheckBox_Caption := LANGesPreferencesInsertMovesDownCheckBox_Caption;
+ LANGPreferencesSpaceMovesDownCheckBox_Caption := LANGesPreferencesSpaceMovesDownCheckBox_Caption;
+ LANGPreferencesViewer := LANGesPreferencesViewer;
+ LANGPreferencesCommandSC := LANGesPreferencesCommandSC;
+ LANGPreferencesUseInternalViewer := LANGesPreferencesUseInternalViewer;
+ LANGPreferencesEditor := LANGesPreferencesEditor;
+ LANGPreferencesTerminal := LANGesPreferencesTerminal;
+ LANGPreferencesExperimentalFeatures := LANGesPreferencesExperimentalFeatures;
+ LANGPreferencesExperimentalWarningLabel_Caption := LANGesPreferencesExperimentalWarningLabel_Caption;
+ LANGPreferencesFocusRefreshCheckBox_Caption := LANGesPreferencesFocusRefreshCheckBox_Caption;
+ LANGPreferencesFocusRefreshCheckBox_Tooltip := LANGesPreferencesFocusRefreshCheckBox_Tooltip;
+ LANGPreferencesWMCompatModeCheckBox_Caption := LANGesPreferencesWMCompatModeCheckBox_Caption;
+ LANGPreferencesWMCompatModeCheckBox_Tooltip := LANGesPreferencesWMCompatModeCheckBox_Tooltip;
+ LANGPreferencesCompatUseLibcSystemCheckBox_Caption := LANGesPreferencesCompatUseLibcSystemCheckBox_Caption;
+ LANGPreferencesCompatUseLibcSystemCheckBox_Tooltip := LANGesPreferencesCompatUseLibcSystemCheckBox_Tooltip;
+
+ LANGmiSearchCaption2 := LANGesmiSearchCaption2;
+ LANGmiNoMounterBarCaption := LANGesmiNoMounterBarCaption;
+ LANGmiShowOneMounterBarCaption := LANGesmiShowOneMounterBarCaption;
+ LANGmiShowTwoMounterBarCaption := LANGesmiShowTwoMounterBarCaption;
+ LANGmnuNetworkCaption := LANGesmnuNetworkCaption;
+ LANGmiConnectionsCaption := LANGesmiConnectionsCaption;
+ LANGmiOpenConnectionCaption := LANGesmiOpenConnectionCaption;
+ LANGmiQuickConnectCaption := LANGesmiQuickConnectCaption;
+ LANGmnuPluginsCaption := LANGesmnuPluginsCaption;
+ LANGmiTestPluginCaption := LANGesmiTestPluginCaption;
+ LANGmiMounterSettingsCaption := LANGesmiMounterSettingsCaption;
+ LANGmiColumnsCaption := LANGesmiColumnsCaption;
+ LANGmiSavePositionCaption := LANGesmiSavePositionCaption;
+ LANGmiMountCaption := LANGesmiMountCaption;
+ LANGmiUmountCaption := LANGesmiUmountCaption;
+ LANGmiEjectCaption := LANGesmiEjectCaption;
+ LANGmiDuplicateTabCaption := LANGesmiDuplicateTabCaption;
+ LANGmiCloseTabCaption := LANGesmiCloseTabCaption;
+ LANGmiCloseAllTabsCaption := LANGesmiCloseAllTabsCaption;
+ LANGCannotDetermineDestinationEngine := LANGesCannotDetermineDestinationEngine;
+ LANGCannotLoadFile := LANGesCannotLoadFile;
+ LANGMountPointDevice := LANGesMountPointDevice;
+ LANGMountSC := LANGesMountSC;
+ LANGNoPluginsFound := LANGesNoPluginsFound;
+ LANGPluginAbout := LANGesPluginAbout;
+ LANGCouldntOpenURI := LANGesCouldntOpenURI;
+ LANGPluginAboutInside := LANGesPluginAboutInside;
+ LANGAreYouSureCloseAllTabs := LANGesAreYouSureCloseAllTabs;
+ LANGCouldntOpenURIArchive := LANGesCouldntOpenURIArchive;
+ LANGThereIsNoModuleAvailable := LANGesThereIsNoModuleAvailable;
+ LANGIgnoreError := LANGesIgnoreError;
+ LANGErrorMount := LANGesErrorMount;
+ LANGErrorUmount := LANGesErrorUmount;
+ LANGErrorEject := LANGesErrorEject;
+
+ LANGMounterPrefs_Caption := LANGesMounterPrefs_Caption;
+ LANGMounterPrefs_TitleLabelCaption := LANGesMounterPrefs_TitleLabelCaption;
+ LANGMounterPrefs_ListViewFrameCaption := LANGesMounterPrefs_ListViewFrameCaption;
+ LANGMounterPrefs_MountName := LANGesMounterPrefs_MountName;
+ LANGMounterPrefs_MountPoint := LANGesMounterPrefs_MountPoint;
+ LANGMounterPrefs_Device := LANGesMounterPrefs_Device;
+ LANGMounterPrefs_MoveUpButtonTooltip := LANGesMounterPrefs_MoveUpButtonTooltip;
+ LANGMounterPrefs_MoveDownButtonTooltip := LANGesMounterPrefs_MoveDownButtonTooltip;
+ LANGMounterPrefs_UseFSTabDefaultsCheckBox := LANGesMounterPrefs_UseFSTabDefaultsCheckBox;
+ LANGMounterPrefs_UseFSTabDefaultsCheckBoxTooltip := LANGesMounterPrefs_UseFSTabDefaultsCheckBoxTooltip;
+ LANGMounterPrefs_ToggleModeCheckBox := LANGesMounterPrefs_ToggleModeCheckBox;
+ LANGMounterPrefs_ToggleModeCheckBoxTooltip := LANGesMounterPrefs_ToggleModeCheckBoxTooltip;
+ LANGMounterPrefs_PropertiesFrameCaption := LANGesMounterPrefs_PropertiesFrameCaption;
+ LANGMounterPrefs_DisplayTextLabelCaption := LANGesMounterPrefs_DisplayTextLabelCaption;
+ LANGMounterPrefs_MountPointLabelCaption := LANGesMounterPrefs_MountPointLabelCaption;
+ LANGMounterPrefs_MountDeviceLabelCaption := LANGesMounterPrefs_MountDeviceLabelCaption;
+ LANGMounterPrefs_DeviceTypeLabelCaption := LANGesMounterPrefs_DeviceTypeLabelCaption;
+ LANGMounterPrefs_miLocalDiskCaption := LANGesMounterPrefs_miLocalDiskCaption;
+ LANGMounterPrefs_miRemovableCaption := LANGesMounterPrefs_miRemovableCaption;
+ LANGMounterPrefs_miCDCaption := LANGesMounterPrefs_miCDCaption;
+ LANGMounterPrefs_miFloppyCaption := LANGesMounterPrefs_miFloppyCaption;
+ LANGMounterPrefs_miNetworkCaption := LANGesMounterPrefs_miNetworkCaption;
+ LANGMounterPrefs_MountCommandLabelCaption := LANGesMounterPrefs_MountCommandLabelCaption;
+ LANGMounterPrefs_UmountCommandLabelCaption := LANGesMounterPrefs_UmountCommandLabelCaption;
+ LANGMounterPrefs_MountCommandEntryTooltip := LANGesMounterPrefs_MountCommandEntryTooltip;
+ LANGMounterPrefs_UmountCommandEntryTooltip := LANGesMounterPrefs_UmountCommandEntryTooltip;
+ LANGMounterPrefs_IconLabelCaption := LANGesMounterPrefs_IconLabelCaption;
+
+ LANGConnMgr_Caption := LANGesConnMgr_Caption;
+ LANGConnMgr_ConnectButton := LANGesConnMgr_ConnectButton;
+ LANGConnMgr_OpenConnection := LANGesConnMgr_OpenConnection;
+ LANGConnMgr_NameColumn := LANGesConnMgr_NameColumn;
+ LANGConnMgr_URIColumn := LANGesConnMgr_URIColumn;
+ LANGConnMgr_AddConnectionButtonCaption := LANGesConnMgr_AddConnectionButtonCaption;
+ LANGConnMgr_AddConnectionButtonTooltip := LANGesConnMgr_AddConnectionButtonTooltip;
+ LANGConnMgr_EditButtonCaption := LANGesConnMgr_EditButtonCaption;
+ LANGConnMgr_EditButtonTooltip := LANGesConnMgr_EditButtonTooltip;
+ LANGConnMgr_RemoveButtonCaption := LANGesConnMgr_RemoveButtonCaption;
+ LANGConnMgr_RemoveButtonTooltip := LANGesConnMgr_RemoveButtonTooltip;
+ LANGConnMgr_DoYouWantDelete := LANGesConnMgr_DoYouWantDelete;
+
+ LANGConnProp_FTP := LANGesConnProp_FTP;
+ LANGConnProp_SFTP := LANGesConnProp_SFTP;
+ LANGConnProp_SMB := LANGesConnProp_SMB;
+ LANGConnProp_HTTP := LANGesConnProp_HTTP;
+ LANGConnProp_HTTPS := LANGesConnProp_HTTPS;
+ LANGConnProp_Other := LANGesConnProp_Other;
+ LANGConnProp_Caption := LANGesConnProp_Caption;
+ LANGConnProp_VFSModule := LANGesConnProp_VFSModule;
+ LANGConnProp_URI := LANGesConnProp_URI;
+ LANGConnProp_URIEntryTooltip := LANGesConnProp_URIEntryTooltip;
+ LANGConnProp_DetailedInformations := LANGesConnProp_DetailedInformations;
+ LANGConnProp_Name := LANGesConnProp_Name;
+ LANGConnProp_Server := LANGesConnProp_Server;
+ LANGConnProp_Username := LANGesConnProp_Username;
+ LANGConnProp_UserNameEntryTooltip := LANGesConnProp_UserNameEntryTooltip;
+ LANGConnProp_Password := LANGesConnProp_Password;
+ LANGConnProp_TargetDirectory := LANGesConnProp_TargetDirectory;
+ LANGConnProp_ServiceType := LANGesConnProp_ServiceType;
+ LANGConnProp_MaskPassword := LANGesConnProp_MaskPassword;
+ LANGConnProp_MenuItemCaption := LANGesConnProp_MenuItemCaption;
+
+ LANGConnLogin_Caption := LANGesConnLogin_Caption;
+ LANGConnLogin_Login := LANGesConnLogin_Login;
+ LANGConnLogin_ExperimentalWarningLabelCaption := LANGesConnLogin_ExperimentalWarningLabelCaption;
+ LANGConnLogin_Username := LANGesConnLogin_Username;
+ LANGConnLogin_Password := LANGesConnLogin_Password;
+ LANGConnLogin_AnonymousCheckButton := LANGesConnLogin_AnonymousCheckButton;
+
+ LANGColumns_Caption := LANGesColumns_Caption;
+ LANGColumns_Title := LANGesColumns_Title;
+ LANGColumns_MoveUpButtonTooltip := LANGesColumns_MoveUpButtonTooltip;
+ LANGColumns_MoveDownButtonTooltip := LANGesColumns_MoveDownButtonTooltip;
+ LANGColumns_TitlesLongName := LANGesColumns_TitlesLongName;
+ LANGColumns_TitlesLongNameExt := LANGesColumns_TitlesLongNameExt;
+ LANGColumns_TitlesLongExt := LANGesColumns_TitlesLongExt;
+ LANGColumns_TitlesLongSize := LANGesColumns_TitlesLongSize;
+ LANGColumns_TitlesLongDateTime := LANGesColumns_TitlesLongDateTime;
+ LANGColumns_TitlesLongDate := LANGesColumns_TitlesLongDate;
+ LANGColumns_TitlesLongTime := LANGesColumns_TitlesLongTime;
+ LANGColumns_TitlesLongUser := LANGesColumns_TitlesLongUser;
+ LANGColumns_TitlesLongGroup := LANGesColumns_TitlesLongGroup;
+ LANGColumns_TitlesLongAttr := LANGesColumns_TitlesLongAttr;
+ LANGColumns_TitlesShortName := LANGesColumns_TitlesShortName;
+ LANGColumns_TitlesShortNameExt := LANGesColumns_TitlesShortNameExt;
+ LANGColumns_TitlesShortExt := LANGesColumns_TitlesShortExt;
+ LANGColumns_TitlesShortSize := LANGesColumns_TitlesShortSize;
+ LANGColumns_TitlesShortDateTime := LANGesColumns_TitlesShortDateTime;
+ LANGColumns_TitlesShortDate := LANGesColumns_TitlesShortDate;
+ LANGColumns_TitlesShortTime := LANGesColumns_TitlesShortTime;
+ LANGColumns_TitlesShortUser := LANGesColumns_TitlesShortUser;
+ LANGColumns_TitlesShortGroup := LANGesColumns_TitlesShortGroup;
+ LANGColumns_TitlesShortAttr := LANGesColumns_TitlesShortAttr;
+
+ LANGTestPlugin_Caption := LANGesTestPlugin_Caption;
+ LANGTestPlugin_Title := LANGesTestPlugin_Title;
+ LANGTestPlugin_ExperimentalWarningLabelCaption := LANGesTestPlugin_ExperimentalWarningLabelCaption;
+ LANGTestPlugin_Plugin := LANGesTestPlugin_Plugin;
+ LANGTestPlugin_Command := LANGesTestPlugin_Command;
+ LANGTestPlugin_Username := LANGesTestPlugin_Username;
+ LANGTestPlugin_Password := LANGesTestPlugin_Password;
+ LANGTestPlugin_AnonymousCheckButton := LANGesTestPlugin_AnonymousCheckButton;
+ LANGTestPlugin_NoPluginsFound := LANGesTestPlugin_NoPluginsFound;
+
+ LANGRemoteWait_Caption := LANGesRemoteWait_Caption;
+ LANGRemoteWait_OperationInProgress := LANGesRemoteWait_OperationInProgress;
+ LANGRemoteWait_ItemsFound := LANGesRemoteWait_ItemsFound;
+
+ LANGSearch_Bytes := LANGesSearch_Bytes;
+ LANGSearch_kB := LANGesSearch_kB;
+ LANGSearch_MB := LANGesSearch_MB;
+ LANGSearch_days := LANGesSearch_days;
+ LANGSearch_weeks := LANGesSearch_weeks;
+ LANGSearch_months := LANGesSearch_months;
+ LANGSearch_years := LANGesSearch_years;
+ LANGSearch_Caption := LANGesSearch_Caption;
+ LANGSearch_General := LANGesSearch_General;
+ LANGSearch_Advanced := LANGesSearch_Advanced;
+ LANGSearch_SearchResults := LANGesSearch_SearchResults;
+ LANGSearch_SearchFor := LANGesSearch_SearchFor;
+ LANGSearch_FileMaskEntryTooltip := LANGesSearch_FileMaskEntryTooltip;
+ LANGSearch_SearchIn := LANGesSearch_SearchIn;
+ LANGSearch_SearchArchivesCheckButton := LANGesSearch_SearchArchivesCheckButton;
+ LANGSearch_FindText := LANGesSearch_FindText;
+ LANGSearch_FindTextEntryTooltip := LANGesSearch_FindTextEntryTooltip;
+ LANGSearch_CaseSensitiveCheckButton := LANGesSearch_CaseSensitiveCheckButton;
+ LANGSearch_StayCurrentFSCheckButton := LANGesSearch_StayCurrentFSCheckButton;
+ LANGSearch_CaseSensitiveMatchCheckButton := LANGesSearch_CaseSensitiveMatchCheckButton;
+ LANGSearch_Size := LANGesSearch_Size;
+ LANGSearch_Date := LANGesSearch_Date;
+ LANGSearch_BiggerThan := LANGesSearch_BiggerThan;
+ LANGSearch_SmallerThan := LANGesSearch_SmallerThan;
+ LANGSearch_ModifiedBetweenRadioButton := LANGesSearch_ModifiedBetweenRadioButton;
+ LANGSearch_NotModifiedAfterRadioButton := LANGesSearch_NotModifiedAfterRadioButton;
+ LANGSearch_ModifiedLastRadioButton := LANGesSearch_ModifiedLastRadioButton;
+ LANGSearch_ModifiedNotLastRadionButton := LANGesSearch_ModifiedNotLastRadionButton;
+ LANGSearch_ModifiedBetweenEntry1 := LANGesSearch_ModifiedBetweenEntry1;
+ LANGSearch_ViewButtonCaption := LANGesSearch_ViewButtonCaption;
+ LANGSearch_NewSearchButtonCaption := LANGesSearch_NewSearchButtonCaption;
+ LANGSearch_GoToFileButtonCaption := LANGesSearch_GoToFileButtonCaption;
+ LANGSearch_FeedToListboxButtonCaption := LANGesSearch_FeedToListboxButtonCaption;
+ LANGSearch_StatusSC := LANGesSearch_StatusSC;
+ LANGSearch_Ready := LANGesSearch_Ready;
+ LANGSearch_PreparingToSearch := LANGesSearch_PreparingToSearch;
+ LANGSearch_SearchInProgress := LANGesSearch_SearchInProgress;
+ LANGSearch_UserCancelled := LANGesSearch_UserCancelled;
+ LANGSearch_SearchFinished := LANGesSearch_SearchFinished;
+ LANGSearch_FilesFound := LANGesSearch_FilesFound;
+ LANGSearch_And := LANGesSearch_And;
+
+ LANGCloseOpenConnection := LANGesCloseOpenConnection;
+ LANGDuplicateTabWarning := LANGesDuplicateTabWarning;
+ LANGDontShowAgain := LANGesDontShowAgain;
+ LANGSwitchOtherPanelWarning := LANGesSwitchOtherPanelWarning;
+ LANGOpenConnectionsWarning := LANGesOpenConnectionsWarning;
+ LANGmiDisconnect_Caption := LANGesmiDisconnect_Caption;
+ LANGDisconnectButton_Tooltip := LANGesDisconnectButton_Tooltip;
+ LANGLeaveArchiveButton_Tooltip := LANGesLeaveArchiveButton_Tooltip;
+ LANGOpenTerminalButton_Tooltip := LANGesOpenTerminalButton_Tooltip;
+ LANGOpenTerminalButton_Caption := LANGesOpenTerminalButton_Caption;
+ LANGShowTextUIDsCheckBox_Caption := LANGesShowTextUIDsCheckBox_Caption;
+ LANGShowTextUIDsCheckBox_Tooltip := LANGesShowTextUIDsCheckBox_Tooltip;
+
+ LANGmiNewTab_Caption := LANGesmiNewTab_Caption;
+ LANGFilePopupMenu_Properties := LANGesFilePopupMenu_Properties;
+ LANGCommandEntry_Tooltip := LANGesCommandEntry_Tooltip;
+ LANGmiFiles_Caption := LANGesmiFiles_Caption;
+
+ LANGPasswordButton_Tooltip := LANGesPasswordButton_Tooltip;
+ LANGHandleRunFromArchive_Bytes := LANGesHandleRunFromArchive_Bytes;
+ LANGHandleRunFromArchive_FileTypeDesc_Unknown := LANGesHandleRunFromArchive_FileTypeDesc_Unknown;
+ LANGHandleRunFromArchive_NotAssociated := LANGesHandleRunFromArchive_NotAssociated;
+ LANGHandleRunFromArchive_SelfExecutable := LANGesHandleRunFromArchive_SelfExecutable;
+ LANGHandleRunFromArchive_CouldntCreateTemporaryDirectory := LANGesHandleRunFromArchive_CouldntCreateTemporaryDirectory;
+ LANGFRunFromVFS_Caption := LANGesFRunFromVFS_Caption;
+ LANGFRunFromVFS_TitleLabel := LANGesFRunFromVFS_TitleLabel;
+ LANGFRunFromVFS_FileNameLabel := LANGesFRunFromVFS_FileNameLabel;
+ LANGFRunFromVFS_FileTypeLabel := LANGesFRunFromVFS_FileTypeLabel;
+ LANGFRunFromVFS_SizeLabel := LANGesFRunFromVFS_SizeLabel;
+ LANGFRunFromVFS_PackedSizeLabel := LANGesFRunFromVFS_PackedSizeLabel;
+ LANGFRunFromVFS_DateLabel := LANGesFRunFromVFS_DateLabel;
+ LANGFRunFromVFS_InfoLabel := LANGesFRunFromVFS_InfoLabel;
+ LANGFRunFromVFS_OpensWithLabel := LANGesFRunFromVFS_OpensWithLabel;
+ LANGFRunFromVFS_ExecuteButton := LANGesFRunFromVFS_ExecuteButton;
+ LANGFRunFromVFS_ExecuteAllButton := LANGesFRunFromVFS_ExecuteAllButton;
+ LANGFSetPassword_Caption := LANGesFSetPassword_Caption;
+ LANGFSetPassword_Label1_Caption := LANGesFSetPassword_Label1_Caption;
+ LANGFSetPassword_Label2_Caption := LANGesFSetPassword_Label2_Caption;
+ LANGFSetPassword_ShowPasswordCheckButton := LANGesFSetPassword_ShowPasswordCheckButton;
+end;
+
+initialization
+ AddTranslation('ES', @SetTranslation);
+ AddTranslation('es_ES', @SetTranslation);
+end.
+
diff --git a/translations/UTranslation_FR.pas b/translations/UTranslation_FR.pas
new file mode 100644
index 0000000..46051b4
--- /dev/null
+++ b/translations/UTranslation_FR.pas
@@ -0,0 +1,1254 @@
+(*
+ Tux Commander - UTranslation_FR - French Localization constants
+ Copyright (C) 2004 by Marie-Agnes Pauchet-Le Hericy <marie@kerplh.com>
+ 2007 by Stanislas Zeller <skogkatt@orange.fr>
+
+ 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
+*)
+unit UTranslation_FR;
+
+interface
+
+implementation
+
+uses ULocale;
+
+const LANGfrF2Button_Caption = 'F2 - Renommer';
+ LANGfrF3Button_Caption = 'F3 - Voir';
+ LANGfrF4Button_Caption = 'F4 - Editer';
+ LANGfrF5Button_Caption = 'F5 - Copier';
+ LANGfrF6Button_Caption = 'F6 - Déplacer';
+ LANGfrF7Button_Caption = 'F7 - Créer Rép.';
+ LANGfrF8Button_Caption = 'F8 - Supprimer';
+
+ LANGfrmnuFile_Caption = '_Fichier';
+ LANGfrmnuMark_Caption = '_Sélection';
+ LANGfrmnuCommands_Caption = '_Commandes';
+ LANGfrmnuHelp_Caption = '_Aide';
+ LANGfrmiExit_Caption = '_Quitter';
+ LANGfrmiSelectGroup_Caption = 'Sélectionner le _Groupe...';
+ LANGfrmiUnselectGroup_Caption = '_Désélectionner le groupe...';
+ LANGfrmiSelectAll_Caption = '_Sélectionner Tout';
+ LANGfrmiUnselectAll_Caption = 'Désélectionner _Tout';
+ LANGfrmiInvertSelection_Caption = '_Inverser la sélection';
+ LANGfrmiRefresh_Caption = '_Rafraîchir';
+ LANGfrmiAbout_Caption = '_A propos...';
+
+ LANGfrColumn1_Caption = 'Nom';
+ LANGfrColumn2_Caption = 'Ext';
+ LANGfrColumn3_Caption = 'Taille';
+ LANGfrColumn4_Caption = 'Date';
+ LANGfrColumn5_Caption = 'Attr';
+
+ LANGfrExpandSelection = 'Etendre la sélection';
+ LANGfrShrinkSelection = 'Réduire la sélection';
+ LANGfrNoMatchesFound = 'Aucune correspondance trouvée';
+ LANGfrNoFilesSelected = 'Pas de fichier selectionné!';
+ LANGfrSelectedFilesDirectories = '%d fichier(s)/répertoire(s) sélectionné(s)';
+ LANGfrDirectoryS = 'répertoire %s';
+ LANGfrFileS = 'fichier %s';
+ LANGfrDoYouReallyWantToDeleteTheS = 'Voulez-vous vraiment supprimer le %s ?';
+ LANGfrDoYouReallyWantToDeleteTheSS = 'Voulez-vous vraiment supprimer %s ?'#10'%s';
+ LANGfrCopyFiles = 'Copier les fichiers';
+ LANGfrMoveRenameFiles = 'Déplacer/Renommer les fichiers';
+ LANGfrCopyDFileDirectoriesTo = 'Copier %d les fichiers/répertoires vers';
+ LANGfrMoveRenameDFileDirectoriesTo = 'Déplacer/Renommer %d fichier(s)/répertoire(s) vers';
+ LANGfrCopySC = 'Copier :';
+ LANGfrMoveRenameSC = 'Déplacer/Renommer :';
+
+ LANGfrQuickFind = ' Recherche rapide ';
+
+ LANGfrAboutString = 'Tux Commander'#10'Version %s'#10'date de fabrication : %s'#10#10'Copyright (c) 2008 Tomas Bzatek'#10'Adresse de courriel : tbzatek@users.sourceforge.net'#10'site internet: http://tuxcmd.sourceforge.net/';
+ LANGfrAboutStringGnome = 'version %s'#10'date de fabrication : %s'#10'site internet : http ://tuxcmd.sourceforge.net/';
+ LANGfrDiskStatFmt = '%s de %s de libre';
+ LANGfrDiskStatVolNameFmt = '[%s] %s de %s de libre';
+ LANGfrStatusLineFmt = '%s de %s dans %d de %d fichiers sélectionnés';
+ LANGfrPanelStrings : array[boolean] of string = ('droite', 'gauche');
+
+ LANGfrDIR = '<DIR>';
+ LANGfrErrorGettingListingForSPanel = 'liste impossible à obtenir dans le volet de %s :'#10' %s'#10#10'chemin = ''%s''';
+ LANGfrErrorGettingListingForSPanelNoPath = 'liste impossible à obtenir dans le volet de %s :'#10' %s';
+ LANGfrErrorCreatingNewDirectorySInSPanel = 'Impossible de créer un nouveau répertoire dans le volet de ''%s'' %s :'#10' %s';
+ LANGfrErrorCreatingNewDirectorySInSPanelNoPath = 'Impossible de créer un nouveau répertoire dans le volet de %s :'#10' %s';
+ LANGfrTheFileDirectory = 'Le fichier/répertoire';
+ LANGfrCouldNotBeDeleted = 'n''a pas pu être supprimé';
+ LANGfrCouldNotBeDeletedS = 'n''a pas pu être supprimé : %s';
+ LANGfrUserCancelled = 'Annulation par l''utilisateur!';
+ LANGfrTheDirectorySIsNotEmpty = 'Le répertoire %s n''est pas vide!';
+ LANGfrCannotCopyFile = 'le fichier ne peut pas être copié';
+ LANGfrCopyError = 'Erreur de copie';
+ LANGfrMoveError = 'Erreur de déplacement';
+ LANGfrOverwriteS = 'Ecraser : %s';
+ LANGfrWithFileS = 'Avec fichier : %s';
+ LANGfrOvewriteSBytesS = '%s octets, %s';
+ LANGfrTheFile = 'Le Fichier';
+ LANGfrCopy = 'Copier';
+ LANGfrMove = 'Déplacer';
+ LANGfrTheDirectory = 'Le répertoire';
+ LANGfrTheSymbolicLink = 'Le lien symbolique';
+ LANGfrCannotMoveFile = 'Le fichier ne peut être déplacé';
+ LANGfrCouldNotBeCreated = 'ne peut pas être créé';
+ LANGfrCouldNotBeCreatedS = 'ne peut pas être créé : %s';
+ LANGfrFromS = 'De : %s';
+ LANGfrToS = 'A: %s';
+ LANGfrCannotCopyFileToItself = 'Impossible de copier le fichier sur lui-même';
+ LANGfrMemoryAllocationFailed = 'Echec d''allocation de mémoire :';
+ LANGfrCannotOpenSourceFile = 'Le fichier source n''a pas pu être ouvert';
+ LANGfrCannotOpenDestinationFile = 'Le fichier cible n''a pas pu être ouvert';
+ LANGfrCannotCloseDestinationFile = 'Le fichier cible n''a pas pu être fermé';
+ LANGfrCannotCloseSourceFile = 'Le fichier source n''a pas pu être ouvert';
+ LANGfrCannotReadFromSourceFile = 'Le fichier source n''a pas pu être lu';
+ LANGfrCannotWriteToDestinationFile = 'on ne peut pas écrire dans le fichier cible';
+
+ LANGfrUnknownException = 'Exception Inconnue';
+ LANGfrNoAccess = 'Pas d''accès';
+ LANGfrUnknownError = 'Erreur inconnue';
+
+ LANGfrCreateANewDirectory = 'Créer un nouveau répertoire';
+ LANGfrEnterDirectoryName = 'Entrer le nom du _répertoire :';
+
+ LANGfrOverwriteQuestion = 'Confirmation de suppression';
+ LANGfrOverwriteButton_Caption = '_Ecrasement';
+ LANGfrOverwriteAllButton_Caption = 'Tout _écraser';
+ LANGfrSkipButton_Caption = '_Sauter';
+ LANGfrOverwriteAllOlderButton_Caption = 'Ecraser tous les anciens';
+ LANGfrSkipAllButton_Caption = 'Tout sauter';
+ LANGfrRenameButton_Caption = '_Renommer';
+ LANGfrAppendButton_Caption = 'A_jouter';
+ LANGfrRename = 'Renommer';
+ LANGfrRenameFile = 'Renommer le fichier ''%s'' en';
+ LANGfrIgnoreButton_Caption = '_Ignorer';
+
+ LANGfrProgress = 'Progression';
+ LANGfrCancel = '_Annuler';
+ LANGfrDelete = 'Supprimer :';
+
+ LANGfrSpecifyFileType = '_Spécifier le type de fichier :';
+
+ LANGfrRemoveDirectory = 'Supprimer le répertoire';
+ LANGfrDoYouWantToDeleteItWithAllItsFilesAndSubdirectories = 'Voulez-vous le supprimer ainsi que tous ses fichiers et sous-répertoires?';
+ LANGfrRetry = '_Réessayer';
+ LANGfrDeleteButton_Caption = '_Supprimer';
+ LANGfrAll = '_Tout';
+
+ LANGfrCopyFilesSC = 'Copier les fichiers :';
+ LANGfrAppendQuestion = 'Etes-vous sûr de vouloir ajouter le fichier ''%s'' à ''%s''?';
+ LANGfrPreparingList = 'Préparation de la liste...';
+
+ LANGfrYouMustSelectAValidFile = 'Vous devez sélectionner un fichier valide!';
+ LANGfrmiVerifyChecksums = '_Vérifier les sommes de contrôle';
+ LANGfrVerifyChecksumsCaption = 'Vérifier les sommes de contrôle';
+ LANGfrCheckButtonCaptionCheck = '_Contrôler';
+ LANGfrCheckButtonCaptionStop = '_Arrêter';
+ LANGfrFileListTooltip = '[?] - Non contrôlé'#10'[OK] - Somme de contrôle OK'#10'[FAUX] - Somme de contrôle FAUX'#10'[N/A] - Fichier indisponible';
+ LANGfrFilenameColumnCaption = 'nom de fichier';
+ LANGfrTheFileSYouAreTryingToOpenIsQuiteBig = 'Le fichier ''%s'' que vous essayez d''ouvrir est assez gros (%s octets). Sa somme de contrôle est peut être invalide.'#10#10'Voulez-vous tout de même le charger?';
+ LANGfrAnErrorOccuredWhileInitializingMemoryBlock = 'Une erreur est survenue à l''initialisation du bloc mémoire. Fermez des fichiers avant de réessayer.';
+ LANGfrAnErrorOccuredWhileOpeningFileSS = 'Une erreur est survenue à l''ouverture du fichier ''%s'' :'#10' %s';
+ LANGfrAnErrorOccuredWhileReadingFileSS = 'Une erreur est survenue à la lecture du fichier ''%s'' :'#10' %s';
+ LANGfrChecksumNotChecked = '<span weight="bold">Statut :</span> Non contrôlé';
+ LANGfrChecksumChecking = '<span weight="bold">Statut :</span> contrôle en cours...';
+ LANGfrChecksumInterrupted = '<span weight="bold">Statut :</span> Interrompu';
+ LANGfrChecksumDOK = '<span weight="bold">Statut :</span> %d%% OK';
+
+ LANGfrmiCreateChecksumsCaption = '_Créer les sommes de contrôle...';
+ LANGfrYouMustSelectAtLeastOneFileToCalculateChecksum = 'Vous devez sélectionner au moins un fichier pour pouvoir calculer la somme de contrôle!';
+ LANGfrCreateChecksumsCaption = 'Créer les sommes de contrôle';
+ LANGfrCCHKSUMPage1Text = 'Vous allez créer les sommes de contrôle pour'#10'les fichiers sélectionnés. Si vous n''avez pas sélectionné'#10'tous les fichiers souhaités, fermez cet assistant et'#10'sélectionnez d''autres fichiers';
+ LANGfrCCHKSUMPage4Text = 'tout est prêt pour effectuer les sommes de contrôle pour vos'#10'fichiers sélectionnés. Ceci peut prendre quelques minutes.'#10'Cliquez sur suivant pour continuer.';
+ LANGfrCCHKSUMPage6Text = 'Il y a eu des erreurs dans le calcul des sommes de contrôle :';
+ LANGfrCCHKSUMPage7Text = 'La création de la somme de contrôle est terminée et'#10'vos fichiers sont prêts.'#10#10'Cliquer sur "Terminé" pour sortir.';
+ LANGfrCCHKSUMPage1Title = '<span size="xx-large" weight="ultrabold">Préparer les fichiers pour le calcul des sommes de contrôle</span>';
+ LANGfrCCHKSUMPage2Title = '<span size="xx-large" weight="ultrabold">Sélectionner le type de somme de contrôle</span>';
+ LANGfrCCHKSUMPage3Title = '<span size="xx-large" weight="ultrabold">Choisir le nom de fichier</span>';
+ LANGfrCCHKSUMPage4Title = '<span size="xx-large" weight="ultrabold">prêt à contrôler</span>';
+ LANGfrCCHKSUMPage5Title = '<span size="xx-large" weight="ultrabold">En cours...</span>';
+ LANGfrCCHKSUMPage6Title = '<span size="xx-large" weight="ultrabold">Erreur!</span>';
+ LANGfrCCHKSUMPage7Title = '<span size="xx-large" weight="ultrabold">Terminé</span>';
+ LANGfrCCHKSUMSFVFile = 'Fichier SFV ';
+ LANGfrCCHKSUMMD5sumFile = 'Fichier MD5sum';
+ LANGfrCCHKSUMFileName = '_Nom de fichier :';
+ LANGfrCCHKSUMCreateSeparateChecksumFiles = 'Créer des fichiers séparés de sommes de contrôle';
+ LANGfrCCHKSUMNowProcessingFileS = 'En cours : %s';
+ LANGfrCCHKSUMFinishCaption = '_Terminé';
+ LANGfrCCHKSUMAreYouSureYouWantToAbortTheProcessing = 'Etes-vous sûr de vouloir annuler le processus?';
+ LANGfrCCHKSUMAnErrorOccuredWhileOpeningFileSS = 'Une erreur est survenue lors de l''ouverture du fichier ''%s'' : %s'#10;
+ LANGfrCCHKSUMAnErrorOccuredWhileReadingFileSS = 'Une erreur est survenue lors de la lecture du fichier ''%s'' : %s'#10;
+ LANGfrCCHKSUMAnErrorOccuredWhileWritingFileSS = 'Une erreur est survenue lors de l''écriture du fichier ''%s'' : %s'#10;
+
+ LANGfrAnErrorOccuredWhileWritingFileSS = 'Une erreur est survenue lors de l''écriture du fichier ''%s'' :'#10' %s';
+ LANGfrTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt = 'Le fichier cible ''%s'' existe déjà. Voulez-vous l''écraser?';
+ LANGfrTheTargetFileSCannotBeRemovedS = 'Le fichier cible ''%s''ne peut-être supprimé : %s';
+ LANGfrMergeCaption = 'Fusionner';
+ LANGfrPleaseInsertNextDiskOrGiveDifferentLocation = 'Veuillez insérer une nouvelle disquette ou préciser une autre destination :';
+ LANGfrMergeOfSSucceeded = 'Fusion de ''%s'' réussie (Somme de contrôle CRC OK).';
+ LANGfrWarningCreatedFileFailsCRCCheck = 'Attention : Le fichier créé ne répond pas au contrôle CRC !';
+ LANGfrMergeOfSSucceeded_NoCRCFileAvailable = 'Fusion de ''%s'' réussie (pas de fichier CRC disponible).';
+ LANGfrMergeSAndAllFilesWithAscendingNamesToTheFollowingDirectory = 'Fusionner ''%s'' et tous les fichiers avec noms d''ordre croissant dans le répertoire suivant:';
+ LANGfrMergeSC = 'Fusionner :';
+ LANGfrmiSplitFileCaption = '_Découper fichier...';
+ LANGfrmiMergeFilesCaption = '_Fusionner fichiers...';
+
+ LANGfrSplitTheFileSToDirectory = '_Découper le fichier ''%s'' dans le répertoire :';
+ LANGfrSplitSC = 'Découper :';
+ LANGfrSplitFile = 'Découper le fichier';
+ LANGfrBytesPerFile = '_Octets par fichier :';
+ LANGfrAutomatic = 'Automatique';
+ LANGfrDeleteFilesOnTargetDisk = '_Supprimer les fichiers sur la cible (pour les supports amovibles)';
+ LANGfrSplitCaption = 'Découper';
+ LANGfrCannotOpenFileS = 'Le fichier ne peut être ouvert ''%s''';
+ LANGfrCannotSplitTheFileToMoreThan999Parts = 'Le fichier ne peut être découpé en plus de 999 parties!';
+ LANGfrThereAreSomeFilesInTheTargetDirectorySDoYouWantToDeleteThem = 'Il y a des fichiers dans le répertoire cible :'#10'%s'#10'Voulez-vous les supprimer?';
+ LANGfrThereAreDFilesInTheTargetDirectoryDoYouWantToDeleteThem = 'Il y a %d fichiers dans le répertoire cible. Voulez-vous les supprimer?';
+ LANGfrAnErrorOccuredWhileOperationS = 'Une erreur est survenue pendant l''opération : %s';
+ LANGfrSplitOfSSucceeded = 'Le découpage ''%s'' a réussi.';
+ LANGfrSplitOfSFailed = 'Le découpage''%s'' a échoué!';
+
+ LANGfrmnuShow_Caption = 'Mon_trer';
+ LANGfrmiShowDotFiles_Caption = '_Montrer les fichiers .dot ';
+ LANGfrTheFileYouAreTryingToOpenIsQuiteBig = 'Le fichier que vous essayez d''ouvrir est assez gros. Le charger dans une application externe (par ex. gedit) peut ralentir le système.'#10'Voulez-vous continuer?';
+ LANGfrCannotExecuteSPleaseCheckTheConfiguration = 'Exécution impossible ''%s''. Veuillez vérifier la configuration ou définir correctement le type de fichier associé.';
+ LANGfrEdit = 'Editer';
+ LANGfrEnterFilenameToEdit = '_Entrer le nom de fichier à éditer :';
+
+ LANGfrmnuSettings_Caption = 'Co_nfiguration';
+ LANGfrmiFileTypes_Caption = '_Types de fichiers...';
+ LANGfrThereIsNoApplicationAssociatedWithS = 'Il n''y a pas d''application associée avec "%s".'#10#10'Vous pouvez configurer Tux Commander pour associer les applications avec les différents types de fichier. Voulez-vous associer une application avec ce type maintenant ?';
+ LANGfrErrorExecutingCommand = 'Erreur en éxécutant la commande !';
+ LANGfrEditFileTypesCaption = 'Editer les types de fichier';
+ LANGfrTitleLabel_Caption = '<span size="x-large" weight="ultrabold">Configuration des types de fichier</span>';
+ LANGfrExtensionsColumn = 'Extensions';
+ LANGfrDescriptionColumn = 'Description';
+ LANGfrFileTypesList = 'Liste des types de fichier';
+ LANGfrActionName = 'Nom action';
+ LANGfrCommand = 'Commande';
+ LANGfrSetDefaultActionButton_Caption = '_Définir comme par défaut';
+ LANGfrRunInTerminalCheckBox_Caption = 'Exécuter dans un terminal';
+ LANGfrAutodetectCheckBox_Caption = 'Autodétecter _l''application GUI';
+ LANGfrBrowseButton_Caption = 'N_aviguer...';
+ LANGfrCommandLabel_Caption = 'Co_mmande :';
+ LANGfrDescriptionLabel_Caption = 'D_escription :';
+ LANGfrFNameExtLabel_Caption = 'Ajouter extension :';
+ LANGfrNotebookPageExtensions = 'type de fichier';
+ LANGfrNotebookPageActions = 'Actions';
+ LANGfrDefault = ' (par defaut)';
+ LANGfrCannotSaveFileTypeAssociationsBecauseOtherProcess = 'Les associations d''application avec les types de fichier ne peuvent être sauvagardées, parce que qu''une modification de ce fichier a entre temps été faite par un autre processus .';
+
+ LANGfrDefaultColor = 'couleur par défaut';
+ LANGfrIcon = '_Icône :';
+ LANGfrBrowseForIcon = 'Rechercher une icône';
+ LANGfrSelectFileTypeColor = 'Sélectionner la couleur du type de fichier';
+ LANGfrColor = 'Cou_leur :';
+
+ LANGfrmiChangePermissions_Caption = 'Changer les _autorisations...';
+ LANGfrmiChangeOwner_Caption = 'Changer le _propriétaire/Groupe...';
+ LANGfrmiCreateSymlink_Caption = 'Créer un _lien Symbolique...';
+ LANGfrmiEditSymlink_Caption = '_Editer un lien Symbolique...';
+ LANGfrChmodProgress = 'Changer les autorisations :';
+ LANGfrChownProgress = 'Changer le propriétaire :';
+ LANGfrYouMustSelectAValidSymbolicLink = 'Vous devez sélectionner un lien symbolique valide!';
+ LANGfrPopupRunS = 'E_xecuter %s';
+ LANGfrPopupOpenS = 'Ouvrir %s';
+ LANGfrPopupGoUp = 'Remonter';
+ LANGfrPopupOpenWithS = 'Ouvrir avec %s';
+ LANGfrPopupDefault = ' (par défaut)';
+ LANGfrPopupOpenWith = 'Ouvrir avec...';
+ LANGfrPopupViewFile = 'Afficher le fichier';
+ LANGfrPopupEditFile = 'Ed_iter le fichier';
+ LANGfrPopupMakeSymlink = 'Créer un lien symbolique';
+ LANGfrPopupRename = '_Renommer';
+ LANGfrPopupDelete = '_Supprimer';
+ LANGfrDialogChangePermissions = 'Changer les autorisations';
+ LANGfrCouldNotBeChmoddedS = 'Ne peut pas changer les autorisations : %s';
+ LANGfrDialogChangeOwner = 'Changer le propriétaire';
+ LANGfrCouldNotBeChownedS = 'Ne peut pas changer le propriétaire : %s';
+ LANGfrDialogMakeSymlink = 'Créer le lien symbolique';
+ LANGfrDialogEditSymlink = 'Editer le lien symbolique';
+ LANGfrFEditSymlink_Caption = 'Editer le lien symbolique';
+ LANGfrFEditSymlink_SymbolicLinkFilename = 'Nom du lien symbolique :';
+ LANGfrFEditSymlink_SymbolicLinkPointsTo = 'Le lien symbolique pointe vers :';
+
+ LANGfrFChmod_Caption = 'Autorisations d''accès';
+ LANGfrFChmod_PermissionFrame = 'Autorisations';
+ LANGfrFChmod_FileFrame = 'Fichier';
+ LANGfrFChmod_ApplyRecursivelyFor = 'Appliquer récursivement';
+ LANGfrFChmod_miAllFiles = 'Tous les fichiers et répertoires';
+ LANGfrFChmod_miDirectories = 'Répertoires seulement';
+ LANGfrFChmod_OctalLabel = '_Octal :';
+ LANGfrFChmod_SUID = 'SUID - Exécution sous l''identifiant du propriétaire';
+ LANGfrFChmod_SGID = 'SGID - Exécution sous l''identifiant de groupe du propriétaire';
+ LANGfrFChmod_Sticky = 'Sticky bit';
+ LANGfrFChmod_RUSR = 'RUSR - Lecture par le propriétaire';
+ LANGfrFChmod_WUSR = 'WUSR - Ecriture par le propriétaire';
+ LANGfrFChmod_XUSR = 'XUSR - Exécution/recherche par le propriétaire';
+ LANGfrFChmod_RGRP = 'RGRP - Lecture par le groupe';
+ LANGfrFChmod_WGRP = 'WGRP - Ecriture par le groupe';
+ LANGfrFChmod_XGRP = 'XGRP - Exécution/recherche par le groupe';
+ LANGfrFChmod_ROTH = 'ROTH - Lecture par les autres';
+ LANGfrFChmod_WOTH = 'WOTH - Ecriture par les autres';
+ LANGfrFChmod_XOTH = 'XOTH - Exécution/recherche par les autres';
+ LANGfrFChmod_TextLabel = '<span weight="ultrabold">Texte :</span> %s';
+ LANGfrFChmod_FileLabel = '<span weight="ultrabold">Fichier :</span> %s'#10'<span weight="ultrabold">Texte :</span> %s'#10 +
+ '<span weight="ultrabold">Octal :</span> %d'#10'<span weight="ultrabold">Propriétaire :</span> %s'#10 +
+ '<span weight="ultrabold">Groupe :</span> %s';
+
+ LANGfrFChown_Caption = 'Changer le propriétaire/groupe';
+ LANGfrFChown_OwnerFrame = 'Nom d''utilisateur';
+ LANGfrFChown_GroupFrame = 'Nom de groupe';
+ LANGfrFChown_FileFrame = 'Fichier';
+ LANGfrFChown_ApplyRecursively = 'Appliquer récursivement';
+
+ LANGfrFSymlink_Caption = 'Créer le lien symbolique';
+ LANGfrFSymlink_ExistingFilename = 'Nom du fichier existant (vers lequel va pointer le lien symbolique) :';
+ LANGfrFSymlink_SymlinkFilename = 'Nom du lien symbolique :';
+
+ LANGfrmnuBookmarks_Caption = '_Marque-pages';
+ LANGfrmiAddBookmark_Caption = 'Ajouter un marque-page';
+ LANGfrmiEditBookmarks_Caption = 'Editer les marque-pages';
+ LANGfrBookmarkPopupDelete_Caption = 'Supprimer';
+ LANGfrmiPreferences_Caption = '_Préférences...';
+ LANGfrTheCurrentDirectoryAlreadyExistsInTheBookmarksList = 'le répertoire courant existe déjà dans la liste des marque-pages';
+ LANGfrSomeOtherInstanceChanged = 'une autre instance de Tux Commander a déjà modifié la configuration. Voulez-vous appliquer les nouveaux paramètres?'#10#10'Attention : si vous cliquez sur NON maintenant, la configuration sera écrasée pour cette instance'' sortie!';
+
+ LANGfrPreferences_Caption = 'Préférences';
+ LANGfrPreferences_TitleLabel_Caption = '<span size="x-large" weight="ultrabold"> Préférences de l''application</span>';
+ LANGfrPreferences_GeneralPage = 'Général';
+ LANGfrPreferences_FontsPage = 'Polices';
+ LANGfrPreferences_ColorsPage = 'Couleurs';
+ LANGfrPreferences_RowHeight = 'Hauteur de ligne :';
+ LANGfrPreferences_NumHistoryItems = 'Eléments d''historique de la ligne de commande :';
+ LANGfrPreferences_Default = 'par défaut';
+ LANGfrPreferences_ClearReadonlyAttribute = 'Effacer l''attribut de lecture seule lors d''une copie à partir d''un CD-ROM';
+ LANGfrPreferences_DisableMouseRenaming = 'Désactiver renommer avec la souris';
+ LANGfrPreferences_ShowFiletypeIconsInList = 'Montrer les icônes de type de fichier';
+ LANGfrPreferences_ExternalAppsLabel = '<span weight="ultrabold"> programmes externes</span>';
+ LANGfrPreferences_Viewer = '_Visualiseur :';
+ LANGfrPreferences_Editor = '_Editeur :';
+ LANGfrPreferences_Terminal = '_Terminal :';
+ LANGfrPreferences_ListFont = 'Liste de Polices :';
+ LANGfrPreferences_Change = 'Changer...';
+ LANGfrPreferences_UseDefaultFont = 'Utiliser _la fonte par défaut';
+ LANGfrPreferences_Foreground = 'Avant-plan';
+ LANGfrPreferences_Background = 'Arrière-plan';
+ LANGfrPreferences_NormalItem = 'Elément Normal :';
+ LANGfrPreferences_SetToDefaultToUseGTKThemeColors = 'Utiliser par défaut le thème GTK';
+ LANGfrPreferences_Cursor = 'Curseur :';
+ LANGfrPreferences_InactiveItem = 'Elément inactif :';
+ LANGfrPreferences_SelectedItem = 'Elément sélectionné :';
+ LANGfrPreferences_LinkItem = 'liens symboliques :';
+ LANGfrPreferences_LinkItemHint = 'afficher par défaut les liens symboliques dans la couleur des éléments normaux';
+ LANGfrPreferences_DotFileItem = 'Fichiers cachés :';
+ LANGfrPreferences_DotFileItemHint = 'Afficher par défaut les fichiers cachés dans la couleur des éléments normaux';
+ LANGfrPreferences_BrowseForApplication = 'Rechercher l''application';
+ LANGfrPreferences_DefaultS = 'par défaut : %s';
+ LANGfrPreferences_SelectFont = 'Sélectionner la fonte';
+
+(*************** STRINGS ADDED TO v0.4.101 **********************************************************************************)
+ LANGfrBookmarkButton_Tooltip = 'Afficher les marque-pages';
+ LANGfrUpButton_Tooltip = 'Aller au répertoire parent';
+ LANGfrRootButton_Tooltip = 'Aller au répertoire racine (/)';
+ LANGfrHomeButton_Tooltip = 'Aller au répertoire home (/home/user)';
+ LANGfrLeftEqualButton_Tooltip = 'Afficher le même répertoire dans le volet de droite';
+ LANGfrRightEqualButton_Tooltip = 'Afficher le même répertoire dans le volet de gauche';
+ LANGfrmiShowDirectorySizes_Caption = 'Afficher la taille des répertoires';
+ LANGfrmiTargetSource_Caption = 'Cible = Source';
+ LANGfrFileTypeDirectory = 'Répertoire';
+ LANGfrFileTypeFile = 'Fichier';
+ LANGfrFileTypeMetafile = 'Ceci est une méta-donnée générale';
+ LANGfrPreferencesPanelsPage = 'Volets';
+ LANGfrPreferencesApplicationsPage = 'Applications';
+ LANGfrPreferencesExperimentalPage = 'Expérimental';
+ LANGfrPreferencesSelectAllDirectoriesCheckBox_Caption = '"Sélectionner tout" inclut les répertoires';
+ LANGfrPreferencesNewStyleAltOCheckBox_Caption = '_New style Alt+O';
+ LANGfrPreferencesNewStyleAltOCheckBox_Tooltip = 'Rester dans le même répertoire si vous clonez ce répertoire dans le panel opposé en pressant Ctrl/Alt+O';
+ LANGfrPreferencesShowFuncButtonsCheckBox_Caption = 'Afficher les boutons de touches de fonction';
+ LANGfrPreferencesSizeFormatLabel_Caption = 'Format de taille:';
+ LANGfrPreferencesmiSizeFormat1 = 'Système';
+ LANGfrPreferencesmiSizeFormat6 = 'Groupé';
+ LANGfrPreferencesAutodetectXApp = 'Autodétecter X app';
+ LANGfrPreferencesAlwaysRunInTerminal = 'Toujours exécuter dans un terminal';
+ LANGfrPreferencesNeverRunInTerminal = 'Ne jamais exécuter dans un terminal';
+ LANGfrPreferencesCmdLineBehaviourLabel_Caption = 'Exécution à partir d''une ligne de commande:';
+ LANGfrPreferencesFeatures = 'Fonctionnalités';
+ LANGfrPreferencesDisableMouseRename_Tooltip = 'Vous pouvez utiliser Shift+F6 pour faire un renommage rapide';
+ LANGfrPreferencesDisableFileTipsCheckBox_Caption = 'Désactiver les infobulles pour les fichiers';
+ LANGfrPreferencesDisableFileTipsCheckBox_Tooltip = 'Ne pas afficher l''infobulle si le texte dans la colonne est tronqué';
+ LANGfrPreferencesShow = 'Afficher';
+ LANGfrPreferencesDirsInBoldCheckBox_Caption = 'Répertoires en gras';
+ LANGfrPreferencesDisableDirectoryBracketsCheckBox_Caption = 'Supprimer les crochets pour les répertoires';
+ LANGfrPreferencesOctalPermissionsCheckBox_Caption = 'Afficher les autorisations en octal';
+ LANGfrPreferencesOctalPermissionsCheckBox_Tooltip = 'Afficher les autorisations des fichiers/répertoires sous forme de nombre au lieu d''un texte(-rw-rw-rw-)';
+ LANGfrPreferencesMovement = 'Déplacement';
+ LANGfrPreferencesLynxLikeMotionCheckBox_Caption = 'Déplacement style Lynx';
+ LANGfrPreferencesInsertMovesDownCheckBox_Caption = 'Déplacement vers le bas après <Inser>';
+ LANGfrPreferencesSpaceMovesDownCheckBox_Caption = 'Déplacement vers le bas après <Espace>';
+ LANGfrPreferencesViewer = 'Visionneuse';
+ LANGfrPreferencesCommandSC = 'Commande:';
+ LANGfrPreferencesUseInternalViewer = 'Utiliser la visionneuse interne';
+ LANGfrPreferencesEditor = 'Editeur';
+ LANGfrPreferencesTerminal = 'Terminal';
+ LANGfrPreferencesExperimentalFeatures = 'Fonctionnalités expérimentales';
+ LANGfrPreferencesExperimentalWarningLabel_Caption = '<span weight="ultrabold">Attention :</span> Ces fonctionnalités sont en cours de développement et peuvent ne pas fonctionner correctement. Utilisez-les à vos risques et périls!';
+ LANGfrPreferencesFocusRefreshCheckBox_Caption = 'Rafraîchit la fenêtre qui a le focus';
+ LANGfrPreferencesFocusRefreshCheckBox_Tooltip = 'Le rafraîchissement du volet est très lent';
+ LANGfrPreferencesWMCompatModeCheckBox_Caption = 'Mode de compatibilité _WM ';
+ LANGfrPreferencesWMCompatModeCheckBox_Tooltip = 'A utiliser si vous avez des problèmes de gestionnaire de fenêtres (par exemple si IceWM ne maximise pas les fenêtres correctement)';
+ LANGfrPreferencesCompatUseLibcSystemCheckBox_Caption = 'Utiliser libc _system() pour l''exécution de programmes';
+ LANGfrPreferencesCompatUseLibcSystemCheckBox_Tooltip = 'A utiliser en cas de problèmes de gel ou de crash au lancement d''applications externes';
+
+ (*************** STRINGS ADDED TO v0.5.70 **********************************************************************************)
+ LANGfrmiSearchCaption2 = '_Chercher...';
+ LANGfrmiNoMounterBarCaption = 'Cacher la barre de montage';
+ LANGfrmiShowOneMounterBarCaption = 'Show _one mounter bar' ;
+ LANGfrmiShowTwoMounterBarCaption = 'Show _two mounter bars' ;
+ LANGfrmnuNetworkCaption = 'Rés_eau';
+ LANGfrmiConnectionsCaption = '_Connections...';
+ LANGfrmiOpenConnectionCaption = '_Ouvrir une connection...';
+ LANGfrmiQuickConnectCaption = 'Connection _rapide...';
+ LANGfrmnuPluginsCaption = 'Greff_ons';
+ LANGfrmiTestPluginCaption = '_Tester un greffon';
+ LANGfrmiMounterSettingsCaption = '_Paramètres de montage...';
+ LANGfrmiColumnsCaption = 'P_aramètres des panels...';
+ LANGfrmiSavePositionCaption = '_Sauver la position';
+ LANGfrmiMountCaption = '_Monter';
+ LANGfrmiUmountCaption = '_Démonter';
+ LANGfrmiEjectCaption = '_Ejecter';
+ LANGfrmiDuplicateTabCaption = 'Dupliquer l''onglet courant';
+ LANGfrmiCloseTabCaption = 'Fermer l''onglet courant';
+ LANGfrmiCloseAllTabsCaption = 'Fermer tous les onglets';
+ LANGfrCannotDetermineDestinationEngine = 'Impossible de déterminer la destination. Vérifiez l''emplacement et réessayez.';
+ LANGfrCannotLoadFile = 'Impossible de charger le fichier ''%s''. Vérifiez les permissions.';
+ LANGfrMountPointDevice = 'Point de Montage: %s'#10'Périphérique: %s';
+ LANGfrMountSC = 'Montage:';
+ LANGfrNoPluginsFound = 'Aucuns greffons trouvés';
+ LANGfrPluginAbout = 'A Propos...';
+ LANGfrCouldntOpenURI = 'Impossible d''ouvrir l''URI spécifié. Please check the consistency of the resource identifier and the access permission.';
+ LANGfrPluginAboutInside = 'Greffon: %s'#10#10'%s'#10'%s';
+ LANGfrAreYouSureCloseAllTabs = 'Etes vous sur de vouloir fermer tous les onglets inactifs?';
+ LANGfrCouldntOpenURIArchive = 'Impossible d''ouvrir l''archive. Please check consistency and access permissions.';
+ LANGfrThereIsNoModuleAvailable = 'Il n''y a aucuns modules disponibles pouvant charger cette connection';
+ LANGfrIgnoreError = 'Voulez-vous vraiment ignorer cette erreur? Le fichier source sera ensuite effacé!';
+ LANGfrErrorMount = 'Erreur détectée pendant le montage du périphérique ''%s'':'#10#10;
+ LANGfrErrorUmount = 'Erreur détectée pendant le démontage du périphérique ''%s'':'#10#10;
+ LANGfrErrorEject = 'Erreur détectée pendant l''éjection du périphérique ''%s'':'#10#10;
+
+ LANGfrMounterPrefs_Caption = 'Paramètres de montage';
+ LANGfrMounterPrefs_TitleLabelCaption = 'Paramètres de Montage';
+ LANGfrMounterPrefs_ListViewFrameCaption = 'Montage';
+ LANGfrMounterPrefs_MountName = 'Nom de Montage';
+ LANGfrMounterPrefs_MountPoint = 'Point de Montage';
+ LANGfrMounterPrefs_Device = 'Périphérique';
+ LANGfrMounterPrefs_MoveUpButtonTooltip = 'Vers le haut';
+ LANGfrMounterPrefs_MoveDownButtonTooltip = 'Vers le bas';
+ LANGfrMounterPrefs_UseFSTabDefaultsCheckBox = 'Utiliser le fichier _fstab par défaut';
+ LANGfrMounterPrefs_UseFSTabDefaultsCheckBoxTooltip = 'En cochant cette case, la barre de montage sera configurée par défaut avec les entrées trouvées dans le fichier /etc/fstab (fichier de système de montage)';
+ LANGfrMounterPrefs_ToggleModeCheckBox = 'Les boutons restent en position actif quan_d ils sont montés';
+ LANGfrMounterPrefs_ToggleModeCheckBoxTooltip = 'Si activé, les boutons de la barre de montage resteront actifs si le périphérique est monté; Un autre click permettra de les démonter (éjecter dans ce cas)';
+ LANGfrMounterPrefs_PropertiesFrameCaption = 'Propriétés';
+ LANGfrMounterPrefs_DisplayTextLabelCaption = '_Texte Affiché:';
+ LANGfrMounterPrefs_MountPointLabelCaption = '_Point de Montage:';
+ LANGfrMounterPrefs_MountDeviceLabelCaption = 'Périphéri_que:';
+ LANGfrMounterPrefs_DeviceTypeLabelCaption = 'T_ype:';
+ LANGfrMounterPrefs_miLocalDiskCaption = 'Disque Dur';
+ LANGfrMounterPrefs_miRemovableCaption = 'Removable';
+ LANGfrMounterPrefs_miCDCaption = 'Lecteur CD/DVD';
+ LANGfrMounterPrefs_miFloppyCaption = 'Lecteur de Disquette';
+ LANGfrMounterPrefs_miNetworkCaption = 'Réseau';
+ LANGfrMounterPrefs_MountCommandLabelCaption = '_Commande Montage:';
+ LANGfrMounterPrefs_UmountCommandLabelCaption = 'C_ommande Démontage:';
+ LANGfrMounterPrefs_MountCommandEntryTooltip = 'Syntaxe: utiliser %dev pour la substitution du périphérique et %dir pour le point de montage ou ne rien mettre pour le montage par défault'#10'Note: attention aux commandes, Tux Commander peut planter!' +
+ #10'Example: smbmount %dev %dir -o username=netuser,password=somepass';
+ LANGfrMounterPrefs_UmountCommandEntryTooltip = 'Syntaxe: utiliser %dev pour la substitution du périphérique et %dir pour le point de montage ou ne rien mettre pour le montage par défault'#10'Example: smbumount $dir';
+ LANGfrMounterPrefs_IconLabelCaption = '_Icone:';
+
+ LANGfrConnMgr_Caption = 'Ouvrir une Nouvelle Connection';
+ LANGfrConnMgr_ConnectButton = 'Co_nnecter';
+ LANGfrConnMgr_OpenConnection = 'Ouvrir une Connection';
+ LANGfrConnMgr_NameColumn = 'Nom';
+ LANGfrConnMgr_URIColumn = 'URI';
+ LANGfrConnMgr_AddConnectionButtonCaption = '_Ajouter';
+ LANGfrConnMgr_AddConnectionButtonTooltip = 'Ajouter une nouvelle connection';
+ LANGfrConnMgr_EditButtonCaption = '_Editer...';
+ LANGfrConnMgr_EditButtonTooltip = 'Editer la connection sélectionnée';
+ LANGfrConnMgr_RemoveButtonCaption = '_Supprimer';
+ LANGfrConnMgr_RemoveButtonTooltip = 'Supprimer la connection sélectionnée';
+ LANGfrConnMgr_DoYouWantDelete = 'Voulez vous vraiment supprimer cette connection ''%s''?';
+
+ LANGfrConnProp_FTP = 'FTP';
+ LANGfrConnProp_SFTP = 'SFTP (ssh subsystem)';
+ LANGfrConnProp_SMB = 'Windows (SMB)';
+ LANGfrConnProp_HTTP = 'WebDAV (HTTP)';
+ LANGfrConnProp_HTTPS = 'Secure WebDAV (HTTPS)';
+ LANGfrConnProp_Other = 'Autre <span style="italic">(à spécifier dans l''URI)</span>';
+ LANGfrConnProp_Caption = 'Propriétés de la Connection';
+ LANGfrConnProp_VFSModule = 'Module _VFS:';
+ LANGfrConnProp_URI = '_URI:';
+ LANGfrConnProp_URIEntryTooltip = 'Un URI valable doit contenir un préfixe de service et une adresse serveur';
+ LANGfrConnProp_DetailedInformations = 'Informations détaillées';
+ LANGfrConnProp_Name = '_Nom:';
+ LANGfrConnProp_Server = 'Ser_veur[:port]:';
+ LANGfrConnProp_Username = 'U_tilisateur:';
+ LANGfrConnProp_UserNameEntryTooltip = 'Ne rien mettre pour les utilisateurs anonymes';
+ LANGfrConnProp_Password = 'Mot de _Passe:';
+ LANGfrConnProp_TargetDirectory = 'Répertoire _Cible:';
+ LANGfrConnProp_ServiceType = '_Services:';
+ LANGfrConnProp_MaskPassword = '_Masquer le mot de passe';
+ LANGfrConnProp_MenuItemCaption = 'Défaut <span style="italic">(tous les modules appropriés)</span>';
+
+ LANGfrConnLogin_Caption = 'Authentication requis';
+ LANGfrConnLogin_Login = 'Login';
+ LANGfrConnLogin_ExperimentalWarningLabelCaption = 'You must log in to access %s';
+ LANGfrConnLogin_Username = '_Utilisateur:';
+ LANGfrConnLogin_Password = 'Mot de _Passe:';
+ LANGfrConnLogin_AnonymousCheckButton = '_Anonyme';
+
+ LANGfrColumns_Caption = 'Paramètres des Panels';
+ LANGfrColumns_Title = 'Paramètres des Panels';
+ LANGfrColumns_MoveUpButtonTooltip = 'Vers le haut';
+ LANGfrColumns_MoveDownButtonTooltip = 'Vers le bas';
+ LANGfrColumns_TitlesLongName = 'Nom';
+ LANGfrColumns_TitlesLongNameExt = 'Nom + Extension';
+ LANGfrColumns_TitlesLongExt = 'Extension';
+ LANGfrColumns_TitlesLongSize = 'Taille';
+ LANGfrColumns_TitlesLongDateTime = 'Date + Heure';
+ LANGfrColumns_TitlesLongDate = 'Date';
+ LANGfrColumns_TitlesLongTime = 'Heure';
+ LANGfrColumns_TitlesLongUser = 'Utilisateur';
+ LANGfrColumns_TitlesLongGroup = 'Groupe';
+ LANGfrColumns_TitlesLongAttr = 'Attributs';
+ LANGfrColumns_TitlesShortName = 'Nom';
+ LANGfrColumns_TitlesShortNameExt = 'Nom';
+ LANGfrColumns_TitlesShortExt = 'Ext';
+ LANGfrColumns_TitlesShortSize = 'Taille';
+ LANGfrColumns_TitlesShortDateTime = 'Date';
+ LANGfrColumns_TitlesShortDate = 'Date';
+ LANGfrColumns_TitlesShortTime = 'Heure';
+ LANGfrColumns_TitlesShortUser = 'Utilisateur';
+ LANGfrColumns_TitlesShortGroup = 'Groupe';
+ LANGfrColumns_TitlesShortAttr = 'Attr';
+
+ LANGfrTestPlugin_Caption = 'Tester un Greffon VFS';
+ LANGfrTestPlugin_Title = 'Tester un Greffon VFS';
+ LANGfrTestPlugin_ExperimentalWarningLabelCaption = '<span weight="ultrabold">Avertissement:</span> Le sous-sytème VFS et ses greffons sont encore en développement et contiennent des bugs. utilisez cette fonction à votre propres risques!';
+ LANGfrTestPlugin_Plugin = '_Greffon:';
+ LANGfrTestPlugin_Command = 'Co_mmande:';
+ LANGfrTestPlugin_Username = '_Utilisateur:';
+ LANGfrTestPlugin_Password = 'Mot de _Passe:';
+ LANGfrTestPlugin_AnonymousCheckButton = 'Login _Anonyme (n''appelle pas VFSLogin)';
+ LANGfrTestPlugin_NoPluginsFound = 'Pas de greffons trouvés';
+
+ LANGfrRemoteWait_Caption = 'Opération en cours';
+ LANGfrRemoteWait_OperationInProgress = 'Opération en cours, veuillez patienter...';
+ LANGfrRemoteWait_ItemsFound = 'Résultats: %d';
+
+ LANGfrSearch_Bytes = 'Bytes';
+ LANGfrSearch_kB = 'kB';
+ LANGfrSearch_MB = 'MB';
+ LANGfrSearch_days = 'jours';
+ LANGfrSearch_weeks = 'semaines';
+ LANGfrSearch_months = 'mois';
+ LANGfrSearch_years = 'années';
+ LANGfrSearch_Caption = 'Fichiers Trouvés';
+ LANGfrSearch_General = 'General';
+ LANGfrSearch_Advanced = 'Avancé';
+ LANGfrSearch_SearchResults = '_Résultats:';
+ LANGfrSearch_SearchFor = 'Chercher _pour:';
+ LANGfrSearch_FileMaskEntryTooltip = 'Astuce: Utiliser un point-virgule (";") pour spécifier les fichiers multiples à trouver';
+ LANGfrSearch_SearchIn = 'Chercher _dans:';
+ LANGfrSearch_SearchArchivesCheckButton = 'Chercher _archives';
+ LANGfrSearch_FindText = 'Trouver _texte:';
+ LANGfrSearch_FindTextEntryTooltip = 'Une entrée vide permet de ne pas chercher un texte spécifique'#10'Veuillez noter que nous utilisons le codage UTF-8 dans l''interface graphique';
+ LANGfrSearch_CaseSensitiveCheckButton = 'Cas_e sensitive';
+ LANGfrSearch_StayCurrentFSCheckButton = 'Inclure d''autres systèmes de fichiers';
+ LANGfrSearch_CaseSensitiveMatchCheckButton = 'Ca_se sensitive';
+ LANGfrSearch_Size = 'Taille';
+ LANGfrSearch_Date = 'Date';
+ LANGfrSearch_BiggerThan = '_Plus grand que';
+ LANGfrSearch_SmallerThan = 'P_lus petit que';
+ LANGfrSearch_ModifiedBetweenRadioButton = '_Modifié entre';
+ LANGfrSearch_NotModifiedAfterRadioButton = '_Non-modifié après';
+ LANGfrSearch_ModifiedLastRadioButton = 'Modifié dans dernier';
+ LANGfrSearch_ModifiedNotLastRadionButton = 'Non-modifié dans dernier';
+ LANGfrSearch_ModifiedBetweenEntry1 = '"utilisez ce format de date:" c';
+ LANGfrSearch_ViewButtonCaption = '_Voir';
+ LANGfrSearch_NewSearchButtonCaption = '_Nouvelle';
+ LANGfrSearch_GoToFileButtonCaption = '_Aller';
+ LANGfrSearch_FeedToListboxButtonCaption = 'Ajou_ter';
+ LANGfrSearch_StatusSC = 'Status:';
+ LANGfrSearch_Ready = 'Prêt.';
+ LANGfrSearch_PreparingToSearch = 'Recherche en préparation.';
+ LANGfrSearch_SearchInProgress = 'Recherche en cours:';
+ LANGfrSearch_UserCancelled = 'Annulation par l''utilisateur.';
+ LANGfrSearch_SearchFinished = 'Recherche terminée';
+ LANGfrSearch_FilesFound = '%d fichiers trouvés';
+ LANGfrSearch_And = 'et';
+
+ (*************** STRINGS ADDED TO v0.5.82 **********************************************************************************)
+ LANGfrCloseOpenConnection = 'Vous essayez d''ouvrir une nouvelle connection sur une connection déjà existante. En continuant, la précédente connection sera fermée et remplacée par la nouvelle demandée.'#10#10'Souhaitez vous continuer?';
+ LANGfrDuplicateTabWarning = 'Vous essayez d''ouvrir un nouvel onglet à partir d''un répertoire distant. Cependant, l''action n''est pas supportée. Le répertoire dans le nouvel onglet pointera ver un système de fichier local.';
+ LANGfrDontShowAgain = '_Ne plus montrer ce message';
+ LANGfrSwitchOtherPanelWarning = 'Vous essayez d''ouvrir un répertoire distant dans le panel opposé. Cependant, l''action n''est pas supportée. Le répertoire cible ne sera pas ouvert.';
+ LANGfrOpenConnectionsWarning = 'Des connections actives sont ouvertes dans le panel. En fermant l''application, ces connections seront déconnectées.'#10#10'Souhaitez vous quitter?';
+ LANGfrmiDisconnect_Caption = '_Déconnecter';
+ LANGfrDisconnectButton_Tooltip = 'Déconnecter la connection active';
+ LANGfrLeaveArchiveButton_Tooltip = 'Fermer l''archive courante';
+ LANGfrOpenTerminalButton_Tooltip = 'Ouvrir un nouveau terminal dans le répertoire courant';
+ LANGfrOpenTerminalButton_Caption = 'Te_rminal';
+ LANGfrShowTextUIDsCheckBox_Caption = 'Voir Texte _UIDs';
+ LANGfrShowTextUIDsCheckBox_Tooltip = 'Voir les informations textuelles d''Utilisateur et Groupe à la place des nombres (UID/GID)';
+
+ (*************** STRINGS ADDED TO v0.5.100 **********************************************************************************)
+ LANGfrmiNewTab_Caption = 'Nouvel On_glet';
+ LANGfrFilePopupMenu_Properties = '_Propriétés';
+ LANGfrCommandEntry_Tooltip = 'Use %s as file/directory placeholder';
+ LANGfrmiFiles_Caption = 'Fichiers seulement';
+
+ (*************** STRINGS ADDED TO v0.6.31 **********************************************************************************)
+ LANGfrPasswordButton_Tooltip = 'Archive requires password.'#10'Click to set';
+ LANGfrHandleRunFromArchive_Bytes = 'bytes';
+ LANGfrHandleRunFromArchive_FileTypeDesc_Unknown = '(unknown)';
+ LANGfrHandleRunFromArchive_NotAssociated = '(not associated)';
+ LANGfrHandleRunFromArchive_SelfExecutable = '(self-executable)';
+ LANGfrHandleRunFromArchive_CouldntCreateTemporaryDirectory = 'Couldn''t create temporary directory "%s": %s.'#10#10'Please check the temporary directory settings and try it again.';
+ LANGfrFRunFromVFS_Caption = 'Packed file properties';
+ LANGfrFRunFromVFS_TitleLabel = 'File Properties';
+ LANGfrFRunFromVFS_FileNameLabel = 'File name:';
+ LANGfrFRunFromVFS_FileTypeLabel = 'File type:';
+ LANGfrFRunFromVFS_SizeLabel = 'Size:';
+ LANGfrFRunFromVFS_PackedSizeLabel = 'Compressed size:';
+ LANGfrFRunFromVFS_DateLabel = 'Modify date:';
+ LANGfrFRunFromVFS_InfoLabel = 'Opening files directly from archives is not supported. By clicking the buttons below the file (all files respectively) will be extracted to a temporary location. Temporary files will be deleted when you close Tux Commander.';
+ LANGfrFRunFromVFS_OpensWithLabel = 'Open with:';
+ LANGfrFRunFromVFS_ExecuteButton = 'E_xtract and open';
+ LANGfrFRunFromVFS_ExecuteAllButton = 'Extract _all and open';
+ LANGfrFSetPassword_Caption = 'Set password';
+ LANGfrFSetPassword_Label1_Caption = 'Password required';
+ LANGfrFSetPassword_Label2_Caption = 'The archive is encrypted and requires password in order to extract the data';
+ LANGfrFSetPassword_ShowPasswordCheckButton = 'Un_mask password';
+
+
+
+(********************************************************************************************************************************)
+procedure SetTranslation;
+begin
+ LANGF2Button_Caption := LANGfrF2Button_Caption;
+ LANGF3Button_Caption := LANGfrF3Button_Caption;
+ LANGF4Button_Caption := LANGfrF4Button_Caption;
+ LANGF5Button_Caption := LANGfrF5Button_Caption;
+ LANGF6Button_Caption := LANGfrF6Button_Caption;
+ LANGF7Button_Caption := LANGfrF7Button_Caption;
+ LANGF8Button_Caption := LANGfrF8Button_Caption;
+
+ LANGmnuFile_Caption := LANGfrmnuFile_Caption;
+ LANGmnuMark_Caption := LANGfrmnuMark_Caption;
+ LANGmnuCommands_Caption := LANGfrmnuCommands_Caption;
+ LANGmnuHelp_Caption := LANGfrmnuHelp_Caption;
+ LANGmiExit_Caption := LANGfrmiExit_Caption;
+ LANGmiSelectGroup_Caption := LANGfrmiSelectGroup_Caption;
+ LANGmiUnselectGroup_Caption := LANGfrmiUnselectGroup_Caption;
+ LANGmiSelectAll_Caption := LANGfrmiSelectAll_Caption;
+ LANGmiUnselectAll_Caption := LANGfrmiUnselectAll_Caption;
+ LANGmiInvertSelection_Caption := LANGfrmiInvertSelection_Caption;
+ LANGmiRefresh_Caption := LANGfrmiRefresh_Caption;
+ LANGmiAbout_Caption := LANGfrmiAbout_Caption;
+
+ LANGColumn1_Caption := LANGfrColumn1_Caption;
+ LANGColumn2_Caption := LANGfrColumn2_Caption;
+ LANGColumn3_Caption := LANGfrColumn3_Caption;
+ LANGColumn4_Caption := LANGfrColumn4_Caption;
+ LANGColumn5_Caption := LANGfrColumn5_Caption;
+
+ LANGExpandSelection := LANGfrExpandSelection;
+ LANGShrinkSelection := LANGfrShrinkSelection;
+ LANGNoMatchesFound := LANGfrNoMatchesFound;
+ LANGNoFilesSelected := LANGfrNoFilesSelected;
+ LANGSelectedFilesDirectories := LANGfrSelectedFilesDirectories;
+ LANGDirectoryS := LANGfrDirectoryS;
+ LANGFileS := LANGfrFileS;
+ LANGDoYouReallyWantToDeleteTheS := LANGfrDoYouReallyWantToDeleteTheS;
+ LANGDoYouReallyWantToDeleteTheSS := LANGfrDoYouReallyWantToDeleteTheSS;
+ LANGCopyFiles := LANGfrCopyFiles;
+ LANGMoveRenameFiles := LANGfrMoveRenameFiles;
+ LANGCopyDFileDirectoriesTo := LANGfrCopyDFileDirectoriesTo;
+ LANGMoveRenameDFileDirectoriesTo := LANGfrMoveRenameDFileDirectoriesTo;
+ LANGCopySC := LANGfrCopySC;
+ LANGMoveRenameSC := LANGfrMoveRenameSC;
+
+ LANGQuickFind := LANGfrQuickFind;
+
+ LANGAboutString := LANGfrAboutString;
+ LANGAboutStringGnome := LANGfrAboutStringGnome;
+ LANGDiskStatFmt := LANGfrDiskStatFmt;
+ LANGDiskStatVolNameFmt := LANGfrDiskStatVolNameFmt;
+ LANGStatusLineFmt := LANGfrStatusLineFmt;
+ LANGPanelStrings[False] := LANGfrPanelStrings[False];
+ LANGPanelStrings[True] := LANGfrPanelStrings[True];
+ LANGDIR := LANGfrDIR;
+ LANGErrorGettingListingForSPanel := LANGfrErrorGettingListingForSPanel;
+ LANGErrorGettingListingForSPanelNoPath := LANGfrErrorGettingListingForSPanelNoPath;
+ LANGErrorCreatingNewDirectorySInSPanel := LANGfrErrorCreatingNewDirectorySInSPanel;
+ LANGErrorCreatingNewDirectorySInSPanelNoPath := LANGfrErrorCreatingNewDirectorySInSPanelNoPath;
+ LANGTheFileDirectory := LANGfrTheFileDirectory;
+ LANGCouldNotBeDeleted := LANGfrCouldNotBeDeleted;
+ LANGCouldNotBeDeletedS := LANGfrCouldNotBeDeletedS;
+ LANGUserCancelled := LANGfrUserCancelled;
+ LANGTheDirectorySIsNotEmpty := LANGfrTheDirectorySIsNotEmpty;
+ LANGCannotCopyFile := LANGfrCannotCopyFile;
+ LANGCopyError := LANGfrCopyError;
+ LANGMoveError := LANGfrMoveError;
+ LANGOverwriteS := LANGfrOverwriteS;
+ LANGWithFileS := LANGfrWithFileS;
+ LANGOvewriteSBytesS := LANGfrOvewriteSBytesS;
+ LANGTheFile := LANGfrTheFile;
+ LANGCopy := LANGfrCopy;
+ LANGMove := LANGfrMove;
+ LANGTheDirectory := LANGfrTheDirectory;
+ LANGTheSymbolicLink := LANGfrTheSymbolicLink;
+ LANGCannotMoveFile := LANGfrCannotMoveFile;
+ LANGCouldNotBeCreated := LANGfrCouldNotBeCreated;
+ LANGCouldNotBeCreatedS := LANGfrCouldNotBeCreatedS;
+ LANGFromS := LANGfrFromS;
+ LANGToS := LANGfrToS;
+ LANGCannotCopyFileToItself := LANGfrCannotCopyFileToItself;
+ LANGMemoryAllocationFailed := LANGfrMemoryAllocationFailed;
+ LANGCannotOpenSourceFile := LANGfrCannotOpenSourceFile;
+ LANGCannotOpenDestinationFile := LANGfrCannotOpenDestinationFile;
+ LANGCannotCloseDestinationFile := LANGfrCannotCloseDestinationFile;
+ LANGCannotCloseSourceFile := LANGfrCannotCloseSourceFile;
+ LANGCannotReadFromSourceFile := LANGfrCannotReadFromSourceFile;
+ LANGCannotWriteToDestinationFile := LANGfrCannotWriteToDestinationFile;
+
+ LANGUnknownException := LANGfrUnknownException;
+ LANGNoAccess := LANGfrNoAccess;
+ LANGUnknownError := LANGfrUnknownError;
+
+ LANGCreateANewDirectory := LANGfrCreateANewDirectory;
+ LANGEnterDirectoryName := LANGfrEnterDirectoryName;
+
+ LANGOverwriteQuestion := LANGfrOverwriteQuestion;
+ LANGOverwriteButton_Caption := LANGfrOverwriteButton_Caption;
+ LANGOverwriteAllButton_Caption := LANGfrOverwriteAllButton_Caption;
+ LANGSkipButton_Caption := LANGfrSkipButton_Caption;
+ LANGOverwriteAllOlderButton_Caption := LANGfrOverwriteAllOlderButton_Caption;
+ LANGSkipAllButton_Caption := LANGfrSkipAllButton_Caption;
+ LANGRenameButton_Caption := LANGfrRenameButton_Caption;
+ LANGAppendButton_Caption := LANGfrAppendButton_Caption;
+ LANGRename := LANGfrRename;
+ LANGRenameFile := LANGfrRenameFile;
+ LANGIgnoreButton_Caption := LANGfrIgnoreButton_Caption;
+
+ LANGProgress := LANGfrProgress;
+ LANGCancel := LANGfrCancel;
+ LANGDelete := LANGfrDelete;
+
+ LANGSpecifyFileType := LANGfrSpecifyFileType;
+
+ LANGRemoveDirectory := LANGfrRemoveDirectory;
+ LANGDoYouWantToDeleteItWithAllItsFilesAndSubdirectories := LANGfrDoYouWantToDeleteItWithAllItsFilesAndSubdirectories;
+ LANGRetry := LANGfrRetry;
+ LANGDeleteButton_Caption := LANGfrDeleteButton_Caption;
+ LANGAll := LANGfrAll;
+
+ LANGCopyFilesSC := LANGfrCopyFilesSC;
+ LANGAppendQuestion := LANGfrAppendQuestion;
+ LANGPreparingList := LANGfrPreparingList;
+
+ LANGYouMustSelectAValidFile := LANGfrYouMustSelectAValidFile;
+ LANGmiVerifyChecksums := LANGfrmiVerifyChecksums;
+ LANGVerifyChecksumsCaption := LANGfrVerifyChecksumsCaption;
+ LANGCheckButtonCaptionCheck := LANGfrCheckButtonCaptionCheck;
+ LANGCheckButtonCaptionStop := LANGfrCheckButtonCaptionStop;
+ LANGFileListTooltip := LANGfrFileListTooltip;
+ LANGFilenameColumnCaption := LANGfrFilenameColumnCaption;
+ LANGTheFileSYouAreTryingToOpenIsQuiteBig := LANGfrTheFileSYouAreTryingToOpenIsQuiteBig;
+ LANGAnErrorOccuredWhileInitializingMemoryBlock := LANGfrAnErrorOccuredWhileInitializingMemoryBlock;
+ LANGAnErrorOccuredWhileOpeningFileSS := LANGfrAnErrorOccuredWhileOpeningFileSS;
+ LANGAnErrorOccuredWhileReadingFileSS := LANGfrAnErrorOccuredWhileReadingFileSS;
+ LANGChecksumNotChecked := LANGfrChecksumNotChecked;
+ LANGChecksumChecking := LANGfrChecksumChecking;
+ LANGChecksumInterrupted := LANGfrChecksumInterrupted;
+ LANGChecksumDOK := LANGfrChecksumDOK;
+
+ LANGmiCreateChecksumsCaption := LANGfrmiCreateChecksumsCaption;
+ LANGYouMustSelectAtLeastOneFileToCalculateChecksum := LANGfrYouMustSelectAtLeastOneFileToCalculateChecksum;
+ LANGCreateChecksumsCaption := LANGfrCreateChecksumsCaption;
+ LANGCCHKSUMPage1Text := LANGfrCCHKSUMPage1Text;
+ LANGCCHKSUMPage4Text := LANGfrCCHKSUMPage4Text;
+ LANGCCHKSUMPage6Text := LANGfrCCHKSUMPage6Text;
+ LANGCCHKSUMPage7Text := LANGfrCCHKSUMPage7Text;
+ LANGCCHKSUMPage1Title := LANGfrCCHKSUMPage1Title;
+ LANGCCHKSUMPage2Title := LANGfrCCHKSUMPage2Title;
+ LANGCCHKSUMPage3Title := LANGfrCCHKSUMPage3Title;
+ LANGCCHKSUMPage4Title := LANGfrCCHKSUMPage4Title;
+ LANGCCHKSUMPage5Title := LANGfrCCHKSUMPage5Title;
+ LANGCCHKSUMPage6Title := LANGfrCCHKSUMPage6Title;
+ LANGCCHKSUMPage7Title := LANGfrCCHKSUMPage7Title;
+ LANGCCHKSUMSFVFile := LANGfrCCHKSUMSFVFile;
+ LANGCCHKSUMMD5sumFile := LANGfrCCHKSUMMD5sumFile;
+ LANGCCHKSUMFileName := LANGfrCCHKSUMFileName;
+ LANGCCHKSUMCreateSeparateChecksumFiles := LANGfrCCHKSUMCreateSeparateChecksumFiles;
+ LANGCCHKSUMNowProcessingFileS := LANGfrCCHKSUMNowProcessingFileS;
+ LANGCCHKSUMFinishCaption := LANGfrCCHKSUMFinishCaption;
+ LANGCCHKSUMAreYouSureYouWantToAbortTheProcessing := LANGfrCCHKSUMAreYouSureYouWantToAbortTheProcessing;
+ LANGCCHKSUMAnErrorOccuredWhileOpeningFileSS := LANGfrCCHKSUMAnErrorOccuredWhileOpeningFileSS;
+ LANGCCHKSUMAnErrorOccuredWhileReadingFileSS := LANGfrCCHKSUMAnErrorOccuredWhileReadingFileSS;
+ LANGCCHKSUMAnErrorOccuredWhileWritingFileSS := LANGfrCCHKSUMAnErrorOccuredWhileWritingFileSS;
+
+ LANGAnErrorOccuredWhileWritingFileSS := LANGfrAnErrorOccuredWhileWritingFileSS;
+ LANGTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt := LANGfrTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt;
+ LANGTheTargetFileSCannotBeRemovedS := LANGfrTheTargetFileSCannotBeRemovedS;
+ LANGMergeCaption := LANGfrMergeCaption;
+ LANGPleaseInsertNextDiskOrGiveDifferentLocation := LANGfrPleaseInsertNextDiskOrGiveDifferentLocation;
+ LANGMergeOfSSucceeded := LANGfrMergeOfSSucceeded;
+ LANGWarningCreatedFileFailsCRCCheck := LANGfrWarningCreatedFileFailsCRCCheck;
+ LANGMergeOfSSucceeded_NoCRCFileAvailable := LANGfrMergeOfSSucceeded_NoCRCFileAvailable;
+ LANGMergeSAndAllFilesWithAscendingNamesToTheFollowingDirectory := LANGfrMergeSAndAllFilesWithAscendingNamesToTheFollowingDirectory;
+ LANGMergeSC := LANGfrMergeSC;
+ LANGmiSplitFileCaption := LANGfrmiSplitFileCaption;
+ LANGmiMergeFilesCaption := LANGfrmiMergeFilesCaption;
+
+ LANGSplitTheFileSToDirectory := LANGfrSplitTheFileSToDirectory;
+ LANGSplitSC := LANGfrSplitSC;
+ LANGSplitFile := LANGfrSplitFile;
+ LANGBytesPerFile := LANGfrBytesPerFile;
+ LANGAutomatic := LANGfrAutomatic;
+ LANGDeleteFilesOnTargetDisk := LANGfrDeleteFilesOnTargetDisk;
+ LANGSplitCaption := LANGfrSplitCaption;
+ LANGCannotOpenFileS := LANGfrCannotOpenFileS;
+ LANGCannotSplitTheFileToMoreThan999Parts := LANGfrCannotSplitTheFileToMoreThan999Parts;
+ LANGThereAreSomeFilesInTheTargetDirectorySDoYouWantToDeleteThem := LANGfrThereAreSomeFilesInTheTargetDirectorySDoYouWantToDeleteThem;
+ LANGThereAreDFilesInTheTargetDirectoryDoYouWantToDeleteThem := LANGfrThereAreDFilesInTheTargetDirectoryDoYouWantToDeleteThem;
+ LANGAnErrorOccuredWhileOperationS := LANGfrAnErrorOccuredWhileOperationS;
+ LANGSplitOfSSucceeded := LANGfrSplitOfSSucceeded;
+ LANGSplitOfSFailed := LANGfrSplitOfSFailed;
+
+ LANGmnuShow_Caption := LANGfrmnuShow_Caption;
+ LANGmiShowDotFiles_Caption := LANGfrmiShowDotFiles_Caption;
+ LANGTheFileYouAreTryingToOpenIsQuiteBig := LANGfrTheFileYouAreTryingToOpenIsQuiteBig;
+ LANGCannotExecuteSPleaseCheckTheConfiguration := LANGfrCannotExecuteSPleaseCheckTheConfiguration;
+ LANGEdit := LANGfrEdit;
+ LANGenterFilenameToEdit := LANGfrEnterFilenameToEdit;
+
+ LANGmnuSettings_Caption := LANGfrmnuSettings_Caption;
+ LANGmiFileTypes_Caption := LANGfrmiFileTypes_Caption;
+ LANGThereIsNoApplicationAssociatedWithS := LANGfrThereIsNoApplicationAssociatedWithS;
+ LANGErrorExecutingCommand := LANGfrErrorExecutingCommand;
+ LANGEditFileTypesCaption := LANGfrEditFileTypesCaption;
+ LANGTitleLabel_Caption := LANGfrTitleLabel_Caption;
+ LANGExtensionsColumn := LANGfrExtensionsColumn;
+ LANGDescriptionColumn := LANGfrDescriptionColumn;
+ LANGFileTypesList := LANGfrFileTypesList;
+ LANGActionName := LANGfrActionName;
+ LANGCommand := LANGfrCommand;
+ LANGSetDefaultActionButton_Caption := LANGfrSetDefaultActionButton_Caption;
+ LANGRunInTerminalCheckBox_Caption := LANGfrRunInTerminalCheckBox_Caption;
+ LANGAutodetectCheckBox_Caption := LANGfrAutodetectCheckBox_Caption;
+ LANGBrowseButton_Caption := LANGfrBrowseButton_Caption;
+ LANGCommandLabel_Caption := LANGfrCommandLabel_Caption;
+ LANGDescriptionLabel_Caption := LANGfrDescriptionLabel_Caption;
+ LANGFNameExtLabel_Caption := LANGfrFNameExtLabel_Caption;
+ LANGNotebookPageExtensions := LANGfrNotebookPageExtensions;
+ LANGNotebookPageActions := LANGfrNotebookPageActions;
+ LANGDefault := LANGfrDefault;
+ LANGCannotSaveFileTypeAssociationsBecauseOtherProcess := LANGfrCannotSaveFileTypeAssociationsBecauseOtherProcess;
+
+ LANGDefaultColor := LANGfrDefaultColor;
+ LANGIcon := LANGfrIcon;
+ LANGBrowseForIcon := LANGfrBrowseForIcon;
+ LANGSelectFileTypeColor := LANGfrSelectFileTypeColor;
+ LANGColor := LANGfrColor;
+
+ LANGmiChangePermissions_Caption := LANGfrmiChangePermissions_Caption;
+ LANGmiChangeOwner_Caption := LANGfrmiChangeOwner_Caption;
+ LANGmiCreateSymlink_Caption := LANGfrmiCreateSymlink_Caption;
+ LANGmiEditSymlink_Caption := LANGfrmiEditSymlink_Caption;
+ LANGChmodProgress := LANGfrChmodProgress;
+ LANGChownProgress := LANGfrChownProgress;
+ LANGYouMustSelectAValidSymbolicLink := LANGfrYouMustSelectAValidSymbolicLink;
+ LANGPopupRunS := LANGfrPopupRunS;
+ LANGPopupOpenS := LANGfrPopupOpenS;
+ LANGPopupGoUp := LANGfrPopupGoUp;
+ LANGPopupOpenWithS := LANGfrPopupOpenWithS;
+ LANGPopupDefault := LANGfrPopupDefault;
+ LANGPopupOpenWith := LANGfrPopupOpenWith;
+ LANGPopupViewFile := LANGfrPopupViewFile;
+ LANGPopupEditFile := LANGfrPopupEditFile;
+ LANGPopupMakeSymlink := LANGfrPopupMakeSymlink;
+ LANGPopupRename := LANGfrPopupRename;
+ LANGPopupDelete := LANGfrPopupDelete;
+ LANGDialogChangePermissions := LANGfrDialogChangePermissions;
+ LANGCouldNotBeChmoddedS := LANGfrCouldNotBeChmoddedS;
+ LANGDialogChangeOwner := LANGfrDialogChangeOwner;
+ LANGCouldNotBeChownedS := LANGfrCouldNotBeChownedS;
+ LANGDialogMakeSymlink := LANGfrDialogMakeSymlink;
+ LANGDialogEditSymlink := LANGfrDialogEditSymlink;
+ LANGFEditSymlink_Caption := LANGfrFEditSymlink_Caption;
+ LANGFEditSymlink_SymbolicLinkFilename := LANGfrFEditSymlink_SymbolicLinkFilename;
+ LANGFEditSymlink_SymbolicLinkPointsTo := LANGfrFEditSymlink_SymbolicLinkPointsTo;
+
+ LANGFChmod_Caption := LANGfrFChmod_Caption;
+ LANGFChmod_PermissionFrame := LANGfrFChmod_PermissionFrame;
+ LANGFChmod_FileFrame := LANGfrFChmod_FileFrame;
+ LANGFChmod_ApplyRecursivelyFor := LANGfrFChmod_ApplyRecursivelyFor;
+ LANGFChmod_miAllFiles := LANGfrFChmod_miAllFiles;
+ LANGFChmod_miDirectories := LANGfrFChmod_miDirectories;
+ LANGFChmod_OctalLabel := LANGfrFChmod_OctalLabel;
+ LANGFChmod_SUID := LANGfrFChmod_SUID;
+ LANGFChmod_SGID := LANGfrFChmod_SGID;
+ LANGFChmod_Sticky := LANGfrFChmod_Sticky;
+ LANGFChmod_RUSR := LANGfrFChmod_RUSR;
+ LANGFChmod_WUSR := LANGfrFChmod_WUSR;
+ LANGFChmod_XUSR := LANGfrFChmod_XUSR;
+ LANGFChmod_RGRP := LANGfrFChmod_RGRP;
+ LANGFChmod_WGRP := LANGfrFChmod_WGRP;
+ LANGFChmod_XGRP := LANGfrFChmod_XGRP;
+ LANGFChmod_ROTH := LANGfrFChmod_ROTH;
+ LANGFChmod_WOTH := LANGfrFChmod_WOTH;
+ LANGFChmod_XOTH := LANGfrFChmod_XOTH;
+ LANGFChmod_TextLabel := LANGfrFChmod_TextLabel;
+ LANGFChmod_FileLabel := LANGfrFChmod_FileLabel;
+ LANGFChown_Caption := LANGfrFChown_Caption;
+ LANGFChown_OwnerFrame := LANGfrFChown_OwnerFrame;
+ LANGFChown_GroupFrame := LANGfrFChown_GroupFrame;
+ LANGFChown_FileFrame := LANGfrFChown_FileFrame;
+ LANGFChown_ApplyRecursively := LANGfrFChown_ApplyRecursively;
+
+ LANGFSymlink_Caption := LANGfrFSymlink_Caption;
+ LANGFSymlink_ExistingFilename := LANGfrFSymlink_ExistingFilename;
+ LANGFSymlink_SymlinkFilename := LANGfrFSymlink_SymlinkFilename;
+
+ LANGmnuBookmarks_Caption := LANGfrmnuBookmarks_Caption;
+ LANGmiAddBookmark_Caption := LANGfrmiAddBookmark_Caption;
+ LANGmiEditBookmarks_Caption := LANGfrmiEditBookmarks_Caption;
+ LANGBookmarkPopupDelete_Caption := LANGfrBookmarkPopupDelete_Caption;
+ LANGmiPreferences_Caption := LANGfrmiPreferences_Caption;
+ LANGTheCurrentDirectoryAlreadyExistsInTheBookmarksList := LANGfrTheCurrentDirectoryAlreadyExistsInTheBookmarksList;
+ LANGSomeOtherInstanceChanged := LANGfrSomeOtherInstanceChanged;
+
+ LANGPreferences_Caption := LANGfrPreferences_Caption;
+ LANGPreferences_TitleLabel_Caption := LANGfrPreferences_TitleLabel_Caption;
+ LANGPreferences_GeneralPage := LANGfrPreferences_GeneralPage;
+ LANGPreferences_FontsPage := LANGfrPreferences_FontsPage;
+ LANGPreferences_ColorsPage := LANGfrPreferences_ColorsPage;
+ LANGPreferences_RowHeight := LANGfrPreferences_RowHeight;
+ LANGPreferences_NumHistoryItems := LANGfrPreferences_NumHistoryItems;
+ LANGPreferences_Default := LANGfrPreferences_Default;
+ LANGPreferences_ClearReadonlyAttribute := LANGfrPreferences_ClearReadonlyAttribute;
+ LANGPreferences_DisableMouseRenaming := LANGfrPreferences_DisableMouseRenaming;
+ LANGPreferences_ShowFiletypeIconsInList := LANGfrPreferences_ShowFiletypeIconsInList;
+ LANGPreferences_ExternalAppsLabel := LANGfrPreferences_ExternalAppsLabel;
+ LANGPreferences_Viewer := LANGfrPreferences_Viewer;
+ LANGPreferences_Editor := LANGfrPreferences_Editor;
+ LANGPreferences_Terminal := LANGfrPreferences_Terminal;
+ LANGPreferences_ListFont := LANGfrPreferences_ListFont;
+ LANGPreferences_Change := LANGfrPreferences_Change;
+ LANGPreferences_UseDefaultFont := LANGfrPreferences_UseDefaultFont;
+ LANGPreferences_Foreground := LANGfrPreferences_Foreground;
+ LANGPreferences_Background := LANGfrPreferences_Background;
+ LANGPreferences_NormalItem := LANGfrPreferences_NormalItem;
+ LANGPreferences_SetToDefaultToUseGTKThemeColors := LANGfrPreferences_SetToDefaultToUseGTKThemeColors;
+ LANGPreferences_Cursor := LANGfrPreferences_Cursor;
+ LANGPreferences_InactiveItem := LANGfrPreferences_InactiveItem;
+ LANGPreferences_SelectedItem := LANGfrPreferences_SelectedItem;
+ LANGPreferences_LinkItem := LANGfrPreferences_LinkItem;
+ LANGPreferences_LinkItemHint := LANGfrPreferences_LinkItemHint;
+ LANGPreferences_DotFileItem := LANGfrPreferences_DotFileItem;
+ LANGPreferences_DotFileItemHint := LANGfrPreferences_DotFileItemHint;
+ LANGPreferences_BrowseForApplication := LANGfrPreferences_BrowseForApplication;
+ LANGPreferences_DefaultS := LANGfrPreferences_DefaultS;
+ LANGPreferences_SelectFont := LANGfrPreferences_SelectFont;
+
+ LANGBookmarkButton_Tooltip := LANGfrBookmarkButton_Tooltip;
+ LANGUpButton_Tooltip := LANGfrUpButton_Tooltip;
+ LANGRootButton_Tooltip := LANGfrRootButton_Tooltip;
+ LANGHomeButton_Tooltip := LANGfrHomeButton_Tooltip;
+ LANGLeftEqualButton_Tooltip := LANGfrLeftEqualButton_Tooltip;
+ LANGRightEqualButton_Tooltip := LANGfrRightEqualButton_Tooltip;
+ LANGmiShowDirectorySizes_Caption := LANGfrmiShowDirectorySizes_Caption;
+ LANGmiTargetSource_Caption := LANGfrmiTargetSource_Caption;
+ LANGFileTypeDirectory := LANGfrFileTypeDirectory;
+ LANGFileTypeFile := LANGfrFileTypeFile;
+ LANGFileTypeMetafile := LANGfrFileTypeMetafile;
+ LANGPreferencesPanelsPage := LANGfrPreferencesPanelsPage;
+ LANGPreferencesApplicationsPage := LANGfrPreferencesApplicationsPage;
+ LANGPreferencesExperimentalPage := LANGfrPreferencesExperimentalPage;
+ LANGPreferencesSelectAllDirectoriesCheckBox_Caption := LANGfrPreferencesSelectAllDirectoriesCheckBox_Caption;
+ LANGPreferencesNewStyleAltOCheckBox_Caption := LANGfrPreferencesNewStyleAltOCheckBox_Caption;
+ LANGPreferencesNewStyleAltOCheckBox_Tooltip := LANGfrPreferencesNewStyleAltOCheckBox_Tooltip;
+ LANGPreferencesShowFuncButtonsCheckBox_Caption := LANGfrPreferencesShowFuncButtonsCheckBox_Caption;
+ LANGPreferencesSizeFormatLabel_Caption := LANGfrPreferencesSizeFormatLabel_Caption;
+ LANGPreferencesmiSizeFormat1 := LANGfrPreferencesmiSizeFormat1;
+ LANGPreferencesmiSizeFormat6 := LANGfrPreferencesmiSizeFormat6;
+ LANGPreferencesAutodetectXApp := LANGfrPreferencesAutodetectXApp;
+ LANGPreferencesAlwaysRunInTerminal := LANGfrPreferencesAlwaysRunInTerminal;
+ LANGPreferencesNeverRunInTerminal := LANGfrPreferencesNeverRunInTerminal;
+ LANGPreferencesCmdLineBehaviourLabel_Caption := LANGfrPreferencesCmdLineBehaviourLabel_Caption;
+ LANGPreferencesFeatures := LANGfrPreferencesFeatures;
+ LANGPreferencesDisableMouseRename_Tooltip := LANGfrPreferencesDisableMouseRename_Tooltip;
+ LANGPreferencesDisableFileTipsCheckBox_Caption := LANGfrPreferencesDisableFileTipsCheckBox_Caption;
+ LANGPreferencesDisableFileTipsCheckBox_Tooltip := LANGfrPreferencesDisableFileTipsCheckBox_Tooltip;
+ LANGPreferencesShow := LANGfrPreferencesShow;
+ LANGPreferencesDirsInBoldCheckBox_Caption := LANGfrPreferencesDirsInBoldCheckBox_Caption;
+ LANGPreferencesDisableDirectoryBracketsCheckBox_Caption := LANGfrPreferencesDisableDirectoryBracketsCheckBox_Caption;
+ LANGPreferencesOctalPermissionsCheckBox_Caption := LANGfrPreferencesOctalPermissionsCheckBox_Caption;
+ LANGPreferencesOctalPermissionsCheckBox_Tooltip := LANGfrPreferencesOctalPermissionsCheckBox_Tooltip;
+ LANGPreferencesMovement := LANGfrPreferencesMovement;
+ LANGPreferencesLynxLikeMotionCheckBox_Caption := LANGfrPreferencesLynxLikeMotionCheckBox_Caption;
+ LANGPreferencesInsertMovesDownCheckBox_Caption := LANGfrPreferencesInsertMovesDownCheckBox_Caption;
+ LANGPreferencesSpaceMovesDownCheckBox_Caption := LANGfrPreferencesSpaceMovesDownCheckBox_Caption;
+ LANGPreferencesViewer := LANGfrPreferencesViewer;
+ LANGPreferencesCommandSC := LANGfrPreferencesCommandSC;
+ LANGPreferencesUseInternalViewer := LANGfrPreferencesUseInternalViewer;
+ LANGPreferencesEditor := LANGfrPreferencesEditor;
+ LANGPreferencesTerminal := LANGfrPreferencesTerminal;
+ LANGPreferencesExperimentalFeatures := LANGfrPreferencesExperimentalFeatures;
+ LANGPreferencesExperimentalWarningLabel_Caption := LANGfrPreferencesExperimentalWarningLabel_Caption;
+ LANGPreferencesFocusRefreshCheckBox_Caption := LANGfrPreferencesFocusRefreshCheckBox_Caption;
+ LANGPreferencesFocusRefreshCheckBox_Tooltip := LANGfrPreferencesFocusRefreshCheckBox_Tooltip;
+ LANGPreferencesWMCompatModeCheckBox_Caption := LANGfrPreferencesWMCompatModeCheckBox_Caption;
+ LANGPreferencesWMCompatModeCheckBox_Tooltip := LANGfrPreferencesWMCompatModeCheckBox_Tooltip;
+ LANGPreferencesCompatUseLibcSystemCheckBox_Caption := LANGfrPreferencesCompatUseLibcSystemCheckBox_Caption;
+ LANGPreferencesCompatUseLibcSystemCheckBox_Tooltip := LANGfrPreferencesCompatUseLibcSystemCheckBox_Tooltip;
+
+ LANGmiSearchCaption2 := LANGfrmiSearchCaption2;
+ LANGmiNoMounterBarCaption := LANGfrmiNoMounterBarCaption;
+ LANGmiShowOneMounterBarCaption := LANGfrmiShowOneMounterBarCaption;
+ LANGmiShowTwoMounterBarCaption := LANGfrmiShowTwoMounterBarCaption;
+ LANGmnuNetworkCaption := LANGfrmnuNetworkCaption;
+ LANGmiConnectionsCaption := LANGfrmiConnectionsCaption;
+ LANGmiOpenConnectionCaption := LANGfrmiOpenConnectionCaption;
+ LANGmiQuickConnectCaption := LANGfrmiQuickConnectCaption;
+ LANGmnuPluginsCaption := LANGfrmnuPluginsCaption;
+ LANGmiTestPluginCaption := LANGfrmiTestPluginCaption;
+ LANGmiMounterSettingsCaption := LANGfrmiMounterSettingsCaption;
+ LANGmiColumnsCaption := LANGfrmiColumnsCaption;
+ LANGmiSavePositionCaption := LANGfrmiSavePositionCaption;
+ LANGmiMountCaption := LANGfrmiMountCaption;
+ LANGmiUmountCaption := LANGfrmiUmountCaption;
+ LANGmiEjectCaption := LANGfrmiEjectCaption;
+ LANGmiDuplicateTabCaption := LANGfrmiDuplicateTabCaption;
+ LANGmiCloseTabCaption := LANGfrmiCloseTabCaption;
+ LANGmiCloseAllTabsCaption := LANGfrmiCloseAllTabsCaption;
+ LANGCannotDetermineDestinationEngine := LANGfrCannotDetermineDestinationEngine;
+ LANGCannotLoadFile := LANGfrCannotLoadFile;
+ LANGMountPointDevice := LANGfrMountPointDevice;
+ LANGMountSC := LANGfrMountSC;
+ LANGNoPluginsFound := LANGfrNoPluginsFound;
+ LANGPluginAbout := LANGfrPluginAbout;
+ LANGCouldntOpenURI := LANGfrCouldntOpenURI;
+ LANGPluginAboutInside := LANGfrPluginAboutInside;
+ LANGAreYouSureCloseAllTabs := LANGfrAreYouSureCloseAllTabs;
+ LANGCouldntOpenURIArchive := LANGfrCouldntOpenURIArchive;
+ LANGThereIsNoModuleAvailable := LANGfrThereIsNoModuleAvailable;
+ LANGIgnoreError := LANGfrIgnoreError;
+ LANGErrorMount := LANGfrErrorMount;
+ LANGErrorUmount := LANGfrErrorUmount;
+ LANGErrorEject := LANGfrErrorEject;
+
+ LANGMounterPrefs_Caption := LANGfrMounterPrefs_Caption;
+ LANGMounterPrefs_TitleLabelCaption := LANGfrMounterPrefs_TitleLabelCaption;
+ LANGMounterPrefs_ListViewFrameCaption := LANGfrMounterPrefs_ListViewFrameCaption;
+ LANGMounterPrefs_MountName := LANGfrMounterPrefs_MountName;
+ LANGMounterPrefs_MountPoint := LANGfrMounterPrefs_MountPoint;
+ LANGMounterPrefs_Device := LANGfrMounterPrefs_Device;
+ LANGMounterPrefs_MoveUpButtonTooltip := LANGfrMounterPrefs_MoveUpButtonTooltip;
+ LANGMounterPrefs_MoveDownButtonTooltip := LANGfrMounterPrefs_MoveDownButtonTooltip;
+ LANGMounterPrefs_UseFSTabDefaultsCheckBox := LANGfrMounterPrefs_UseFSTabDefaultsCheckBox;
+ LANGMounterPrefs_UseFSTabDefaultsCheckBoxTooltip := LANGfrMounterPrefs_UseFSTabDefaultsCheckBoxTooltip;
+ LANGMounterPrefs_ToggleModeCheckBox := LANGfrMounterPrefs_ToggleModeCheckBox;
+ LANGMounterPrefs_ToggleModeCheckBoxTooltip := LANGfrMounterPrefs_ToggleModeCheckBoxTooltip;
+ LANGMounterPrefs_PropertiesFrameCaption := LANGfrMounterPrefs_PropertiesFrameCaption;
+ LANGMounterPrefs_DisplayTextLabelCaption := LANGfrMounterPrefs_DisplayTextLabelCaption;
+ LANGMounterPrefs_MountPointLabelCaption := LANGfrMounterPrefs_MountPointLabelCaption;
+ LANGMounterPrefs_MountDeviceLabelCaption := LANGfrMounterPrefs_MountDeviceLabelCaption;
+ LANGMounterPrefs_DeviceTypeLabelCaption := LANGfrMounterPrefs_DeviceTypeLabelCaption;
+ LANGMounterPrefs_miLocalDiskCaption := LANGfrMounterPrefs_miLocalDiskCaption;
+ LANGMounterPrefs_miRemovableCaption := LANGfrMounterPrefs_miRemovableCaption;
+ LANGMounterPrefs_miCDCaption := LANGfrMounterPrefs_miCDCaption;
+ LANGMounterPrefs_miFloppyCaption := LANGfrMounterPrefs_miFloppyCaption;
+ LANGMounterPrefs_miNetworkCaption := LANGfrMounterPrefs_miNetworkCaption;
+ LANGMounterPrefs_MountCommandLabelCaption := LANGfrMounterPrefs_MountCommandLabelCaption;
+ LANGMounterPrefs_UmountCommandLabelCaption := LANGfrMounterPrefs_UmountCommandLabelCaption;
+ LANGMounterPrefs_MountCommandEntryTooltip := LANGfrMounterPrefs_MountCommandEntryTooltip;
+ LANGMounterPrefs_UmountCommandEntryTooltip := LANGfrMounterPrefs_UmountCommandEntryTooltip;
+ LANGMounterPrefs_IconLabelCaption := LANGfrMounterPrefs_IconLabelCaption;
+
+ LANGConnMgr_Caption := LANGfrConnMgr_Caption;
+ LANGConnMgr_ConnectButton := LANGfrConnMgr_ConnectButton;
+ LANGConnMgr_OpenConnection := LANGfrConnMgr_OpenConnection;
+ LANGConnMgr_NameColumn := LANGfrConnMgr_NameColumn;
+ LANGConnMgr_URIColumn := LANGfrConnMgr_URIColumn;
+ LANGConnMgr_AddConnectionButtonCaption := LANGfrConnMgr_AddConnectionButtonCaption;
+ LANGConnMgr_AddConnectionButtonTooltip := LANGfrConnMgr_AddConnectionButtonTooltip;
+ LANGConnMgr_EditButtonCaption := LANGfrConnMgr_EditButtonCaption;
+ LANGConnMgr_EditButtonTooltip := LANGfrConnMgr_EditButtonTooltip;
+ LANGConnMgr_RemoveButtonCaption := LANGfrConnMgr_RemoveButtonCaption;
+ LANGConnMgr_RemoveButtonTooltip := LANGfrConnMgr_RemoveButtonTooltip;
+ LANGConnMgr_DoYouWantDelete := LANGfrConnMgr_DoYouWantDelete;
+
+ LANGConnProp_FTP := LANGfrConnProp_FTP;
+ LANGConnProp_SFTP := LANGfrConnProp_SFTP;
+ LANGConnProp_SMB := LANGfrConnProp_SMB;
+ LANGConnProp_HTTP := LANGfrConnProp_HTTP;
+ LANGConnProp_HTTPS := LANGfrConnProp_HTTPS;
+ LANGConnProp_Other := LANGfrConnProp_Other;
+ LANGConnProp_Caption := LANGfrConnProp_Caption;
+ LANGConnProp_VFSModule := LANGfrConnProp_VFSModule;
+ LANGConnProp_URI := LANGfrConnProp_URI;
+ LANGConnProp_URIEntryTooltip := LANGfrConnProp_URIEntryTooltip;
+ LANGConnProp_DetailedInformations := LANGfrConnProp_DetailedInformations;
+ LANGConnProp_Name := LANGfrConnProp_Name;
+ LANGConnProp_Server := LANGfrConnProp_Server;
+ LANGConnProp_Username := LANGfrConnProp_Username;
+ LANGConnProp_UserNameEntryTooltip := LANGfrConnProp_UserNameEntryTooltip;
+ LANGConnProp_Password := LANGfrConnProp_Password;
+ LANGConnProp_TargetDirectory := LANGfrConnProp_TargetDirectory;
+ LANGConnProp_ServiceType := LANGfrConnProp_ServiceType;
+ LANGConnProp_MaskPassword := LANGfrConnProp_MaskPassword;
+ LANGConnProp_MenuItemCaption := LANGfrConnProp_MenuItemCaption;
+
+ LANGConnLogin_Caption := LANGfrConnLogin_Caption;
+ LANGConnLogin_Login := LANGfrConnLogin_Login;
+ LANGConnLogin_ExperimentalWarningLabelCaption := LANGfrConnLogin_ExperimentalWarningLabelCaption;
+ LANGConnLogin_Username := LANGfrConnLogin_Username;
+ LANGConnLogin_Password := LANGfrConnLogin_Password;
+ LANGConnLogin_AnonymousCheckButton := LANGfrConnLogin_AnonymousCheckButton;
+
+ LANGColumns_Caption := LANGfrColumns_Caption;
+ LANGColumns_Title := LANGfrColumns_Title;
+ LANGColumns_MoveUpButtonTooltip := LANGfrColumns_MoveUpButtonTooltip;
+ LANGColumns_MoveDownButtonTooltip := LANGfrColumns_MoveDownButtonTooltip;
+ LANGColumns_TitlesLongName := LANGfrColumns_TitlesLongName;
+ LANGColumns_TitlesLongNameExt := LANGfrColumns_TitlesLongNameExt;
+ LANGColumns_TitlesLongExt := LANGfrColumns_TitlesLongExt;
+ LANGColumns_TitlesLongSize := LANGfrColumns_TitlesLongSize;
+ LANGColumns_TitlesLongDateTime := LANGfrColumns_TitlesLongDateTime;
+ LANGColumns_TitlesLongDate := LANGfrColumns_TitlesLongDate;
+ LANGColumns_TitlesLongTime := LANGfrColumns_TitlesLongTime;
+ LANGColumns_TitlesLongUser := LANGfrColumns_TitlesLongUser;
+ LANGColumns_TitlesLongGroup := LANGfrColumns_TitlesLongGroup;
+ LANGColumns_TitlesLongAttr := LANGfrColumns_TitlesLongAttr;
+ LANGColumns_TitlesShortName := LANGfrColumns_TitlesShortName;
+ LANGColumns_TitlesShortNameExt := LANGfrColumns_TitlesShortNameExt;
+ LANGColumns_TitlesShortExt := LANGfrColumns_TitlesShortExt;
+ LANGColumns_TitlesShortSize := LANGfrColumns_TitlesShortSize;
+ LANGColumns_TitlesShortDateTime := LANGfrColumns_TitlesShortDateTime;
+ LANGColumns_TitlesShortDate := LANGfrColumns_TitlesShortDate;
+ LANGColumns_TitlesShortTime := LANGfrColumns_TitlesShortTime;
+ LANGColumns_TitlesShortUser := LANGfrColumns_TitlesShortUser;
+ LANGColumns_TitlesShortGroup := LANGfrColumns_TitlesShortGroup;
+ LANGColumns_TitlesShortAttr := LANGfrColumns_TitlesShortAttr;
+
+ LANGTestPlugin_Caption := LANGfrTestPlugin_Caption;
+ LANGTestPlugin_Title := LANGfrTestPlugin_Title;
+ LANGTestPlugin_ExperimentalWarningLabelCaption := LANGfrTestPlugin_ExperimentalWarningLabelCaption;
+ LANGTestPlugin_Plugin := LANGfrTestPlugin_Plugin;
+ LANGTestPlugin_Command := LANGfrTestPlugin_Command;
+ LANGTestPlugin_Username := LANGfrTestPlugin_Username;
+ LANGTestPlugin_Password := LANGfrTestPlugin_Password;
+ LANGTestPlugin_AnonymousCheckButton := LANGfrTestPlugin_AnonymousCheckButton;
+ LANGTestPlugin_NoPluginsFound := LANGfrTestPlugin_NoPluginsFound;
+
+ LANGRemoteWait_Caption := LANGfrRemoteWait_Caption;
+ LANGRemoteWait_OperationInProgress := LANGfrRemoteWait_OperationInProgress;
+ LANGRemoteWait_ItemsFound := LANGfrRemoteWait_ItemsFound;
+
+ LANGSearch_Bytes := LANGfrSearch_Bytes;
+ LANGSearch_kB := LANGfrSearch_kB;
+ LANGSearch_MB := LANGfrSearch_MB;
+ LANGSearch_days := LANGfrSearch_days;
+ LANGSearch_weeks := LANGfrSearch_weeks;
+ LANGSearch_months := LANGfrSearch_months;
+ LANGSearch_years := LANGfrSearch_years;
+ LANGSearch_Caption := LANGfrSearch_Caption;
+ LANGSearch_General := LANGfrSearch_General;
+ LANGSearch_Advanced := LANGfrSearch_Advanced;
+ LANGSearch_SearchResults := LANGfrSearch_SearchResults;
+ LANGSearch_SearchFor := LANGfrSearch_SearchFor;
+ LANGSearch_FileMaskEntryTooltip := LANGfrSearch_FileMaskEntryTooltip;
+ LANGSearch_SearchIn := LANGfrSearch_SearchIn;
+ LANGSearch_SearchArchivesCheckButton := LANGfrSearch_SearchArchivesCheckButton;
+ LANGSearch_FindText := LANGfrSearch_FindText;
+ LANGSearch_FindTextEntryTooltip := LANGfrSearch_FindTextEntryTooltip;
+ LANGSearch_CaseSensitiveCheckButton := LANGfrSearch_CaseSensitiveCheckButton;
+ LANGSearch_StayCurrentFSCheckButton := LANGfrSearch_StayCurrentFSCheckButton;
+ LANGSearch_CaseSensitiveMatchCheckButton := LANGfrSearch_CaseSensitiveMatchCheckButton;
+ LANGSearch_Size := LANGfrSearch_Size;
+ LANGSearch_Date := LANGfrSearch_Date;
+ LANGSearch_BiggerThan := LANGfrSearch_BiggerThan;
+ LANGSearch_SmallerThan := LANGfrSearch_SmallerThan;
+ LANGSearch_ModifiedBetweenRadioButton := LANGfrSearch_ModifiedBetweenRadioButton;
+ LANGSearch_NotModifiedAfterRadioButton := LANGfrSearch_NotModifiedAfterRadioButton;
+ LANGSearch_ModifiedLastRadioButton := LANGfrSearch_ModifiedLastRadioButton;
+ LANGSearch_ModifiedNotLastRadionButton := LANGfrSearch_ModifiedNotLastRadionButton;
+ LANGSearch_ModifiedBetweenEntry1 := LANGfrSearch_ModifiedBetweenEntry1;
+ LANGSearch_ViewButtonCaption := LANGfrSearch_ViewButtonCaption;
+ LANGSearch_NewSearchButtonCaption := LANGfrSearch_NewSearchButtonCaption;
+ LANGSearch_GoToFileButtonCaption := LANGfrSearch_GoToFileButtonCaption;
+ LANGSearch_FeedToListboxButtonCaption := LANGfrSearch_FeedToListboxButtonCaption;
+ LANGSearch_StatusSC := LANGfrSearch_StatusSC;
+ LANGSearch_Ready := LANGfrSearch_Ready;
+ LANGSearch_PreparingToSearch := LANGfrSearch_PreparingToSearch;
+ LANGSearch_SearchInProgress := LANGfrSearch_SearchInProgress;
+ LANGSearch_UserCancelled := LANGfrSearch_UserCancelled;
+ LANGSearch_SearchFinished := LANGfrSearch_SearchFinished;
+ LANGSearch_FilesFound := LANGfrSearch_FilesFound;
+ LANGSearch_And := LANGfrSearch_And;
+
+ LANGCloseOpenConnection := LANGfrCloseOpenConnection;
+ LANGDuplicateTabWarning := LANGfrDuplicateTabWarning;
+ LANGDontShowAgain := LANGfrDontShowAgain;
+ LANGSwitchOtherPanelWarning := LANGfrSwitchOtherPanelWarning;
+ LANGOpenConnectionsWarning := LANGfrOpenConnectionsWarning;
+ LANGmiDisconnect_Caption := LANGfrmiDisconnect_Caption;
+ LANGDisconnectButton_Tooltip := LANGfrDisconnectButton_Tooltip;
+ LANGLeaveArchiveButton_Tooltip := LANGfrLeaveArchiveButton_Tooltip;
+ LANGOpenTerminalButton_Tooltip := LANGfrOpenTerminalButton_Tooltip;
+ LANGOpenTerminalButton_Caption := LANGfrOpenTerminalButton_Caption;
+ LANGShowTextUIDsCheckBox_Caption := LANGfrShowTextUIDsCheckBox_Caption;
+ LANGShowTextUIDsCheckBox_Tooltip := LANGfrShowTextUIDsCheckBox_Tooltip;
+
+ LANGmiNewTab_Caption := LANGfrmiNewTab_Caption;
+ LANGFilePopupMenu_Properties := LANGfrFilePopupMenu_Properties;
+ LANGCommandEntry_Tooltip := LANGfrCommandEntry_Tooltip;
+ LANGmiFiles_Caption := LANGfrmiFiles_Caption;
+
+ LANGPasswordButton_Tooltip := LANGfrPasswordButton_Tooltip;
+ LANGHandleRunFromArchive_Bytes := LANGfrHandleRunFromArchive_Bytes;
+ LANGHandleRunFromArchive_FileTypeDesc_Unknown := LANGfrHandleRunFromArchive_FileTypeDesc_Unknown;
+ LANGHandleRunFromArchive_NotAssociated := LANGfrHandleRunFromArchive_NotAssociated;
+ LANGHandleRunFromArchive_SelfExecutable := LANGfrHandleRunFromArchive_SelfExecutable;
+ LANGHandleRunFromArchive_CouldntCreateTemporaryDirectory := LANGfrHandleRunFromArchive_CouldntCreateTemporaryDirectory;
+ LANGFRunFromVFS_Caption := LANGfrFRunFromVFS_Caption;
+ LANGFRunFromVFS_TitleLabel := LANGfrFRunFromVFS_TitleLabel;
+ LANGFRunFromVFS_FileNameLabel := LANGfrFRunFromVFS_FileNameLabel;
+ LANGFRunFromVFS_FileTypeLabel := LANGfrFRunFromVFS_FileTypeLabel;
+ LANGFRunFromVFS_SizeLabel := LANGfrFRunFromVFS_SizeLabel;
+ LANGFRunFromVFS_PackedSizeLabel := LANGfrFRunFromVFS_PackedSizeLabel;
+ LANGFRunFromVFS_DateLabel := LANGfrFRunFromVFS_DateLabel;
+ LANGFRunFromVFS_InfoLabel := LANGfrFRunFromVFS_InfoLabel;
+ LANGFRunFromVFS_OpensWithLabel := LANGfrFRunFromVFS_OpensWithLabel;
+ LANGFRunFromVFS_ExecuteButton := LANGfrFRunFromVFS_ExecuteButton;
+ LANGFRunFromVFS_ExecuteAllButton := LANGfrFRunFromVFS_ExecuteAllButton;
+ LANGFSetPassword_Caption := LANGfrFSetPassword_Caption;
+ LANGFSetPassword_Label1_Caption := LANGfrFSetPassword_Label1_Caption;
+ LANGFSetPassword_Label2_Caption := LANGfrFSetPassword_Label2_Caption;
+ LANGFSetPassword_ShowPasswordCheckButton := LANGfrFSetPassword_ShowPasswordCheckButton;
+end;
+
+initialization
+ AddTranslation('FR', @SetTranslation);
+ AddTranslation('fr_FR', @SetTranslation);
+end.
diff --git a/translations/UTranslation_HU.pas b/translations/UTranslation_HU.pas
new file mode 100644
index 0000000..a9a72cc
--- /dev/null
+++ b/translations/UTranslation_HU.pas
@@ -0,0 +1,1256 @@
+(*
+ Tux Commander - UTranslation_HU - Hungarian Localization constants
+ Copyright (C) 2007 Marian Kepesi <m_kepesi@yahoo.com>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit UTranslation_HU;
+
+interface
+
+implementation
+
+uses ULocale;
+
+const LANGhuF2Button_Caption = 'F2 - Átnevezés';
+ LANGhuF3Button_Caption = 'F3 - Megtekintés';
+ LANGhuF4Button_Caption = 'F4 - Módosítás';
+ LANGhuF5Button_Caption = 'F5 - Másolás';
+ LANGhuF6Button_Caption = 'F6 - Áthelyezés';
+ LANGhuF7Button_Caption = 'F7 - Új könyvtár';
+ LANGhuF8Button_Caption = 'F8 - Törlés';
+
+ LANGhumnuFile_Caption = '_Fájl';
+ LANGhumnuMark_Caption = '_Kijelölés';
+ LANGhumnuCommands_Caption = '_Utasítások';
+ LANGhumnuHelp_Caption = '_Súgó';
+ LANGhumiExit_Caption = 'Ki_lépés';
+ LANGhumiSelectGroup_Caption = '_Csoport kijelölése...';
+ LANGhumiUnselectGroup_Caption = 'Kijelölt fájl _visszavonása...';
+ LANGhumiSelectAll_Caption = '_Mindent kijelöl';
+ LANGhumiUnselectAll_Caption = 'Min_dent visszavon';
+ LANGhumiInvertSelection_Caption = '_Inverz kijelölés';
+ LANGhumiRefresh_Caption = 'Új_ratölt';
+ LANGhumiAbout_Caption = '_Névjegy...';
+
+ LANGhuColumn1_Caption = 'Név';
+ LANGhuColumn2_Caption = 'Kiterjesztés';
+ LANGhuColumn3_Caption = 'Méret';
+ LANGhuColumn4_Caption = 'Dátum';
+ LANGhuColumn5_Caption = 'Attribútum';
+
+ LANGhuExpandSelection = 'Kiválasztás bövítese';
+ LANGhuShrinkSelection = 'Kiválasztás szükítese';
+ LANGhuNoMatchesFound = 'Nincs találat';
+ LANGhuNoFilesSelected = 'Nincs megjelölve fájl!';
+ LANGhuSelectedFilesDirectories = '%d kijelölt fájl/könyvtár';
+ LANGhuDirectoryS = 'könyvtár %s';
+ LANGhuFileS = 'fájl %s';
+ LANGhuDoYouReallyWantToDeleteTheS = 'Valóban eltávolítani kívanja a %s -t?';
+ LANGhuDoYouReallyWantToDeleteTheSS = 'Valóban eltávolítani kívanja a %s -t?'#10'%s';
+ LANGhuCopyFiles = 'Fájlok másolása';
+ LANGhuMoveRenameFiles = 'Fájlok áthelyezése/átnevezése';
+ LANGhuCopyDFileDirectoriesTo = '%d fájl/könyvtár másolása ide:';
+ LANGhuMoveRenameDFileDirectoriesTo = '%d fájl áthelyezése/átnevezése ide:';
+ LANGhuCopySC = 'Másolni:';
+ LANGhuMoveRenameSC = 'Áthelyezni/átnevezni';
+
+ LANGhuQuickFind = ' Kikeresni:';
+
+ LANGhuAboutString = 'Tux Commander'#10'Verzió %s'#10'Megírásának dátuma: %s'#10#10'Copyright (c) 2008 Tomáš Bžatek'#10'E-mail: tbzatek@users.sourceforge.net'#10'WWW-lap: http://tuxcmd.sourceforge.net/';
+ LANGhuAboutStringGnome = 'verzió %s'#10'Megírásának dátuma: %s'#10'WWW-lap: http://tuxcmd.sourceforge.net/';
+ LANGhuDiskStatFmt = '%s a %s -ból szabad';
+ LANGhuDiskStatVolNameFmt = '[%s] %s a %s-ból szabad';
+ LANGhuStatusLineFmt = '%s a %s-ból és %d a %d fájlból kijelölve';
+ LANGhuPanelStrings : array[boolean] of string = ('jobb','bal');
+
+ LANGhuDIR = '<DIR>';
+ LANGhuErrorGettingListingForSPanel = 'Könyvtár megnyitási hiba a %s ablakban:'#10' %s'#10#10'Útvonal = ''%s''';
+ LANGhuErrorGettingListingForSPanelNoPath = 'Könyvtár megnyitási hiba a %s ablakban'#10' %s';
+ LANGhuErrorCreatingNewDirectorySInSPanel = 'A ''%s'' könyvtárat nem lehet létrehozni a %s ablakban:'#10' %s';
+ LANGhuErrorCreatingNewDirectorySInSPanelNoPath = 'A ''%s'' könyvtárat nem lehet létrehozni a %s ablakban:'#10' %s';
+ LANGhuTheFileDirectory = 'Fájl/könyvtár';
+ LANGhuCouldNotBeDeleted = 'nem sikerült törölni';
+ LANGhuCouldNotBeDeletedS = 'nem sikerült törölni: %s';
+ LANGhuUserCancelled = 'Operáció megszakítva!';
+ LANGhuTheDirectorySIsNotEmpty = 'A %s könyvtár nem üres!';
+ LANGhuCannotCopyFile = 'A fájl nem másolható';
+ LANGhuCopyError = 'Másolási hiba';
+ LANGhuMoveError = 'Áthelyezési hiba';
+ LANGhuOverwriteS = 'Felülírni: %s';
+ LANGhuWithFileS = 'a %s fájllal';
+ LANGhuOvewriteSBytesS = '%s byte, %s';
+ LANGhuTheFile = 'Fájl';
+ LANGhuCopy = 'Másolás';
+ LANGhuMove = 'Áthelyezés';
+ LANGhuTheDirectory = 'Könyvtár';
+ LANGhuTheSymbolicLink = 'Szimbolikus hivatkozás';
+ LANGhuCannotMoveFile = 'Nem lehet áthelyezni a fájlot';
+ LANGhuCouldNotBeCreated = 'nem sikerült létrehozni';
+ LANGhuCouldNotBeCreatedS = 'nem sikerült létrehozni %s';
+ LANGhuFromS = 'innen: %s';
+ LANGhuToS = 'ide: %s';
+ LANGhuCannotCopyFileToItself = 'A forrás- és célállomány megegyezik (ugyanaz)!';
+ LANGhuMemoryAllocationFailed = 'Memória allokációs hiba:';
+ LANGhuCannotOpenSourceFile = 'Nem sikerült megnyitni a forrásállományt';
+ LANGhuCannotOpenDestinationFile = 'Nem sikerült megnyitni a célállományt';
+ LANGhuCannotCloseDestinationFile = 'Nem sikerült bezárni a célállományt';
+ LANGhuCannotCloseSourceFile = 'Nem sikerült bezárni a forrásállományt';
+ LANGhuCannotReadFromSourceFile = 'A forrásállomány nem olvasható';
+ LANGhuCannotWriteToDestinationFile = 'A célállomány nem írható';
+
+ LANGhuUnknownException = 'Ismeretlen hiba';
+ LANGhuNoAccess = 'Hozzáférés elutasítva';
+ LANGhuUnknownError = 'Ismeretlen hiba';
+
+ LANGhuCreateANewDirectory = 'Új könyvtár létrehozása';
+ LANGhuEnterDirectoryName = 'Adja be a könyvtár _nevét:';
+
+ LANGhuOverwriteQuestion = 'Felülírás jóváhagyása';
+ LANGhuOverwriteButton_Caption = '_Felülírni';
+ LANGhuOverwriteAllButton_Caption = '_Mindet felülírni';
+ LANGhuSkipButton_Caption = 'Á_tugorni';
+ LANGhuOverwriteAllOlderButton_Caption = 'Minden _régebbi felülírása';
+ LANGhuSkipAllButton_Caption = '_Kihagy mindent';
+ LANGhuRenameButton_Caption = 'Átneve_zni';
+ LANGhuAppendButton_Caption = '_Hozzácsatolni';
+ LANGhuRename = 'Átnevezni';
+ LANGhuRenameFile = 'A ''%s'' fájl átnevezése erre:';
+ LANGhuIgnoreButton_Caption = '_Ignorálni';
+
+ LANGhuProgress = 'Müvelet folyamatban';
+ LANGhuCancel = '_Storno';
+ LANGhuDelete = 'Törlés:';
+
+ LANGhuSpecifyFileType = 'Válasszon fájl_típust:';
+
+ LANGhuRemoveDirectory = 'Könyvtárat eltávolítani';
+ LANGhuDoYouWantToDeleteItWithAllItsFilesAndSubdirectories = 'Az alkönyvtárakkal együtt mindent kíván törölni?';
+ LANGhuRetry = '_Megismételni';
+ LANGhuDeleteButton_Caption = '_Eltávolítani';
+ LANGhuAll = 'Minde_t';
+
+ LANGhuCopyFilesSC = 'A köv. fájlok másolása:';
+ LANGhuAppendQuestion = 'Valóban kívánja a ''%s'' fájl ''%s'' fájlhoz való csatolását?';
+ LANGhuPreparingList = 'Az állományok listája készül...';
+
+ LANGhuYouMustSelectAValidFile = 'Kérem, érvényes fájlot jelöljön meg!';
+ LANGhumiVerifyChecksums = '_Checksum ellenörzése';
+ LANGhuVerifyChecksumsCaption = 'Checksum ellenörzése';
+ LANGhuCheckButtonCaptionCheck = '_Ellenörizni';
+ LANGhuCheckButtonCaptionStop = '_Stop';
+ LANGhuFileListTooltip = '[?] - Idáig nem ellenörzött'#10'[OK] - Checksum rendben'#10'[BAD] - Checksum-hiba'#10'[N/A] - A fájl nem elérhetö';
+ LANGhuFilenameColumnCaption = 'Fájl';
+ LANGhuTheFileSYouAreTryingToOpenIsQuiteBig = 'A ''%s''fájl, melyet olvasni próbál, túl nagy (%s bájtos). Érvénytelen Checksum elöfordulhat.'#10#10'Kívánja folytatni?';
+ LANGhuAnErrorOccuredWhileInitializingMemoryBlock = 'Memória-allokációs hiba történt. Próbáljon meg több memóriát felszabadítani pár applikáció bezárásával, majd próbálja újra.';
+ LANGhuAnErrorOccuredWhileOpeningFileSS = 'Nem lehet megnyitni a fájlot ''%s'':'#10' %s';
+ LANGhuAnErrorOccuredWhileReadingFileSS = 'Nem lehet a fájlból olvasni ''%s'':'#10' %s';
+ LANGhuChecksumNotChecked = '<span weight="bold">Stav:</span> Nincs ellenörizve';
+ LANGhuChecksumChecking = '<span weight="bold">Stav:</span> Ellenörzés folyamatban...';
+ LANGhuChecksumInterrupted = '<span weight="bold">Stav:</span> Megszakítva';
+ LANGhuChecksumDOK = '<span weight="bold">Állapot:</span> %d%% OK';
+
+ LANGhumiCreateChecksumsCaption = '_Checksum létrehozása...';
+ LANGhuYouMustSelectAtLeastOneFileToCalculateChecksum = 'Legalább egy érvényes fájlot meg kell jelölni a Checksum létrehozásához!';
+ LANGhuCreateChecksumsCaption = 'Checksum létrehozása';
+ LANGhuCCHKSUMPage1Text = 'Az ablakban megjelölt fájlok'#10' Checksum-jának létrehozására készül. Amennyiben '#10'nincs megjelölve az összes szükséges fájl,'#10'lépjen ki ebböl az ablakból és kezdje elölröl..';
+ LANGhuCCHKSUMPage4Text = 'Checksum-ok létrehozására felkészülve.'#10'Ez a folyamat néhány percig is eltarthat..'#10'Folytatás a Tovább gomb lenyomásával..';
+ LANGhuCCHKSUMPage6Text = 'A müvelet közben a köv. hibák történtek:';
+ LANGhuCCHKSUMPage7Text = 'A Checksum-ok elkészültek.'#10#10'Ezt az ablakot a Befejez(Bezár) gombbal zárhatja be.';
+ LANGhuCCHKSUMPage1Title = '<span size="xx-large" weight="ultrabold">Fájl(ok) elökészítése</span>';
+ LANGhuCCHKSUMPage2Title = '<span size="xx-large" weight="ultrabold">Válassza ki a kívánt Chechsum típusát</span>';
+ LANGhuCCHKSUMPage3Title = '<span size="xx-large" weight="ultrabold">Válasszon fájlnevet</span>';
+ LANGhuCCHKSUMPage4Title = '<span size="xx-large" weight="ultrabold">Müveletre felkészülve</span>';
+ LANGhuCCHKSUMPage5Title = '<span size="xx-large" weight="ultrabold">Az ellenörzes folyamatban...</span>';
+ LANGhuCCHKSUMPage6Title = '<span size="xx-large" weight="ultrabold">Hiba!</span>';
+ LANGhuCCHKSUMPage7Title = '<span size="xx-large" weight="ultrabold">Végrehajtva</span>';
+ LANGhuCCHKSUMSFVFile = 'SFV fájl';
+ LANGhuCCHKSUMMD5sumFile = 'MD5 fájl';
+ LANGhuCCHKSUMFileName = '_Fájlnév:';
+ LANGhuCCHKSUMCreateSeparateChecksumFiles = '_Különálló Checksum Fájlok';
+ LANGhuCCHKSUMNowProcessingFileS = 'Ellenörzés alatt lévö fájl: %s';
+ LANGhuCCHKSUMFinishCaption = '_Befejez';
+ LANGhuCCHKSUMAreYouSureYouWantToAbortTheProcessing = 'Valóban meg kívánja szakítani az ellenörzést?';
+ LANGhuCCHKSUMAnErrorOccuredWhileOpeningFileSS = 'Hiba történt a köv. fájl megnyitásakor: ''%s'': %s'#10;
+ LANGhuCCHKSUMAnErrorOccuredWhileReadingFileSS = 'Hiba történt a köv. fájl olvasásakor: ''%s'': %s'#10;
+ LANGhuCCHKSUMAnErrorOccuredWhileWritingFileSS = 'Hiba történt a köv. fájlba való írás során: ''%s'': %s'#10;
+
+ LANGhuAnErrorOccuredWhileWritingFileSS = 'A köv. fájl nem írható ''%s'':'#10' %s';
+ LANGhuTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt = 'A ''%s'' célfájl már létezik. Kívánja felülírni?';
+ LANGhuTheTargetFileSCannotBeRemovedS = 'A ''%s'' fájl nem távolítható el: %s';
+ LANGhuMergeCaption = 'Összekötni';
+ LANGhuPleaseInsertNextDiskOrGiveDifferentLocation = 'Kérem, helyezze be a köv. floppy-t, vagy adjon meg egy másik könyvtárat:';
+ LANGhuMergeOfSSucceeded = 'A ''%s'' fájl összekapcsolása sikeresen végrehajtva (Checksum OK).';
+ LANGhuWarningCreatedFileFailsCRCCheck = 'Figyelmeztetés: A létrehozott fájl Checksum-ja nem egyezik!';
+ LANGhuMergeOfSSucceeded_NoCRCFileAvailable = 'A ''%s'' fájl összekapcsolása sikeresen végrehajtva (A Checksum nem hozzáférhetö).';
+ LANGhuMergeSAndAllFilesWithAscendingNamesToTheFollowingDirectory = 'A ''%s'' fájl és minden nevében hozzáfüzödö fájl összekapcsolása a köv. könyvtárba::';
+ LANGhuMergeSC = 'Összekapcsol:';
+ LANGhumiSplitFileCaption = 'Fájl da_rabolása...';
+ LANGhumiMergeFilesCaption = 'Fájlok összeka_pcsolása...';
+
+ LANGhuSplitTheFileSToDirectory = 'A ''%s'' fájl szétda_rabolása a célkönyvtárba:';
+ LANGhuSplitSC = 'Szétdarabol:';
+ LANGhuSplitFile = 'Fájl darabolása';
+ LANGhuBytesPerFile = '_Byte fájlonként:';
+ LANGhuAutomatic = 'Automatikusan';
+ LANGhuDeleteFilesOnTargetDisk = 'A fájlok törlé_se a céllemezen (kivehetö lemezek esetében alkalmas)';
+ LANGhuSplitCaption = 'Szétdarabolás';
+ LANGhuCannotOpenFileS = 'Nem lehet megnyitni a ''%s'' fájlot';
+ LANGhuCannotSplitTheFileToMoreThan999Parts = 'A fájl max. 999 darabra metélhetö szét!';
+ LANGhuThereAreSomeFilesInTheTargetDirectorySDoYouWantToDeleteThem = 'A célkönyvtárban a köv. fájlok találhatóak:'#10'%s'#10'Kívánja öket törölni?';
+ LANGhuThereAreDFilesInTheTargetDirectoryDoYouWantToDeleteThem = 'A célkönyvtárban %d fáj található. Kívánja öket törölni?';
+ LANGhuAnErrorOccuredWhileOperationS = 'Hiba a müvelet végrehajtásakor: %s';
+ LANGhuSplitOfSSucceeded = 'A ''%s'' fájl darabolása sikeresen befejezve.';
+ LANGhuSplitOfSFailed = 'A ''%s'' fájl darabolása sikertelen!';
+
+ LANGhumnuShow_Caption = '_Megjelenítés';
+ LANGhumiShowDotFiles_Caption = 'Rejtett fájlok megjeleníté_se';
+ LANGhuTheFileYouAreTryingToOpenIsQuiteBig = 'A beolvasni kívánt fájl nagy méretü. Külsö appplikacióban (pl. gedit) történö megjelenítése a redszer lelassulását okozhatja.'#10'Kívánja folytatni?';
+ LANGhuCannotExecuteSPleaseCheckTheConfiguration = 'Nem indítható: ''%s''. Kérem, ellenörizze a beállításokat.';
+ LANGhuEdit = 'Módosít';
+ LANGhuEnterFilenameToEdit = 'Adja b_e a módosítani kívánt fájlnevet:';
+
+ LANGhumnuSettings_Caption = 'Beálli_tás';
+ LANGhumiFileTypes_Caption = 'Fájl_típusok...';
+ LANGhuThereIsNoApplicationAssociatedWithS = 'Egyetlen applikáció sincs a "%s" fájlhoz hozzárendelve.'#10#10'Kívánja a fájltípusokhoz hozzárendelt akciók dualógusának megnyitását?';
+ LANGhuErrorExecutingCommand = 'Az utasítást nem lehet végrehajtani!';
+ LANGhuEditFileTypesCaption = 'Hozzárendelés beállítása';
+ LANGhuTitleLabel_Caption = '<span size="x-large" weight="ultrabold">Fájltípusok</span>';
+ LANGhuExtensionsColumn = 'Kiterjesztések';
+ LANGhuDescriptionColumn = 'Leírás';
+ LANGhuFileTypesList = 'Fájltípusok listája';
+ LANGhuActionName = 'Az akció neve';
+ LANGhuCommand = 'Utasítás';
+ LANGhuSetDefaultActionButton_Caption = 'Kii_nduló állapot beállítása';
+ LANGhuRunInTerminalCheckBox_Caption = 'Indí_tás a konzolban (terminál).';
+ LANGhuAutodetectCheckBox_Caption = 'Graf. pr_ogram autodetekciója';
+ LANGhuBrowseButton_Caption = 'Átkere_sni...';
+ LANGhuCommandLabel_Caption = '_Utasítás:';
+ LANGhuDescriptionLabel_Caption = 'Fájltí_pus leírása:';
+ LANGhuFNameExtLabel_Caption = 'Uj Típus hozzáa_dása:';
+ LANGhuNotebookPageExtensions = 'Fájltípus';
+ LANGhuNotebookPageActions = 'Akció';
+ LANGhuDefault = ' (Default)';
+ LANGhuCannotSaveFileTypeAssociationsBecauseOtherProcess = 'A fájltípusok listája nem menthetö el, mert közben egy másik applikáció is megváltoztatta.';
+
+ LANGhuDefaultColor = 'Default _szín';
+ LANGhuIcon = '_Ikon:';
+ LANGhuBrowseForIcon = 'Ikon kersése';
+ LANGhuSelectFileTypeColor = 'Fájltípus színének választása';
+ LANGhuColor = 'Szí_n:';
+
+ LANGhumiChangePermissions_Caption = 'Jogok meg_változtatása...';
+ LANGhumiChangeOwner_Caption = 'Tu_lajdonos/csoport megváltoztatása...';
+ LANGhumiCreateSymlink_Caption = 'Hivat_kozás létrehozása...';
+ LANGhumiEditSymlink_Caption = 'Hivatkozás mó_dosítasa...';
+ LANGhuChmodProgress = 'Jog megváltoztatása';
+ LANGhuChownProgress = 'Tulajdonos megváltoztatása:';
+ LANGhuYouMustSelectAValidSymbolicLink = 'Válasszon érvényes hivatkozást!';
+ LANGhuPopupRunS = 'Végrehaj_tani a %s -t';
+ LANGhuPopupOpenS = '_Megnyitni a : %s -t';
+ LANGhuPopupGoUp = 'Eggyel felje_bbi könyvtárra váltani';
+ LANGhuPopupOpenWithS = 'Megnyitni ebben: %s';
+ LANGhuPopupDefault = ' (default)';
+ LANGhuPopupOpenWith = 'Meg_nyitni a...';
+ LANGhuPopupViewFile = 'Fájl ábrá_zolása';
+ LANGhuPopupEditFile = 'Fájl módo_sítása';
+ LANGhuPopupMakeSymlink = 'Default _utasítás';
+ LANGhuPopupRename = 'Átn_evezni';
+ LANGhuPopupDelete = 'Eltá_volítanit';
+ LANGhuDialogChangePermissions = 'Jogok meg_változtatása';
+ LANGhuCouldNotBeChmoddedS = 'Nem lehet a jogokat megváltoztatni: %s';
+ LANGhuDialogChangeOwner = 'Tu_lajdonos/csoport megváltoztatása';
+ LANGhuCouldNotBeChownedS = 'Nem lehet a tulajdonost megváltoztatni: %s';
+ LANGhuDialogMakeSymlink = 'Hivatkozás létrehozása';
+ LANGhuDialogEditSymlink = 'Hivatkozás módosítasa';
+ LANGhuFEditSymlink_Caption = 'Szimbolikus hivatkozás módositasa';
+ LANGhuFEditSymlink_SymbolicLinkFilename = 'Hivatkozás _neve:';
+ LANGhuFEditSymlink_SymbolicLinkPointsTo = 'A hivatkozás ide m_utat:';
+
+ LANGhuFChmod_Caption = 'Jogok';
+ LANGhuFChmod_PermissionFrame = 'Jogosultságok betüi';
+ LANGhuFChmod_FileFrame = 'Fájl';
+ LANGhuFChmod_ApplyRecursivelyFor = 'Ismételten a_pplikálni ezeken:';
+ LANGhuFChmod_miAllFiles = 'Minden fájl és könyvtár';
+ LANGhuFChmod_miDirectories = 'Csak könyvtárak';
+ LANGhuFChmod_OctalLabel = '_Számokkal való kifejezés:';
+ LANGhuFChmod_SUID = 'SUID - Állomány tulajdonosának ID-je futtatáskor';
+ LANGhuFChmod_SGID = 'SGID - Csoport ID-je a futtatáskor';
+ LANGhuFChmod_Sticky = '''sticky'' bit';
+ LANGhuFChmod_RUSR = 'RUSR - Olvasás a tulajdonos által';
+ LANGhuFChmod_WUSR = 'WUSR - Írás a tulajdonos által';
+ LANGhuFChmod_XUSR = 'XUSR - Futtatás a tulajdonos által';
+ LANGhuFChmod_RGRP = 'RGRP - Olvasás a csoport által';
+ LANGhuFChmod_WGRP = 'WGRP - Írás a csoport által';
+ LANGhuFChmod_XGRP = 'XGRP - Futtatás a csoport által';
+ LANGhuFChmod_ROTH = 'ROTH - Olvasás mások által';
+ LANGhuFChmod_WOTH = 'WOTH - Írás mások által';
+ LANGhuFChmod_XOTH = 'XOTH - Futtatás mások által';
+ LANGhuFChmod_TextLabel = '<span weight="ultrabold">Szimbolikus kifejezés:</span> %s';
+ LANGhuFChmod_FileLabel = '<span weight="ultrabold">Választott fájl:</span> %s'#10'<span weight="ultrabold">Szimbolikus kifejezés:</span> %s'#10 +
+ '<span weight="ultrabold">Számeli kifejezés:</span> %d'#10'<span weight="ultrabold">Tulajdonos:</span> %s'#10 +
+ '<span weight="ultrabold">Csoport:</span> %s';
+
+ LANGhuFChown_Caption = 'Tulajdonos/csoport megváltoztatása';
+ LANGhuFChown_OwnerFrame = 'Tulajdonos';
+ LANGhuFChown_GroupFrame = 'Csoport neve';
+ LANGhuFChown_FileFrame = 'Fájl';
+ LANGhuFChown_ApplyRecursively = 'Rekurzív _alkalmazás';
+
+ LANGhuFSymlink_Caption = 'Szimbolikus hivatkozás létrehozása';
+ LANGhuFSymlink_ExistingFilename = 'Lét_ezö fájl (amire a hivatkozás mutat):';
+ LANGhuFSymlink_SymlinkFilename = 'A hivatkozás _neve:';
+
+ LANGhumnuBookmarks_Caption = 'Kön_yvjelzök';
+ LANGhumiAddBookmark_Caption = 'Könyvjelzö hozzáadása';
+ LANGhumiEditBookmarks_Caption = 'Könyvjelzö módosítása';
+ LANGhuBookmarkPopupDelete_Caption = '_Törölni';
+ LANGhumiPreferences_Caption = '_Beállítások...';
+ LANGhuTheCurrentDirectoryAlreadyExistsInTheBookmarksList = 'A létrehozni kívánt könyvtár már létezik a listában.';
+ LANGhuSomeOtherInstanceChanged = 'Egy másik futtatás során megváltoztak a program beallításai. Kívanja az új beállításokat ' +
+ 'használni az aktuális ablakra vonatkozóan?'#10#10'Figyelmeztetés: Amennyiben nem engedélyezi a változások akceptálását, ez az új beállítás felül lesz írva az applikáció bezárásakor.';
+
+ LANGhuPreferences_Caption = 'Applikáció beállítása';
+ LANGhuPreferences_TitleLabel_Caption = '<span size="x-large" weight="ultrabold">Applikáció beállítása</span>';
+ LANGhuPreferences_GeneralPage = 'Általános';
+ LANGhuPreferences_FontsPage = 'Betütípus';
+ LANGhuPreferences_ColorsPage = 'Színek';
+ LANGhuPreferences_RowHeight = 'Sorma_gasság:';
+ LANGhuPreferences_NumHistoryItems = 'Bejegyzések száma a "Command Line _History"-ban:';
+ LANGhuPreferences_Default = 'Default';
+ LANGhuPreferences_ClearReadonlyAttribute = 'A "Csak _olvas" attribútum eltávolítása CD-ROM-ról való másoláskor';
+ LANGhuPreferences_DisableMouseRenaming = 'Egérrel tö_rténö gyors átnevezés tiltása';
+ LANGhuPreferences_ShowFiletypeIconsInList = 'Fájltípusok standard _ikonjainak ábrázolása';
+ LANGhuPreferences_ExternalAppsLabel = '<span weight="ultrabold">Külsö applikációk</span>';
+ LANGhuPreferences_Viewer = '_Viewer:';
+ LANGhuPreferences_Editor = '_Editor:';
+ LANGhuPreferences_Terminal = '_Konzol:';
+ LANGhuPreferences_ListFont = 'Az ablakok betütípusa:';
+ LANGhuPreferences_Change = 'Válto_tatni...';
+ LANGhuPreferences_UseDefaultFont = 'Default _betütípus használata';
+ LANGhuPreferences_Foreground = 'Szöveg';
+ LANGhuPreferences_Background = 'Háttér';
+ LANGhuPreferences_NormalItem = 'Standard elemek:';
+ LANGhuPreferences_SetToDefaultToUseGTKThemeColors = 'A kiindulási beállítások esetében az aktuális GTK Theme színei lesznek alkalmazva';
+ LANGhuPreferences_Cursor = 'Kurzor:';
+ LANGhuPreferences_InactiveItem = 'Nem aktív elemek:';
+ LANGhuPreferences_SelectedItem = 'Kijelölt elemek:';
+ LANGhuPreferences_LinkItem = 'Szimbolikus hivatkozások:';
+ LANGhuPreferences_LinkItemHint = 'A kiindulási beállításokkor a norm. elemek színei lesznek alkalmazva';
+ LANGhuPreferences_DotFileItem = 'Rejtett fájlok:';
+ LANGhuPreferences_DotFileItemHint = 'A kiindulási beállításokkor a norm. elemek színei lesznek alkalmazva';
+ LANGhuPreferences_BrowseForApplication = 'Applikáció választása';
+ LANGhuPreferences_DefaultS = 'Default: %s';
+ LANGhuPreferences_SelectFont = 'Betütípus választása';
+
+ (*************** STRINGS ADDED TO v0.4.101 **********************************************************************************)
+ LANGhuBookmarkButton_Tooltip = 'Könyvjelzök ábrázolása';
+ LANGhuUpButton_Tooltip = 'Egy könyvtárral feljebb lépni';
+ LANGhuRootButton_Tooltip = 'Ugrás a gyökérkönyvtárba (/)';
+ LANGhuHomeButton_Tooltip = 'Ugrás a felhasználói könyvtárba (/home/user)';
+ LANGhuLeftEqualButton_Tooltip = 'A jobb ablak-beli könyvtár változtatása az aktuálisra';
+ LANGhuRightEqualButton_Tooltip = 'A bal ablak-beli könyvtár változtatása az aktuálisra';
+ LANGhumiShowDirectorySizes_Caption = 'Elfoglalt t_erület számítása';
+ LANGhumiTargetSource_Caption = 'Célkönyv_tár = Aktuális könyvtár';
+ LANGhuFileTypeDirectory = 'Könyvtárak';
+ LANGhuFileTypeFile = 'Fájlok';
+ LANGhuFileTypeMetafile = 'Közös meta-elem';
+ LANGhuPreferencesPanelsPage = 'Ablakok';
+ LANGhuPreferencesApplicationsPage = 'Applikációk';
+ LANGhuPreferencesExperimentalPage = 'Experimentális funkciók';
+ LANGhuPreferencesSelectAllDirectoriesCheckBox_Caption = 'Tömeges bejelöléskor _a könyvtárakat is belefoglalni';
+ LANGhuPreferencesNewStyleAltOCheckBox_Caption = 'Új s_tílus Alt+O';
+ LANGhuPreferencesNewStyleAltOCheckBox_Tooltip = 'Átkapcsoláskor nem változik az aktuális könyvtár';
+ LANGhuPreferencesShowFuncButtonsCheckBox_Caption = '_Funkció-billentyük ábrázolása (alsó lista)';
+ LANGhuPreferencesSizeFormatLabel_Caption = 'Számok for_mátuma:';
+ LANGhuPreferencesmiSizeFormat1 = 'Rendszer';
+ LANGhuPreferencesmiSizeFormat6 = 'Dinamikus';
+ LANGhuPreferencesAutodetectXApp = 'X applikációk autodetekciója';
+ LANGhuPreferencesAlwaysRunInTerminal = 'Konzol-béli indítás';
+ LANGhuPreferencesNeverRunInTerminal = 'Ne indítsd a konzolban';
+ LANGhuPreferencesCmdLineBehaviourLabel_Caption = 'Utasítássorból tö_rténö indítás:';
+ LANGhuPreferencesFeatures = 'Funkció';
+ LANGhuPreferencesDisableMouseRename_Tooltip = 'Gyors átnevezéshez használható a Shift+F6 bill.-kombináció e választás letiltásakor';
+ LANGhuPreferencesDisableFileTipsCheckBox_Caption = 'Tipp-box tiltása a fá_jl teljes nevével';
+ LANGhuPreferencesDisableFileTipsCheckBox_Tooltip = 'Tipp-box tiltása a fájl teljes nevével, amennyiben a fájl/könyvtár neve az ablakban rövidítetve van.';
+ LANGhuPreferencesShow = 'Ábrázolás';
+ LANGhuPreferencesDirsInBoldCheckBox_Caption = 'Könyvtárak vastag be_tüvel';
+ LANGhuPreferencesDisableDirectoryBracketsCheckBox_Caption = 'Könyvtárnevek ábrázolása szögletes zárójel nélkül';
+ LANGhuPreferencesOctalPermissionsCheckBox_Caption = 'Jogok megjelenítése szám_okkal';
+ LANGhuPreferencesOctalPermissionsCheckBox_Tooltip = 'Könyvtárakra és fájlokra vonatkozó jogosultságok megjelenítése számokkal';
+ LANGhuPreferencesMovement = 'Ugrálás az ablakokban';
+ LANGhuPreferencesLynxLikeMotionCheckBox_Caption = 'Ugrálás a _Lynx böngészö stílusában';
+ LANGhuPreferencesInsertMovesDownCheckBox_Caption = 'Az In_sert lefelé mozgatja a kurzort';
+ LANGhuPreferencesSpaceMovesDownCheckBox_Caption = 'A szóköz bill. lefelé _mozgatja a kurzort ';
+ LANGhuPreferencesViewer = 'Böngészö';
+ LANGhuPreferencesCommandSC = 'Utasítás:';
+ LANGhuPreferencesUseInternalViewer = 'Belsö _böngészö használata';
+ LANGhuPreferencesEditor = 'Editor';
+ LANGhuPreferencesTerminal = 'Konzol';
+ LANGhuPreferencesExperimentalFeatures = 'Experimentáis funkciók';
+ LANGhuPreferencesExperimentalWarningLabel_Caption = '<span weight="ultrabold">Figyelmeztetés:</span> Ezek a funkciók fejlesztés alatt állnak és hibamentes müködésük nem biztosított. Használja öket saját felelösségére!';
+ LANGhuPreferencesFocusRefreshCheckBox_Caption = 'A panelok új_raolvasása az applikáció ablakjaiba lépéskor';
+ LANGhuPreferencesFocusRefreshCheckBox_Tooltip = 'Ez a müvelet hosszabb ideig tart az ablakban lévö allományok számától függöen';
+ LANGhuPreferencesWMCompatModeCheckBox_Caption = '_Kompatibilitás ablakkezelökkel';
+ LANGhuPreferencesWMCompatModeCheckBox_Tooltip = 'Használjuk ablakkezelökkel felálló nehézségek esetén (pl. IceWM nem maximalizálja helyesen az ablakot)';
+ LANGhuPreferencesCompatUseLibcSystemCheckBox_Caption = 'A libc _system() funkció használata proces-ek indításához';
+ LANGhuPreferencesCompatUseLibcSystemCheckBox_Tooltip = 'Használjuk programindítási nehézségek vagy fagyások esetén';
+
+ (*************** STRINGS ADDED TO v0.5.70 **********************************************************************************)
+ LANGhumiSearchCaption2 = '_Fájlok keresése..';
+ LANGhumiNoMounterBarCaption = 'Lemezek sávját ne ábrázolja';
+ LANGhumiShowOneMounterBarCaption = 'Lemezek 1 sávját ábrázolja';
+ LANGhumiShowTwoMounterBarCaption = 'Lemezek 2 sávját ábrázolja';
+ LANGhumnuNetworkCaption = 'Hálóza_t';
+ LANGhumiConnectionsCaption = 'Kapc_solat - kezelö...';
+ LANGhumiOpenConnectionCaption = 'Ka_pcsolódni...';
+ LANGhumiQuickConnectCaption = 'Gyo_rs kapcsolódás...';
+ LANGhumnuPluginsCaption = '_Modulok';
+ LANGhumiTestPluginCaption = 'Modulok ellenör_zése...';
+ LANGhumiMounterSettingsCaption = 'Lemezek sávjának beállítása...';
+ LANGhumiColumnsCaption = 'Oszlopo_k beállítása...';
+ LANGhumiSavePositionCaption = 'Pozíció mentése';
+ LANGhumiMountCaption = 'Ka_pcsolódni';
+ LANGhumiUmountCaption = 'Lekapcs_olódni';
+ LANGhumiEjectCaption = '_Eject';
+ LANGhumiDuplicateTabCaption = 'Ú_j ablak megnyitása ';
+ LANGhumiCloseTabCaption = 'Aktuális ablak be_zárása';
+ LANGhumiCloseAllTabsCaption = 'Minden ablak bezárá_sa';
+ LANGhuCannotDetermineDestinationEngine = 'A célkönyvtár nem elérhetö. Kérem, ellenörizze az utat, majd próbálja újra.';
+ LANGhuCannotLoadFile = 'Nem megnyitható a ''%s'' fájl. Kérem, ellenörizze a jogokat, majd próbálja újra.';
+ LANGhuMountPointDevice = 'Csatlakozási pont: %s'#10'Berendezés: %s';
+ LANGhuMountSC = 'Csatlakozás:';
+ LANGhuNoPluginsFound = 'A modul nincs meg';
+ LANGhuPluginAbout = 'A modulról...';
+ LANGhuCouldntOpenURI = 'Nem sikerült a távoli kapcsolat létrehozása. Kérem, ellenörizze a címet és a jogokat.';
+ LANGhuPluginAboutInside = 'Modul: %s'#10#10'%s'#10'%s';
+ LANGhuAreYouSureCloseAllTabs = 'Valóban be kívánja zárni az összes többi ablakot?';
+ LANGhuCouldntOpenURIArchive = 'Az archívumot nem sikerült megnyitni, valószínüleg meg van sérülve. Kérem, ellenörizze a címet és a jogokat.';
+ LANGhuThereIsNoModuleAvailable = 'A kapcsolat megnyitásához szükséges modult nem találtam. Kérem, ellenörizze az aktív modulokat. ';
+ LANGhuIgnoreError = 'Valóban figyelmen kívül kívánja hagyni ezt a hibát? A forrásfájl törölve lesz.';
+ LANGhuErrorMount = 'A berendezés bejelentkezésekor hiba történt ''%s'':'#10#10;
+ LANGhuErrorUmount = 'A berendezés lejelentkezésekor hiba történt ''%s'':'#10#10;
+ LANGhuErrorEject = 'A berendezés kiemelésekor hiba történt''%s'':'#10#10;
+
+ LANGhuMounterPrefs_Caption = 'A lemezek ablakjainak beállítása';
+ LANGhuMounterPrefs_TitleLabelCaption = 'A lemezek ablakjainak beállítása';
+ LANGhuMounterPrefs_ListViewFrameCaption = 'Kapcsolódási pontok';
+ LANGhuMounterPrefs_MountName = 'Név';
+ LANGhuMounterPrefs_MountPoint = 'Mount point';
+ LANGhuMounterPrefs_Device = 'Berendezés';
+ LANGhuMounterPrefs_MoveUpButtonTooltip = 'Mozgatás felfele';
+ LANGhuMounterPrefs_MoveDownButtonTooltip = 'Mozgatás lefele';
+ LANGhuMounterPrefs_UseFSTabDefaultsCheckBox = 'A kapc_solódási pontok rendszer-listájának használata';
+ LANGhuMounterPrefs_UseFSTabDefaultsCheckBoxTooltip = 'Amennyiben ez a lehetöség aktív, a kapcsolódási pontok rendszer-listája kerül használatra az /etc/fstab rendszerfájlból';
+ LANGhuMounterPrefs_ToggleModeCheckBox = 'A lemezek kapcsolói benyomva maradnak ';
+ LANGhuMounterPrefs_ToggleModeCheckBoxTooltip = 'Amennyiben ez a lehetöség aktív, a panel gombjai benyomva maradnak, ha a berendezés jelen van. A berendezésre való kattintással azt lecsatlakoztatjuk, vagy kiemelhetjük.';
+ LANGhuMounterPrefs_PropertiesFrameCaption = 'Csatlakozási pont tulajdonságai';
+ LANGhuMounterPrefs_DisplayTextLabelCaption = '_Név:';
+ LANGhuMounterPrefs_MountPointLabelCaption = 'Csatlakozási pont:';
+ LANGhuMounterPrefs_MountDeviceLabelCaption = '_Berendezés:';
+ LANGhuMounterPrefs_DeviceTypeLabelCaption = 'Berendezés tí_pusa:';
+ LANGhuMounterPrefs_miLocalDiskCaption = 'Helyi lemez';
+ LANGhuMounterPrefs_miRemovableCaption = 'Cserélhetö lemez';
+ LANGhuMounterPrefs_miCDCaption = 'CD/DVD egység';
+ LANGhuMounterPrefs_miFloppyCaption = 'Floppy egység';
+ LANGhuMounterPrefs_miNetworkCaption = 'Hálózati eszköz';
+ LANGhuMounterPrefs_MountCommandLabelCaption = 'Kapcsolódási parancs:';
+ LANGhuMounterPrefs_UmountCommandLabelCaption = 'Lekapcsolódási parancs';
+ LANGhuMounterPrefs_MountCommandEntryTooltip = 'Syntaxis: használjunk a %dev -t a berendezés helyett, es a %dir -t a távoli pont útjaként. Távoli berendezések nem standart utasításának használata esetében hagyjuk ezt a mezöt üresen.'#10 +
+ 'Figyelmeztetés: Ne használjunk oyan utasításokat, melyek billentyüzetröl való bemenetet kívánnak. A program nem tudja öket kezelni!'#10'Példa: smbmount %dev %dir -o username=netuser,password=jelszó';
+ LANGhuMounterPrefs_UmountCommandEntryTooltip = 'Syntaxis: használjunk %dev -t a berendezés helyett, es a %dir -t a távoli pont útjaként. Távoli berendezések nem standart utasításának használata esetében hagyjuk ezt a mezöt üresen.'#10'Példa: smbumount $dir';
+ LANGhuMounterPrefs_IconLabelCaption = '_Ikon:';
+
+ LANGhuConnMgr_Caption = 'Új kapcsolat megnyitása';
+ LANGhuConnMgr_ConnectButton = '_Kapcsolódni';
+ LANGhuConnMgr_OpenConnection = 'Új kapcsolat megnyitása';
+ LANGhuConnMgr_NameColumn = 'Név';
+ LANGhuConnMgr_URIColumn = 'Cím';
+ LANGhuConnMgr_AddConnectionButtonCaption = 'Új kapcsolat...';
+ LANGhuConnMgr_AddConnectionButtonTooltip = 'Új kapcsolat létrehozása';
+ LANGhuConnMgr_EditButtonCaption = '_Módosítani...';
+ LANGhuConnMgr_EditButtonTooltip = 'Kiválasztott kapcsolat módosítása';
+ LANGhuConnMgr_RemoveButtonCaption = 'Eltávolítani';
+ LANGhuConnMgr_RemoveButtonTooltip = 'Kiválasztott kapcsolat eltávolítása';
+ LANGhuConnMgr_DoYouWantDelete = 'Valóban el akarja távolítani a(z) ''%s'' kapcsolatot?';
+
+ LANGhuConnProp_FTP = 'FTP';
+ LANGhuConnProp_SFTP = 'SFTP (ssh alrendszer)';
+ LANGhuConnProp_SMB = 'Megosztás Windows hálózatokban (SMB)';
+ LANGhuConnProp_HTTP = 'WebDAV (HTTP)';
+ LANGhuConnProp_HTTPS = 'Bebiztosított WebDAV (HTTPS)';
+ LANGhuConnProp_Other = 'További <span style="italic">(Kérem, pontosítsa a címben)</span>';
+ LANGhuConnProp_Caption = 'A kapcsolat tulajdonsága';
+ LANGhuConnProp_VFSModule = '_VFS modul:';
+ LANGhuConnProp_URI = '_Cím (URI):';
+ LANGhuConnProp_URIEntryTooltip = 'Az érvényes URI címnek a hálózati server szolgálatának típusát és címét kellene tartalmaznia.';
+ LANGhuConnProp_DetailedInformations = 'Pontosítási információk';
+ LANGhuConnProp_Name = '_Név:';
+ LANGhuConnProp_Server = 'Serve_r[:port]:';
+ LANGhuConnProp_Username = 'Felhasználói név:';
+ LANGhuConnProp_UserNameEntryTooltip = 'Nem kell kitölteni, amennyiben anonymus kiszolgálóról van szó.';
+ LANGhuConnProp_Password = '_Jelszó:';
+ LANGhuConnProp_TargetDirectory = '_Távoli könyvtár:';
+ LANGhuConnProp_ServiceType = 'A _szolgáltatás típusa:';
+ LANGhuConnProp_MaskPassword = 'Jelszó elrej_tése';
+ LANGhuConnProp_MenuItemCaption = 'Default <span style="italic">(Minden elérhetö modul)</span>';
+
+ LANGhuConnLogin_Caption = 'Bejelentkezés';
+ LANGhuConnLogin_Login = 'Bejelentkezés';
+ LANGhuConnLogin_ExperimentalWarningLabelCaption = 'Az %s eszközhöz való hozzáféreshez be kell jelentkeznie';
+ LANGhuConnLogin_Username = '_Felhasználói név:';
+ LANGhuConnLogin_Password = '_Jelszó:';
+ LANGhuConnLogin_AnonymousCheckButton = '_anonymus hozzáférés';
+
+ LANGhuColumns_Caption = 'A föablak oszlopainak beállítása';
+ LANGhuColumns_Title = 'Az ablak oszlopainak beállítása';
+ LANGhuColumns_MoveUpButtonTooltip = 'Mozgatás felfele';
+ LANGhuColumns_MoveDownButtonTooltip = 'Mozgatás lefele';
+ LANGhuColumns_TitlesLongName = 'Név';
+ LANGhuColumns_TitlesLongNameExt = 'Név + típus';
+ LANGhuColumns_TitlesLongExt = 'Típus';
+ LANGhuColumns_TitlesLongSize = 'Méret';
+ LANGhuColumns_TitlesLongDateTime = 'Változtatás dátuma + idöpontja';
+ LANGhuColumns_TitlesLongDate = 'Utolsó változtatás dátuma';
+ LANGhuColumns_TitlesLongTime = 'Utolsó változtatás idöpontja';
+ LANGhuColumns_TitlesLongUser = 'Felhasználó';
+ LANGhuColumns_TitlesLongGroup = 'Csoport';
+ LANGhuColumns_TitlesLongAttr = 'Attribútum';
+ LANGhuColumns_TitlesShortName = 'Név';
+ LANGhuColumns_TitlesShortNameExt = 'Név';
+ LANGhuColumns_TitlesShortExt = 'Típus';
+ LANGhuColumns_TitlesShortSize = 'Méret';
+ LANGhuColumns_TitlesShortDateTime = 'Dátum';
+ LANGhuColumns_TitlesShortDate = 'Dátum';
+ LANGhuColumns_TitlesShortTime = 'Idöpont';
+ LANGhuColumns_TitlesShortUser = 'Felhaszn.';
+ LANGhuColumns_TitlesShortGroup = 'Csoport';
+ LANGhuColumns_TitlesShortAttr = 'Attr.';
+
+ LANGhuTestPlugin_Caption = 'VFS modul tesztje';
+ LANGhuTestPlugin_Title = 'VFS modul tesztje';
+ LANGhuTestPlugin_ExperimentalWarningLabelCaption = '<span weight="ultrabold">Figyelmeztetés:</span> A virtuális fájlrendszer blokkja (VFS) és az integrált modulok jelenleg fejleszés alatt állnak, és kritikus hibákat is tartalmaz6nak';
+ LANGhuTestPlugin_Plugin = '_Modul:';
+ LANGhuTestPlugin_Command = '_Cím:';
+ LANGhuTestPlugin_Username = '_Felhasználó:';
+ LANGhuTestPlugin_Password = '_Jelszó:';
+ LANGhuTestPlugin_AnonymousCheckButton = '_Anonymus kapcdsolat (a VFSLogin funkció hívása nélkül)';
+ LANGhuTestPlugin_NoPluginsFound = 'Egyetlen modul sem hozzáférhetö.';
+
+ LANGhuRemoteWait_Caption = 'Müvelet folyamatban';
+ LANGhuRemoteWait_OperationInProgress = 'Az applikació most dolgozza fel utasítását, türelmét kérem ...';
+ LANGhuRemoteWait_ItemsFound = 'Találatok száma: %d';
+
+ LANGhuSearch_Bytes = 'Byte';
+ LANGhuSearch_kB = 'kB';
+ LANGhuSearch_MB = 'MB';
+ LANGhuSearch_days = 'nap';
+ LANGhuSearch_weeks = 'hét';
+ LANGhuSearch_months = 'hónap';
+ LANGhuSearch_years = 'év';
+ LANGhuSearch_Caption = 'Fájlok keresése';
+ LANGhuSearch_General = 'Általános';
+ LANGhuSearch_Advanced = 'Pontosítás';
+ LANGhuSearch_SearchResults = 'A keresés eredmé_nye:';
+ LANGhuSearch_SearchFor = 'Keres_ni:';
+ LANGhuSearch_FileMaskEntryTooltip = 'Tipp: Több keresett kifejezés esetében használjunk pontosvesszöt';
+ LANGhuSearch_SearchIn = 'Keresés i_tt:';
+ LANGhuSearch_SearchArchivesCheckButton = '_Archív böngészése';
+ LANGhuSearch_FindText = 'Szöveg keresé_se:';
+ LANGhuSearch_FindTextEntryTooltip = 'Hagyjuk ezt a mezöt üresen, ha nem akarunk szöveget keresni a fájlban'#10'Figyelmeztetés: a szövegek kódolása: UTF-8';
+ LANGhuSearch_CaseSensitiveCheckButton = '_Kis- és nagybetük megkülönböztetése';
+ LANGhuSearch_StayCurrentFSCheckButton = 'Külsö adattárokon s_zintén keres';
+ LANGhuSearch_CaseSensitiveMatchCheckButton = 'Kis- és _nagybetük megkülönböztetése';
+ LANGhuSearch_Size = 'Méret';
+ LANGhuSearch_Date = 'Dátum';
+ LANGhuSearch_BiggerThan = '_Nagyobb, mint';
+ LANGhuSearch_SmallerThan = '_Kisebb, mint';
+ LANGhuSearch_ModifiedBetweenRadioButton = '_Változtatás az intervallumban';
+ LANGhuSearch_NotModifiedAfterRadioButton = '_Nem változott az idöpont után';
+ LANGhuSearch_ModifiedLastRadioButton = 'Válto_zott az utolsó';
+ LANGhuSearch_ModifiedNotLastRadionButton = 'Nem vá_ltozott az utolsó';
+ LANGhuSearch_ModifiedBetweenEntry1 = '"Kérem, használja ezt a dátum-formát:" c';
+ LANGhuSearch_ViewButtonCaption = 'Fájl me_gtekintése';
+ LANGhuSearch_NewSearchButtonCaption = 'Új ke_resés';
+ LANGhuSearch_GoToFileButtonCaption = 'Menj a _fájlra';
+ LANGhuSearch_FeedToListboxButtonCaption = 'A föpanel _betöltése';
+ LANGhuSearch_StatusSC = 'Állapot:';
+ LANGhuSearch_Ready = 'Kész.';
+ LANGhuSearch_PreparingToSearch = 'Keresés elökészítése.';
+ LANGhuSearch_SearchInProgress = 'A keresés folyamatban:';
+ LANGhuSearch_UserCancelled = 'Felhasználói megszakítás.';
+ LANGhuSearch_SearchFinished = 'Keresési folyamat befejezödött.';
+ LANGhuSearch_FilesFound = 'Talált fájlok száma: %d';
+ LANGhuSearch_And = 'és';
+
+ (*************** STRINGS ADDED TO v0.5.82 **********************************************************************************)
+ LANGhuCloseOpenConnection = 'Új kapcsolatot probált létrehozni, miközben egy másik mar aktív. Ha folytatja, az elözö kapcsolat meg lesz szüntetve és az újjal helyettesitve.'#10#10'Kívánja folytatni?';
+ LANGhuDuplicateTabWarning = 'Egy új Tab-ot probál megnyitni egy távoli könyvtárral. De ''engine cloning'' nem támogatott. Igy az új Tab könyvtára lokális fájlrenszerre mutat majd.';
+ LANGhuDontShowAgain = 'Ne mutas_d még egyszer ezt az üzenetet';
+ LANGhuSwitchOtherPanelWarning = 'A másik panelban egy távoli könyvtárat próbált megnyitni. De mivel ''engine cloning'' nem támogatott, így a célkönyvtár nem lesz megváltoztatva.';
+ LANGhuOpenConnectionsWarning = 'A panel aktív kapcsolatot tartalmaz. Az applikáció bezárásával minden kapcsolat megszünik.'#10#10'Még mindig ki akar lépni?';
+ LANGhumiDisconnect_Caption = 'Kapcsolat ol_dása';
+ LANGhuDisconnectButton_Tooltip = 'Aktív kapcsolat oldása';
+ LANGhuLeaveArchiveButton_Tooltip = 'Jelen archívum bezárása';
+ LANGhuOpenTerminalButton_Tooltip = 'Új terminál-ablakot nyit az aktuális könyvtárból';
+ LANGhuOpenTerminalButton_Caption = 'Te_rminal megnyitása';
+ LANGhuShowTextUIDsCheckBox_Caption = 'Text _UIDs ábrázolása';
+ LANGhuShowTextUIDsCheckBox_Tooltip = 'Szöveg alapú Felhasználói (User) és Csoport (Group) információk megjelenítése számok helyett (UID/GID)';
+
+
+ (*************** STRINGS ADDED TO v0.5.100 **********************************************************************************)
+ LANGhumiNewTab_Caption = 'Új könyvtár- _tab';
+ LANGhuFilePopupMenu_Properties = 'Tulajdonságok (_Properties)';
+ LANGhuCommandEntry_Tooltip = 'Használj %s-t állomány/könyvtár placeholder-ként';
+ LANGhumiFiles_Caption = 'Csak fájlok';
+
+ (*************** STRINGS ADDED TO v0.6.31 **********************************************************************************)
+ LANGhuPasswordButton_Tooltip = 'Archive requires password.'#10'Click to set';
+ LANGhuHandleRunFromArchive_Bytes = 'bytes';
+ LANGhuHandleRunFromArchive_FileTypeDesc_Unknown = '(unknown)';
+ LANGhuHandleRunFromArchive_NotAssociated = '(not associated)';
+ LANGhuHandleRunFromArchive_SelfExecutable = '(self-executable)';
+ LANGhuHandleRunFromArchive_CouldntCreateTemporaryDirectory = 'Couldn''t create temporary directory "%s": %s.'#10#10'Please check the temporary directory settings and try it again.';
+ LANGhuFRunFromVFS_Caption = 'Packed file properties';
+ LANGhuFRunFromVFS_TitleLabel = 'File Properties';
+ LANGhuFRunFromVFS_FileNameLabel = 'File name:';
+ LANGhuFRunFromVFS_FileTypeLabel = 'File type:';
+ LANGhuFRunFromVFS_SizeLabel = 'Size:';
+ LANGhuFRunFromVFS_PackedSizeLabel = 'Compressed size:';
+ LANGhuFRunFromVFS_DateLabel = 'Modify date:';
+ LANGhuFRunFromVFS_InfoLabel = 'Opening files directly from archives is not supported. By clicking the buttons below the file (all files respectively) will be extracted to a temporary location. Temporary files will be deleted when you close Tux Commander.';
+ LANGhuFRunFromVFS_OpensWithLabel = 'Open with:';
+ LANGhuFRunFromVFS_ExecuteButton = 'E_xtract and open';
+ LANGhuFRunFromVFS_ExecuteAllButton = 'Extract _all and open';
+ LANGhuFSetPassword_Caption = 'Set password';
+ LANGhuFSetPassword_Label1_Caption = 'Password required';
+ LANGhuFSetPassword_Label2_Caption = 'The archive is encrypted and requires password in order to extract the data';
+ LANGhuFSetPassword_ShowPasswordCheckButton = 'Un_mask password';
+
+
+(********************************************************************************************************************************)
+procedure SetTranslation;
+begin
+ LANGF2Button_Caption := LANGhuF2Button_Caption;
+ LANGF3Button_Caption := LANGhuF3Button_Caption;
+ LANGF4Button_Caption := LANGhuF4Button_Caption;
+ LANGF5Button_Caption := LANGhuF5Button_Caption;
+ LANGF6Button_Caption := LANGhuF6Button_Caption;
+ LANGF7Button_Caption := LANGhuF7Button_Caption;
+ LANGF8Button_Caption := LANGhuF8Button_Caption;
+
+ LANGmnuFile_Caption := LANGhumnuFile_Caption;
+ LANGmnuMark_Caption := LANGhumnuMark_Caption;
+ LANGmnuCommands_Caption := LANGhumnuCommands_Caption;
+ LANGmnuHelp_Caption := LANGhumnuHelp_Caption;
+ LANGmiExit_Caption := LANGhumiExit_Caption;
+ LANGmiSelectGroup_Caption := LANGhumiSelectGroup_Caption;
+ LANGmiUnselectGroup_Caption := LANGhumiUnselectGroup_Caption;
+ LANGmiSelectAll_Caption := LANGhumiSelectAll_Caption;
+ LANGmiUnselectAll_Caption := LANGhumiUnselectAll_Caption;
+ LANGmiInvertSelection_Caption := LANGhumiInvertSelection_Caption;
+ LANGmiRefresh_Caption := LANGhumiRefresh_Caption;
+ LANGmiAbout_Caption := LANGhumiAbout_Caption;
+
+ LANGColumn1_Caption := LANGhuColumn1_Caption;
+ LANGColumn2_Caption := LANGhuColumn2_Caption;
+ LANGColumn3_Caption := LANGhuColumn3_Caption;
+ LANGColumn4_Caption := LANGhuColumn4_Caption;
+ LANGColumn5_Caption := LANGhuColumn5_Caption;
+
+ LANGExpandSelection := LANGhuExpandSelection;
+ LANGShrinkSelection := LANGhuShrinkSelection;
+ LANGNoMatchesFound := LANGhuNoMatchesFound;
+ LANGNoFilesSelected := LANGhuNoFilesSelected;
+ LANGSelectedFilesDirectories := LANGhuSelectedFilesDirectories;
+ LANGDirectoryS := LANGhuDirectoryS;
+ LANGFileS := LANGhuFileS;
+ LANGDoYouReallyWantToDeleteTheS := LANGhuDoYouReallyWantToDeleteTheS;
+ LANGDoYouReallyWantToDeleteTheSS := LANGhuDoYouReallyWantToDeleteTheSS;
+ LANGCopyFiles := LANGhuCopyFiles;
+ LANGMoveRenameFiles := LANGhuMoveRenameFiles;
+ LANGCopyDFileDirectoriesTo := LANGhuCopyDFileDirectoriesTo;
+ LANGMoveRenameDFileDirectoriesTo := LANGhuMoveRenameDFileDirectoriesTo;
+ LANGCopySC := LANGhuCopySC;
+ LANGMoveRenameSC := LANGhuMoveRenameSC;
+
+ LANGQuickFind := LANGhuQuickFind;
+
+ LANGAboutString := LANGhuAboutString;
+ LANGAboutStringGnome := LANGhuAboutStringGnome;
+ LANGDiskStatFmt := LANGhuDiskStatFmt;
+ LANGDiskStatVolNameFmt := LANGhuDiskStatVolNameFmt;
+ LANGStatusLineFmt := LANGhuStatusLineFmt;
+ LANGPanelStrings[False] := LANGhuPanelStrings[False];
+ LANGPanelStrings[True] := LANGhuPanelStrings[True];
+ LANGDIR := LANGhuDIR;
+ LANGErrorGettingListingForSPanel := LANGhuErrorGettingListingForSPanel;
+ LANGErrorGettingListingForSPanelNoPath := LANGhuErrorGettingListingForSPanelNoPath;
+ LANGErrorCreatingNewDirectorySInSPanel := LANGhuErrorCreatingNewDirectorySInSPanel;
+ LANGErrorCreatingNewDirectorySInSPanelNoPath := LANGhuErrorCreatingNewDirectorySInSPanelNoPath;
+ LANGTheFileDirectory := LANGhuTheFileDirectory;
+ LANGCouldNotBeDeleted := LANGhuCouldNotBeDeleted;
+ LANGCouldNotBeDeletedS := LANGhuCouldNotBeDeletedS;
+ LANGUserCancelled := LANGhuUserCancelled;
+ LANGTheDirectorySIsNotEmpty := LANGhuTheDirectorySIsNotEmpty;
+ LANGCannotCopyFile := LANGhuCannotCopyFile;
+ LANGCopyError := LANGhuCopyError;
+ LANGMoveError := LANGhuMoveError;
+ LANGOverwriteS := LANGhuOverwriteS;
+ LANGWithFileS := LANGhuWithFileS;
+ LANGOvewriteSBytesS := LANGhuOvewriteSBytesS;
+ LANGTheFile := LANGhuTheFile;
+ LANGCopy := LANGhuCopy;
+ LANGMove := LANGhuMove;
+ LANGTheDirectory := LANGhuTheDirectory;
+ LANGTheSymbolicLink := LANGhuTheSymbolicLink;
+ LANGCannotMoveFile := LANGhuCannotMoveFile;
+ LANGCouldNotBeCreated := LANGhuCouldNotBeCreated;
+ LANGCouldNotBeCreatedS := LANGhuCouldNotBeCreatedS;
+ LANGFromS := LANGhuFromS;
+ LANGToS := LANGhuToS;
+ LANGCannotCopyFileToItself := LANGhuCannotCopyFileToItself;
+ LANGMemoryAllocationFailed := LANGhuMemoryAllocationFailed;
+ LANGCannotOpenSourceFile := LANGhuCannotOpenSourceFile;
+ LANGCannotOpenDestinationFile := LANGhuCannotOpenDestinationFile;
+ LANGCannotCloseDestinationFile := LANGhuCannotCloseDestinationFile;
+ LANGCannotCloseSourceFile := LANGhuCannotCloseSourceFile;
+ LANGCannotReadFromSourceFile := LANGhuCannotReadFromSourceFile;
+ LANGCannotWriteToDestinationFile := LANGhuCannotWriteToDestinationFile;
+
+ LANGUnknownException := LANGhuUnknownException;
+ LANGNoAccess := LANGhuNoAccess;
+ LANGUnknownError := LANGhuUnknownError;
+
+ LANGCreateANewDirectory := LANGhuCreateANewDirectory;
+ LANGEnterDirectoryName := LANGhuEnterDirectoryName;
+
+ LANGOverwriteQuestion := LANGhuOverwriteQuestion;
+ LANGOverwriteButton_Caption := LANGhuOverwriteButton_Caption;
+ LANGOverwriteAllButton_Caption := LANGhuOverwriteAllButton_Caption;
+ LANGSkipButton_Caption := LANGhuSkipButton_Caption;
+ LANGOverwriteAllOlderButton_Caption := LANGhuOverwriteAllOlderButton_Caption;
+ LANGSkipAllButton_Caption := LANGhuSkipAllButton_Caption;
+ LANGRenameButton_Caption := LANGhuRenameButton_Caption;
+ LANGAppendButton_Caption := LANGhuAppendButton_Caption;
+ LANGRename := LANGhuRename;
+ LANGRenameFile := LANGhuRenameFile;
+ LANGIgnoreButton_Caption := LANGhuIgnoreButton_Caption;
+
+ LANGProgress := LANGhuProgress;
+ LANGCancel := LANGhuCancel;
+ LANGDelete := LANGhuDelete;
+
+ LANGSpecifyFileType := LANGhuSpecifyFileType;
+
+ LANGRemoveDirectory := LANGhuRemoveDirectory;
+ LANGDoYouWantToDeleteItWithAllItsFilesAndSubdirectories := LANGhuDoYouWantToDeleteItWithAllItsFilesAndSubdirectories;
+ LANGRetry := LANGhuRetry;
+ LANGDeleteButton_Caption := LANGhuDeleteButton_Caption;
+ LANGAll := LANGhuAll;
+
+ LANGCopyFilesSC := LANGhuCopyFilesSC;
+ LANGAppendQuestion := LANGhuAppendQuestion;
+ LANGPreparingList := LANGhuPreparingList;
+
+ LANGYouMustSelectAValidFile := LANGhuYouMustSelectAValidFile;
+ LANGmiVerifyChecksums := LANGhumiVerifyChecksums;
+ LANGVerifyChecksumsCaption := LANGhuVerifyChecksumsCaption;
+ LANGCheckButtonCaptionCheck := LANGhuCheckButtonCaptionCheck;
+ LANGCheckButtonCaptionStop := LANGhuCheckButtonCaptionStop;
+ LANGFileListTooltip := LANGhuFileListTooltip;
+ LANGFilenameColumnCaption := LANGhuFilenameColumnCaption;
+ LANGTheFileSYouAreTryingToOpenIsQuiteBig := LANGhuTheFileSYouAreTryingToOpenIsQuiteBig;
+ LANGAnErrorOccuredWhileInitializingMemoryBlock := LANGhuAnErrorOccuredWhileInitializingMemoryBlock;
+ LANGAnErrorOccuredWhileOpeningFileSS := LANGhuAnErrorOccuredWhileOpeningFileSS;
+ LANGAnErrorOccuredWhileReadingFileSS := LANGhuAnErrorOccuredWhileReadingFileSS;
+ LANGChecksumNotChecked := LANGhuChecksumNotChecked;
+ LANGChecksumChecking := LANGhuChecksumChecking;
+ LANGChecksumInterrupted := LANGhuChecksumInterrupted;
+ LANGChecksumDOK := LANGhuChecksumDOK;
+
+ LANGmiCreateChecksumsCaption := LANGhumiCreateChecksumsCaption;
+ LANGYouMustSelectAtLeastOneFileToCalculateChecksum := LANGhuYouMustSelectAtLeastOneFileToCalculateChecksum;
+ LANGCreateChecksumsCaption := LANGhuCreateChecksumsCaption;
+ LANGCCHKSUMPage1Text := LANGhuCCHKSUMPage1Text;
+ LANGCCHKSUMPage4Text := LANGhuCCHKSUMPage4Text;
+ LANGCCHKSUMPage6Text := LANGhuCCHKSUMPage6Text;
+ LANGCCHKSUMPage7Text := LANGhuCCHKSUMPage7Text;
+ LANGCCHKSUMPage1Title := LANGhuCCHKSUMPage1Title;
+ LANGCCHKSUMPage2Title := LANGhuCCHKSUMPage2Title;
+ LANGCCHKSUMPage3Title := LANGhuCCHKSUMPage3Title;
+ LANGCCHKSUMPage4Title := LANGhuCCHKSUMPage4Title;
+ LANGCCHKSUMPage5Title := LANGhuCCHKSUMPage5Title;
+ LANGCCHKSUMPage6Title := LANGhuCCHKSUMPage6Title;
+ LANGCCHKSUMPage7Title := LANGhuCCHKSUMPage7Title;
+ LANGCCHKSUMSFVFile := LANGhuCCHKSUMSFVFile;
+ LANGCCHKSUMMD5sumFile := LANGhuCCHKSUMMD5sumFile;
+ LANGCCHKSUMFileName := LANGhuCCHKSUMFileName;
+ LANGCCHKSUMCreateSeparateChecksumFiles := LANGhuCCHKSUMCreateSeparateChecksumFiles;
+ LANGCCHKSUMNowProcessingFileS := LANGhuCCHKSUMNowProcessingFileS;
+ LANGCCHKSUMFinishCaption := LANGhuCCHKSUMFinishCaption;
+ LANGCCHKSUMAreYouSureYouWantToAbortTheProcessing := LANGhuCCHKSUMAreYouSureYouWantToAbortTheProcessing;
+ LANGCCHKSUMAnErrorOccuredWhileOpeningFileSS := LANGhuCCHKSUMAnErrorOccuredWhileOpeningFileSS;
+ LANGCCHKSUMAnErrorOccuredWhileReadingFileSS := LANGhuCCHKSUMAnErrorOccuredWhileReadingFileSS;
+ LANGCCHKSUMAnErrorOccuredWhileWritingFileSS := LANGhuCCHKSUMAnErrorOccuredWhileWritingFileSS;
+
+ LANGAnErrorOccuredWhileWritingFileSS := LANGhuAnErrorOccuredWhileWritingFileSS;
+ LANGTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt := LANGhuTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt;
+ LANGTheTargetFileSCannotBeRemovedS := LANGhuTheTargetFileSCannotBeRemovedS;
+ LANGMergeCaption := LANGhuMergeCaption;
+ LANGPleaseInsertNextDiskOrGiveDifferentLocation := LANGhuPleaseInsertNextDiskOrGiveDifferentLocation;
+ LANGMergeOfSSucceeded := LANGhuMergeOfSSucceeded;
+ LANGWarningCreatedFileFailsCRCCheck := LANGhuWarningCreatedFileFailsCRCCheck;
+ LANGMergeOfSSucceeded_NoCRCFileAvailable := LANGhuMergeOfSSucceeded_NoCRCFileAvailable;
+ LANGMergeSAndAllFilesWithAscendingNamesToTheFollowingDirectory := LANGhuMergeSAndAllFilesWithAscendingNamesToTheFollowingDirectory;
+ LANGMergeSC := LANGhuMergeSC;
+ LANGmiSplitFileCaption := LANGhumiSplitFileCaption;
+ LANGmiMergeFilesCaption := LANGhumiMergeFilesCaption;
+
+ LANGSplitTheFileSToDirectory := LANGhuSplitTheFileSToDirectory;
+ LANGSplitSC := LANGhuSplitSC;
+ LANGSplitFile := LANGhuSplitFile;
+ LANGBytesPerFile := LANGhuBytesPerFile;
+ LANGAutomatic := LANGhuAutomatic;
+ LANGDeleteFilesOnTargetDisk := LANGhuDeleteFilesOnTargetDisk;
+ LANGSplitCaption := LANGhuSplitCaption;
+ LANGCannotOpenFileS := LANGhuCannotOpenFileS;
+ LANGCannotSplitTheFileToMoreThan999Parts := LANGhuCannotSplitTheFileToMoreThan999Parts;
+ LANGThereAreSomeFilesInTheTargetDirectorySDoYouWantToDeleteThem := LANGhuThereAreSomeFilesInTheTargetDirectorySDoYouWantToDeleteThem;
+ LANGThereAreDFilesInTheTargetDirectoryDoYouWantToDeleteThem := LANGhuThereAreDFilesInTheTargetDirectoryDoYouWantToDeleteThem;
+ LANGAnErrorOccuredWhileOperationS := LANGhuAnErrorOccuredWhileOperationS;
+ LANGSplitOfSSucceeded := LANGhuSplitOfSSucceeded;
+ LANGSplitOfSFailed := LANGhuSplitOfSFailed;
+
+ LANGmnuShow_Caption := LANGhumnuShow_Caption;
+ LANGmiShowDotFiles_Caption := LANGhumiShowDotFiles_Caption;
+ LANGTheFileYouAreTryingToOpenIsQuiteBig := LANGhuTheFileYouAreTryingToOpenIsQuiteBig;
+ LANGCannotExecuteSPleaseCheckTheConfiguration := LANGhuCannotExecuteSPleaseCheckTheConfiguration;
+ LANGEdit := LANGhuEdit;
+ LANGEnterFilenameToEdit := LANGhuEnterFilenameToEdit;
+
+ LANGmnuSettings_Caption := LANGhumnuSettings_Caption;
+ LANGmiFileTypes_Caption := LANGhumiFileTypes_Caption;
+ LANGThereIsNoApplicationAssociatedWithS := LANGhuThereIsNoApplicationAssociatedWithS;
+ LANGErrorExecutingCommand := LANGhuErrorExecutingCommand;
+ LANGEditFileTypesCaption := LANGhuEditFileTypesCaption;
+ LANGTitleLabel_Caption := LANGhuTitleLabel_Caption;
+ LANGExtensionsColumn := LANGhuExtensionsColumn;
+ LANGDescriptionColumn := LANGhuDescriptionColumn;
+ LANGFileTypesList := LANGhuFileTypesList;
+ LANGActionName := LANGhuActionName;
+ LANGCommand := LANGhuCommand;
+ LANGSetDefaultActionButton_Caption := LANGhuSetDefaultActionButton_Caption;
+ LANGRunInTerminalCheckBox_Caption := LANGhuRunInTerminalCheckBox_Caption;
+ LANGAutodetectCheckBox_Caption := LANGhuAutodetectCheckBox_Caption;
+ LANGBrowseButton_Caption := LANGhuBrowseButton_Caption;
+ LANGCommandLabel_Caption := LANGhuCommandLabel_Caption;
+ LANGDescriptionLabel_Caption := LANGhuDescriptionLabel_Caption;
+ LANGFNameExtLabel_Caption := LANGhuFNameExtLabel_Caption;
+ LANGNotebookPageExtensions := LANGhuNotebookPageExtensions;
+ LANGNotebookPageActions := LANGhuNotebookPageActions;
+ LANGDefault := LANGhuDefault;
+ LANGCannotSaveFileTypeAssociationsBecauseOtherProcess := LANGhuCannotSaveFileTypeAssociationsBecauseOtherProcess;
+
+ LANGDefaultColor := LANGhuDefaultColor;
+ LANGIcon := LANGhuIcon;
+ LANGBrowseForIcon := LANGhuBrowseForIcon;
+ LANGSelectFileTypeColor := LANGhuSelectFileTypeColor;
+ LANGColor := LANGhuColor;
+
+ LANGmiChangePermissions_Caption := LANGhumiChangePermissions_Caption;
+ LANGmiChangeOwner_Caption := LANGhumiChangeOwner_Caption;
+ LANGmiCreateSymlink_Caption := LANGhumiCreateSymlink_Caption;
+ LANGmiEditSymlink_Caption := LANGhumiEditSymlink_Caption;
+ LANGChmodProgress := LANGhuChmodProgress;
+ LANGChownProgress := LANGhuChownProgress;
+ LANGYouMustSelectAValidSymbolicLink := LANGhuYouMustSelectAValidSymbolicLink;
+ LANGPopupRunS := LANGhuPopupRunS;
+ LANGPopupOpenS := LANGhuPopupOpenS;
+ LANGPopupGoUp := LANGhuPopupGoUp;
+ LANGPopupOpenWithS := LANGhuPopupOpenWithS;
+ LANGPopupDefault := LANGhuPopupDefault;
+ LANGPopupOpenWith := LANGhuPopupOpenWith;
+ LANGPopupViewFile := LANGhuPopupViewFile;
+ LANGPopupEditFile := LANGhuPopupEditFile;
+ LANGPopupMakeSymlink := LANGhuPopupMakeSymlink;
+ LANGPopupRename := LANGhuPopupRename;
+ LANGPopupDelete := LANGhuPopupDelete;
+ LANGDialogChangePermissions := LANGhuDialogChangePermissions;
+ LANGCouldNotBeChmoddedS := LANGhuCouldNotBeChmoddedS;
+ LANGDialogChangeOwner := LANGhuDialogChangeOwner;
+ LANGCouldNotBeChownedS := LANGhuCouldNotBeChownedS;
+ LANGDialogMakeSymlink := LANGhuDialogMakeSymlink;
+ LANGDialogEditSymlink := LANGhuDialogEditSymlink;
+ LANGFEditSymlink_Caption := LANGhuFEditSymlink_Caption;
+ LANGFEditSymlink_SymbolicLinkFilename := LANGhuFEditSymlink_SymbolicLinkFilename;
+ LANGFEditSymlink_SymbolicLinkPointsTo := LANGhuFEditSymlink_SymbolicLinkPointsTo;
+
+ LANGFChmod_Caption := LANGhuFChmod_Caption;
+ LANGFChmod_PermissionFrame := LANGhuFChmod_PermissionFrame;
+ LANGFChmod_FileFrame := LANGhuFChmod_FileFrame;
+ LANGFChmod_ApplyRecursivelyFor := LANGhuFChmod_ApplyRecursivelyFor;
+ LANGFChmod_miAllFiles := LANGhuFChmod_miAllFiles;
+ LANGFChmod_miDirectories := LANGhuFChmod_miDirectories;
+ LANGFChmod_OctalLabel := LANGhuFChmod_OctalLabel;
+ LANGFChmod_SUID := LANGhuFChmod_SUID;
+ LANGFChmod_SGID := LANGhuFChmod_SGID;
+ LANGFChmod_Sticky := LANGhuFChmod_Sticky;
+ LANGFChmod_RUSR := LANGhuFChmod_RUSR;
+ LANGFChmod_WUSR := LANGhuFChmod_WUSR;
+ LANGFChmod_XUSR := LANGhuFChmod_XUSR;
+ LANGFChmod_RGRP := LANGhuFChmod_RGRP;
+ LANGFChmod_WGRP := LANGhuFChmod_WGRP;
+ LANGFChmod_XGRP := LANGhuFChmod_XGRP;
+ LANGFChmod_ROTH := LANGhuFChmod_ROTH;
+ LANGFChmod_WOTH := LANGhuFChmod_WOTH;
+ LANGFChmod_XOTH := LANGhuFChmod_XOTH;
+ LANGFChmod_TextLabel := LANGhuFChmod_TextLabel;
+ LANGFChmod_FileLabel := LANGhuFChmod_FileLabel;
+ LANGFChown_Caption := LANGhuFChown_Caption;
+ LANGFChown_OwnerFrame := LANGhuFChown_OwnerFrame;
+ LANGFChown_GroupFrame := LANGhuFChown_GroupFrame;
+ LANGFChown_FileFrame := LANGhuFChown_FileFrame;
+ LANGFChown_ApplyRecursively := LANGhuFChown_ApplyRecursively;
+
+ LANGFSymlink_Caption := LANGhuFSymlink_Caption;
+ LANGFSymlink_ExistingFilename := LANGhuFSymlink_ExistingFilename;
+ LANGFSymlink_SymlinkFilename := LANGhuFSymlink_SymlinkFilename;
+
+ LANGmnuBookmarks_Caption := LANGhumnuBookmarks_Caption;
+ LANGmiAddBookmark_Caption := LANGhumiAddBookmark_Caption;
+ LANGmiEditBookmarks_Caption := LANGhumiEditBookmarks_Caption;
+ LANGBookmarkPopupDelete_Caption := LANGhuBookmarkPopupDelete_Caption;
+ LANGmiPreferences_Caption := LANGhumiPreferences_Caption;
+ LANGTheCurrentDirectoryAlreadyExistsInTheBookmarksList := LANGhuTheCurrentDirectoryAlreadyExistsInTheBookmarksList;
+ LANGSomeOtherInstanceChanged := LANGhuSomeOtherInstanceChanged;
+
+ LANGPreferences_Caption := LANGhuPreferences_Caption;
+ LANGPreferences_TitleLabel_Caption := LANGhuPreferences_TitleLabel_Caption;
+ LANGPreferences_GeneralPage := LANGhuPreferences_GeneralPage;
+ LANGPreferences_FontsPage := LANGhuPreferences_FontsPage;
+ LANGPreferences_ColorsPage := LANGhuPreferences_ColorsPage;
+ LANGPreferences_RowHeight := LANGhuPreferences_RowHeight;
+ LANGPreferences_NumHistoryItems := LANGhuPreferences_NumHistoryItems;
+ LANGPreferences_Default := LANGhuPreferences_Default;
+ LANGPreferences_ClearReadonlyAttribute := LANGhuPreferences_ClearReadonlyAttribute;
+ LANGPreferences_DisableMouseRenaming := LANGhuPreferences_DisableMouseRenaming;
+ LANGPreferences_ShowFiletypeIconsInList := LANGhuPreferences_ShowFiletypeIconsInList;
+ LANGPreferences_ExternalAppsLabel := LANGhuPreferences_ExternalAppsLabel;
+ LANGPreferences_Viewer := LANGhuPreferences_Viewer;
+ LANGPreferences_Editor := LANGhuPreferences_Editor;
+ LANGPreferences_Terminal := LANGhuPreferences_Terminal;
+ LANGPreferences_ListFont := LANGhuPreferences_ListFont;
+ LANGPreferences_Change := LANGhuPreferences_Change;
+ LANGPreferences_UseDefaultFont := LANGhuPreferences_UseDefaultFont;
+ LANGPreferences_Foreground := LANGhuPreferences_Foreground;
+ LANGPreferences_Background := LANGhuPreferences_Background;
+ LANGPreferences_NormalItem := LANGhuPreferences_NormalItem;
+ LANGPreferences_SetToDefaultToUseGTKThemeColors := LANGhuPreferences_SetToDefaultToUseGTKThemeColors;
+ LANGPreferences_Cursor := LANGhuPreferences_Cursor;
+ LANGPreferences_InactiveItem := LANGhuPreferences_InactiveItem;
+ LANGPreferences_SelectedItem := LANGhuPreferences_SelectedItem;
+ LANGPreferences_LinkItem := LANGhuPreferences_LinkItem;
+ LANGPreferences_LinkItemHint := LANGhuPreferences_LinkItemHint;
+ LANGPreferences_DotFileItem := LANGhuPreferences_DotFileItem;
+ LANGPreferences_DotFileItemHint := LANGhuPreferences_DotFileItemHint;
+ LANGPreferences_BrowseForApplication := LANGhuPreferences_BrowseForApplication;
+ LANGPreferences_DefaultS := LANGhuPreferences_DefaultS;
+ LANGPreferences_SelectFont := LANGhuPreferences_SelectFont;
+
+ LANGBookmarkButton_Tooltip := LANGhuBookmarkButton_Tooltip;
+ LANGUpButton_Tooltip := LANGhuUpButton_Tooltip;
+ LANGRootButton_Tooltip := LANGhuRootButton_Tooltip;
+ LANGHomeButton_Tooltip := LANGhuHomeButton_Tooltip;
+ LANGLeftEqualButton_Tooltip := LANGhuLeftEqualButton_Tooltip;
+ LANGRightEqualButton_Tooltip := LANGhuRightEqualButton_Tooltip;
+ LANGmiShowDirectorySizes_Caption := LANGhumiShowDirectorySizes_Caption;
+ LANGmiTargetSource_Caption := LANGhumiTargetSource_Caption;
+ LANGFileTypeDirectory := LANGhuFileTypeDirectory;
+ LANGFileTypeFile := LANGhuFileTypeFile;
+ LANGFileTypeMetafile := LANGhuFileTypeMetafile;
+ LANGPreferencesPanelsPage := LANGhuPreferencesPanelsPage;
+ LANGPreferencesApplicationsPage := LANGhuPreferencesApplicationsPage;
+ LANGPreferencesExperimentalPage := LANGhuPreferencesExperimentalPage;
+ LANGPreferencesSelectAllDirectoriesCheckBox_Caption := LANGhuPreferencesSelectAllDirectoriesCheckBox_Caption;
+ LANGPreferencesNewStyleAltOCheckBox_Caption := LANGhuPreferencesNewStyleAltOCheckBox_Caption;
+ LANGPreferencesNewStyleAltOCheckBox_Tooltip := LANGhuPreferencesNewStyleAltOCheckBox_Tooltip;
+ LANGPreferencesShowFuncButtonsCheckBox_Caption := LANGhuPreferencesShowFuncButtonsCheckBox_Caption;
+ LANGPreferencesSizeFormatLabel_Caption := LANGhuPreferencesSizeFormatLabel_Caption;
+ LANGPreferencesmiSizeFormat1 := LANGhuPreferencesmiSizeFormat1;
+ LANGPreferencesmiSizeFormat6 := LANGhuPreferencesmiSizeFormat6;
+ LANGPreferencesAutodetectXApp := LANGhuPreferencesAutodetectXApp;
+ LANGPreferencesAlwaysRunInTerminal := LANGhuPreferencesAlwaysRunInTerminal;
+ LANGPreferencesNeverRunInTerminal := LANGhuPreferencesNeverRunInTerminal;
+ LANGPreferencesCmdLineBehaviourLabel_Caption := LANGhuPreferencesCmdLineBehaviourLabel_Caption;
+ LANGPreferencesFeatures := LANGhuPreferencesFeatures;
+ LANGPreferencesDisableMouseRename_Tooltip := LANGhuPreferencesDisableMouseRename_Tooltip;
+ LANGPreferencesDisableFileTipsCheckBox_Caption := LANGhuPreferencesDisableFileTipsCheckBox_Caption;
+ LANGPreferencesDisableFileTipsCheckBox_Tooltip := LANGhuPreferencesDisableFileTipsCheckBox_Tooltip;
+ LANGPreferencesShow := LANGhuPreferencesShow;
+ LANGPreferencesDirsInBoldCheckBox_Caption := LANGhuPreferencesDirsInBoldCheckBox_Caption;
+ LANGPreferencesDisableDirectoryBracketsCheckBox_Caption := LANGhuPreferencesDisableDirectoryBracketsCheckBox_Caption;
+ LANGPreferencesOctalPermissionsCheckBox_Caption := LANGhuPreferencesOctalPermissionsCheckBox_Caption;
+ LANGPreferencesOctalPermissionsCheckBox_Tooltip := LANGhuPreferencesOctalPermissionsCheckBox_Tooltip;
+ LANGPreferencesMovement := LANGhuPreferencesMovement;
+ LANGPreferencesLynxLikeMotionCheckBox_Caption := LANGhuPreferencesLynxLikeMotionCheckBox_Caption;
+ LANGPreferencesInsertMovesDownCheckBox_Caption := LANGhuPreferencesInsertMovesDownCheckBox_Caption;
+ LANGPreferencesSpaceMovesDownCheckBox_Caption := LANGhuPreferencesSpaceMovesDownCheckBox_Caption;
+ LANGPreferencesViewer := LANGhuPreferencesViewer;
+ LANGPreferencesCommandSC := LANGhuPreferencesCommandSC;
+ LANGPreferencesUseInternalViewer := LANGhuPreferencesUseInternalViewer;
+ LANGPreferencesEditor := LANGhuPreferencesEditor;
+ LANGPreferencesTerminal := LANGhuPreferencesTerminal;
+ LANGPreferencesExperimentalFeatures := LANGhuPreferencesExperimentalFeatures;
+ LANGPreferencesExperimentalWarningLabel_Caption := LANGhuPreferencesExperimentalWarningLabel_Caption;
+ LANGPreferencesFocusRefreshCheckBox_Caption := LANGhuPreferencesFocusRefreshCheckBox_Caption;
+ LANGPreferencesFocusRefreshCheckBox_Tooltip := LANGhuPreferencesFocusRefreshCheckBox_Tooltip;
+ LANGPreferencesWMCompatModeCheckBox_Caption := LANGhuPreferencesWMCompatModeCheckBox_Caption;
+ LANGPreferencesWMCompatModeCheckBox_Tooltip := LANGhuPreferencesWMCompatModeCheckBox_Tooltip;
+ LANGPreferencesCompatUseLibcSystemCheckBox_Caption := LANGhuPreferencesCompatUseLibcSystemCheckBox_Caption;
+ LANGPreferencesCompatUseLibcSystemCheckBox_Tooltip := LANGhuPreferencesCompatUseLibcSystemCheckBox_Tooltip;
+
+ LANGmiSearchCaption2 := LANGhumiSearchCaption2;
+ LANGmiNoMounterBarCaption := LANGhumiNoMounterBarCaption;
+ LANGmiShowOneMounterBarCaption := LANGhumiShowOneMounterBarCaption;
+ LANGmiShowTwoMounterBarCaption := LANGhumiShowTwoMounterBarCaption;
+ LANGmnuNetworkCaption := LANGhumnuNetworkCaption;
+ LANGmiConnectionsCaption := LANGhumiConnectionsCaption;
+ LANGmiOpenConnectionCaption := LANGhumiOpenConnectionCaption;
+ LANGmiQuickConnectCaption := LANGhumiQuickConnectCaption;
+ LANGmnuPluginsCaption := LANGhumnuPluginsCaption;
+ LANGmiTestPluginCaption := LANGhumiTestPluginCaption;
+ LANGmiMounterSettingsCaption := LANGhumiMounterSettingsCaption;
+ LANGmiColumnsCaption := LANGhumiColumnsCaption;
+ LANGmiSavePositionCaption := LANGhumiSavePositionCaption;
+ LANGmiMountCaption := LANGhumiMountCaption;
+ LANGmiUmountCaption := LANGhumiUmountCaption;
+ LANGmiEjectCaption := LANGhumiEjectCaption;
+ LANGmiDuplicateTabCaption := LANGhumiDuplicateTabCaption;
+ LANGmiCloseTabCaption := LANGhumiCloseTabCaption;
+ LANGmiCloseAllTabsCaption := LANGhumiCloseAllTabsCaption;
+ LANGCannotDetermineDestinationEngine := LANGhuCannotDetermineDestinationEngine;
+ LANGCannotLoadFile := LANGhuCannotLoadFile;
+ LANGMountPointDevice := LANGhuMountPointDevice;
+ LANGMountSC := LANGhuMountSC;
+ LANGNoPluginsFound := LANGhuNoPluginsFound;
+ LANGPluginAbout := LANGhuPluginAbout;
+ LANGCouldntOpenURI := LANGhuCouldntOpenURI;
+ LANGPluginAboutInside := LANGhuPluginAboutInside;
+ LANGAreYouSureCloseAllTabs := LANGhuAreYouSureCloseAllTabs;
+ LANGCouldntOpenURIArchive := LANGhuCouldntOpenURIArchive;
+ LANGThereIsNoModuleAvailable := LANGhuThereIsNoModuleAvailable;
+ LANGIgnoreError := LANGhuIgnoreError;
+ LANGErrorMount := LANGhuErrorMount;
+ LANGErrorUmount := LANGhuErrorUmount;
+ LANGErrorEject := LANGhuErrorEject;
+
+ LANGMounterPrefs_Caption := LANGhuMounterPrefs_Caption;
+ LANGMounterPrefs_TitleLabelCaption := LANGhuMounterPrefs_TitleLabelCaption;
+ LANGMounterPrefs_ListViewFrameCaption := LANGhuMounterPrefs_ListViewFrameCaption;
+ LANGMounterPrefs_MountName := LANGhuMounterPrefs_MountName;
+ LANGMounterPrefs_MountPoint := LANGhuMounterPrefs_MountPoint;
+ LANGMounterPrefs_Device := LANGhuMounterPrefs_Device;
+ LANGMounterPrefs_MoveUpButtonTooltip := LANGhuMounterPrefs_MoveUpButtonTooltip;
+ LANGMounterPrefs_MoveDownButtonTooltip := LANGhuMounterPrefs_MoveDownButtonTooltip;
+ LANGMounterPrefs_UseFSTabDefaultsCheckBox := LANGhuMounterPrefs_UseFSTabDefaultsCheckBox;
+ LANGMounterPrefs_UseFSTabDefaultsCheckBoxTooltip := LANGhuMounterPrefs_UseFSTabDefaultsCheckBoxTooltip;
+ LANGMounterPrefs_ToggleModeCheckBox := LANGhuMounterPrefs_ToggleModeCheckBox;
+ LANGMounterPrefs_ToggleModeCheckBoxTooltip := LANGhuMounterPrefs_ToggleModeCheckBoxTooltip;
+ LANGMounterPrefs_PropertiesFrameCaption := LANGhuMounterPrefs_PropertiesFrameCaption;
+ LANGMounterPrefs_DisplayTextLabelCaption := LANGhuMounterPrefs_DisplayTextLabelCaption;
+ LANGMounterPrefs_MountPointLabelCaption := LANGhuMounterPrefs_MountPointLabelCaption;
+ LANGMounterPrefs_MountDeviceLabelCaption := LANGhuMounterPrefs_MountDeviceLabelCaption;
+ LANGMounterPrefs_DeviceTypeLabelCaption := LANGhuMounterPrefs_DeviceTypeLabelCaption;
+ LANGMounterPrefs_miLocalDiskCaption := LANGhuMounterPrefs_miLocalDiskCaption;
+ LANGMounterPrefs_miRemovableCaption := LANGhuMounterPrefs_miRemovableCaption;
+ LANGMounterPrefs_miCDCaption := LANGhuMounterPrefs_miCDCaption;
+ LANGMounterPrefs_miFloppyCaption := LANGhuMounterPrefs_miFloppyCaption;
+ LANGMounterPrefs_miNetworkCaption := LANGhuMounterPrefs_miNetworkCaption;
+ LANGMounterPrefs_MountCommandLabelCaption := LANGhuMounterPrefs_MountCommandLabelCaption;
+ LANGMounterPrefs_UmountCommandLabelCaption := LANGhuMounterPrefs_UmountCommandLabelCaption;
+ LANGMounterPrefs_MountCommandEntryTooltip := LANGhuMounterPrefs_MountCommandEntryTooltip;
+ LANGMounterPrefs_UmountCommandEntryTooltip := LANGhuMounterPrefs_UmountCommandEntryTooltip;
+ LANGMounterPrefs_IconLabelCaption := LANGhuMounterPrefs_IconLabelCaption;
+
+ LANGConnMgr_Caption := LANGhuConnMgr_Caption;
+ LANGConnMgr_ConnectButton := LANGhuConnMgr_ConnectButton;
+ LANGConnMgr_OpenConnection := LANGhuConnMgr_OpenConnection;
+ LANGConnMgr_NameColumn := LANGhuConnMgr_NameColumn;
+ LANGConnMgr_URIColumn := LANGhuConnMgr_URIColumn;
+ LANGConnMgr_AddConnectionButtonCaption := LANGhuConnMgr_AddConnectionButtonCaption;
+ LANGConnMgr_AddConnectionButtonTooltip := LANGhuConnMgr_AddConnectionButtonTooltip;
+ LANGConnMgr_EditButtonCaption := LANGhuConnMgr_EditButtonCaption;
+ LANGConnMgr_EditButtonTooltip := LANGhuConnMgr_EditButtonTooltip;
+ LANGConnMgr_RemoveButtonCaption := LANGhuConnMgr_RemoveButtonCaption;
+ LANGConnMgr_RemoveButtonTooltip := LANGhuConnMgr_RemoveButtonTooltip;
+ LANGConnMgr_DoYouWantDelete := LANGhuConnMgr_DoYouWantDelete;
+
+ LANGConnProp_FTP := LANGhuConnProp_FTP;
+ LANGConnProp_SFTP := LANGhuConnProp_SFTP;
+ LANGConnProp_SMB := LANGhuConnProp_SMB;
+ LANGConnProp_HTTP := LANGhuConnProp_HTTP;
+ LANGConnProp_HTTPS := LANGhuConnProp_HTTPS;
+ LANGConnProp_Other := LANGhuConnProp_Other;
+ LANGConnProp_Caption := LANGhuConnProp_Caption;
+ LANGConnProp_VFSModule := LANGhuConnProp_VFSModule;
+ LANGConnProp_URI := LANGhuConnProp_URI;
+ LANGConnProp_URIEntryTooltip := LANGhuConnProp_URIEntryTooltip;
+ LANGConnProp_DetailedInformations := LANGhuConnProp_DetailedInformations;
+ LANGConnProp_Name := LANGhuConnProp_Name;
+ LANGConnProp_Server := LANGhuConnProp_Server;
+ LANGConnProp_Username := LANGhuConnProp_Username;
+ LANGConnProp_UserNameEntryTooltip := LANGhuConnProp_UserNameEntryTooltip;
+ LANGConnProp_Password := LANGhuConnProp_Password;
+ LANGConnProp_TargetDirectory := LANGhuConnProp_TargetDirectory;
+ LANGConnProp_ServiceType := LANGhuConnProp_ServiceType;
+ LANGConnProp_MaskPassword := LANGhuConnProp_MaskPassword;
+ LANGConnProp_MenuItemCaption := LANGhuConnProp_MenuItemCaption;
+
+ LANGConnLogin_Caption := LANGhuConnLogin_Caption;
+ LANGConnLogin_Login := LANGhuConnLogin_Login;
+ LANGConnLogin_ExperimentalWarningLabelCaption := LANGhuConnLogin_ExperimentalWarningLabelCaption;
+ LANGConnLogin_Username := LANGhuConnLogin_Username;
+ LANGConnLogin_Password := LANGhuConnLogin_Password;
+ LANGConnLogin_AnonymousCheckButton := LANGhuConnLogin_AnonymousCheckButton;
+
+ LANGColumns_Caption := LANGhuColumns_Caption;
+ LANGColumns_Title := LANGhuColumns_Title;
+ LANGColumns_MoveUpButtonTooltip := LANGhuColumns_MoveUpButtonTooltip;
+ LANGColumns_MoveDownButtonTooltip := LANGhuColumns_MoveDownButtonTooltip;
+ LANGColumns_TitlesLongName := LANGhuColumns_TitlesLongName;
+ LANGColumns_TitlesLongNameExt := LANGhuColumns_TitlesLongNameExt;
+ LANGColumns_TitlesLongExt := LANGhuColumns_TitlesLongExt;
+ LANGColumns_TitlesLongSize := LANGhuColumns_TitlesLongSize;
+ LANGColumns_TitlesLongDateTime := LANGhuColumns_TitlesLongDateTime;
+ LANGColumns_TitlesLongDate := LANGhuColumns_TitlesLongDate;
+ LANGColumns_TitlesLongTime := LANGhuColumns_TitlesLongTime;
+ LANGColumns_TitlesLongUser := LANGhuColumns_TitlesLongUser;
+ LANGColumns_TitlesLongGroup := LANGhuColumns_TitlesLongGroup;
+ LANGColumns_TitlesLongAttr := LANGhuColumns_TitlesLongAttr;
+ LANGColumns_TitlesShortName := LANGhuColumns_TitlesShortName;
+ LANGColumns_TitlesShortNameExt := LANGhuColumns_TitlesShortNameExt;
+ LANGColumns_TitlesShortExt := LANGhuColumns_TitlesShortExt;
+ LANGColumns_TitlesShortSize := LANGhuColumns_TitlesShortSize;
+ LANGColumns_TitlesShortDateTime := LANGhuColumns_TitlesShortDateTime;
+ LANGColumns_TitlesShortDate := LANGhuColumns_TitlesShortDate;
+ LANGColumns_TitlesShortTime := LANGhuColumns_TitlesShortTime;
+ LANGColumns_TitlesShortUser := LANGhuColumns_TitlesShortUser;
+ LANGColumns_TitlesShortGroup := LANGhuColumns_TitlesShortGroup;
+ LANGColumns_TitlesShortAttr := LANGhuColumns_TitlesShortAttr;
+
+ LANGTestPlugin_Caption := LANGhuTestPlugin_Caption;
+ LANGTestPlugin_Title := LANGhuTestPlugin_Title;
+ LANGTestPlugin_ExperimentalWarningLabelCaption := LANGhuTestPlugin_ExperimentalWarningLabelCaption;
+ LANGTestPlugin_Plugin := LANGhuTestPlugin_Plugin;
+ LANGTestPlugin_Command := LANGhuTestPlugin_Command;
+ LANGTestPlugin_Username := LANGhuTestPlugin_Username;
+ LANGTestPlugin_Password := LANGhuTestPlugin_Password;
+ LANGTestPlugin_AnonymousCheckButton := LANGhuTestPlugin_AnonymousCheckButton;
+ LANGTestPlugin_NoPluginsFound := LANGhuTestPlugin_NoPluginsFound;
+
+ LANGRemoteWait_Caption := LANGhuRemoteWait_Caption;
+ LANGRemoteWait_OperationInProgress := LANGhuRemoteWait_OperationInProgress;
+ LANGRemoteWait_ItemsFound := LANGhuRemoteWait_ItemsFound;
+
+ LANGSearch_Bytes := LANGhuSearch_Bytes;
+ LANGSearch_kB := LANGhuSearch_kB;
+ LANGSearch_MB := LANGhuSearch_MB;
+ LANGSearch_days := LANGhuSearch_days;
+ LANGSearch_weeks := LANGhuSearch_weeks;
+ LANGSearch_months := LANGhuSearch_months;
+ LANGSearch_years := LANGhuSearch_years;
+ LANGSearch_Caption := LANGhuSearch_Caption;
+ LANGSearch_General := LANGhuSearch_General;
+ LANGSearch_Advanced := LANGhuSearch_Advanced;
+ LANGSearch_SearchResults := LANGhuSearch_SearchResults;
+ LANGSearch_SearchFor := LANGhuSearch_SearchFor;
+ LANGSearch_FileMaskEntryTooltip := LANGhuSearch_FileMaskEntryTooltip;
+ LANGSearch_SearchIn := LANGhuSearch_SearchIn;
+ LANGSearch_SearchArchivesCheckButton := LANGhuSearch_SearchArchivesCheckButton;
+ LANGSearch_FindText := LANGhuSearch_FindText;
+ LANGSearch_FindTextEntryTooltip := LANGhuSearch_FindTextEntryTooltip;
+ LANGSearch_CaseSensitiveCheckButton := LANGhuSearch_CaseSensitiveCheckButton;
+ LANGSearch_StayCurrentFSCheckButton := LANGhuSearch_StayCurrentFSCheckButton;
+ LANGSearch_CaseSensitiveMatchCheckButton := LANGhuSearch_CaseSensitiveMatchCheckButton;
+ LANGSearch_Size := LANGhuSearch_Size;
+ LANGSearch_Date := LANGhuSearch_Date;
+ LANGSearch_BiggerThan := LANGhuSearch_BiggerThan;
+ LANGSearch_SmallerThan := LANGhuSearch_SmallerThan;
+ LANGSearch_ModifiedBetweenRadioButton := LANGhuSearch_ModifiedBetweenRadioButton;
+ LANGSearch_NotModifiedAfterRadioButton := LANGhuSearch_NotModifiedAfterRadioButton;
+ LANGSearch_ModifiedLastRadioButton := LANGhuSearch_ModifiedLastRadioButton;
+ LANGSearch_ModifiedNotLastRadionButton := LANGhuSearch_ModifiedNotLastRadionButton;
+ LANGSearch_ModifiedBetweenEntry1 := LANGhuSearch_ModifiedBetweenEntry1;
+ LANGSearch_ViewButtonCaption := LANGhuSearch_ViewButtonCaption;
+ LANGSearch_NewSearchButtonCaption := LANGhuSearch_NewSearchButtonCaption;
+ LANGSearch_GoToFileButtonCaption := LANGhuSearch_GoToFileButtonCaption;
+ LANGSearch_FeedToListboxButtonCaption := LANGhuSearch_FeedToListboxButtonCaption;
+ LANGSearch_StatusSC := LANGhuSearch_StatusSC;
+ LANGSearch_Ready := LANGhuSearch_Ready;
+ LANGSearch_PreparingToSearch := LANGhuSearch_PreparingToSearch;
+ LANGSearch_SearchInProgress := LANGhuSearch_SearchInProgress;
+ LANGSearch_UserCancelled := LANGhuSearch_UserCancelled;
+ LANGSearch_SearchFinished := LANGhuSearch_SearchFinished;
+ LANGSearch_FilesFound := LANGhuSearch_FilesFound;
+ LANGSearch_And := LANGhuSearch_And;
+
+ LANGCloseOpenConnection := LANGhuCloseOpenConnection;
+ LANGDuplicateTabWarning := LANGhuDuplicateTabWarning;
+ LANGDontShowAgain := LANGhuDontShowAgain;
+ LANGSwitchOtherPanelWarning := LANGhuSwitchOtherPanelWarning;
+ LANGOpenConnectionsWarning := LANGhuOpenConnectionsWarning;
+ LANGmiDisconnect_Caption := LANGhumiDisconnect_Caption;
+ LANGDisconnectButton_Tooltip := LANGhuDisconnectButton_Tooltip;
+ LANGLeaveArchiveButton_Tooltip := LANGhuLeaveArchiveButton_Tooltip;
+ LANGOpenTerminalButton_Tooltip := LANGhuOpenTerminalButton_Tooltip;
+ LANGOpenTerminalButton_Caption := LANGhuOpenTerminalButton_Caption;
+ LANGShowTextUIDsCheckBox_Caption := LANGhuShowTextUIDsCheckBox_Caption;
+ LANGShowTextUIDsCheckBox_Tooltip := LANGhuShowTextUIDsCheckBox_Tooltip;
+
+ LANGmiNewTab_Caption := LANGhumiNewTab_Caption;
+ LANGFilePopupMenu_Properties := LANGhuFilePopupMenu_Properties;
+ LANGCommandEntry_Tooltip := LANGhuCommandEntry_Tooltip;
+ LANGmiFiles_Caption := LANGhumiFiles_Caption;
+
+ LANGPasswordButton_Tooltip := LANGhuPasswordButton_Tooltip;
+ LANGHandleRunFromArchive_Bytes := LANGhuHandleRunFromArchive_Bytes;
+ LANGHandleRunFromArchive_FileTypeDesc_Unknown := LANGhuHandleRunFromArchive_FileTypeDesc_Unknown;
+ LANGHandleRunFromArchive_NotAssociated := LANGhuHandleRunFromArchive_NotAssociated;
+ LANGHandleRunFromArchive_SelfExecutable := LANGhuHandleRunFromArchive_SelfExecutable;
+ LANGHandleRunFromArchive_CouldntCreateTemporaryDirectory := LANGhuHandleRunFromArchive_CouldntCreateTemporaryDirectory;
+ LANGFRunFromVFS_Caption := LANGhuFRunFromVFS_Caption;
+ LANGFRunFromVFS_TitleLabel := LANGhuFRunFromVFS_TitleLabel;
+ LANGFRunFromVFS_FileNameLabel := LANGhuFRunFromVFS_FileNameLabel;
+ LANGFRunFromVFS_FileTypeLabel := LANGhuFRunFromVFS_FileTypeLabel;
+ LANGFRunFromVFS_SizeLabel := LANGhuFRunFromVFS_SizeLabel;
+ LANGFRunFromVFS_PackedSizeLabel := LANGhuFRunFromVFS_PackedSizeLabel;
+ LANGFRunFromVFS_DateLabel := LANGhuFRunFromVFS_DateLabel;
+ LANGFRunFromVFS_InfoLabel := LANGhuFRunFromVFS_InfoLabel;
+ LANGFRunFromVFS_OpensWithLabel := LANGhuFRunFromVFS_OpensWithLabel;
+ LANGFRunFromVFS_ExecuteButton := LANGhuFRunFromVFS_ExecuteButton;
+ LANGFRunFromVFS_ExecuteAllButton := LANGhuFRunFromVFS_ExecuteAllButton;
+ LANGFSetPassword_Caption := LANGhuFSetPassword_Caption;
+ LANGFSetPassword_Label1_Caption := LANGhuFSetPassword_Label1_Caption;
+ LANGFSetPassword_Label2_Caption := LANGhuFSetPassword_Label2_Caption;
+ LANGFSetPassword_ShowPasswordCheckButton := LANGhuFSetPassword_ShowPasswordCheckButton;
+end;
+
+initialization
+ AddTranslation('hu_HU', @SetTranslation);
+ AddTranslation('Hu', @SetTranslation);
+ AddTranslation('HU', @SetTranslation);
+end.
diff --git a/translations/UTranslation_IT.pas b/translations/UTranslation_IT.pas
new file mode 100644
index 0000000..ad84365
--- /dev/null
+++ b/translations/UTranslation_IT.pas
@@ -0,0 +1,1255 @@
+(*
+ Tux Commander - UTranslation_IT - Italian Localization constants
+ Copyright (C) 2007 by Francesco Turco <fctk86@gmail.com>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit UTranslation_IT;
+
+interface
+
+implementation
+
+uses ULocale;
+
+const LANGitF2Button_Caption = 'F2 - Rinomina';
+ LANGitF3Button_Caption = 'F3 - Visualizza';
+ LANGitF4Button_Caption = 'F4 - Modifica';
+ LANGitF5Button_Caption = 'F5 - Copia';
+ LANGitF6Button_Caption = 'F6 - Sposta';
+ LANGitF7Button_Caption = 'F7 - CreaDir';
+ LANGitF8Button_Caption = 'F8 - Elimina';
+
+ LANGitmnuFile_Caption = '_File';
+ LANGitmnuMark_Caption = '_Marca';
+ LANGitmnuCommands_Caption = '_Comandi';
+ LANGitmnuHelp_Caption = '_Aiuto';
+ LANGitmiExit_Caption = 'E_sci';
+ LANGitmiSelectGroup_Caption = 'Seleziona _Gruppo...';
+ LANGitmiUnselectGroup_Caption = '_Deseleziona Gruppo...';
+ LANGitmiSelectAll_Caption = '_Seleziona Tutto';
+ LANGitmiUnselectAll_Caption = 'D_eseleziona Tutto';
+ LANGitmiInvertSelection_Caption = '_Inverti Selezione';
+ LANGitmiRefresh_Caption = '_Aggiorna';
+ LANGitmiAbout_Caption = '_Informazioni...';
+
+ LANGitColumn1_Caption = 'Nome';
+ LANGitColumn2_Caption = 'Est';
+ LANGitColumn3_Caption = 'Dim';
+ LANGitColumn4_Caption = 'Data';
+ LANGitColumn5_Caption = 'Attr';
+
+ LANGitExpandSelection = 'Espandi selezione';
+ LANGitShrinkSelection = 'Shrink selection';
+ LANGitNoMatchesFound = 'Nessuna occorrenza trovata';
+ LANGitNoFilesSelected = 'Nessun file selezionato!';
+ LANGitSelectedFilesDirectories = '%d file/directory selezionate';
+ LANGitDirectoryS = 'directory %s';
+ LANGitFileS = 'file %s';
+ LANGitDoYouReallyWantToDeleteTheS = 'Vuoi veramente eliminare %s ?';
+ LANGitDoYouReallyWantToDeleteTheSS = 'Vuoi veramente eliminare %s ?'#10'%s';
+ LANGitCopyFiles = 'Copia file';
+ LANGitMoveRenameFiles = 'Sposta/Rinomina file';
+ LANGitCopyDFileDirectoriesTo = 'Copia %d file/directory in';
+ LANGitMoveRenameDFileDirectoriesTo = 'Sposta/Rinomina %d file/directory in';
+ LANGitCopySC = 'Copia:';
+ LANGitMoveRenameSC = 'Sposta/Rinomina:';
+
+ LANGitQuickFind = ' Ricerca Veloce:';
+
+ LANGitAboutString = 'Tux Commander'#10'Versione %s'#10'Compilato il: %s'#10#10'Copyright (c) 2008 Tomas Bzatek'#10'E-mail: tbzatek@users.sourceforge.net'#10'Sito WEB: http://tuxcmd.sourceforge.net/';
+ LANGitAboutStringGnome = 'versione %s'#10'Compilato il: %s'#10'Sito WEB: http://tuxcmd.sourceforge.net/';
+ LANGitDiskStatFmt = '%s di %s liberi';
+ LANGitDiskStatVolNameFmt = '[%s] %s di %s liberi';
+ LANGitStatusLineFmt = '%s di %s in %d di %d file selezionati';
+ LANGitPanelStrings : array[boolean] of string = ('destra', 'sinistra');
+
+ LANGitDIR = '<DIR>';
+ LANGitErrorGettingListingForSPanel = 'Impossibile visualizzare il contenuto del pannello %s:'#10' %s'#10#10'Percorso = ''%s''';
+ LANGitErrorGettingListingForSPanelNoPath = 'Impossibile visualizzare il contenuto del pannelo %s:'#10' %s';
+ LANGitErrorCreatingNewDirectorySInSPanel = 'Impossibile creare la nuova directory ''%s'' nel pannello %s:'#10' %s';
+ LANGitErrorCreatingNewDirectorySInSPanelNoPath = 'Impossibile creare una nuova directory nel pannello %s:'#10' %s';
+ LANGitTheFileDirectory = 'Il file/directory';
+ LANGitCouldNotBeDeleted = 'non può essere eliminato';
+ LANGitCouldNotBeDeletedS = 'non può essere eliminato: %s';
+ LANGitUserCancelled = 'Azione interrotta dall''utente!';
+ LANGitTheDirectorySIsNotEmpty = 'La directory %s non è vuota!';
+ LANGitCannotCopyFile = 'Impossibile copiare il file';
+ LANGitCopyError = 'Errore nella copiatura';
+ LANGitMoveError = 'Errore nello spostamento';
+ LANGitOverwriteS = 'Sovrascrivere: %s';
+ LANGitWithFileS = 'Con il file: %s';
+ LANGitOvewriteSBytesS = '%s byte, %s';
+ LANGitTheFile = 'Il file';
+ LANGitCopy = 'Copia';
+ LANGitMove = 'Sposta';
+ LANGitTheDirectory = 'La directory';
+ LANGitTheSymbolicLink = 'Il link simbolico';
+ LANGitCannotMoveFile = 'Impossibile spostare il file';
+ LANGitCouldNotBeCreated = 'non può essere creato';
+ LANGitCouldNotBeCreatedS = 'non può essere creato: %s';
+ LANGitFromS = 'Da: %s';
+ LANGitToS = 'A: %s';
+ LANGitCannotCopyFileToItself = 'Impossibile copiare un file verso se stesso';
+ LANGitMemoryAllocationFailed = 'Errore nell''allocazione della memoria:';
+ LANGitCannotOpenSourceFile = 'Impossibile aprire il file di partenza';
+ LANGitCannotOpenDestinationFile = 'Impossibile aprire il file di destinazione';
+ LANGitCannotCloseDestinationFile = 'Impossibile chiudere il file di destinazione';
+ LANGitCannotCloseSourceFile = 'Impossibile chiudere il file di partenza';
+ LANGitCannotReadFromSourceFile = 'Impossibile leggere dal file di partenza';
+ LANGitCannotWriteToDestinationFile = 'Impossibile scrivere sul file di destinazione';
+
+ LANGitUnknownException = 'Eccezione sconosciuta';
+ LANGitNoAccess = 'Nessun accesso';
+ LANGitUnknownError = 'Errore sconosciuto';
+
+ LANGitCreateANewDirectory = 'Crea una nuova directory';
+ LANGitEnterDirectoryName = 'Digita il nome della _directory:';
+
+ LANGitOverwriteQuestion = 'Conferma sovrascrittura';
+ LANGitOverwriteButton_Caption = '_Sovrascrivi';
+ LANGitOverwriteAllButton_Caption = 'Sovrascrivi _tutti';
+ LANGitSkipButton_Caption = '_Salta';
+ LANGitOverwriteAllOlderButton_Caption = 'Sovrascrivi tutti i più _vecchi';
+ LANGitSkipAllButton_Caption = 'S_alta tutti';
+ LANGitRenameButton_Caption = '_Rinomina';
+ LANGitAppendButton_Caption = 'A_ggiungi';
+ LANGitRename = 'Rinomina';
+ LANGitRenameFile = 'Rinomina il file ''%s'' in';
+ LANGitIgnoreButton_Caption = '_Ignora';
+
+ LANGitProgress = 'Progresso';
+ LANGitCancel = '_Annulla';
+ LANGitDelete = 'Elimina:';
+
+ LANGitSpecifyFileType = '_Specifica il tipo di file:';
+
+ LANGitRemoveDirectory = 'Rimuovi directory';
+ LANGitDoYouWantToDeleteItWithAllItsFilesAndSubdirectories = 'Vuoi veramente eliminarla (compresi i file e le directory in essa contenuti)?';
+ LANGitRetry = '_Riprova';
+ LANGitDeleteButton_Caption = '_Elimina';
+ LANGitAll = '_Tutti';
+
+ LANGitCopyFilesSC = 'Copia i file:';
+ LANGitAppendQuestion = 'Vuoi veramente aggiungere il file ''%s'' a ''%s''?';
+ LANGitPreparingList = 'Preparazione della lista...';
+
+ LANGitYouMustSelectAValidFile = 'Devi selezionare un file valido!';
+ LANGitmiVerifyChecksums = '_Verifica le checksum';
+ LANGitVerifyChecksumsCaption = 'Verifica le checksum';
+ LANGitCheckButtonCaptionCheck = '_Controlla';
+ LANGitCheckButtonCaptionStop = '_Annulla';
+ LANGitFileListTooltip = '[?] - Non controllati'#10'[OK] - Checksum OK'#10'[ERR] - Checksum ERRATO'#10'[N/A] - File non disponibile';
+ LANGitFilenameColumnCaption = 'Nome del file';
+ LANGitTheFileSYouAreTryingToOpenIsQuiteBig = 'Il file ''%s'' che stai cercando di aprire è molto grosso (%s byte). Potrebbe non essere un file di checksum valido.'#10#10'Vuoi aprirlo comunque?';
+ LANGitAnErrorOccuredWhileInitializingMemoryBlock = 'Errore nell''inizializzazione dei blocchi di memoria. Chiudi qualche programma e prova ancora.';
+ LANGitAnErrorOccuredWhileOpeningFileSS = 'Errore nell''apertura del file ''%s'':'#10' %s';
+ LANGitAnErrorOccuredWhileReadingFileSS = 'Errore nella lettura del file ''%s'':'#10' %s';
+ LANGitChecksumNotChecked = '<span weight="bold">Status:</span> Non controllato';
+ LANGitChecksumChecking = '<span weight="bold">Status:</span> Controllo in corso...';
+ LANGitChecksumInterrupted = '<span weight="bold">Status:</span> Interrotto';
+ LANGitChecksumDOK = '<span weight="bold">Status:</span> %d%% OK';
+
+ LANGitmiCreateChecksumsCaption = '_Crea checksum...';
+ LANGitYouMustSelectAtLeastOneFileToCalculateChecksum = 'Devi selezionare almeno un file per poterne calcolare la checksum!';
+ LANGitCreateChecksumsCaption = 'Crea checksum';
+ LANGitCCHKSUMPage1Text = 'Stai per creare la checksum dei'#10'file selezionati. Se hai dimenticato di selezionare'#10'qualche file, chiudi questo wizard e'#10'riprova.';
+ LANGitCCHKSUMPage4Text = 'Il wizard è pronto per calcolare la checksum dei'#10'file selezionati. Questa operazione può richiedere alcuni minuti.'#10'Premi Continua per continuare.';
+ LANGitCCHKSUMPage6Text = 'Ci sono stati degli errori nel calcolare la checksum:';
+ LANGitCCHKSUMPage7Text = 'La creazione della checksum è terminata e'#10'i tuoi file sono pronti.'#10#10'Clicca "Fine" per uscire.';
+ LANGitCCHKSUMPage1Title = '<span size="xx-large" weight="ultrabold">Prepara i file per la checksum</span>';
+ LANGitCCHKSUMPage2Title = '<span size="xx-large" weight="ultrabold">Seleziona il tipo di checksum</span>';
+ LANGitCCHKSUMPage3Title = '<span size="xx-large" weight="ultrabold">Scegli il nome del file</span>';
+ LANGitCCHKSUMPage4Title = '<span size="xx-large" weight="ultrabold">Pronto per controllare</span>';
+ LANGitCCHKSUMPage5Title = '<span size="xx-large" weight="ultrabold">Processo in corso...</span>';
+ LANGitCCHKSUMPage6Title = '<span size="xx-large" weight="ultrabold">Errore!</span>';
+ LANGitCCHKSUMPage7Title = '<span size="xx-large" weight="ultrabold">Finito</span>';
+ LANGitCCHKSUMSFVFile = 'File SFV';
+ LANGitCCHKSUMMD5sumFile = 'File MD5';
+ LANGitCCHKSUMFileName = '_Nome del file:';
+ LANGitCCHKSUMCreateSeparateChecksumFiles = 'Crea file di checksum _separati';
+ LANGitCCHKSUMNowProcessingFileS = 'Sto processando il file: %s';
+ LANGitCCHKSUMFinishCaption = '_Fine';
+ LANGitCCHKSUMAreYouSureYouWantToAbortTheProcessing = 'Sei veramente sicuro di voler interrompere il processo?';
+ LANGitCCHKSUMAnErrorOccuredWhileOpeningFileSS = 'Errore nell''apertura del file ''%s'': %s'#10;
+ LANGitCCHKSUMAnErrorOccuredWhileReadingFileSS = 'Errore nella lettura del file ''%s'': %s'#10;
+ LANGitCCHKSUMAnErrorOccuredWhileWritingFileSS = 'Errore nella scrittura del file ''%s'': %s'#10;
+
+ LANGitAnErrorOccuredWhileWritingFileSS = 'Errore nella scrittura del file ''%s'':'#10' %s';
+ LANGitTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt = 'Il file di destinazione ''%s'' esiste già. Vuoi sovrascriverlo?';
+ LANGitTheTargetFileSCannotBeRemovedS = 'Il file di destinazione ''%s'' non può essere rimosso: %s';
+ LANGitMergeCaption = 'Fusione';
+ LANGitPleaseInsertNextDiskOrGiveDifferentLocation = 'Inserisci il prossimo disco oppure indica una diversa posizione:';
+ LANGitMergeOfSSucceeded = 'La fusione di ''%s'' ha avuto successo (checksum CRC OK).';
+ LANGitWarningCreatedFileFailsCRCCheck = 'Attenzione: il file creato non ha superato il test CRC!';
+ LANGitMergeOfSSucceeded_NoCRCFileAvailable = 'La fusione di ''%s'' ha avuto successo (il file CRC non è disponibile).';
+ LANGitMergeSAndAllFilesWithAscendingNamesToTheFollowingDirectory = 'Fondi ''%s'' e tutti i file con nome crescente nella seguente directory:';
+ LANGitMergeSC = 'Fondi:';
+ LANGitmiSplitFileCaption = '_Dividi File...';
+ LANGitmiMergeFilesCaption = '_Fondi File...';
+
+ LANGitSplitTheFileSToDirectory = '_Dividi il file ''%s'' nella directory:';
+ LANGitSplitSC = 'Dividi:';
+ LANGitSplitFile = 'Dividi il file';
+ LANGitBytesPerFile = '_Byte per file:';
+ LANGitAutomatic = 'Automatico';
+ LANGitDeleteFilesOnTargetDisk = '_Elimina i file dal disco di destinazione (per supporti rimovibili)';
+ LANGitSplitCaption = 'Dividi';
+ LANGitCannotOpenFileS = 'Impossibile aprire il file ''%s''';
+ LANGitCannotSplitTheFileToMoreThan999Parts = 'Impossibile suddividere il file in più di 999 parti!';
+ LANGitThereAreSomeFilesInTheTargetDirectorySDoYouWantToDeleteThem = 'Ci sono alcuni file nella directory di destinazione:'#10'%s'#10'Vuoi veramente eliminarli?';
+ LANGitThereAreDFilesInTheTargetDirectoryDoYouWantToDeleteThem = 'Ci sono %d file nella directory di destinazione. Vuoi veramente eliminarli?';
+ LANGitAnErrorOccuredWhileOperationS = 'Errore durante l''operazione: %s';
+ LANGitSplitOfSSucceeded = 'La suddivisione di ''%s'' ha avuto successo.';
+ LANGitSplitOfSFailed = 'La suddivisione di ''%s'' è fallita!';
+
+ LANGitmnuShow_Caption = 'Mostra';
+ LANGitmiShowDotFiles_Caption = 'Mostra i _dot files';
+ LANGitTheFileYouAreTryingToOpenIsQuiteBig = 'Il file che stai per aprire è molto grande. Aprirlo in un''applicazione esterna (come gedit) può causare il rallentamento del sistema.'#10'Vuoi veramente continuare?';
+ LANGitCannotExecuteSPleaseCheckTheConfiguration = 'Impossibile eseguire ''%s''. Controlla la configurazione oppure imposta correttamente l''associazione dei file.';
+ LANGitEdit = 'Modifica';
+ LANGitEnterFilenameToEdit = '_Digita il nome del file da modificare:';
+
+ LANGitmnuSettings_Caption = 'I_mpostazioni';
+ LANGitmiFileTypes_Caption = '_Tipi di file...';
+ LANGitThereIsNoApplicationAssociatedWithS = 'Non esiste alcuna applicazione associata a "%s".'#10#10'Puoi configurare Tux Commander in modo da associare un''applicazione ad un tipo di file. Vuoi associare un''applicazione a questo tipo di file?';
+ LANGitErrorExecutingCommand = 'Errore nell''esecuzione del comando!';
+ LANGitEditFileTypesCaption = 'Modifica i Tipi di File';
+ LANGitTitleLabel_Caption = '<span size="x-large" weight="ultrabold">Configurazione dei Tipi di File</span>';
+ LANGitExtensionsColumn = 'Estensioni';
+ LANGitDescriptionColumn = 'Descrizione';
+ LANGitFileTypesList = 'Lista dei tipi di file';
+ LANGitActionName = 'Nome dell''azione';
+ LANGitCommand = 'Comando';
+ LANGitSetDefaultActionButton_Caption = '_Imposta come predefinito';
+ LANGitRunInTerminalCheckBox_Caption = 'Esegui nel _Terminale';
+ LANGitAutodetectCheckBox_Caption = 'Rileva automaticamente applicazioni _grafiche';
+ LANGitBrowseButton_Caption = '_Esplora...';
+ LANGitCommandLabel_Caption = 'Co_mando:';
+ LANGitDescriptionLabel_Caption = 'D_escrizione:';
+ LANGitFNameExtLabel_Caption = 'A_ggiungi estensione:';
+ LANGitNotebookPageExtensions = 'Tipo di File';
+ LANGitNotebookPageActions = 'Azioni';
+ LANGitDefault = ' (predefinito)';
+ LANGitCannotSaveFileTypeAssociationsBecauseOtherProcess = 'Impossibile memorizzare l''associazione al tipo di file in quanto un altro processo l''ha aggiorna nel frattempo.';
+
+ LANGitDefaultColor = 'Colore P_redefinito';
+ LANGitIcon = '_Icona:';
+ LANGitBrowseForIcon = 'Ricerca un''icona';
+ LANGitSelectFileTypeColor = 'Seleziona un colore per il tipo di file';
+ LANGitColor = 'Co_lore:';
+
+ LANGitmiChangePermissions_Caption = 'Cambia i Per_messi...';
+ LANGitmiChangeOwner_Caption = 'Cambia il _Proprietario/Gruppo...';
+ LANGitmiCreateSymlink_Caption = 'Crea un link Sim_bolico...';
+ LANGitmiEditSymlink_Caption = '_Modifica link Simbolico...';
+ LANGitChmodProgress = 'Cambia i permessi:';
+ LANGitChownProgress = 'Cambia il proprietario:';
+ LANGitYouMustSelectAValidSymbolicLink = 'Devi selezionare un link simbolico valido!';
+ LANGitPopupRunS = 'E_segui %s';
+ LANGitPopupOpenS = 'A_pri %s';
+ LANGitPopupGoUp = '_Vai su';
+ LANGitPopupOpenWithS = 'Apri con %s';
+ LANGitPopupDefault = ' (predefinito)';
+ LANGitPopupOpenWith = 'A_pri con...';
+ LANGitPopupViewFile = '_Visualizza file';
+ LANGitPopupEditFile = 'Modifica file';
+ LANGitPopupMakeSymlink = 'Crea link _simbolico';
+ LANGitPopupRename = '_Rinomina';
+ LANGitPopupDelete = '_Elimina';
+ LANGitDialogChangePermissions = 'Cambia i permessi';
+ LANGitCouldNotBeChmoddedS = 'impossibile eseguire il comando chmod: %s';
+ LANGitDialogChangeOwner = 'Cambia proprietario';
+ LANGitCouldNotBeChownedS = 'impossibile eseguire il comando chown: %s';
+ LANGitDialogMakeSymlink = 'Crea un link simbolico';
+ LANGitDialogEditSymlink = 'Modifica il link simbolico';
+ LANGitFEditSymlink_Caption = 'Modifica il link simbolico';
+ LANGitFEditSymlink_SymbolicLinkFilename = 'Nome del link _Simbolico:';
+ LANGitFEditSymlink_SymbolicLinkPointsTo = 'Il link simbolico punta _verso:';
+
+ LANGitFChmod_Caption = 'Permessi di accesso';
+ LANGitFChmod_PermissionFrame = 'Permessi';
+ LANGitFChmod_FileFrame = 'File';
+ LANGitFChmod_ApplyRecursivelyFor = 'Applica _ricorsivamente per';
+ LANGitFChmod_miAllFiles = 'Tutti i file e le directory';
+ LANGitFChmod_miDirectories = 'Solo directory';
+ LANGitFChmod_OctalLabel = '_Ottale:';
+ LANGitFChmod_SUID = 'SUID - Imposta user ID in esecuzione';
+ LANGitFChmod_SGID = 'SGID - Imposta group ID in esecuzione';
+ LANGitFChmod_Sticky = 'Sticky bit';
+ LANGitFChmod_RUSR = 'RUSR - Leggi dal proprietario';
+ LANGitFChmod_WUSR = 'WUSR - Scrivi dal proprietario';
+ LANGitFChmod_XUSR = 'XUSR - Esegui/Cerca dal proprietario';
+ LANGitFChmod_RGRP = 'RGRP - Leggi dal gruppo';
+ LANGitFChmod_WGRP = 'WGRP - Scrivi dal gruppo';
+ LANGitFChmod_XGRP = 'XGRP - Esegui/Cerca dal gruppo';
+ LANGitFChmod_ROTH = 'ROTH - Leggi da altri';
+ LANGitFChmod_WOTH = 'WOTH - Scrivi da altri';
+ LANGitFChmod_XOTH = 'XOTH - Esegui/Cerca da altri';
+ LANGitFChmod_TextLabel = '<span weight="ultrabold">Testo:</span> %s';
+ LANGitFChmod_FileLabel = '<span weight="ultrabold">File:</span> %s'#10'<span weight="ultrabold">Testo:</span> %s'#10 +
+ '<span weight="ultrabold">Ottale:</span> %d'#10'<span weight="ultrabold">Proprietario:</span> %s'#10 +
+ '<span weight="ultrabold">Gruppo:</span> %s';
+
+ LANGitFChown_Caption = 'Cambia proprietario/gruppo';
+ LANGitFChown_OwnerFrame = 'Nome dell''utente';
+ LANGitFChown_GroupFrame = 'Nome del gruppo';
+ LANGitFChown_FileFrame = 'File';
+ LANGitFChown_ApplyRecursively = 'Applica _ricorsivamente';
+
+ LANGitFSymlink_Caption = 'Crea link simbolico';
+ LANGitFSymlink_ExistingFilename = 'Nome del file _esistente (il nome del file del link simbolico punterà verso):';
+ LANGitFSymlink_SymlinkFilename = 'Nome del link _simbolico:';
+
+ LANGitmnuBookmarks_Caption = '_Segnalibri';
+ LANGitmiAddBookmark_Caption = 'Aggiungi Segnalibro';
+ LANGitmiEditBookmarks_Caption = 'Modifica Segnalibri';
+ LANGitBookmarkPopupDelete_Caption = '_Elimina';
+ LANGitmiPreferences_Caption = '_Preferenze...';
+ LANGitTheCurrentDirectoryAlreadyExistsInTheBookmarksList = 'La directory corrente esiste già nella lista dei segnalibri';
+ LANGitSomeOtherInstanceChanged = 'Qualche altra istanza di Tux Commander ha cambiato la configurazione. Vuoi applicare i nuovi cambiamenti?'#10#10'Attenzione: Se premi No a questo punto, la configurazione sarà sovrascritta su questa istanza'' esci!';
+
+ LANGitPreferences_Caption = 'Preferenze';
+ LANGitPreferences_TitleLabel_Caption = '<span size="x-large" weight="ultrabold">Preferenze Applicazione</span>';
+ LANGitPreferences_GeneralPage = 'Generale';
+ LANGitPreferences_FontsPage = 'Caratteri';
+ LANGitPreferences_ColorsPage = 'Colori';
+ LANGitPreferences_RowHeight = '_Altezza Righe:';
+ LANGitPreferences_NumHistoryItems = 'Cronologia _comandi da terminale:';
+ LANGitPreferences_Default = '_Predefinito';
+ LANGitPreferences_ClearReadonlyAttribute = 'Pulisci attributo solo _lettura quando copia da CD-ROM';
+ LANGitPreferences_DisableMouseRenaming = 'Disabilita possibilità di rinominare col _mouse';
+ LANGitPreferences_ShowFiletypeIconsInList = 'Mostra icone dei tipi di _file';
+ LANGitPreferences_ExternalAppsLabel = '<span weight="ultrabold">Programmi Esterni</span>';
+ LANGitPreferences_Viewer = '_Visualizzatore:';
+ LANGitPreferences_Editor = '_Editor:';
+ LANGitPreferences_Terminal = '_Terminale:';
+ LANGitPreferences_ListFont = 'Lista Caratteri:';
+ LANGitPreferences_Change = 'Cambia...';
+ LANGitPreferences_UseDefaultFont = 'Usa font _predefinito';
+ LANGitPreferences_Foreground = 'Foreground';
+ LANGitPreferences_Background = 'Background';
+ LANGitPreferences_NormalItem = 'Elemento Normale:';
+ LANGitPreferences_SetToDefaultToUseGTKThemeColors = 'Imposta come predefinito l''uso dei colori del tema GTK';
+ LANGitPreferences_Cursor = 'Cursore:';
+ LANGitPreferences_InactiveItem = 'Elemento Inattivo:';
+ LANGitPreferences_SelectedItem = 'Elemento Selezionato:';
+ LANGitPreferences_LinkItem = 'Link simbolici:';
+ LANGitPreferences_LinkItemHint = 'Imposta come predefinita la visualizzazione dei link simbolici usando i colori normali degli elementi';
+ LANGitPreferences_DotFileItem = 'Dot files:';
+ LANGitPreferences_DotFileItemHint = 'Imposta come predefinita la visualizzazione dei dot-files usando i colori normali degli elementi';
+ LANGitPreferences_BrowseForApplication = 'Cerca un''applicazione';
+ LANGitPreferences_DefaultS = 'Predefinito: %s';
+ LANGitPreferences_SelectFont = 'Seleziona un carattere';
+
+ (*************** STRINGS ADDED TO v0.4.101 **********************************************************************************)
+ LANGitBookmarkButton_Tooltip = 'Mostra segnalibri';
+ LANGitUpButton_Tooltip = 'Vai alla directory superiore';
+ LANGitRootButton_Tooltip = 'Vai alla directory principale (/)';
+ LANGitHomeButton_Tooltip = 'Vai alla directory dell''utente (/home/user)';
+ LANGitLeftEqualButton_Tooltip = 'Carica nel pannello destro la stessa directory';
+ LANGitRightEqualButton_Tooltip = 'Carica nel pannello sinistro la stessa directory';
+ LANGitmiShowDirectorySizes_Caption = 'Mostra le dimensioni delle d_irectory';
+ LANGitmiTargetSource_Caption = '_Destinazione = Sorgente';
+ LANGitFileTypeDirectory = 'Directory';
+ LANGitFileTypeFile = 'File';
+ LANGitFileTypeMetafile = 'Questo è un meta-item comune';
+ LANGitPreferencesPanelsPage = 'Pannelli';
+ LANGitPreferencesApplicationsPage = 'Applicazioni';
+ LANGitPreferencesExperimentalPage = 'Sperimentale';
+ LANGitPreferencesSelectAllDirectoriesCheckBox_Caption = 'Seleziona _anche le directory quando selezioni tutto';
+ LANGitPreferencesNewStyleAltOCheckBox_Caption = '_Nuovo stile Alt+O';
+ LANGitPreferencesNewStyleAltOCheckBox_Tooltip = 'Resta nella stessa directory quando quando cambi la directory del pannello opposto premendo Ctrl/Alt+O';
+ LANGitPreferencesShowFuncButtonsCheckBox_Caption = 'Mostra le funzioni dei bottoni _chiave';
+ LANGitPreferencesSizeFormatLabel_Caption = 'Formato _dimensione:';
+ LANGitPreferencesmiSizeFormat1 = 'Sistema';
+ LANGitPreferencesmiSizeFormat6 = 'Raggruppato';
+ LANGitPreferencesAutodetectXApp = 'Rileva automaticamente applicazioni X';
+ LANGitPreferencesAlwaysRunInTerminal = 'Esegui sempre da terminale';
+ LANGitPreferencesNeverRunInTerminal = 'Non eseguire mai da terminale';
+ LANGitPreferencesCmdLineBehaviourLabel_Caption = '_Esegui da linea di comando:';
+ LANGitPreferencesFeatures = 'Feature';
+ LANGitPreferencesDisableMouseRename_Tooltip = 'Puoi ancora eseguire un quick-rename premendo Shift+F6';
+ LANGitPreferencesDisableFileTipsCheckBox_Caption = 'Disabilita i _tooltip';
+ LANGitPreferencesDisableFileTipsCheckBox_Tooltip = 'Non visualizzare i tooltip del pannello se il testo in una colonna è troncato';
+ LANGitPreferencesShow = 'Mostra';
+ LANGitPreferencesDirsInBoldCheckBox_Caption = 'Directory in _grassetto';
+ LANGitPreferencesDisableDirectoryBracketsCheckBox_Caption = 'Disabilita le parentesi attorno al nome delle directory';
+ LANGitPreferencesOctalPermissionsCheckBox_Caption = 'Mostra i permessi in _ottale';
+ LANGitPreferencesOctalPermissionsCheckBox_Tooltip = 'Mostra i permessi di file e directory come numeri anziché come testo (-rw-rw-rw-)';
+ LANGitPreferencesMovement = 'Movimento';
+ LANGitPreferencesLynxLikeMotionCheckBox_Caption = 'Movimento _Lynx-like';
+ LANGitPreferencesInsertMovesDownCheckBox_Caption = '_Insert muove in basso';
+ LANGitPreferencesSpaceMovesDownCheckBox_Caption = '_Space muove in alto';
+ LANGitPreferencesViewer = 'Visualizzatore';
+ LANGitPreferencesCommandSC = 'Comando:';
+ LANGitPreferencesUseInternalViewer = 'Usa il visualizzatore _interno';
+ LANGitPreferencesEditor = 'Editor';
+ LANGitPreferencesTerminal = 'Terminale';
+ LANGitPreferencesExperimentalFeatures = 'Features sperimentali';
+ LANGitPreferencesExperimentalWarningLabel_Caption = '<span weight="ultrabold">Attenzione:</span> Queste feature sono sperimentali e potrebbero non funzionare correttamente. Usale a tuo rischio!';
+ LANGitPreferencesFocusRefreshCheckBox_Caption = 'Effettua il refresh quando una finestra viene selezionata';
+ LANGitPreferencesFocusRefreshCheckBox_Tooltip = 'Al momento il refresh è molto lento';
+ LANGitPreferencesWMCompatModeCheckBox_Caption = 'Modalità compatibile _WM';
+ LANGitPreferencesWMCompatModeCheckBox_Tooltip = 'Usa se riscontri problemi con un window manager (ad esempio IceWM non effettua l''ingrandimento delle finestre correttamente)';
+ LANGitPreferencesCompatUseLibcSystemCheckBox_Caption = 'Usa libc _system() per eseguire i programmi';
+ LANGitPreferencesCompatUseLibcSystemCheckBox_Tooltip = 'Usare in caso freeze o crash nell''avvio di applicazioni esterne';
+
+ (*************** STRINGS ADDED TO v0.5.70 **********************************************************************************)
+ LANGitmiSearchCaption2 = '_Cerca...';
+ LANGitmiNoMounterBarCaption = 'No_n visualizzare la barra dei dispositivi montati';
+ LANGitmiShowOneMounterBarCaption = 'Visualizza _una barra dei dispositivi montati';
+ LANGitmiShowTwoMounterBarCaption = 'Visualizza _due barre dei dispositivi montati';
+ LANGitmnuNetworkCaption = 'R_ete';
+ LANGitmiConnectionsCaption = '_Connessioni...';
+ LANGitmiOpenConnectionCaption = '_Apri connessione...';
+ LANGitmiQuickConnectCaption = 'Connessione _veloce...';
+ LANGitmnuPluginsCaption = 'Pl_ugin';
+ LANGitmiTestPluginCaption = '_Prova plugin...';
+ LANGitmiMounterSettingsCaption = 'Impostazioni montaggio...';
+ LANGitmiColumnsCaption = 'Colonne del pannello...';
+ LANGitmiSavePositionCaption = '_Salva la posizione';
+ LANGitmiMountCaption = '_Monta';
+ LANGitmiUmountCaption = '_Smonta';
+ LANGitmiEjectCaption = '_Espelli';
+ LANGitmiDuplicateTabCaption = 'Duplica il tab corrente';
+ LANGitmiCloseTabCaption = 'Chiudi il tab corrente';
+ LANGitmiCloseAllTabsCaption = 'Chiudi tutti i tab';
+ LANGitCannotDetermineDestinationEngine = 'Impossibile determinare la destinazione. Inserisci il percorso corretto e prova ancora.';
+ LANGitCannotLoadFile = 'Impossibile caricare il file ''%s''. Controlla i permessi.';
+ LANGitMountPointDevice = 'Mount Point: %s'#10'Dispositivo: %s';
+ LANGitMountSC = 'Monta:';
+ LANGitNoPluginsFound = 'Nessun plugin trovato';
+ LANGitPluginAbout = 'Informazioni...';
+ LANGitCouldntOpenURI = 'Impossibile aprire l''URI specificato. Controlla l''URI specificato e i permessi d''accesso.';
+ LANGitPluginAboutInside = 'Plugin: %s'#10#10'%s'#10'%s';
+ LANGitAreYouSureCloseAllTabs = 'Vuoi veramente chiudere tutti i tab inattivi?';
+ LANGitCouldntOpenURIArchive = 'Impossibile aprire l''archivio. Controlla la consistenza e i permessi d''accesso.';
+ LANGitThereIsNoModuleAvailable = 'Non esistono moduli VFS disponibili che possano gestire questa connessione';
+ LANGitIgnoreError = 'Vuoi veramente ignorare l''errore? Il file sorgente verrà eliminato';
+ LANGitErrorMount = 'Impossibile montare il dispositivo ''%s'':'#10#10;
+ LANGitErrorUmount = 'Impossibile smontare il dispositivo ''%s'':'#10#10;
+ LANGitErrorEject = 'Impossibile espellere il dispositivo ''%s'':'#10#10;
+
+ LANGitMounterPrefs_Caption = 'Impostazioni del Mounter';
+ LANGitMounterPrefs_TitleLabelCaption = 'Impostazioni del Mounter';
+ LANGitMounterPrefs_ListViewFrameCaption = 'Mounter';
+ LANGitMounterPrefs_MountName = 'Mount Name';
+ LANGitMounterPrefs_MountPoint = 'Mount Point';
+ LANGitMounterPrefs_Device = 'Dispositivo';
+ LANGitMounterPrefs_MoveUpButtonTooltip = 'Sposta l''elemento su';
+ LANGitMounterPrefs_MoveDownButtonTooltip = 'Sposta l''elemento giù';
+ LANGitMounterPrefs_UseFSTabDefaultsCheckBox = 'Usa gli elementi predefiniti di _fstab';
+ LANGitMounterPrefs_UseFSTabDefaultsCheckBoxTooltip = 'Selezionando questa opzione, la barra dei dispositivi montati verrà popolata dagli elementi presenti nel file /etc/fstab (system mountlist file)';
+ LANGitMounterPrefs_ToggleModeCheckBox = 'I bottoni stanno _giù quando montati';
+ LANGitMounterPrefs_ToggleModeCheckBoxTooltip = 'Selezionando questa opzione, i bottoni della barra dei dispositivi montati resteranno giù se il dispositivo è montato; un altro clic per smontare (espellere in questo caso)';
+ LANGitMounterPrefs_PropertiesFrameCaption = 'Proprietà degli elementi del Mounter';
+ LANGitMounterPrefs_DisplayTextLabelCaption = '_Testo Visualizzato:';
+ LANGitMounterPrefs_MountPointLabelCaption = 'Mount _Point:';
+ LANGitMounterPrefs_MountDeviceLabelCaption = '_Dispositivo:';
+ LANGitMounterPrefs_DeviceTypeLabelCaption = 'T_ipo di Dispositivo:';
+ LANGitMounterPrefs_miLocalDiskCaption = 'Disco locale';
+ LANGitMounterPrefs_miRemovableCaption = 'Rimovibile';
+ LANGitMounterPrefs_miCDCaption = 'Unità CD/DVD';
+ LANGitMounterPrefs_miFloppyCaption = 'Unità Floppy';
+ LANGitMounterPrefs_miNetworkCaption = 'Rete';
+ LANGitMounterPrefs_MountCommandLabelCaption = 'Comando per il montaggio:';
+ LANGitMounterPrefs_UmountCommandLabelCaption = 'Comando per lo smontaggio:';
+ LANGitMounterPrefs_MountCommandEntryTooltip = 'Sintassi: usa %dev per sostituire il dispositivo e %dir per il mount point oppure lascia vuoto per predefinito montaggio'#10 +
+ 'Nota: presta attenzione ai comandi interattivi, Tux Commander può bloccarsi!'#10'Esempio: smbmount %dev %dir -o username=netuser,password=somepass';
+ LANGitMounterPrefs_UmountCommandEntryTooltip = 'Sintassi: usa %dev per sostituire il dispositivo e %dir per il mount point oppure lascia vuoto per predefinito smontaggio'#10'Esempio: smbumount $dir';
+ LANGitMounterPrefs_IconLabelCaption = '_Icona:';
+
+ LANGitConnMgr_Caption = 'Apri Nuova Connessione';
+ LANGitConnMgr_ConnectButton = 'Co_nnetti';
+ LANGitConnMgr_OpenConnection = 'Apri Connessione';
+ LANGitConnMgr_NameColumn = 'Nome';
+ LANGitConnMgr_URIColumn = 'URI';
+ LANGitConnMgr_AddConnectionButtonCaption = '_Aggiungi sito...';
+ LANGitConnMgr_AddConnectionButtonTooltip = 'Aggiungi nuova connessione';
+ LANGitConnMgr_EditButtonCaption = '_Modifica...';
+ LANGitConnMgr_EditButtonTooltip = 'Modifica la connessione selezionata';
+ LANGitConnMgr_RemoveButtonCaption = '_Rimuovi il sito';
+ LANGitConnMgr_RemoveButtonTooltip = 'Rimuovi la connessione selezionata';
+ LANGitConnMgr_DoYouWantDelete = 'Vuoi veramente eliminare la connessione ''%s''?';
+
+ LANGitConnProp_FTP = 'FTP';
+ LANGitConnProp_SFTP = 'SFTP (ssh subsystem)';
+ LANGitConnProp_SMB = 'Windows share (SMB)';
+ LANGitConnProp_HTTP = 'WebDAV (HTTP)';
+ LANGitConnProp_HTTPS = 'Secure WebDAV (HTTPS)';
+ LANGitConnProp_Other = 'Altro <span style="italic">(specificare l''URI)</span>';
+ LANGitConnProp_Caption = 'Proprietà Connessione';
+ LANGitConnProp_VFSModule = 'Modulo _VFS:';
+ LANGitConnProp_URI = '_URI:';
+ LANGitConnProp_URIEntryTooltip = 'Un URI corretto deve contenere un service type prefix e un indirizzo server';
+ LANGitConnProp_DetailedInformations = 'Informazioni dettagliate';
+ LANGitConnProp_Name = '_Nome:';
+ LANGitConnProp_Server = 'Ser_ver[:porta]:';
+ LANGitConnProp_Username = 'Userna_me:';
+ LANGitConnProp_UserNameEntryTooltip = 'Lascia vuoto per un login anonimo';
+ LANGitConnProp_Password = '_Password:';
+ LANGitConnProp_TargetDirectory = '_Directory di destinazione:';
+ LANGitConnProp_ServiceType = 'Tipo di _servizio:';
+ LANGitConnProp_MaskPassword = '_Nascondi password';
+ LANGitConnProp_MenuItemCaption = 'Predefinito <span style="italic">(tutti i moduli adatti)</span>';
+
+ LANGitConnLogin_Caption = 'Autenticazione richiesta';
+ LANGitConnLogin_Login = 'Login';
+ LANGitConnLogin_ExperimentalWarningLabelCaption = 'Devi effettuare il log in per accedere %s';
+ LANGitConnLogin_Username = '_Username:';
+ LANGitConnLogin_Password = '_Password:';
+ LANGitConnLogin_AnonymousCheckButton = '_Anonimo';
+
+ LANGitColumns_Caption = 'Impostazioni Colonne del Pannello';
+ LANGitColumns_Title = 'Impostazioni Colonne del Pannello';
+ LANGitColumns_MoveUpButtonTooltip = 'Sposta l''elemento su';
+ LANGitColumns_MoveDownButtonTooltip = 'Sposta l''elemento giu';
+ LANGitColumns_TitlesLongName = 'Nome';
+ LANGitColumns_TitlesLongNameExt = 'Nome + Estensione';
+ LANGitColumns_TitlesLongExt = 'Estensione';
+ LANGitColumns_TitlesLongSize = 'Dimensione';
+ LANGitColumns_TitlesLongDateTime = 'Data + Orario';
+ LANGitColumns_TitlesLongDate = 'Data';
+ LANGitColumns_TitlesLongTime = 'Orario';
+ LANGitColumns_TitlesLongUser = 'Utente';
+ LANGitColumns_TitlesLongGroup = 'Gruppo';
+ LANGitColumns_TitlesLongAttr = 'Attributi';
+ LANGitColumns_TitlesShortName = 'Nome';
+ LANGitColumns_TitlesShortNameExt = 'Nome';
+ LANGitColumns_TitlesShortExt = 'Estensione';
+ LANGitColumns_TitlesShortSize = 'Dimensione';
+ LANGitColumns_TitlesShortDateTime = 'Data';
+ LANGitColumns_TitlesShortDate = 'Data';
+ LANGitColumns_TitlesShortTime = 'Orario';
+ LANGitColumns_TitlesShortUser = 'Utente';
+ LANGitColumns_TitlesShortGroup = 'Gruppo';
+ LANGitColumns_TitlesShortAttr = 'Attributi';
+
+ LANGitTestPlugin_Caption = 'Test VFS Plugin';
+ LANGitTestPlugin_Title = 'Test VFS Plugin';
+ LANGitTestPlugin_ExperimentalWarningLabelCaption = '<span weight="ultrabold">Warning:</span> Il sottosistema VFS e i suoi plugin sono sperimentali e potrebbero contenere bachi. Usa questa funzionalità a tuo rischio!';
+ LANGitTestPlugin_Plugin = '_Plugin:';
+ LANGitTestPlugin_Command = 'Co_mando:';
+ LANGitTestPlugin_Username = '_Username:';
+ LANGitTestPlugin_Password = '_Password:';
+ LANGitTestPlugin_AnonymousCheckButton = 'Login _anonimo (non chiama VFSLogin)';
+ LANGitTestPlugin_NoPluginsFound = 'Nessun plugins trovato';
+
+ LANGitRemoteWait_Caption = 'Operazione in corso';
+ LANGitRemoteWait_OperationInProgress = 'Operazione in corso, sii paziente...';
+ LANGitRemoteWait_ItemsFound = 'Elementi trovati: %d';
+
+ LANGitSearch_Bytes = 'Byte';
+ LANGitSearch_kB = 'kB';
+ LANGitSearch_MB = 'MB';
+ LANGitSearch_days = 'giorni';
+ LANGitSearch_weeks = 'settimane';
+ LANGitSearch_months = 'mesi';
+ LANGitSearch_years = 'anni';
+ LANGitSearch_Caption = 'Trova File';
+ LANGitSearch_General = 'Generale';
+ LANGitSearch_Advanced = 'Avanzato';
+ LANGitSearch_SearchResults = 'Trova Risultati:';
+ LANGitSearch_SearchFor = 'Trova _per:';
+ LANGitSearch_FileMaskEntryTooltip = 'Suggerimento: Usa dei punto e virgola (";") per specificare più file da cercare';
+ LANGitSearch_SearchIn = 'Cerca _in:';
+ LANGitSearch_SearchArchivesCheckButton = 'Cerca _archivi';
+ LANGitSearch_FindText = 'Cerca _testo:';
+ LANGitSearch_FindTextEntryTooltip = 'Lascia vuoto per escludere il text matching'#10'Nota che stiamo usando UTF-8 nella parte GUI';
+ LANGitSearch_CaseSensitiveCheckButton = 'Cas_e sensitive';
+ LANGitSearch_StayCurrentFSCheckButton = 'Includi altri files_ystems';
+ LANGitSearch_CaseSensitiveMatchCheckButton = 'Ca_se sensitive';
+ LANGitSearch_Size = 'Dimensione';
+ LANGitSearch_Date = 'Data';
+ LANGitSearch_BiggerThan = 'Più _grande di';
+ LANGitSearch_SmallerThan = 'Più _piccolo di';
+ LANGitSearch_ModifiedBetweenRadioButton = '_Modificato tra';
+ LANGitSearch_NotModifiedAfterRadioButton = '_Non modificato dopo';
+ LANGitSearch_ModifiedLastRadioButton = 'Mod_ificato nello scorso';
+ LANGitSearch_ModifiedNotLastRadionButton = 'No_n modificato nello scorso';
+ LANGitSearch_ModifiedBetweenEntry1 = '"Usa il seguente formato per la data:" c';
+ LANGitSearch_ViewButtonCaption = '_Visualizza file';
+ LANGitSearch_NewSearchButtonCaption = '_Nuova ricerca';
+ LANGitSearch_GoToFileButtonCaption = '_Vai al file';
+ LANGitSearch_FeedToListboxButtonCaption = 'Feed to _listbox';
+ LANGitSearch_StatusSC = 'Status:';
+ LANGitSearch_Ready = 'Pronto.';
+ LANGitSearch_PreparingToSearch = 'Preparazione alla ricerca.';
+ LANGitSearch_SearchInProgress = 'Ricerca in corso:';
+ LANGitSearch_UserCancelled = 'Annullato dall''utente.';
+ LANGitSearch_SearchFinished = 'Ricerca conclusa';
+ LANGitSearch_FilesFound = '%d file trovati';
+ LANGitSearch_And = 'e';
+
+ (*************** STRINGS ADDED TO v0.5.82 **********************************************************************************)
+ LANGitCloseOpenConnection = 'Stai cercando di aprire una nuova connessione al posto di un''altra attualmente attiva. Continuando, la connessione precedente verrà chiusa e sostituita dalla nuova connessione.'#10#10'Vuoi continuare?';
+ LANGitDuplicateTabWarning = 'Stai cercando di aprire una nuova scheda da una directory remota. Tuttavia, la funzionalità "engine cloning" non è supportata. La directory nella nuova scheda punterà al filesystem locale.';
+ LANGitDontShowAgain = '_Non mostrare più questo messaggio';
+ LANGitSwitchOtherPanelWarning = 'Stai cercando di aprire una directory remota nell''altro pannello. Tuttavia, la funzionalità "engine cloning" non è supportata. La directory di destinazione non verrà modificata.';
+ LANGitOpenConnectionsWarning = 'Sono state rilevate alcune connessioni ancora aperte. Chiudendo l''applicazione, queste connessioni verranno chiuse.'#10#10'Vuoi continuare?';
+ LANGitmiDisconnect_Caption = '_Disconnetti';
+ LANGitDisconnectButton_Tooltip = 'Disconnetti la connessione attiva';
+ LANGitLeaveArchiveButton_Tooltip = 'Chiudi l''archivio corrente';
+ LANGitOpenTerminalButton_Tooltip = 'Apre una nuova finestra terminale dalla directory corrente';
+ LANGitOpenTerminalButton_Caption = 'Apre il te_rminale';
+ LANGitShowTextUIDsCheckBox_Caption = 'Mostra _UIDs testuali';
+ LANGitShowTextUIDsCheckBox_Tooltip = 'Mostra informazioni sull''Utente e sul Gruppo in forma testuale anzichè in forma numerica (UID/GID)';
+
+ (*************** STRINGS ADDED TO v0.5.100 **********************************************************************************)
+ LANGitmiNewTab_Caption = 'Nuova _scheda';
+ LANGitFilePopupMenu_Properties = '_Proprietà';
+ LANGitCommandEntry_Tooltip = 'Utilizza %s come segnaposto per file/directory';
+ LANGitmiFiles_Caption = 'Solo file';
+
+ (*************** STRINGS ADDED TO v0.6.31 **********************************************************************************)
+ LANGitPasswordButton_Tooltip = 'Archive requires password.'#10'Click to set';
+ LANGitHandleRunFromArchive_Bytes = 'bytes';
+ LANGitHandleRunFromArchive_FileTypeDesc_Unknown = '(unknown)';
+ LANGitHandleRunFromArchive_NotAssociated = '(not associated)';
+ LANGitHandleRunFromArchive_SelfExecutable = '(self-executable)';
+ LANGitHandleRunFromArchive_CouldntCreateTemporaryDirectory = 'Couldn''t create temporary directory "%s": %s.'#10#10'Please check the temporary directory settings and try it again.';
+ LANGitFRunFromVFS_Caption = 'Packed file properties';
+ LANGitFRunFromVFS_TitleLabel = 'File Properties';
+ LANGitFRunFromVFS_FileNameLabel = 'File name:';
+ LANGitFRunFromVFS_FileTypeLabel = 'File type:';
+ LANGitFRunFromVFS_SizeLabel = 'Size:';
+ LANGitFRunFromVFS_PackedSizeLabel = 'Compressed size:';
+ LANGitFRunFromVFS_DateLabel = 'Modify date:';
+ LANGitFRunFromVFS_InfoLabel = 'Opening files directly from archives is not supported. By clicking the buttons below the file (all files respectively) will be extracted to a temporary location. Temporary files will be deleted when you close Tux Commander.';
+ LANGitFRunFromVFS_OpensWithLabel = 'Open with:';
+ LANGitFRunFromVFS_ExecuteButton = 'E_xtract and open';
+ LANGitFRunFromVFS_ExecuteAllButton = 'Extract _all and open';
+ LANGitFSetPassword_Caption = 'Set password';
+ LANGitFSetPassword_Label1_Caption = 'Password required';
+ LANGitFSetPassword_Label2_Caption = 'The archive is encrypted and requires password in order to extract the data';
+ LANGitFSetPassword_ShowPasswordCheckButton = 'Un_mask password';
+
+
+
+
+(********************************************************************************************************************************)
+procedure SetTranslation;
+begin
+ LANGF2Button_Caption := LANGitF2Button_Caption;
+ LANGF3Button_Caption := LANGitF3Button_Caption;
+ LANGF4Button_Caption := LANGitF4Button_Caption;
+ LANGF5Button_Caption := LANGitF5Button_Caption;
+ LANGF6Button_Caption := LANGitF6Button_Caption;
+ LANGF7Button_Caption := LANGitF7Button_Caption;
+ LANGF8Button_Caption := LANGitF8Button_Caption;
+
+ LANGmnuFile_Caption := LANGitmnuFile_Caption;
+ LANGmnuMark_Caption := LANGitmnuMark_Caption;
+ LANGmnuCommands_Caption := LANGitmnuCommands_Caption;
+ LANGmnuHelp_Caption := LANGitmnuHelp_Caption;
+ LANGmiExit_Caption := LANGitmiExit_Caption;
+ LANGmiSelectGroup_Caption := LANGitmiSelectGroup_Caption;
+ LANGmiUnselectGroup_Caption := LANGitmiUnselectGroup_Caption;
+ LANGmiSelectAll_Caption := LANGitmiSelectAll_Caption;
+ LANGmiUnselectAll_Caption := LANGitmiUnselectAll_Caption;
+ LANGmiInvertSelection_Caption := LANGitmiInvertSelection_Caption;
+ LANGmiRefresh_Caption := LANGitmiRefresh_Caption;
+ LANGmiAbout_Caption := LANGitmiAbout_Caption;
+
+ LANGColumn1_Caption := LANGitColumn1_Caption;
+ LANGColumn2_Caption := LANGitColumn2_Caption;
+ LANGColumn3_Caption := LANGitColumn3_Caption;
+ LANGColumn4_Caption := LANGitColumn4_Caption;
+ LANGColumn5_Caption := LANGitColumn5_Caption;
+
+ LANGExpandSelection := LANGitExpandSelection;
+ LANGShrinkSelection := LANGitShrinkSelection;
+ LANGNoMatchesFound := LANGitNoMatchesFound;
+ LANGNoFilesSelected := LANGitNoFilesSelected;
+ LANGSelectedFilesDirectories := LANGitSelectedFilesDirectories;
+ LANGDirectoryS := LANGitDirectoryS;
+ LANGFileS := LANGitFileS;
+ LANGDoYouReallyWantToDeleteTheS := LANGitDoYouReallyWantToDeleteTheS;
+ LANGDoYouReallyWantToDeleteTheSS := LANGitDoYouReallyWantToDeleteTheSS;
+ LANGCopyFiles := LANGitCopyFiles;
+ LANGMoveRenameFiles := LANGitMoveRenameFiles;
+ LANGCopyDFileDirectoriesTo := LANGitCopyDFileDirectoriesTo;
+ LANGMoveRenameDFileDirectoriesTo := LANGitMoveRenameDFileDirectoriesTo;
+ LANGCopySC := LANGitCopySC;
+ LANGMoveRenameSC := LANGitMoveRenameSC;
+
+ LANGQuickFind := LANGitQuickFind;
+
+ LANGAboutString := LANGitAboutString;
+ LANGAboutStringGnome := LANGitAboutStringGnome;
+ LANGDiskStatFmt := LANGitDiskStatFmt;
+ LANGDiskStatVolNameFmt := LANGitDiskStatVolNameFmt;
+ LANGStatusLineFmt := LANGitStatusLineFmt;
+ LANGPanelStrings[False] := LANGitPanelStrings[False];
+ LANGPanelStrings[True] := LANGitPanelStrings[True];
+ LANGDIR := LANGitDIR;
+ LANGErrorGettingListingForSPanel := LANGitErrorGettingListingForSPanel;
+ LANGErrorGettingListingForSPanelNoPath := LANGitErrorGettingListingForSPanelNoPath;
+ LANGErrorCreatingNewDirectorySInSPanel := LANGitErrorCreatingNewDirectorySInSPanel;
+ LANGErrorCreatingNewDirectorySInSPanelNoPath := LANGitErrorCreatingNewDirectorySInSPanelNoPath;
+ LANGTheFileDirectory := LANGitTheFileDirectory;
+ LANGCouldNotBeDeleted := LANGitCouldNotBeDeleted;
+ LANGCouldNotBeDeletedS := LANGitCouldNotBeDeletedS;
+ LANGUserCancelled := LANGitUserCancelled;
+ LANGTheDirectorySIsNotEmpty := LANGitTheDirectorySIsNotEmpty;
+ LANGCannotCopyFile := LANGitCannotCopyFile;
+ LANGCopyError := LANGitCopyError;
+ LANGMoveError := LANGitMoveError;
+ LANGOverwriteS := LANGitOverwriteS;
+ LANGWithFileS := LANGitWithFileS;
+ LANGOvewriteSBytesS := LANGitOvewriteSBytesS;
+ LANGTheFile := LANGitTheFile;
+ LANGCopy := LANGitCopy;
+ LANGMove := LANGitMove;
+ LANGTheDirectory := LANGitTheDirectory;
+ LANGTheSymbolicLink := LANGitTheSymbolicLink;
+ LANGCannotMoveFile := LANGitCannotMoveFile;
+ LANGCouldNotBeCreated := LANGitCouldNotBeCreated;
+ LANGCouldNotBeCreatedS := LANGitCouldNotBeCreatedS;
+ LANGFromS := LANGitFromS;
+ LANGToS := LANGitToS;
+ LANGCannotCopyFileToItself := LANGitCannotCopyFileToItself;
+ LANGMemoryAllocationFailed := LANGitMemoryAllocationFailed;
+ LANGCannotOpenSourceFile := LANGitCannotOpenSourceFile;
+ LANGCannotOpenDestinationFile := LANGitCannotOpenDestinationFile;
+ LANGCannotCloseDestinationFile := LANGitCannotCloseDestinationFile;
+ LANGCannotCloseSourceFile := LANGitCannotCloseSourceFile;
+ LANGCannotReadFromSourceFile := LANGitCannotReadFromSourceFile;
+ LANGCannotWriteToDestinationFile := LANGitCannotWriteToDestinationFile;
+
+ LANGUnknownException := LANGitUnknownException;
+ LANGNoAccess := LANGitNoAccess;
+ LANGUnknownError := LANGitUnknownError;
+
+ LANGCreateANewDirectory := LANGitCreateANewDirectory;
+ LANGEnterDirectoryName := LANGitEnterDirectoryName;
+
+ LANGOverwriteQuestion := LANGitOverwriteQuestion;
+ LANGOverwriteButton_Caption := LANGitOverwriteButton_Caption;
+ LANGOverwriteAllButton_Caption := LANGitOverwriteAllButton_Caption;
+ LANGSkipButton_Caption := LANGitSkipButton_Caption;
+ LANGOverwriteAllOlderButton_Caption := LANGitOverwriteAllOlderButton_Caption;
+ LANGSkipAllButton_Caption := LANGitSkipAllButton_Caption;
+ LANGRenameButton_Caption := LANGitRenameButton_Caption;
+ LANGAppendButton_Caption := LANGitAppendButton_Caption;
+ LANGRename := LANGitRename;
+ LANGRenameFile := LANGitRenameFile;
+ LANGIgnoreButton_Caption := LANGitIgnoreButton_Caption;
+
+ LANGProgress := LANGitProgress;
+ LANGCancel := LANGitCancel;
+ LANGDelete := LANGitDelete;
+
+ LANGSpecifyFileType := LANGitSpecifyFileType;
+
+ LANGRemoveDirectory := LANGitRemoveDirectory;
+ LANGDoYouWantToDeleteItWithAllItsFilesAndSubdirectories := LANGitDoYouWantToDeleteItWithAllItsFilesAndSubdirectories;
+ LANGRetry := LANGitRetry;
+ LANGDeleteButton_Caption := LANGitDeleteButton_Caption;
+ LANGAll := LANGitAll;
+
+ LANGCopyFilesSC := LANGitCopyFilesSC;
+ LANGAppendQuestion := LANGitAppendQuestion;
+ LANGPreparingList := LANGitPreparingList;
+
+ LANGYouMustSelectAValidFile := LANGitYouMustSelectAValidFile;
+ LANGmiVerifyChecksums := LANGitmiVerifyChecksums;
+ LANGVerifyChecksumsCaption := LANGitVerifyChecksumsCaption;
+ LANGCheckButtonCaptionCheck := LANGitCheckButtonCaptionCheck;
+ LANGCheckButtonCaptionStop := LANGitCheckButtonCaptionStop;
+ LANGFileListTooltip := LANGitFileListTooltip;
+ LANGFilenameColumnCaption := LANGitFilenameColumnCaption;
+ LANGTheFileSYouAreTryingToOpenIsQuiteBig := LANGitTheFileSYouAreTryingToOpenIsQuiteBig;
+ LANGAnErrorOccuredWhileInitializingMemoryBlock := LANGitAnErrorOccuredWhileInitializingMemoryBlock;
+ LANGAnErrorOccuredWhileOpeningFileSS := LANGitAnErrorOccuredWhileOpeningFileSS;
+ LANGAnErrorOccuredWhileReadingFileSS := LANGitAnErrorOccuredWhileReadingFileSS;
+ LANGChecksumNotChecked := LANGitChecksumNotChecked;
+ LANGChecksumChecking := LANGitChecksumChecking;
+ LANGChecksumInterrupted := LANGitChecksumInterrupted;
+ LANGChecksumDOK := LANGitChecksumDOK;
+
+ LANGmiCreateChecksumsCaption := LANGitmiCreateChecksumsCaption;
+ LANGYouMustSelectAtLeastOneFileToCalculateChecksum := LANGitYouMustSelectAtLeastOneFileToCalculateChecksum;
+ LANGCreateChecksumsCaption := LANGitCreateChecksumsCaption;
+ LANGCCHKSUMPage1Text := LANGitCCHKSUMPage1Text;
+ LANGCCHKSUMPage4Text := LANGitCCHKSUMPage4Text;
+ LANGCCHKSUMPage6Text := LANGitCCHKSUMPage6Text;
+ LANGCCHKSUMPage7Text := LANGitCCHKSUMPage7Text;
+ LANGCCHKSUMPage1Title := LANGitCCHKSUMPage1Title;
+ LANGCCHKSUMPage2Title := LANGitCCHKSUMPage2Title;
+ LANGCCHKSUMPage3Title := LANGitCCHKSUMPage3Title;
+ LANGCCHKSUMPage4Title := LANGitCCHKSUMPage4Title;
+ LANGCCHKSUMPage5Title := LANGitCCHKSUMPage5Title;
+ LANGCCHKSUMPage6Title := LANGitCCHKSUMPage6Title;
+ LANGCCHKSUMPage7Title := LANGitCCHKSUMPage7Title;
+ LANGCCHKSUMSFVFile := LANGitCCHKSUMSFVFile;
+ LANGCCHKSUMMD5sumFile := LANGitCCHKSUMMD5sumFile;
+ LANGCCHKSUMFileName := LANGitCCHKSUMFileName;
+ LANGCCHKSUMCreateSeparateChecksumFiles := LANGitCCHKSUMCreateSeparateChecksumFiles;
+ LANGCCHKSUMNowProcessingFileS := LANGitCCHKSUMNowProcessingFileS;
+ LANGCCHKSUMFinishCaption := LANGitCCHKSUMFinishCaption;
+ LANGCCHKSUMAreYouSureYouWantToAbortTheProcessing := LANGitCCHKSUMAreYouSureYouWantToAbortTheProcessing;
+ LANGCCHKSUMAnErrorOccuredWhileOpeningFileSS := LANGitCCHKSUMAnErrorOccuredWhileOpeningFileSS;
+ LANGCCHKSUMAnErrorOccuredWhileReadingFileSS := LANGitCCHKSUMAnErrorOccuredWhileReadingFileSS;
+ LANGCCHKSUMAnErrorOccuredWhileWritingFileSS := LANGitCCHKSUMAnErrorOccuredWhileWritingFileSS;
+
+ LANGAnErrorOccuredWhileWritingFileSS := LANGitAnErrorOccuredWhileWritingFileSS;
+ LANGTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt := LANGitTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt;
+ LANGTheTargetFileSCannotBeRemovedS := LANGitTheTargetFileSCannotBeRemovedS;
+ LANGMergeCaption := LANGitMergeCaption;
+ LANGPleaseInsertNextDiskOrGiveDifferentLocation := LANGitPleaseInsertNextDiskOrGiveDifferentLocation;
+ LANGMergeOfSSucceeded := LANGitMergeOfSSucceeded;
+ LANGWarningCreatedFileFailsCRCCheck := LANGitWarningCreatedFileFailsCRCCheck;
+ LANGMergeOfSSucceeded_NoCRCFileAvailable := LANGitMergeOfSSucceeded_NoCRCFileAvailable;
+ LANGMergeSAndAllFilesWithAscendingNamesToTheFollowingDirectory := LANGitMergeSAndAllFilesWithAscendingNamesToTheFollowingDirectory;
+ LANGMergeSC := LANGitMergeSC;
+ LANGmiSplitFileCaption := LANGitmiSplitFileCaption;
+ LANGmiMergeFilesCaption := LANGitmiMergeFilesCaption;
+
+ LANGSplitTheFileSToDirectory := LANGitSplitTheFileSToDirectory;
+ LANGSplitSC := LANGitSplitSC;
+ LANGSplitFile := LANGitSplitFile;
+ LANGBytesPerFile := LANGitBytesPerFile;
+ LANGAutomatic := LANGitAutomatic;
+ LANGDeleteFilesOnTargetDisk := LANGitDeleteFilesOnTargetDisk;
+ LANGSplitCaption := LANGitSplitCaption;
+ LANGCannotOpenFileS := LANGitCannotOpenFileS;
+ LANGCannotSplitTheFileToMoreThan999Parts := LANGitCannotSplitTheFileToMoreThan999Parts;
+ LANGThereAreSomeFilesInTheTargetDirectorySDoYouWantToDeleteThem := LANGitThereAreSomeFilesInTheTargetDirectorySDoYouWantToDeleteThem;
+ LANGThereAreDFilesInTheTargetDirectoryDoYouWantToDeleteThem := LANGitThereAreDFilesInTheTargetDirectoryDoYouWantToDeleteThem;
+ LANGAnErrorOccuredWhileOperationS := LANGitAnErrorOccuredWhileOperationS;
+ LANGSplitOfSSucceeded := LANGitSplitOfSSucceeded;
+ LANGSplitOfSFailed := LANGitSplitOfSFailed;
+
+ LANGmnuShow_Caption := LANGitmnuShow_Caption;
+ LANGmiShowDotFiles_Caption := LANGitmiShowDotFiles_Caption;
+ LANGTheFileYouAreTryingToOpenIsQuiteBig := LANGitTheFileYouAreTryingToOpenIsQuiteBig;
+ LANGCannotExecuteSPleaseCheckTheConfiguration := LANGitCannotExecuteSPleaseCheckTheConfiguration;
+ LANGEdit := LANGitEdit;
+ LANGEnterFilenameToEdit := LANGitEnterFilenameToEdit;
+
+ LANGmnuSettings_Caption := LANGitmnuSettings_Caption;
+ LANGmiFileTypes_Caption := LANGitmiFileTypes_Caption;
+ LANGThereIsNoApplicationAssociatedWithS := LANGitThereIsNoApplicationAssociatedWithS;
+ LANGErrorExecutingCommand := LANGitErrorExecutingCommand;
+ LANGEditFileTypesCaption := LANGitEditFileTypesCaption;
+ LANGTitleLabel_Caption := LANGitTitleLabel_Caption;
+ LANGExtensionsColumn := LANGitExtensionsColumn;
+ LANGDescriptionColumn := LANGitDescriptionColumn;
+ LANGFileTypesList := LANGitFileTypesList;
+ LANGActionName := LANGitActionName;
+ LANGCommand := LANGitCommand;
+ LANGSetDefaultActionButton_Caption := LANGitSetDefaultActionButton_Caption;
+ LANGRunInTerminalCheckBox_Caption := LANGitRunInTerminalCheckBox_Caption;
+ LANGAutodetectCheckBox_Caption := LANGitAutodetectCheckBox_Caption;
+ LANGBrowseButton_Caption := LANGitBrowseButton_Caption;
+ LANGCommandLabel_Caption := LANGitCommandLabel_Caption;
+ LANGDescriptionLabel_Caption := LANGitDescriptionLabel_Caption;
+ LANGFNameExtLabel_Caption := LANGitFNameExtLabel_Caption;
+ LANGNotebookPageExtensions := LANGitNotebookPageExtensions;
+ LANGNotebookPageActions := LANGitNotebookPageActions;
+ LANGDefault := LANGitDefault;
+ LANGCannotSaveFileTypeAssociationsBecauseOtherProcess := LANGitCannotSaveFileTypeAssociationsBecauseOtherProcess;
+
+ LANGDefaultColor := LANGitDefaultColor;
+ LANGIcon := LANGitIcon;
+ LANGBrowseForIcon := LANGitBrowseForIcon;
+ LANGSelectFileTypeColor := LANGitSelectFileTypeColor;
+ LANGColor := LANGitColor;
+
+ LANGmiChangePermissions_Caption := LANGitmiChangePermissions_Caption;
+ LANGmiChangeOwner_Caption := LANGitmiChangeOwner_Caption;
+ LANGmiCreateSymlink_Caption := LANGitmiCreateSymlink_Caption;
+ LANGmiEditSymlink_Caption := LANGitmiEditSymlink_Caption;
+ LANGChmodProgress := LANGitChmodProgress;
+ LANGChownProgress := LANGitChownProgress;
+ LANGYouMustSelectAValidSymbolicLink := LANGitYouMustSelectAValidSymbolicLink;
+ LANGPopupRunS := LANGitPopupRunS;
+ LANGPopupOpenS := LANGitPopupOpenS;
+ LANGPopupGoUp := LANGitPopupGoUp;
+ LANGPopupOpenWithS := LANGitPopupOpenWithS;
+ LANGPopupDefault := LANGitPopupDefault;
+ LANGPopupOpenWith := LANGitPopupOpenWith;
+ LANGPopupViewFile := LANGitPopupViewFile;
+ LANGPopupEditFile := LANGitPopupEditFile;
+ LANGPopupMakeSymlink := LANGitPopupMakeSymlink;
+ LANGPopupRename := LANGitPopupRename;
+ LANGPopupDelete := LANGitPopupDelete;
+ LANGDialogChangePermissions := LANGitDialogChangePermissions;
+ LANGCouldNotBeChmoddedS := LANGitCouldNotBeChmoddedS;
+ LANGDialogChangeOwner := LANGitDialogChangeOwner;
+ LANGCouldNotBeChownedS := LANGitCouldNotBeChownedS;
+ LANGDialogMakeSymlink := LANGitDialogMakeSymlink;
+ LANGDialogEditSymlink := LANGitDialogEditSymlink;
+ LANGFEditSymlink_Caption := LANGitFEditSymlink_Caption;
+ LANGFEditSymlink_SymbolicLinkFilename := LANGitFEditSymlink_SymbolicLinkFilename;
+ LANGFEditSymlink_SymbolicLinkPointsTo := LANGitFEditSymlink_SymbolicLinkPointsTo;
+
+ LANGFChmod_Caption := LANGitFChmod_Caption;
+ LANGFChmod_PermissionFrame := LANGitFChmod_PermissionFrame;
+ LANGFChmod_FileFrame := LANGitFChmod_FileFrame;
+ LANGFChmod_ApplyRecursivelyFor := LANGitFChmod_ApplyRecursivelyFor;
+ LANGFChmod_miAllFiles := LANGitFChmod_miAllFiles;
+ LANGFChmod_miDirectories := LANGitFChmod_miDirectories;
+ LANGFChmod_OctalLabel := LANGitFChmod_OctalLabel;
+ LANGFChmod_SUID := LANGitFChmod_SUID;
+ LANGFChmod_SGID := LANGitFChmod_SGID;
+ LANGFChmod_Sticky := LANGitFChmod_Sticky;
+ LANGFChmod_RUSR := LANGitFChmod_RUSR;
+ LANGFChmod_WUSR := LANGitFChmod_WUSR;
+ LANGFChmod_XUSR := LANGitFChmod_XUSR;
+ LANGFChmod_RGRP := LANGitFChmod_RGRP;
+ LANGFChmod_WGRP := LANGitFChmod_WGRP;
+ LANGFChmod_XGRP := LANGitFChmod_XGRP;
+ LANGFChmod_ROTH := LANGitFChmod_ROTH;
+ LANGFChmod_WOTH := LANGitFChmod_WOTH;
+ LANGFChmod_XOTH := LANGitFChmod_XOTH;
+ LANGFChmod_TextLabel := LANGitFChmod_TextLabel;
+ LANGFChmod_FileLabel := LANGitFChmod_FileLabel;
+ LANGFChown_Caption := LANGitFChown_Caption;
+ LANGFChown_OwnerFrame := LANGitFChown_OwnerFrame;
+ LANGFChown_GroupFrame := LANGitFChown_GroupFrame;
+ LANGFChown_FileFrame := LANGitFChown_FileFrame;
+ LANGFChown_ApplyRecursively := LANGitFChown_ApplyRecursively;
+
+ LANGFSymlink_Caption := LANGitFSymlink_Caption;
+ LANGFSymlink_ExistingFilename := LANGitFSymlink_ExistingFilename;
+ LANGFSymlink_SymlinkFilename := LANGitFSymlink_SymlinkFilename;
+
+ LANGmnuBookmarks_Caption := LANGitmnuBookmarks_Caption;
+ LANGmiAddBookmark_Caption := LANGitmiAddBookmark_Caption;
+ LANGmiEditBookmarks_Caption := LANGitmiEditBookmarks_Caption;
+ LANGBookmarkPopupDelete_Caption := LANGitBookmarkPopupDelete_Caption;
+ LANGmiPreferences_Caption := LANGitmiPreferences_Caption;
+ LANGTheCurrentDirectoryAlreadyExistsInTheBookmarksList := LANGitTheCurrentDirectoryAlreadyExistsInTheBookmarksList;
+ LANGSomeOtherInstanceChanged := LANGitSomeOtherInstanceChanged;
+
+ LANGPreferences_Caption := LANGitPreferences_Caption;
+ LANGPreferences_TitleLabel_Caption := LANGitPreferences_TitleLabel_Caption;
+ LANGPreferences_GeneralPage := LANGitPreferences_GeneralPage;
+ LANGPreferences_FontsPage := LANGitPreferences_FontsPage;
+ LANGPreferences_ColorsPage := LANGitPreferences_ColorsPage;
+ LANGPreferences_RowHeight := LANGitPreferences_RowHeight;
+ LANGPreferences_NumHistoryItems := LANGitPreferences_NumHistoryItems;
+ LANGPreferences_Default := LANGitPreferences_Default;
+ LANGPreferences_ClearReadonlyAttribute := LANGitPreferences_ClearReadonlyAttribute;
+ LANGPreferences_DisableMouseRenaming := LANGitPreferences_DisableMouseRenaming;
+ LANGPreferences_ShowFiletypeIconsInList := LANGitPreferences_ShowFiletypeIconsInList;
+ LANGPreferences_ExternalAppsLabel := LANGitPreferences_ExternalAppsLabel;
+ LANGPreferences_Viewer := LANGitPreferences_Viewer;
+ LANGPreferences_Editor := LANGitPreferences_Editor;
+ LANGPreferences_Terminal := LANGitPreferences_Terminal;
+ LANGPreferences_ListFont := LANGitPreferences_ListFont;
+ LANGPreferences_Change := LANGitPreferences_Change;
+ LANGPreferences_UseDefaultFont := LANGitPreferences_UseDefaultFont;
+ LANGPreferences_Foreground := LANGitPreferences_Foreground;
+ LANGPreferences_Background := LANGitPreferences_Background;
+ LANGPreferences_NormalItem := LANGitPreferences_NormalItem;
+ LANGPreferences_SetToDefaultToUseGTKThemeColors := LANGitPreferences_SetToDefaultToUseGTKThemeColors;
+ LANGPreferences_Cursor := LANGitPreferences_Cursor;
+ LANGPreferences_InactiveItem := LANGitPreferences_InactiveItem;
+ LANGPreferences_SelectedItem := LANGitPreferences_SelectedItem;
+ LANGPreferences_LinkItem := LANGitPreferences_LinkItem;
+ LANGPreferences_LinkItemHint := LANGitPreferences_LinkItemHint;
+ LANGPreferences_DotFileItem := LANGitPreferences_DotFileItem;
+ LANGPreferences_DotFileItemHint := LANGitPreferences_DotFileItemHint;
+ LANGPreferences_BrowseForApplication := LANGitPreferences_BrowseForApplication;
+ LANGPreferences_DefaultS := LANGitPreferences_DefaultS;
+ LANGPreferences_SelectFont := LANGitPreferences_SelectFont;
+
+ LANGBookmarkButton_Tooltip := LANGitBookmarkButton_Tooltip;
+ LANGUpButton_Tooltip := LANGitUpButton_Tooltip;
+ LANGRootButton_Tooltip := LANGitRootButton_Tooltip;
+ LANGHomeButton_Tooltip := LANGitHomeButton_Tooltip;
+ LANGLeftEqualButton_Tooltip := LANGitLeftEqualButton_Tooltip;
+ LANGRightEqualButton_Tooltip := LANGitRightEqualButton_Tooltip;
+ LANGmiShowDirectorySizes_Caption := LANGitmiShowDirectorySizes_Caption;
+ LANGmiTargetSource_Caption := LANGitmiTargetSource_Caption;
+ LANGFileTypeDirectory := LANGitFileTypeDirectory;
+ LANGFileTypeFile := LANGitFileTypeFile;
+ LANGFileTypeMetafile := LANGitFileTypeMetafile;
+ LANGPreferencesPanelsPage := LANGitPreferencesPanelsPage;
+ LANGPreferencesApplicationsPage := LANGitPreferencesApplicationsPage;
+ LANGPreferencesExperimentalPage := LANGitPreferencesExperimentalPage;
+ LANGPreferencesSelectAllDirectoriesCheckBox_Caption := LANGitPreferencesSelectAllDirectoriesCheckBox_Caption;
+ LANGPreferencesNewStyleAltOCheckBox_Caption := LANGitPreferencesNewStyleAltOCheckBox_Caption;
+ LANGPreferencesNewStyleAltOCheckBox_Tooltip := LANGitPreferencesNewStyleAltOCheckBox_Tooltip;
+ LANGPreferencesShowFuncButtonsCheckBox_Caption := LANGitPreferencesShowFuncButtonsCheckBox_Caption;
+ LANGPreferencesSizeFormatLabel_Caption := LANGitPreferencesSizeFormatLabel_Caption;
+ LANGPreferencesmiSizeFormat1 := LANGitPreferencesmiSizeFormat1;
+ LANGPreferencesmiSizeFormat6 := LANGitPreferencesmiSizeFormat6;
+ LANGPreferencesAutodetectXApp := LANGitPreferencesAutodetectXApp;
+ LANGPreferencesAlwaysRunInTerminal := LANGitPreferencesAlwaysRunInTerminal;
+ LANGPreferencesNeverRunInTerminal := LANGitPreferencesNeverRunInTerminal;
+ LANGPreferencesCmdLineBehaviourLabel_Caption := LANGitPreferencesCmdLineBehaviourLabel_Caption;
+ LANGPreferencesFeatures := LANGitPreferencesFeatures;
+ LANGPreferencesDisableMouseRename_Tooltip := LANGitPreferencesDisableMouseRename_Tooltip;
+ LANGPreferencesDisableFileTipsCheckBox_Caption := LANGitPreferencesDisableFileTipsCheckBox_Caption;
+ LANGPreferencesDisableFileTipsCheckBox_Tooltip := LANGitPreferencesDisableFileTipsCheckBox_Tooltip;
+ LANGPreferencesShow := LANGitPreferencesShow;
+ LANGPreferencesDirsInBoldCheckBox_Caption := LANGitPreferencesDirsInBoldCheckBox_Caption;
+ LANGPreferencesDisableDirectoryBracketsCheckBox_Caption := LANGitPreferencesDisableDirectoryBracketsCheckBox_Caption;
+ LANGPreferencesOctalPermissionsCheckBox_Caption := LANGitPreferencesOctalPermissionsCheckBox_Caption;
+ LANGPreferencesOctalPermissionsCheckBox_Tooltip := LANGitPreferencesOctalPermissionsCheckBox_Tooltip;
+ LANGPreferencesMovement := LANGitPreferencesMovement;
+ LANGPreferencesLynxLikeMotionCheckBox_Caption := LANGitPreferencesLynxLikeMotionCheckBox_Caption;
+ LANGPreferencesInsertMovesDownCheckBox_Caption := LANGitPreferencesInsertMovesDownCheckBox_Caption;
+ LANGPreferencesSpaceMovesDownCheckBox_Caption := LANGitPreferencesSpaceMovesDownCheckBox_Caption;
+ LANGPreferencesViewer := LANGitPreferencesViewer;
+ LANGPreferencesCommandSC := LANGitPreferencesCommandSC;
+ LANGPreferencesUseInternalViewer := LANGitPreferencesUseInternalViewer;
+ LANGPreferencesEditor := LANGitPreferencesEditor;
+ LANGPreferencesTerminal := LANGitPreferencesTerminal;
+ LANGPreferencesExperimentalFeatures := LANGitPreferencesExperimentalFeatures;
+ LANGPreferencesExperimentalWarningLabel_Caption := LANGitPreferencesExperimentalWarningLabel_Caption;
+ LANGPreferencesFocusRefreshCheckBox_Caption := LANGitPreferencesFocusRefreshCheckBox_Caption;
+ LANGPreferencesFocusRefreshCheckBox_Tooltip := LANGitPreferencesFocusRefreshCheckBox_Tooltip;
+ LANGPreferencesWMCompatModeCheckBox_Caption := LANGitPreferencesWMCompatModeCheckBox_Caption;
+ LANGPreferencesWMCompatModeCheckBox_Tooltip := LANGitPreferencesWMCompatModeCheckBox_Tooltip;
+ LANGPreferencesCompatUseLibcSystemCheckBox_Caption := LANGitPreferencesCompatUseLibcSystemCheckBox_Caption;
+ LANGPreferencesCompatUseLibcSystemCheckBox_Tooltip := LANGitPreferencesCompatUseLibcSystemCheckBox_Tooltip;
+
+ LANGmiSearchCaption2 := LANGitmiSearchCaption2;
+ LANGmiNoMounterBarCaption := LANGitmiNoMounterBarCaption;
+ LANGmiShowOneMounterBarCaption := LANGitmiShowOneMounterBarCaption;
+ LANGmiShowTwoMounterBarCaption := LANGitmiShowTwoMounterBarCaption;
+ LANGmnuNetworkCaption := LANGitmnuNetworkCaption;
+ LANGmiConnectionsCaption := LANGitmiConnectionsCaption;
+ LANGmiOpenConnectionCaption := LANGitmiOpenConnectionCaption;
+ LANGmiQuickConnectCaption := LANGitmiQuickConnectCaption;
+ LANGmnuPluginsCaption := LANGitmnuPluginsCaption;
+ LANGmiTestPluginCaption := LANGitmiTestPluginCaption;
+ LANGmiMounterSettingsCaption := LANGitmiMounterSettingsCaption;
+ LANGmiColumnsCaption := LANGitmiColumnsCaption;
+ LANGmiSavePositionCaption := LANGitmiSavePositionCaption;
+ LANGmiMountCaption := LANGitmiMountCaption;
+ LANGmiUmountCaption := LANGitmiUmountCaption;
+ LANGmiEjectCaption := LANGitmiEjectCaption;
+ LANGmiDuplicateTabCaption := LANGitmiDuplicateTabCaption;
+ LANGmiCloseTabCaption := LANGitmiCloseTabCaption;
+ LANGmiCloseAllTabsCaption := LANGitmiCloseAllTabsCaption;
+ LANGCannotDetermineDestinationEngine := LANGitCannotDetermineDestinationEngine;
+ LANGCannotLoadFile := LANGitCannotLoadFile;
+ LANGMountPointDevice := LANGitMountPointDevice;
+ LANGMountSC := LANGitMountSC;
+ LANGNoPluginsFound := LANGitNoPluginsFound;
+ LANGPluginAbout := LANGitPluginAbout;
+ LANGCouldntOpenURI := LANGitCouldntOpenURI;
+ LANGPluginAboutInside := LANGitPluginAboutInside;
+ LANGAreYouSureCloseAllTabs := LANGitAreYouSureCloseAllTabs;
+ LANGCouldntOpenURIArchive := LANGitCouldntOpenURIArchive;
+ LANGThereIsNoModuleAvailable := LANGitThereIsNoModuleAvailable;
+ LANGIgnoreError := LANGitIgnoreError;
+ LANGErrorMount := LANGitErrorMount;
+ LANGErrorUmount := LANGitErrorUmount;
+ LANGErrorEject := LANGitErrorEject;
+
+ LANGMounterPrefs_Caption := LANGitMounterPrefs_Caption;
+ LANGMounterPrefs_TitleLabelCaption := LANGitMounterPrefs_TitleLabelCaption;
+ LANGMounterPrefs_ListViewFrameCaption := LANGitMounterPrefs_ListViewFrameCaption;
+ LANGMounterPrefs_MountName := LANGitMounterPrefs_MountName;
+ LANGMounterPrefs_MountPoint := LANGitMounterPrefs_MountPoint;
+ LANGMounterPrefs_Device := LANGitMounterPrefs_Device;
+ LANGMounterPrefs_MoveUpButtonTooltip := LANGitMounterPrefs_MoveUpButtonTooltip;
+ LANGMounterPrefs_MoveDownButtonTooltip := LANGitMounterPrefs_MoveDownButtonTooltip;
+ LANGMounterPrefs_UseFSTabDefaultsCheckBox := LANGitMounterPrefs_UseFSTabDefaultsCheckBox;
+ LANGMounterPrefs_UseFSTabDefaultsCheckBoxTooltip := LANGitMounterPrefs_UseFSTabDefaultsCheckBoxTooltip;
+ LANGMounterPrefs_ToggleModeCheckBox := LANGitMounterPrefs_ToggleModeCheckBox;
+ LANGMounterPrefs_ToggleModeCheckBoxTooltip := LANGitMounterPrefs_ToggleModeCheckBoxTooltip;
+ LANGMounterPrefs_PropertiesFrameCaption := LANGitMounterPrefs_PropertiesFrameCaption;
+ LANGMounterPrefs_DisplayTextLabelCaption := LANGitMounterPrefs_DisplayTextLabelCaption;
+ LANGMounterPrefs_MountPointLabelCaption := LANGitMounterPrefs_MountPointLabelCaption;
+ LANGMounterPrefs_MountDeviceLabelCaption := LANGitMounterPrefs_MountDeviceLabelCaption;
+ LANGMounterPrefs_DeviceTypeLabelCaption := LANGitMounterPrefs_DeviceTypeLabelCaption;
+ LANGMounterPrefs_miLocalDiskCaption := LANGitMounterPrefs_miLocalDiskCaption;
+ LANGMounterPrefs_miRemovableCaption := LANGitMounterPrefs_miRemovableCaption;
+ LANGMounterPrefs_miCDCaption := LANGitMounterPrefs_miCDCaption;
+ LANGMounterPrefs_miFloppyCaption := LANGitMounterPrefs_miFloppyCaption;
+ LANGMounterPrefs_miNetworkCaption := LANGitMounterPrefs_miNetworkCaption;
+ LANGMounterPrefs_MountCommandLabelCaption := LANGitMounterPrefs_MountCommandLabelCaption;
+ LANGMounterPrefs_UmountCommandLabelCaption := LANGitMounterPrefs_UmountCommandLabelCaption;
+ LANGMounterPrefs_MountCommandEntryTooltip := LANGitMounterPrefs_MountCommandEntryTooltip;
+ LANGMounterPrefs_UmountCommandEntryTooltip := LANGitMounterPrefs_UmountCommandEntryTooltip;
+ LANGMounterPrefs_IconLabelCaption := LANGitMounterPrefs_IconLabelCaption;
+
+ LANGConnMgr_Caption := LANGitConnMgr_Caption;
+ LANGConnMgr_ConnectButton := LANGitConnMgr_ConnectButton;
+ LANGConnMgr_OpenConnection := LANGitConnMgr_OpenConnection;
+ LANGConnMgr_NameColumn := LANGitConnMgr_NameColumn;
+ LANGConnMgr_URIColumn := LANGitConnMgr_URIColumn;
+ LANGConnMgr_AddConnectionButtonCaption := LANGitConnMgr_AddConnectionButtonCaption;
+ LANGConnMgr_AddConnectionButtonTooltip := LANGitConnMgr_AddConnectionButtonTooltip;
+ LANGConnMgr_EditButtonCaption := LANGitConnMgr_EditButtonCaption;
+ LANGConnMgr_EditButtonTooltip := LANGitConnMgr_EditButtonTooltip;
+ LANGConnMgr_RemoveButtonCaption := LANGitConnMgr_RemoveButtonCaption;
+ LANGConnMgr_RemoveButtonTooltip := LANGitConnMgr_RemoveButtonTooltip;
+ LANGConnMgr_DoYouWantDelete := LANGitConnMgr_DoYouWantDelete;
+
+ LANGConnProp_FTP := LANGitConnProp_FTP;
+ LANGConnProp_SFTP := LANGitConnProp_SFTP;
+ LANGConnProp_SMB := LANGitConnProp_SMB;
+ LANGConnProp_HTTP := LANGitConnProp_HTTP;
+ LANGConnProp_HTTPS := LANGitConnProp_HTTPS;
+ LANGConnProp_Other := LANGitConnProp_Other;
+ LANGConnProp_Caption := LANGitConnProp_Caption;
+ LANGConnProp_VFSModule := LANGitConnProp_VFSModule;
+ LANGConnProp_URI := LANGitConnProp_URI;
+ LANGConnProp_URIEntryTooltip := LANGitConnProp_URIEntryTooltip;
+ LANGConnProp_DetailedInformations := LANGitConnProp_DetailedInformations;
+ LANGConnProp_Name := LANGitConnProp_Name;
+ LANGConnProp_Server := LANGitConnProp_Server;
+ LANGConnProp_Username := LANGitConnProp_Username;
+ LANGConnProp_UserNameEntryTooltip := LANGitConnProp_UserNameEntryTooltip;
+ LANGConnProp_Password := LANGitConnProp_Password;
+ LANGConnProp_TargetDirectory := LANGitConnProp_TargetDirectory;
+ LANGConnProp_ServiceType := LANGitConnProp_ServiceType;
+ LANGConnProp_MaskPassword := LANGitConnProp_MaskPassword;
+ LANGConnProp_MenuItemCaption := LANGitConnProp_MenuItemCaption;
+
+ LANGConnLogin_Caption := LANGitConnLogin_Caption;
+ LANGConnLogin_Login := LANGitConnLogin_Login;
+ LANGConnLogin_ExperimentalWarningLabelCaption := LANGitConnLogin_ExperimentalWarningLabelCaption;
+ LANGConnLogin_Username := LANGitConnLogin_Username;
+ LANGConnLogin_Password := LANGitConnLogin_Password;
+ LANGConnLogin_AnonymousCheckButton := LANGitConnLogin_AnonymousCheckButton;
+
+ LANGColumns_Caption := LANGitColumns_Caption;
+ LANGColumns_Title := LANGitColumns_Title;
+ LANGColumns_MoveUpButtonTooltip := LANGitColumns_MoveUpButtonTooltip;
+ LANGColumns_MoveDownButtonTooltip := LANGitColumns_MoveDownButtonTooltip;
+ LANGColumns_TitlesLongName := LANGitColumns_TitlesLongName;
+ LANGColumns_TitlesLongNameExt := LANGitColumns_TitlesLongNameExt;
+ LANGColumns_TitlesLongExt := LANGitColumns_TitlesLongExt;
+ LANGColumns_TitlesLongSize := LANGitColumns_TitlesLongSize;
+ LANGColumns_TitlesLongDateTime := LANGitColumns_TitlesLongDateTime;
+ LANGColumns_TitlesLongDate := LANGitColumns_TitlesLongDate;
+ LANGColumns_TitlesLongTime := LANGitColumns_TitlesLongTime;
+ LANGColumns_TitlesLongUser := LANGitColumns_TitlesLongUser;
+ LANGColumns_TitlesLongGroup := LANGitColumns_TitlesLongGroup;
+ LANGColumns_TitlesLongAttr := LANGitColumns_TitlesLongAttr;
+ LANGColumns_TitlesShortName := LANGitColumns_TitlesShortName;
+ LANGColumns_TitlesShortNameExt := LANGitColumns_TitlesShortNameExt;
+ LANGColumns_TitlesShortExt := LANGitColumns_TitlesShortExt;
+ LANGColumns_TitlesShortSize := LANGitColumns_TitlesShortSize;
+ LANGColumns_TitlesShortDateTime := LANGitColumns_TitlesShortDateTime;
+ LANGColumns_TitlesShortDate := LANGitColumns_TitlesShortDate;
+ LANGColumns_TitlesShortTime := LANGitColumns_TitlesShortTime;
+ LANGColumns_TitlesShortUser := LANGitColumns_TitlesShortUser;
+ LANGColumns_TitlesShortGroup := LANGitColumns_TitlesShortGroup;
+ LANGColumns_TitlesShortAttr := LANGitColumns_TitlesShortAttr;
+
+ LANGTestPlugin_Caption := LANGitTestPlugin_Caption;
+ LANGTestPlugin_Title := LANGitTestPlugin_Title;
+ LANGTestPlugin_ExperimentalWarningLabelCaption := LANGitTestPlugin_ExperimentalWarningLabelCaption;
+ LANGTestPlugin_Plugin := LANGitTestPlugin_Plugin;
+ LANGTestPlugin_Command := LANGitTestPlugin_Command;
+ LANGTestPlugin_Username := LANGitTestPlugin_Username;
+ LANGTestPlugin_Password := LANGitTestPlugin_Password;
+ LANGTestPlugin_AnonymousCheckButton := LANGitTestPlugin_AnonymousCheckButton;
+ LANGTestPlugin_NoPluginsFound := LANGitTestPlugin_NoPluginsFound;
+
+ LANGRemoteWait_Caption := LANGitRemoteWait_Caption;
+ LANGRemoteWait_OperationInProgress := LANGitRemoteWait_OperationInProgress;
+ LANGRemoteWait_ItemsFound := LANGitRemoteWait_ItemsFound;
+
+ LANGSearch_Bytes := LANGitSearch_Bytes;
+ LANGSearch_kB := LANGitSearch_kB;
+ LANGSearch_MB := LANGitSearch_MB;
+ LANGSearch_days := LANGitSearch_days;
+ LANGSearch_weeks := LANGitSearch_weeks;
+ LANGSearch_months := LANGitSearch_months;
+ LANGSearch_years := LANGitSearch_years;
+ LANGSearch_Caption := LANGitSearch_Caption;
+ LANGSearch_General := LANGitSearch_General;
+ LANGSearch_Advanced := LANGitSearch_Advanced;
+ LANGSearch_SearchResults := LANGitSearch_SearchResults;
+ LANGSearch_SearchFor := LANGitSearch_SearchFor;
+ LANGSearch_FileMaskEntryTooltip := LANGitSearch_FileMaskEntryTooltip;
+ LANGSearch_SearchIn := LANGitSearch_SearchIn;
+ LANGSearch_SearchArchivesCheckButton := LANGitSearch_SearchArchivesCheckButton;
+ LANGSearch_FindText := LANGitSearch_FindText;
+ LANGSearch_FindTextEntryTooltip := LANGitSearch_FindTextEntryTooltip;
+ LANGSearch_CaseSensitiveCheckButton := LANGitSearch_CaseSensitiveCheckButton;
+ LANGSearch_StayCurrentFSCheckButton := LANGitSearch_StayCurrentFSCheckButton;
+ LANGSearch_CaseSensitiveMatchCheckButton := LANGitSearch_CaseSensitiveMatchCheckButton;
+ LANGSearch_Size := LANGitSearch_Size;
+ LANGSearch_Date := LANGitSearch_Date;
+ LANGSearch_BiggerThan := LANGitSearch_BiggerThan;
+ LANGSearch_SmallerThan := LANGitSearch_SmallerThan;
+ LANGSearch_ModifiedBetweenRadioButton := LANGitSearch_ModifiedBetweenRadioButton;
+ LANGSearch_NotModifiedAfterRadioButton := LANGitSearch_NotModifiedAfterRadioButton;
+ LANGSearch_ModifiedLastRadioButton := LANGitSearch_ModifiedLastRadioButton;
+ LANGSearch_ModifiedNotLastRadionButton := LANGitSearch_ModifiedNotLastRadionButton;
+ LANGSearch_ModifiedBetweenEntry1 := LANGitSearch_ModifiedBetweenEntry1;
+ LANGSearch_ViewButtonCaption := LANGitSearch_ViewButtonCaption;
+ LANGSearch_NewSearchButtonCaption := LANGitSearch_NewSearchButtonCaption;
+ LANGSearch_GoToFileButtonCaption := LANGitSearch_GoToFileButtonCaption;
+ LANGSearch_FeedToListboxButtonCaption := LANGitSearch_FeedToListboxButtonCaption;
+ LANGSearch_StatusSC := LANGitSearch_StatusSC;
+ LANGSearch_Ready := LANGitSearch_Ready;
+ LANGSearch_PreparingToSearch := LANGitSearch_PreparingToSearch;
+ LANGSearch_SearchInProgress := LANGitSearch_SearchInProgress;
+ LANGSearch_UserCancelled := LANGitSearch_UserCancelled;
+ LANGSearch_SearchFinished := LANGitSearch_SearchFinished;
+ LANGSearch_FilesFound := LANGitSearch_FilesFound;
+ LANGSearch_And := LANGitSearch_And;
+
+ LANGCloseOpenConnection := LANGitCloseOpenConnection;
+ LANGDuplicateTabWarning := LANGitDuplicateTabWarning;
+ LANGDontShowAgain := LANGitDontShowAgain;
+ LANGSwitchOtherPanelWarning := LANGitSwitchOtherPanelWarning;
+ LANGOpenConnectionsWarning := LANGitOpenConnectionsWarning;
+ LANGmiDisconnect_Caption := LANGitmiDisconnect_Caption;
+ LANGDisconnectButton_Tooltip := LANGitDisconnectButton_Tooltip;
+ LANGLeaveArchiveButton_Tooltip := LANGitLeaveArchiveButton_Tooltip;
+ LANGOpenTerminalButton_Tooltip := LANGitOpenTerminalButton_Tooltip;
+ LANGOpenTerminalButton_Caption := LANGitOpenTerminalButton_Caption;
+ LANGShowTextUIDsCheckBox_Caption := LANGitShowTextUIDsCheckBox_Caption;
+ LANGShowTextUIDsCheckBox_Tooltip := LANGitShowTextUIDsCheckBox_Tooltip;
+
+ LANGmiNewTab_Caption := LANGitmiNewTab_Caption;
+ LANGFilePopupMenu_Properties := LANGitFilePopupMenu_Properties;
+ LANGCommandEntry_Tooltip := LANGitCommandEntry_Tooltip;
+ LANGmiFiles_Caption := LANGitmiFiles_Caption;
+
+ LANGPasswordButton_Tooltip := LANGitPasswordButton_Tooltip;
+ LANGHandleRunFromArchive_Bytes := LANGitHandleRunFromArchive_Bytes;
+ LANGHandleRunFromArchive_FileTypeDesc_Unknown := LANGitHandleRunFromArchive_FileTypeDesc_Unknown;
+ LANGHandleRunFromArchive_NotAssociated := LANGitHandleRunFromArchive_NotAssociated;
+ LANGHandleRunFromArchive_SelfExecutable := LANGitHandleRunFromArchive_SelfExecutable;
+ LANGHandleRunFromArchive_CouldntCreateTemporaryDirectory := LANGitHandleRunFromArchive_CouldntCreateTemporaryDirectory;
+ LANGFRunFromVFS_Caption := LANGitFRunFromVFS_Caption;
+ LANGFRunFromVFS_TitleLabel := LANGitFRunFromVFS_TitleLabel;
+ LANGFRunFromVFS_FileNameLabel := LANGitFRunFromVFS_FileNameLabel;
+ LANGFRunFromVFS_FileTypeLabel := LANGitFRunFromVFS_FileTypeLabel;
+ LANGFRunFromVFS_SizeLabel := LANGitFRunFromVFS_SizeLabel;
+ LANGFRunFromVFS_PackedSizeLabel := LANGitFRunFromVFS_PackedSizeLabel;
+ LANGFRunFromVFS_DateLabel := LANGitFRunFromVFS_DateLabel;
+ LANGFRunFromVFS_InfoLabel := LANGitFRunFromVFS_InfoLabel;
+ LANGFRunFromVFS_OpensWithLabel := LANGitFRunFromVFS_OpensWithLabel;
+ LANGFRunFromVFS_ExecuteButton := LANGitFRunFromVFS_ExecuteButton;
+ LANGFRunFromVFS_ExecuteAllButton := LANGitFRunFromVFS_ExecuteAllButton;
+ LANGFSetPassword_Caption := LANGitFSetPassword_Caption;
+ LANGFSetPassword_Label1_Caption := LANGitFSetPassword_Label1_Caption;
+ LANGFSetPassword_Label2_Caption := LANGitFSetPassword_Label2_Caption;
+ LANGFSetPassword_ShowPasswordCheckButton := LANGitFSetPassword_ShowPasswordCheckButton;
+end;
+
+initialization
+ AddTranslation('IT', @SetTranslation);
+ AddTranslation('it_IT', @SetTranslation);
+end.
diff --git a/translations/UTranslation_PL.pas b/translations/UTranslation_PL.pas
new file mode 100644
index 0000000..df29a28
--- /dev/null
+++ b/translations/UTranslation_PL.pas
@@ -0,0 +1,1108 @@
+(*
+ Tux Commander - UTranslation_PL - Polish Localization constants
+ Copyright (C) 2007 by Dominik Zabłotny <doza@sztorm.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit UTranslation_PL;
+
+interface
+
+implementation
+
+uses ULocale;
+
+const LANGplF2Button_Caption = 'F2 - Zmień nazwę';
+ LANGplF3Button_Caption = 'F3 - Podejrzyj';
+ LANGplF4Button_Caption = 'F4 - Edytuj';
+ LANGplF5Button_Caption = 'F5 - Kopiuj';
+ LANGplF6Button_Caption = 'F6 - Przenieś';
+ LANGplF7Button_Caption = 'F7 - Utw katalog';
+ LANGplF8Button_Caption = 'F8 - Usuń';
+
+ LANGplmnuFile_Caption = '_Plik';
+ LANGplmnuMark_Caption = '_Zaznaczenie';
+ LANGplmnuCommands_Caption = '_Polecenia';
+ LANGplmnuHelp_Caption = '_Pomoc';
+ LANGplmiExit_Caption = 'W_yjście';
+ LANGplmiSelectGroup_Caption = 'Zaznacz _grupę...';
+ LUnselectGroup_Caption = '_Odznacz grupę...';
+ LANGplmiSelectAll_Caption = '_Zaznacz wszystkie';
+ LANGplmiUnselectAll_Caption = 'O_dznacz wszystkie';
+ LANGplmiInvertSelection_Caption = '_Odwróć zaznaczenie';
+ LANGplmiRefresh_Caption = '_Odśwież';
+ LANGplmiAbout_Caption = '_Informacje o...';
+
+ LANGplColumn1_Caption = 'Nazwa';
+ LANGplColumn2_Caption = 'Rozsz.';
+ LANGplColumn3_Caption = 'Rozmiar';
+ LANGplColumn4_Caption = 'Data';
+ LANGplColumn5_Caption = 'Atr.';
+
+ LANGplExpandSelection = 'Powiększ zaznaczenie';
+ LANGplShrinkSelection = 'Zmniejsz zaznaczenie';
+ LANGplNoMatchesFound = 'Nie znaleziono pasujących';
+ LANGplNoFilesSelected = 'Nie zaznaczono plików!';
+ LANGplSelectedFilesDirectories = 'Zaznaczono %d plików/katalogów';
+ LANGplDirectoryS = 'katalog %s';
+ LANGplFileS = 'plik %s';
+ LANGplDoYouReallyWantToDeleteTheS = 'Czy na pewno chcesz usunąć %s ?';
+ LANGplDoYouReallyWantToDeleteTheSS = 'Czy na pewno chcesz usunąć %s ?'#10'%s';
+ LANGplCopyFiles = 'Kopiuj pliki';
+ LANGplMoveRenameFiles = 'Przenieś/Zmień nazwę';
+ LANGplCopyDFileDirectoriesTo = 'Kopiuj %d plików/katalogów do';
+ LANGplMoveRenameDFileDirectoriesTo = 'Przenieś/Zmień nazwę %d plików/katalogów do';
+ LANGplCopySC = 'Kopiuj:';
+ LANGplMoveRenameSC = 'Przenieś/Zmień nazwę:';
+
+ LANGplQuickFind = ' Szybkie szukanie:';
+
+ LANGplAboutString = 'Tux Commander'#10'Wersja %s'#10'Data kompilacji: %s'#10#10'Copyright (c) 2008 Tomas Bzatek'#10'E-mail: tbzatek@users.sourceforge.net'#10'Strona domowa: http://tuxcmd.sourceforge.net/';
+ LANGplAboutStringGnome = 'wersja %s'#10'Data kompilacji: %s'#10'Strona domowa: http://tuxcmd.sourceforge.net/';
+ LANGplDiskStatFmt = 'Wolnych %s z %s';
+ LANGplDiskStatVolNameFmt = '[%s] %s z %s wolnych';
+ LANGplStatusLineFmt = 'Wybrano %s z %s w %d z %d plików';
+ LANGplPanelStrings : array[boolean] of string = ('prawy', 'lewy');
+
+ LANGplErrorGettingListingForSPanel = 'Błąd przy pobieraniu listy plików (panel %s):'#10' %s'#10#10'Ścieżka = ''%s''';
+ LANGplErrorGettingListingForSPanelNoPath = 'Błąd przy pobieraniu listy plików (panel %s):'#10' %s';
+ LANGplErrorCreatingNewDirectorySInSPanel = 'Błąd przy tworzeniu katalogu ''%s'' (panel %s):'#10' %s';
+ LANGplErrorCreatingNewDirectorySInSPanelNoPath = 'Błąd przy tworzeniu katalogu (panel %s):'#10' %s';
+ LANGplTheFileDirectory = 'Plik/katalog';
+ LANGplCouldNotBeDeleted = 'nie mógł zostać usunięty';
+ LANGplCouldNotBeDeletedS = 'nie mógł zostać usunięty: %s';
+ LANGplUserCancelled = 'Anulowane przez użytkownika!';
+ LANGplTheDirectorySIsNotEmpty = 'Katalog %s nie jest pusty!';
+ LANGplCannotCopyFile = 'Nie można skopiować pliku';
+ LANGplCopyError = 'Błąd kopiowania';
+ LANGplMoveError = 'Błąd przenoszenia';
+ LANGplOverwriteS = 'Nadpisać: %s';
+ LANGplWithFileS = 'plikiem: %s';
+ LANGplOvewriteSBytesS = '%s bajtów, %s';
+ LANGplTheFile = 'Plik';
+ LANGplCopy = 'Kopiuj';
+ LANGplMove = 'Przenieś';
+ LANGplTheDirectory = 'Katalog';
+ LANGplTheSymbolicLink = 'Dowiązanie symboliczne';
+ LANGplCannotMoveFile = 'Nie można przenieść pliku';
+ LANGplCouldNotBeCreated = 'nie mógł zostać utworzony';
+ LANGplCouldNotBeCreatedS = 'nie mógł zostać utworzony: %s';
+ LANGplFromS = 'Z: %s';
+ LANGplToS = 'Do: %s';
+ LANGplCannotCopyFileToItself = 'Nie można skopiować pliku na ten sam plik';
+ LANGplMemoryAllocationFailed = 'Błąd alokacji pamięci:';
+ LANGplCannotOpenSourceFile = 'Nie można otworzyć pliku źródłowego';
+ LANGplCannotOpenDestinationFile = 'Nie można otworzyć pliku docelowego';
+ LANGplCannotCloseDestinationFile = 'Nie można zamknąć pliku docelowego';
+ LANGplCannotCloseSourceFile = 'Nie można zamknąć pliku źródłowego';
+ LANGplCannotReadFromSourceFile = 'Nie można odczytać pliku źródłowego'';liku docelowego';
+
+ LANGplUnknownException = 'Nieznany wyjątek';
+ LANGplNoAccess = 'Brak dostępu';
+ LANGplUnknownError = 'Nieznany błąd';
+
+ LANGplCreateANewDirectory = 'Utwórz nowy katalog';
+ LANGplEnterDirectoryName = 'Podaj nazwę _katalogu:';
+
+ LANGplOverwriteQuestion = 'Nadpisanie pliku';
+ LANGplOverwriteButton_Caption = '_Nadpisz';
+ LANGplOverwriteAllButton_Caption = 'Nadpisz _wszystkie';
+ LANGplSkipButton_Caption = '_Pomiń';
+ LANGplOverwriteAllOlderButton_Caption = 'Nadpisz wszystkie _starsze';
+ LANGplSkipAllButton_Caption = '_Pomiń wszystkie';
+ LANGplRenameButton_Caption = 'Zmień n_azwę';
+ LANGplAppendButton_Caption = 'D_ołącz';
+ LANGplRename = 'Zmień nazwę';
+ LANGplRenameFile = 'Zmień nazwę pliku ''%s'' na';
+ LANGplIgnoreButton_Caption = 'Z_ignoruj';
+
+ LANGplProgress = 'Postęp';
+ LANGplCancel = '_Anuluj';
+ LANGplDelete = 'Usuń:';
+
+ LANGplSpecifyFileType = '_Podaj typ pliku:';
+
+ LANGplRemoveDirectory = 'Usuń katalog';
+ LANGplDoYouWantToDeleteItWithAllItsFilesAndSubdirectories = 'Czy chcesz go usunąć razem z zawartymi plikami i katalogami?';
+ LANGplRetry = '_Ponów';
+ LANGplDeleteButton_Caption = '_Usuń';
+ LANGplAll = '_Wszystkie';
+
+ LANGplCopyFilesSC = 'Kopiuj pliki:';
+ LANGplAppendQuestion = 'Czy jesteś pewien, że chcesz dołączyć plik ''%s'' do ''%s''?';
+ LANGplPreparingList = 'Przygotowuję listę...';
+
+ LANGplYouMustSelectAValidFile = 'Musisz wybrać prawidłowy plik!';
+ LANGplmiVerifyChecksums = '_Sprawdź sumy kontrolne';
+ LANGplVerifyChecksumsCaption = 'Sprawdź sumy kontrolne';
+ LANGplCheckButtonCaptionCheck = '_Sprawdź';
+ LANGplCheckButtonCaptionStop = '_Zatrzymaj';
+ LANGplFileListTooltip = '[?] - Nie sprawdzone'#10'[OK] - Suma prawidłowa'#10'[ERR] - Suma błędna'#10'[N/A] - Plik niedostępny';
+ LANGplFilenameColumnCaption = 'Nazwa pliku';
+ LANGplTheFileSYouAreTryingToOpenIsQuiteBig = 'Plik ''t dość spory (%s bajtów). Być może nie jest to prawidłowy plik z sumą kontrolną.'#10#10'Czy chcesz go pomimo tego otworzyć?';
+ LANGplAnErrorOccuredWhileInitializingMemoryBlock = 'Wystąpił błąd podczas inicjalizacji bloku pamięci. Zamknij kilka innych programów i spróbuj ponownie.';
+ LANGplAnErrorOccuredWhileOpeningFileSS = 'Wystąpił błąd podczas otwierania pliku ''%s'':'#10' %s';
+ LANGplAnErrorOccuredWhileReadingFileSS = 'Wystąpił błąd podczas odczytu pliku ''%s'':'#10' %s';
+ LANGplChecksumNotChecked = '<span weight="bold">Stan</span> Nie sprawdzone';
+ LANGplChecksumChecking = '<span weight="bold">Stan:</span> Trwa sprawdzanie...';
+ LANGplChecksumInterrupted = '<span weight="bold">Stan:</span> Przerwane';
+ LANGplChecksumDOK = '<span weight="bold">Stan:</span> %d%% OK';
+
+ LANGplmiCreateChecksumsCaption = '_Utwórz sumy kontrolne...';
+ LANGplYouMustSelectAtLeastOneFileToCalculateChecksum = 'Musuisz zaznaczyć przynajmniej jeden plik, aby liczyć sumy kontrolne!';
+ LANGplCreateChecksumsCaption = 'Utwórz sumy kontrolne';
+ LANGplCCHKSUMPage1Text = 'Zamierzasz wyznaczyć sumy kontrolne dla'#10'wybranych plików. Jeśli nie zaznaczyłeś'#10'wszystkich plików, które chciałeś, zamknij tego druida i'#10'zaznacz więcej plików.';
+ LANGplCCHKSUMPage4Text = 'Druid jest gotów do wyznaczenia sum kontrolnych dla zaznaczonych plików.'#10' Ta operacja może zająć kilka minut.'#10'Naciśnij Naprzód, aby kontynuować.';
+ LANGplCCHKSUMPage6Text = 'Wystąpił błąd podczas wyznaczania sum kontrolnych:';
+ LANGplCCHKSUMPage7Text = 'Tworzenie sum kontrolnych zostało ukończone'#10'twoje pliki są gotowe.'#10#10'Naciśnij "Zakończ" aby zamknąć okno.';
+ LANGplCCHKSUMPage1Title = '<span size="xx-large" weight="ultrabold">Przygotuj pliki</span>';
+ LANGplCCHKSUMPage2Title = '<span size="xx-large" weight="ultrabold">Wybierz typ sumy kontrolnej</span>';
+ LANGplCCHKSUMPage3Title = '<span size="xx-large" weight="ultrabold">Gotowy do obliczenia</span>';
+ LANGplCCHKSUMPage5Title = '<span size="xx-large" weight="ultrabold">Przetwarzanie...</span>';
+ LANGplCCHKSUMPage6Title = '<span size="xx-large" weight="ultrabold">Błąd!</span>';
+ LANGplCCHKSUMPage7Title = '<span size="xx-large" weight="ultrabold">Ukończone</span>';
+ LANGplCCHKSUMSFVFile = 'Plik SFV';
+ LANGplCCHKSUMMD5sumFile = 'Plik MD5sum';
+ LANGplCCHKSUMFileName = 'Nazwa _Pliku:';
+ LANGplCCHKSUMCreateSeparateChecksumFiles = 'Utwórz _osobne pliki sum kontrolnych';
+ LANGplCCHKSUMNowProcessingFileS = 'Trwa przetwarzanie pliku: %s';
+ LANGplCCHKSUMFinishCaption = '_Zakończ';
+ LANGplCCHKSUMAreYouSureYouWantToAbortTheProcessing = 'Czy jesteś pewien, że chcesz przerwać obliczenia?';
+ LANGplCCHKSUMAnErrorOccuredWhileOpeningFileSS = 'Wystąpił błąd przy otwieraniu pliku ''%s'': %s'#10;
+ LANGplCCHKSUMAnErrorOccuredWhileReadingFileSS = 'Wystąpił błąd przy odczycie pliku ''%s'': %s'#10;
+ LANGplCCHKSUMAnErrorOccuredWhileWritingFileSS = 'Wystąpił błąd przy zapisie pliku ''%s'': %s'#10;
+
+ LANGplAnErrorOccuredWhileWritingFileSS = 'Wystąpił błąd przy zapisie pliku ''%s'':'#10' %s';
+ LANGplTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt = 'Docelowy plik ''%s'' już istnieje. Czy chcesz go nadpisać?';
+ LANGplTheTargetFileSCannotBeRemovedS = 'Nie można usunąć docelowego pliku ''%s'': %s';
+ LANGplMergeCaption = 'Połącz';
+ LANGplPleaseInsertNextDiskOrGiveDifferentLocation = 'Włóż następny nośnik, albo podaj inną lokalizację:';
+ LANGplMergeOfSSucceeded = 'Połączenie ''%s'' udane (Suma kontolna CRC OK).';
+ LANGplWarningCreatedFileFailsCRCCheck = 'Ostrzeżenie: Utworzony plik nie przeszedł testu CRC!';
+ LANGplMergeOfSSucceeded_NoCRCFileAvailable = 'Połączenie ''%s'' udane (brak CRC).';
+ LANGplMergeSAndAllFilesWithAscendingNamesToTheFollowingDirectory = 'Połącz ''%s'' i wszystkie pliki z kolejnymi nazwami, ';
+ LANGplPopupDefault = ' (domyślnie)';
+ LANGplPopupOpenWith = 'O_twórz z...';
+ LANGplPopupViewFile = '_Podejrzyj plik';
+ LANGplPopupEditFile = 'Ed_ytuj plik';
+ LANGplPopupMakeSymlink = 'Utwórz dowiązanie _symboliczne';
+ LANGplPopupRename = '_Zmień nazwę';
+ LANGplPopupDelete = '_Usuń';
+ LANGplDialogChangePermissions = 'Zmień uprawnienia';
+ LANGplCouldNotBeChmoddedS = 'nie można zmienić uprawnień: %s';
+ LANGplDialogChangeOwner = 'Zmień właściciela';
+ LANGplCouldNotBeChownedS = 'nie można zmienić właściciela: %s';
+ LANGplDialogMakeSymlink = 'Utwórz dowiązanie symboliczne';
+ LANGplDialogEditSymlink = 'Edytuj dowiązanie symboliczne';
+ LANGplFEditSymlink_Caption = 'Edytuj dowiązanie symboliczne';
+ LANGplFEditSymlink_SymbolicLinkFilename = 'Nazwa pliku dowiązania _symboliczne:';
+ LANGplFEditSymlink_SymbolicLinkPointsTo = 'Dowiązanie symboliczne wskazuje _na:';
+
+ LANGplFChmod_Caption = 'Uprawnienia dostępu';
+ LANGplFChmod_PermissionFrame = 'Uprawnienia';
+ LANGplFChmod_FileFrame = 'Plik';
+ LANGplFChmod_ApplyRecursivelyFor = 'Zastosuj _rekursywnie do';
+ LANGplFChmod_miAllFiles = 'Wszystkie pliki i katalogi';
+ LANGplFChmod_miDirectories = 'Tylko kataloki';
+ LANGplFChmod_OctalLabel = '_Ósemkowo:';
+ LANGplFChmod_SUID = 'SUID - Ustaw ID użytkownika przy wykonaniu';
+ LANGplFChmod_SGID = 'SGID - Ustaw ID grupy przy wykonaniu';
+ LANGplFChmod_Sticky = 'Bit "sticky"';
+ LANGplFChmod_RUSR = 'RUSR - Odczyt przez właściciela';
+ LANGplFChmod_WUSR = 'WUSR - Zapis przez właściciela';
+ LANGplFChmod_XUSR = 'XUSR - Wykonanie/Przeglądanie przez właściciela';
+ LANGplFChmod_RGRP = 'RGRP - Odczyt przez grupę';
+ LANGplFChmod_WGRP = 'WGRP - Zapis by grupę';
+ LANGplFChmod_XGRP = 'XGRP - Wykonanie/Przeglądanie przez grupę';
+ LANGplFChmod_ROTH = 'ROTH - Odczyt przez innych';
+ LANGplFChmod_WOTH = 'WOTH - Zapis przez innyWykonanie/Przeglądanie przez innych';
+ LANGplFChmod_TextLabel = '<span weight="ultrabold">Tekst:</span> %s';
+ LANGplFChmod_FileLabel = '<span weight="ultrabold">Plik:</span> %s'#10'<span weight="ultrabold">Tekst:</span> %s'#10 +
+ '<span weight="ultrabold">Ósemkowo:</span> %d'#10'<span weight="ultrabold">Właściciel</span> %s'#10 +
+ '<span weight="ultrabold">Grupa:</span> %s';
+
+ LANGplFChown_Caption = 'Zmień właściciela/grupę';
+ LANGplFChown_OwnerFrame = 'Nazwa właściciela';
+ LANGplFChown_GroupFrame = 'Nazwa grupy';
+ LANGplFChown_FileFrame = 'Plik';
+ LANGplFChown_ApplyRecursively = 'Zastosuj _rekursywnie';
+
+ LANGplFSymlink_Caption = 'Utwórz dowiązanie symboliczne';
+ LANGplFSymlink_ExistingFilename = 'Nazwa istniejącego pliku, na który będzie wskazywać dowiązanie:';
+ LANGplFSymlink_SymlinkFilename = '_Nazwa dowiązania:';
+
+ LANGplmnuBookmarks_Caption = '_Zakładki';
+ LANGplmiAddBookmark_Caption = '_Dodaj zakładkę';
+ LANGplmiEditBookmarks_Caption = '_Edytuj zakładki';
+ LANGplBookmarkPopupDelete_Caption = '_Usuń';
+ LANGplmiPreferences_Caption = '_Preferencje...';
+ LANGplTheCurrentDirectoryAlreadyExistsInTheBookmarksList = 'Bieżący katalog już jest na liście zakładek';
+ LANGplSomeOtherInstanceChanged = 'Inna instancja Tux Commandera zmieniła konfigurację. Czy chcesz zastosować nowe ustawienia?'#10#10'Uwaga: jeśli wciśniesz "Nie", konfiguracja będzie nadpisana przez tą instancję'' Wyjście!';
+
+ LANGplPreferences_Caption = 'Preferencje';
+ LANGplPreferences_TitleLabel_Caption = '<span size="x-large" weight="ultrabold">Preferencje aplikacji</span>';
+ LANGplPreferences_GeneralPage = 'Ogólne';
+ LANGplPreferences_FontsPage = 'Czcionki';
+ LANGplPreferences_ColorsPage = 'Kolory';
+ LANGplPreferences_RowHeight = 'Wysokość _wiersza:';
+ LANGplPreferences_NumHistoryItems = 'Rozmiar historii wiersza _poleceń:';
+ LANGplPreferences_ClearReadonlyAttribute = 'Wyczyść atrybut "tylko do _odczytu" przy kopiowaniu z CD-ROMu';
+ LANGplPreferences_DisableMouseRenaming = 'Zablokuj zmianę nazwy przy pomocy _myszy';
+ LANGplPreferences_ShowFiletypeIconsInList = 'Pokaż _ikony przypisane do typów pliku';
+ LANGplPreferences_ExternalAppsLabel = '<span weight="ultrabold">Zewnętrzne programy</span>';
+ LANGplPreferences_Viewer = '_Podgląd:';
+ LANGplPreferences_Editor = '_Edytor:';
+ LANGplPreferences_Terminal = '_Terminal:';
+ LANGplPreferences_ListFont = 'Lista czcionek:';
+ LANGplPreferences_Change = 'Zmień...';
+ LANGplPreferences_UseDefaultFont = 'Użyj _domyślnej czcionki';
+ LANGplPreferences_Foreground = 'Tekst';
+ LANGplPreferences_Background = 'Tło';
+ LANGplPreferences_NormalItem = 'Normalny element:';
+ LANGplPreferences_SetToDefaultToUseGTKThemeColors = 'Zmień na domyślne kolory tematu GTK';
+ LANGplPreferences_Cursor = 'Kursor:';
+ LANGplPreferences_InactiveItem = 'Nieaktywny element:';
+ LANGplPreferences_SelectedItem = 'Wybrany element:';
+ LANGplPreferences_LinkItem = 'Dowiązanie symboliczne:';
+ LANGplPreferences_LinkItemHint = 'Ustaw na domyślne, aby pokazywać dowiązania w kolorze normalnych elementów';
+ LANGplPreferences_DotFileItem = 'Ukryte pliki:';
+ LANGplPreferences_DotFileItemHint = 'staw na domyślne, aby pokazywać pliki ukryte w kolorze normalnych elementów';
+ LANGplPreferences_BrowseForApplication = 'Wybierz aplikację';
+ LANGplPreferences_DefaultS = 'Domyślnie: %s';
+ LANGplPreferences_SelectFont = 'Wybierz czcionkę';
+
+ (*************** STRINGS ADDED TO v0.4.101 **********************************************************************************)
+ LANGplBookmarkButton_Tooltip = 'Pokaż zakładki';
+ LANGplUpButton_Tooltip = 'Przejdź do katalogu nadrzędnego';
+ LANGplRootButton_Tooltip = 'Przejdź do głównego katalogu (/)';
+ LANGplHomeButton_Tooltip = 'Przejdźr)';
+ LANGplLeftEqualButton_Tooltip = 'Przełącz prawy panel na ten sam katalog';
+ LANGplRightEqualButton_Tooltip = 'Przełącz lewy panel na ten sam katalog';
+ LANGplmiShowDirectorySizes_Caption = 'Pokaż rozmiary _katalogów';
+ LANGplmiTargetSource_Caption = '_Docelowy = Źródłowy';
+ LANGplFileTypeDirectory = 'Katalog';
+ LANGplFileTypeFile = 'Plik';
+ LANGplFileTypeMetafile = 'To jest ogólny meta-element';
+ LANGplPreferencesPanelsPage = 'Panele';
+ LANGplPreferencesApplicationsPage = 'Aplikacje';
+ LANGplPreferencesExperimentalPage = 'Eksperymentalne';
+ LANGplPreferencesSelectAllDirectoriesCheckBox_Caption = 'Zaznaczaj _także katalogi przy zaznaczaniu wszystkiego';
+ LANGplPreferencesNewStyleAltOCheckBox_Caption = '_Nowy styl Alt+O';
+ LANGplPreferencesNewStyleAltOCheckBox_Tooltip = 'Pozostań w tym samym katalogu po zmianie katalogu w drugim panelu przez Ctrl/Alt+O';
+ LANGplPreferencesShowFuncButtonsCheckBox_Caption = 'Pokazuj przyciski _klawiszy funkcyjnych';
+ LANGplPreferencesSizeFormatLabel_Caption = 'Sposób wyświetlania _rozmiaru:';
+ LANGplPreferencesmiSizeFormat1 = 'Systemowy';
+ LANGplPreferencesmiSizeFormat6 = 'Zgroupowany';
+ LANGplPreferencesAutodetectXApp = 'Automatycznie wykrywaj aplikacje X';
+ LANGplPreferencesAlwaysRunInTerminal = 'Zawsze uruchamiaj w terminalu';
+ LANGplPreferencesNeverRunInTerminal = 'Nigdy nie uruchamiaj w terminalu';
+ LANGplPreferencesCmdLineBehaviourLabel_Caption = '_Wykonywanie z wiersza poleceń:';
+ LANGplPreferencesFeatures = 'Właściwości';
+ LANGplPreferencesDisableMouseRename_Tooltip = 'Możesz nadal dokonywać szybkiej zmiany nazwy wciskając Shift+F6';
+ LANGplPreferencesDisableFileTipsCheckBox_Caption = 'Wyłącz _podpowiedzi dla plików';
+ LANGplPreferencesDisableFileTipsCheckBox_Tooltip = 'Nie pokazuj podpowiedzi dla panelu jeśli tekst nie mieści się w kolumnie';
+ LANGplPreferencesShow = 'Wyświetlanie';
+ LANGplPreferencesDisableDirectoryBracketsCheckBox_Caption = 'Wyłącz otaczanie katalogów nawiasami []';
+ LANGplPreferencesOctalPermissionsCheckBox_Caption = 'Pokazuj uprawnienia ó_semkowo';
+ LANGplPreferencesOctalPermissionsCheckBox_Tooltip = 'Pokzauj uprawnienia do pliku/katalogu w formie numerycnej zamiast tekstowej (-rw-rw-rw-)';
+ LANGplPreferencesMovement = 'Poruszanie się';
+ LANGplPreferencesLynxLikeMotionCheckBox_Caption = 'W stylu _Lynx''a';
+ LANGplPreferencesInsertMovesDownCheckBox_Caption = '_Insert przechodzi w dół';
+ LANGplPreferencesSpaceMovesDownCheckBox_Caption = '_Spacja przechodzi w dów';
+ LANGplPreferencesViewer = 'Podgląd';
+ LANGplPreferencesCommandSC = 'Polecenie:';
+ LANGplPreferencesUseInternalViewer = 'Użyj _wewnętrznej przeglądarki';
+ LANGplPreferencesEditor = 'Edytor';
+ LANGplPreferencesTerminal = 'Terminal';
+ LANGplPreferencesExperimentalFeatures = 'Opcje eksperymentalne';
+ LANGplPreferencesExperimentalWarningLabel_Caption = '<span weight="ultrabold">Uwaga:</span> Te opcje są dopiero rozwijanie i mogą działać nieprawidłowo. Używaj na własne ryzyko!';
+ LANGplPreferencesFocusRefreshCheckBox_Caption = 'Odświeżaj, gdy okno odzyskuje skupienie';
+ LANGplPreferencesFocusRefreshCheckBox_Tooltip = 'Odświeżanie panelu działa w tej chili bardzo wolno';
+ LANGplPreferencesWMCompatModeCheckBox_Caption = 'Tryb kompatybilności z _WM (menadżerem okien)';
+ LANGplPreferencesWMCompatModeCheckBox_Tooltip = 'Użyj, jeśli masz problemy spowodowane przez menadżera okien (np. IceWM nie maksymalizuje prawidłowo okien)';
+ LANGplPreferencesCompatUseLibcSystemCheckBox_Caption = 'Użyj libc _system() do wykonywania programów';
+ LANGplPreferencesCompatUseLibcSystemCheckBox_Tooltip = 'Używ w przypadku zamrażania lub zawieszania się programu przy uruchamianiu zewnętrznych aplikacji';
+
+ (*************** STRINGS ADDED TO v0.5.70 **********************************************************************************)
+ LANGplmiSearchCaption2 = '_Znajdź...';
+ LANGplmiNoMounterBarCaption = '_Nie pokazuj paska montowania';
+ LANGplmiShowOneMounterBarCaption = 'Pokazuj _jeden pasek montowania';
+ LANGplmiShowTwoMounterBarCaption = 'Pokazuj _dwa paski montowania';
+ LANGplmnuNetworkCaption = '_Sieć';
+ LANGplmiConnectionsCaption = '_Połączenia...';
+ LANGplmiOpenConnectionCaption = '_Połącz...';
+ LANGplmiQuickConnectCaption = '_Szybkie połączenie...';
+ LANGplmnuPluginsCaption = 'Wt_yczki';
+ LANGplmiTestPluginCaption = '_Sprawdź wtyczkę...';
+ LANGplmiMounterSettingsCaption = '_Ustawienia montowania...';
+ LANGplmiColumnsCaption = 'Kolumny p_anelu...';
+ LANGplmiSavePositionCaption = '_Zapisuj pozycję';
+ LANGplmiMountCaption = '_Zamontuj';
+ LANGplmiUmountCaption = '_Odmontuj';
+ LANGplmiEjectCaption = '_Wysuń';
+ LANGplmiDuplicateTabCaption = 'Podwój bieżący panel';
+ LANGplmiCloseTabCaption = 'Zamknij bieżący panel';
+ LANGplmiCloseAllTabsCaption = 'Zamknij wszystkie panele';
+ LANGplCannotDetermineDestinationEngine = 'Nie można ustalić docelowego mechanizmu. Podaj właściwą ścieżkę i spróbuj ponownie.';
+ LANGplCannotLoadFile = 'Nie można odczytać pliku ''%s''. Proszę sprawdzić uprawnienia.';
+ LANGplMountPointDevice = 'Punkt montowania: %s'#10'Urządzenie: %s';
+ LANGplMountSC = 'Montowanie:';
+ LANGplNoPluginsFound = 'Nie znaleziono wtyczek';
+ LANGplPluginAbout = 'Informacje o...';
+ LANGplCouldntOpenURI = 'Nie można otworzyć podanego URI. Proszę sprawdzić stan zasobu i uprawnienia dostępu.';
+ LANGplPluginAboutInside = 'Wtyczka: %s'#10#10'%s'#10'%s';
+ LANGplAreYouSureCloseAllTabs = 'Czy na pewno chcesz zamknąć wszystkie nieaktywne panele?';
+ LANGplCouldntOpenURIArchive = 'Nie można otworzyć archiwum. Proszę sprawdzić stan zasobu i uprawnienia dostępu.';
+ LANGplThereIsNoModuleAvailable = 'Żaden z dostępnych modułów VFS nie potrafi obsłużyć tego połączenia';
+ LANGplIgnoreError = 'Czy na pewno chcesz zignorować ten błąd? Plik źródłowy zostanie usunięty';
+ LANGplErrorMount = 'Błąd podczas montowania urządzenia ''%s'':'#10#10;
+ LANGplErrorUmount = 'Błąd podczas odmontowania urządzenia ''%s'':'#10#10;
+ LANGplErrorEject = 'Błąd podczas wysuwania urządzenia ''%s'':'#10#10;
+
+ LANGplMounterPrefs_Caption = 'Ustawienia montowania';
+ LANGplMounterPrefs_TitleLabelCaption = 'Ustawienia montowania';
+ LANGplMounterPrefs_ListViewFrameCaption = 'Montowanie';
+ LANGplMounterPrefs_MountName = 'Name zasobu';
+ LANGplMounterPrefs_MountPoint = 'Punkt montowania';
+ LANGplMounterPrefs_Device = 'Urządzenie';
+ LANGplMounterPrefs_MoveUpButtonTooltip = 'Przenieś w górę';
+ LANGplMounterPrefs_MoveDownButtonTooltip = 'Przenieś w dół';
+ LANGplMounterPrefs_UseFSTabDefaultsCheckBox = 'Użyj domyślnych elementów _fstab';
+ LANGplMounterPrefs_UseFSTabDefaultsCheckBoxTooltip = 'Po zaznaczeniu, na pasek montowania znajdą się elementy z systemowej listy w /etc/fstab';
+ LANGplMounterPrefs_ToggleModeCheckBox = 'Przyciski wciśnięte gdy zasób zamontowany';
+ LANGplMounterPrefs_ToggleModeCheckBoxTooltip = 'Po zaznaczeniu stan "wciśnięty" przycisku będzie odzwieciedlał zamontowanie zasobu';
+ LANGplMounterPrefs_PropertiesFrameCaption = 'Włąściwości zasobu';
+ LANGplMounterPrefs_DisplayTextLabelCaption = 'Wyświetlany _tekst:';
+ LANGplMounterPrefs_MountPointLabelCaption = '_Punkt montowania:';
+ LANGplMounterPrefs_MountDeviceLabelCaption = '_Urządzenie:';
+ LANGplMounterPrefs_DeviceTypeLabelCaption = 'Rodzaj urządzenia:';
+ LANGplMounterPrefs_miLocalDiskCaption = 'Lokalny dysk';
+ LANGplMounterPrefs_miRemovableCaption = 'Napęd przenośny';
+ LANGplMounterPrefs_miCDCaption = 'Napęd CD/DVD';
+ LANGplMounterPrefs_miFloppyCaption = 'Stacja dyskietek';
+ LANGplMounterPrefs_miNetworkCaption = 'Udział sieciowy';
+ LANGplMounterPrefs_MountCommandLabelCaption = 'Polecenie _montowania:';
+ LANGplMounterPrefs_UmountCommandLabelCaption = 'Polecenie _odmontowania:';
+ LANGplMounterPrefs_MountCommandEntryTooltip = 'Składnia: %dev oznacza urządzenie, %dir punkt montowania (pusty oznacza domyślny)'#10'Uważaga: przy interaktywnych komendach, tuxcmd może przestać reagować!'#10'Przykład: smbmount %dev %dir -o username=netuser,password=somepass';
+ LANGplMounterPrefs_UmountCommandEntryTooltip = 'Składnia: %dev oznacza urządzenie, %dir punkt montowania (pusty oznacza domyślny)'#10'Example: smbumount $dir';
+ LANGplMounterPrefs_IconLabelCaption = '_Ikona:';
+
+ LANGplConnMgr_Caption = 'Otwórz nowe połączenie';
+ LANGplConnMgr_ConnectButton = '_Połącz';
+ LANGplConnMgr_OpenConnection = 'Open Connection';
+ LANGplConnMgr_NameColumn = 'Nazwa';
+ LANGplConnMgr_URIColumn = 'Adres (URI)';
+ LANGplConnMgr_AddConnectionButtonCaption = '_Dodaj...';
+ LANGplConnMgr_AddConnectionButtonTooltip = 'Dodaj nowe połączenie';
+ LANGplConnMgr_EditButtonCaption = '_Edycja';
+ LANGplConnMgr_EditButtonTooltip = 'Ustaw właściwości połączenia';
+ LANGplConnMgr_RemoveButtonCaption = '_Usuń';
+ LANGplConnMgr_RemoveButtonTooltip = 'Usuń zaznaczone połączenie';
+ LANGplConnMgr_DoYouWantDelete = 'Czy na pewno chcesz usunąć połączenie ''%s''?';
+
+ LANGplConnProp_FTP = 'FTP';
+ LANGplConnProp_SFTP = 'SFTP (podsystem ssh)';
+ LANGplConnProp_SMB = 'Udział Windows (SMB)';
+ LANGplConnProp_HTTP = 'WebDAV (HTTP)';
+ LANGplConnProp_HTTPS = 'Bezpieczny WebDAV (HTTPS)';
+ LANGplConnProp_Other = 'Inne <span style="italic">(podaj URI)</span>';
+ LANGplConnProp_Caption = 'Właściwości połączenia';
+ LANGplConnProp_VFSModule = 'Moduł _VFS:';
+ LANGplConnProp_URI = '_URI:';
+ LANGplConnProp_URIEntryTooltip = 'Prawidłowy URI powinien zawierać typ usługi (w prefiksie) oraz adres serwera';
+ LANGplConnProp_DetailedInformations = 'Szczegółowe informacje';
+ LANGplConnProp_Name = '_Nazwa:';
+ LANGplConnProp_Server = 'Ser_wer[:port]:';
+ LANGplConnProp_Username = 'Nazwa _użytkownika:';
+ LANGplConnProp_UserNameEntryTooltip = 'Pozostaw puste w celu zalogowania jako anonim';
+ LANGplConnProp_Password = '_Hasło:';
+ LANGplConnProp_TargetDirectory = 'Katalog _docelowy:';
+ LANGplConnProp_ServiceType = '_Typ usługi:';
+ LANGplConnProp_MaskPassword = '_Maskuj hasło:';
+ LANGplConnProp_MenuItemCaption = 'Domyślne <span style="italic">(wszystkie pasujące moduły)</span>';
+
+ LANGplConnLogin_Caption = 'Wymagana autoryzacja';
+ LANGplConnLogin_Login = 'Login';
+ LANGplConnLogin_ExperimentalWarningLabelCaption = 'Musisz się zalogować żeby uzyskać dostęp do %s';
+ LANGplConnLogin_Username = '_Nazwa użytkownika:';
+ LANGplConnLogin_Password = '_Hasło:';
+ LANGplConnLogin_AnonymousCheckButton = '_Jako anonim';
+
+ LANGplColumns_Caption = 'Ustawienia kolumn w panelu';
+ LANGplColumns_Title = 'Ustawienia kolumn w panelu';
+ LANGplColumns_MoveUpButtonTooltip = 'Przesuń element w górę';
+ LANGplColumns_MoveDownButtonTooltip = 'Przesuń element w dół';
+ LANGplColumns_TitlesLongName = 'Nazwa';
+ LANGplColumns_TitlesLongNameExt = 'Nazwa + rozszerzenie';
+ LANGplColumns_TitlesLongExt = 'Rozszerzenie';
+ LANGplColumns_TitlesLongSize = 'Rozmiar';
+ LANGplColumns_TitlesLongDateTime = 'Data + Czas';
+ LANGplColumns_TitlesLongDate = 'Data';
+ LANGplColumns_TitlesLongTime = 'Czas';
+ LANGplColumns_TitlesLongUser = 'Użytkownik';
+ LANGplColumns_TitlesLongGroup = 'Grupa';
+ LANGplColumns_TitlesLongAttr = 'Attrybuty';
+ LANGplColumns_TitlesShortName = 'Nazwa';
+ LANGplColumns_TitlesShortNameExt = 'Nazwa';
+ LANGplColumns_TitlesShortExt = 'Roz';
+ LANGplColumns_TitlesShortSize = 'Rozmiar';
+ LANGplColumns_TitlesShortDateTime = 'Data';
+ LANGplColumns_TitlesShortDate = 'Data';
+ LANGplColumns_TitlesShortTime = 'Czas';
+ LANGplColumns_TitlesShortUser = 'Użytk.';
+ LANGplColumns_TitlesShortGroup = 'Grupa';
+ LANGplColumns_TitlesShortAttr = 'Atr';
+
+ LANGplTestPlugin_Caption = 'Przetestuj wtyczkę VFS';
+ LANGplTestPlugin_Title = 'Przetestuj wtyczkę VFS';
+ LANGplTestPlugin_ExperimentalWarningLabelCaption = '<span weight="ultrabold">Uwaga:</span> podsystem VFS i jego wtyczki są we wczesnych wersjach rozwojowych i mogą zawierać błędy. Używaj wyłacznie na własne ryzyko!';
+ LANGplTestPlugin_Plugin = '_Wtyczka:';
+ LANGplTestPlugin_Command = 'Po_lecenie:';
+ LANGplTestPlugin_Username = '_Nazwa użytkownika:';
+ LANGplTestPlugin_Password = '_Hasło:';
+ LANGplTestPlugin_AnonymousCheckButton = '_Logowanie anonimowe (nie używa VFSLogin)';
+ LANGplTestPlugin_NoPluginsFound = 'Nie znaleziono wtyczek';
+
+ LANGplRemoteWait_Caption = 'Wykonywanie operacji';
+ LANGplRemoteWait_OperationInProgress = 'Wykonywanie operacji, proszę czekać...';
+ LANGplRemoteWait_ItemsFound = 'dotychczas znaleziono %d elementów';
+
+ LANGplSearch_Bytes = 'Bajty';
+ LANGplSearch_kB = 'kB';
+ LANGplSearch_MB = 'MB';
+ LANGplSearch_days = 'dni';
+ LANGplSearch_weeks = 'tygodnie';
+ LANGplSearch_months = 'miesiące';
+ LANGplSearch_years = 'lata';
+ LANGplSearch_Caption = 'znajdź pliki';
+ LANGplSearch_General = 'Ogólne';
+ LANGplSearch_Advanced = 'Zaawansowane';
+ LANGplSearch_SearchResults = 'Wynik wyszukiwania:';
+ LANGplSearch_SearchFor = 'Szukaj:';
+ LANGplSearch_FileMaskEntryTooltip = 'Porada: Możesz wpisać kilka plików, oddzielonych średnikiem (";")';
+ LANGplSearch_SearchIn = 'Znajdź _w:';
+ LANGplSearch_SearchArchivesCheckButton = 'Przeszukuj _archiwa';
+ LANGplSearch_FindText = 'Znajdź _tekst:';
+ LANGplSearch_FindTextEntryTooltip = 'Pozostaw puste by nie szukać tekstu'#10'Uwaga: GUI używa kodowania znaków UTF-8';
+ LANGplSearch_CaseSensitiveCheckButton = '_Rozróżnianie wielkości liter';
+ LANGplSearch_StayCurrentFSCheckButton = 'Dołącz inne systemy plików';
+ LANGplSearch_CaseSensitiveMatchCheckButton = '_Rozróżnianie wielkości liter';
+ LANGplSearch_Size = 'Rozmiar';
+ LANGplSearch_Date = 'Data';
+ LANGplSearch_BiggerThan = '_większe niż';
+ LANGplSearch_SmallerThan = '_Mniejsze niż';
+ LANGplSearch_ModifiedBetweenRadioButton = '_Zmienione pomiędzy';
+ LANGplSearch_NotModifiedAfterRadioButton = '_Nie zmienione po';
+ LANGplSearch_ModifiedLastRadioButton = 'Zmien_ione w ciągu ostatniech';
+ LANGplSearch_ModifiedNotLastRadionButton = 'Nie zmienione w ciągu osta_tnich';
+ LANGplSearch_ModifiedBetweenEntry1 = '"Użyć daty w formacie:" c';
+ LANGplSearch_ViewButtonCaption = '_Podgląd pliku';
+ LANGplSearch_NewSearchButtonCaption = '_Nowe wyszukiwanie';
+ LANGplSearch_GoToFileButtonCaption = '_Idź do pliku';
+ LANGplSearch_FeedToListboxButtonCaption = 'Wyślij do _listy';
+ LANGplSearch_StatusSC = 'Status:';
+ LANGplSearch_Ready = 'Gotowe.';
+ LANGplSearch_PreparingToSearch = 'Przygotowanie do wyszukiwania.';
+ LANGplSearch_SearchInProgress = 'Trwa szukanie:';
+ LANGplSearch_UserCancelled = 'Anulowane przez użytkownika.';
+ LANGplSearch_SearchFinished = 'Szukanie zakończone';
+ LANGplSearch_FilesFound = 'znaleziono %d plików';
+ LANGplSearch_And = 'i';
+
+ (*************** STRINGS ADDED TO v0.5.82 **********************************************************************************)
+ LANGplCloseOpenConnection = 'Próbujesz otworzyć nowe połączenie. Kontynuacja spowoduje zamknięcie poprzedniego i zastąpienie go nowym.'#10#10'Czy kontynuować?';
+ LANGplDuplicateTabWarning = 'Próbujesz otworzyć nową kartę zdalnego katalogu. Nie jest to możliwe, w nowej karcie otworzy się w zamian lokalny katalog. ';
+ LANGplDontShowAgain = '_Don''t show this message again';
+ LANGplSwitchOtherPanelWarning = 'Próbujesz otworzyć zdalny katalog w przeciwległym panelu. Nie jest to możliwe, docelowy katalog nie będzie zmieniony.';
+ LANGplOpenConnectionsWarning = 'W panelu otwarte jest połączenie sieciowe. Przy zamknięciu aplikacji zostaną one rozłączone.'#10#10'Czy na pewno zamknąć?';
+ LANGplmiDisconnect_Caption = '_Rozłącz';
+ LANGplDisconnectButton_Tooltip = 'Rozłącza aktywne połączanie';
+ LANGplLeaveArchiveButton_Tooltip = 'Zamykabieżące archiwum';
+ LANGplOpenTerminalButton_Tooltip = 'Otwiera nowe okna terminala w bieżącym katalogu';
+ LANGplOpenTerminalButton_Caption = 'Otwórz Te_rminal';
+ LANGplShowTextUIDsCheckBox_Caption = 'Wyświetlaj tekstowe _UID';
+ LANGplShowTextUIDsCheckBox_Tooltip = 'Wyświetla tekstowe informacje o użytkowniku i grupie zamiast oznaczeń cyfrowych (UID/GID)';
+
+ (*************** STRINGS ADDED TO v0.5.100 **********************************************************************************)
+ LANGplmiNewTab_Caption = 'Nowa karta _folderu';
+ LANGplFilePopupMenu_Properties = '_Właściwości';
+ LANGplCommandEntry_Tooltip = 'Używa %s jako pliku/katalogu';
+ LANGplmiFiles_Caption = 'Tylko pliki';
+
+ (*************** STRINGS ADDED TO v0.6.31 **********************************************************************************)
+ LANGplPasswordButton_Tooltip = 'Archive requires password.'#10'Click to set';
+ LANGplHandleRunFromArchive_Bytes = 'bytes';
+ LANGplHandleRunFromArchive_FileTypeDesc_Unknown = '(unknown)';
+ LANGplHandleRunFromArchive_NotAssociated = '(not associated)';
+ LANGplHandleRunFromArchive_SelfExecutable = '(self-executable)';
+ LANGplHandleRunFromArchive_CouldntCreateTemporaryDirectory = 'Couldn''t create temporary directory "%s": %s.'#10#10'Please check the temporary directory settings and try it again.';
+ LANGplFRunFromVFS_Caption = 'Packed file properties';
+ LANGplFRunFromVFS_TitleLabel = 'File Properties';
+ LANGplFRunFromVFS_FileNameLabel = 'File name:';
+ LANGplFRunFromVFS_FileTypeLabel = 'File type:';
+ LANGplFRunFromVFS_SizeLabel = 'Size:';
+ LANGplFRunFromVFS_PackedSizeLabel = 'Compressed size:';
+ LANGplFRunFromVFS_DateLabel = 'Modify date:';
+ LANGplFRunFromVFS_InfoLabel = 'Opening files directly from archives is not supported. By clicking the buttons below the file (all files respectively) will be extracted to a temporary location. Temporary files will be deleted when you close Tux Commander.';
+ LANGplFRunFromVFS_OpensWithLabel = 'Open with:';
+ LANGplFRunFromVFS_ExecuteButton = 'E_xtract and open';
+ LANGplFRunFromVFS_ExecuteAllButton = 'Extract _all and open';
+ LANGplFSetPassword_Caption = 'Set password';
+ LANGplFSetPassword_Label1_Caption = 'Password required';
+ LANGplFSetPassword_Label2_Caption = 'The archive is encrypted and requires password in order to extract the data';
+ LANGplFSetPassword_ShowPasswordCheckButton = 'Un_mask password';
+
+
+(********************************************************************************************)
+procedure SetTranslation;
+begin
+ LANGF2Button_Caption := LANGplF2Button_Caption;
+ LANGF3Button_Caption := LANGplF3Button_Caption;
+ LANGF4Button_Caption := LANGplF4Button_Caption;
+ LANGF5Button_Caption := LANGplF5Button_Caption;
+ LANGF6Button_Caption := LANGplF6Button_Caption;
+ LANGF7Button_Caption := LANGplF7Button_Caption;
+ LANGF8Button_Caption := LANGplF8Button_Caption;
+
+ LANGmnuFile_Caption := LANGplmnuFile_Caption;
+ LANGmnuMark_Caption := LANGplmnuMark_Caption;
+ LANGmnuCommands_Caption := LANGplmnuCommands_Caption;
+ LANGmnuHelp_Caption := LANGplmnuHelp_Caption;
+ LANGmiExit_Caption := LANGplmiExit_Caption;
+ LANGmiSelectGroup_Caption := LANGplmiSelectGroup_Caption;
+ LANGmiSelectAll_Caption := LANGplmiSelectAll_Caption;
+ LANGmiUnselectAll_Caption := LANGplmiUnselectAll_Caption;
+ LANGmiInvertSelection_Caption := LANGplmiInvertSelection_Caption;
+ LANGmiRefresh_Caption := LANGplmiRefresh_Caption;
+ LANGmiAbout_Caption := LANGplmiAbout_Caption;
+
+ LANGColumn1_Caption := LANGplColumn1_Caption;
+ LANGColumn2_Caption := LANGplColumn2_Caption;
+ LANGColumn3_Caption := LANGplColumn3_Caption;
+ LANGColumn4_Caption := LANGplColumn4_Caption;
+ LANGColumn5_Caption := LANGplColumn5_Caption;
+
+ LANGExpandSelection := LANGplExpandSelection;
+ LANGShrinkSelection := LANGplShrinkSelection;
+ LANGNoMatchesFound := LANGplNoMatchesFound;
+ LANGNoFilesSelected := LANGplNoFilesSelected;
+ LANGSelectedFilesDirectories := LANGplSelectedFilesDirectories;
+ LANGDirectoryS := LANGplDirectoryS;
+ LANGFileS := LANGplFileS;
+ LANGDoYouReallyWantToDeleteTheS := LANGplDoYouReallyWantToDeleteTheS;
+ LANGDoYouReallyWantToDeleteTheSS := LANGplDoYouReallyWantToDeleteTheSS;
+ LANGCopyFiles := LANGplCopyFiles;
+ LANGMoveRenameFiles := LANGplMoveRenameFiles;
+ LANGCopyDFileDirectoriesTo := LANGplCopyDFileDirectoriesTo;
+ LANGMoveRenameDFileDirectoriesTo := LANGplMoveRenameDFileDirectoriesTo;
+ LANGCopySC := LANGplCopySC;
+ LANGMoveRenameSC := LANGplMoveRenameSC;
+
+ LANGQuickFind := LANGplQuickFind;
+
+ LANGAboutString := LANGplAboutString;
+ LANGAboutStringGnome := LANGplAboutStringGnome;
+ LANGDiskStatFmt := LANGplDiskStatFmt;
+ LANGDiskStatVolNameFmt := LANGplDiskStatVolNameFmt;
+ LANGStatusLineFmt := LANGplStatusLineFmt;
+ LANGPanelStrings[False] := LANGplPanelStrings[False];
+ LANGPanelStrings[True] := LANGplPanelStrings[True];
+ LANGErrorGettingListingForSPanel := LANGplErrorGettingListingForSPanel;
+ LANGErrorGettingListingForSPanelNoPath := LANGplErrorGettingListingForSPanelNoPath;
+ LANGErrorCreatingNewDirectorySInSPanel := LANGplErrorCreatingNewDirectorySInSPanel;
+ LANGErrorCreatingNewDirectorySInSPanelNoPath := LANGplErrorCreatingNewDirectorySInSPanelNoPath;
+ LANGTheFileDirectory := LANGplTheFileDirectory;
+ LANGCouldNotBeDeleted := LANGplCouldNotBeDeleted;
+ LANGCouldNotBeDeletedS := LANGplCouldNotBeDeletedS;
+ LANGUserCancelled := LANGplUserCancelled;
+ LANGTheDirectorySIsNotEmpty := LANGplTheDirectorySIsNotEmpty;
+ LANGCannotCopyFile := LANGplCannotCopyFile;
+ LANGCopyError := LANGplCopyError;
+ LANGMoveError := LANGplMoveError;
+ LANGOverwriteS := LANGplOverwriteS;
+ LANGWithFileS := LANGplWithFileS;
+ LANGOvewriteSBytesS := LANGplOvewriteSBytesS;
+ LANGTheFile := LANGplTheFile;
+ LANGCopy := LANGplCopy;
+ LANGMove := LANGplMove;
+ LANGTheDirectory := LANGplTheDirectory;
+ LANGTheSymbolicLink := LANGplTheSymbolicLink;
+ LANGCannotMoveFile := LANGplCannotMoveFile;
+ LANGCouldNotBeCreated := LANGplCouldNotBeCreated;
+ LANGCouldNotBeCreatedS := LANGplCouldNotBeCreatedS;
+ LANGFromS := LANGplFromS;
+ LANGToS := LANGplToS;
+ LANGCannotCopyFileToItself := LANGplCannotCopyFileToItself;
+ LANGMemoryAllocationFailed := LANGplMemoryAllocationFailed;
+ LANGCannotOpenSourceFile := LANGplCannotOpenSourceFile;
+ LANGCannotOpenDestinationFile := LANGplCannotOpenDestinationFile;
+ LANGCannotCloseDestinationFile := LANGplCannotCloseDestinationFile;
+ LANGCannotCloseSourceFile := LANGplCannotCloseSourceFile;
+ LANGCannotReadFromSourceFile := LANGplCannotReadFromSourceFile;
+
+ LANGUnknownException := LANGplUnknownException;
+ LANGNoAccess := LANGplNoAccess;
+ LANGUnknownError := LANGplUnknownError;
+
+ LANGCreateANewDirectory := LANGplCreateANewDirectory;
+ LANGEnterDirectoryName := LANGplEnterDirectoryName;
+
+ LANGOverwriteQuestion := LANGplOverwriteQuestion;
+ LANGOverwriteButton_Caption := LANGplOverwriteButton_Caption;
+ LANGOverwriteAllButton_Caption := LANGplOverwriteAllButton_Caption;
+ LANGSkipButton_Caption := LANGplSkipButton_Caption;
+ LANGOverwriteAllOlderButton_Caption := LANGplOverwriteAllOlderButton_Caption;
+ LANGSkipAllButton_Caption := LANGplSkipAllButton_Caption;
+ LANGRenameButton_Caption := LANGplRenameButton_Caption;
+ LANGAppendButton_Caption := LANGplAppendButton_Caption;
+ LANGRename := LANGplRename;
+ LANGRenameFile := LANGplRenameFile;
+ LANGIgnoreButton_Caption := LANGplIgnoreButton_Caption;
+
+ LANGProgress := LANGplProgress;
+ LANGCancel := LANGplCancel;
+ LANGDelete := LANGplDelete;
+
+ LANGSpecifyFileType := LANGplSpecifyFileType;
+
+ LANGRemoveDirectory := LANGplRemoveDirectory;
+ LANGDoYouWantToDeleteItWithAllItsFilesAndSubdirectories := LANGplDoYouWantToDeleteItWithAllItsFilesAndSubdirectories;
+ LANGRetry := LANGplRetry;
+ LANGDeleteButton_Caption := LANGplDeleteButton_Caption;
+ LANGAll := LANGplAll;
+
+ LANGCopyFilesSC := LANGplCopyFilesSC;
+ LANGAppendQuestion := LANGplAppendQuestion;
+ LANGPreparingList := LANGplPreparingList;
+
+ LANGYouMustSelectAValidFile := LANGplYouMustSelectAValidFile;
+ LANGmiVerifyChecksums := LANGplmiVerifyChecksums;
+ LANGVerifyChecksumsCaption := LANGplVerifyChecksumsCaption;
+ LANGCheckButtonCaptionCheck := LANGplCheckButtonCaptionCheck;
+ LANGCheckButtonCaptionStop := LANGplCheckButtonCaptionStop;
+ LANGFileListTooltip := LANGplFileListTooltip;
+ LANGFilenameColumnCaption := LANGplFilenameColumnCaption;
+ LANGTheFileSYouAreTryingToOpenIsQuiteBig := LANGplTheFileSYouAreTryingToOpenIsQuiteBig;
+ LANGAnErrorOccuredWhileInitializingMemoryBlock := LANGplAnErrorOccuredWhileInitializingMemoryBlock;
+ LANGAnErrorOccuredWhileOpeningFileSS := LANGplAnErrorOccuredWhileOpeningFileSS;
+ LANGAnErrorOccuredWhileReadingFileSS := LANGplAnErrorOccuredWhileReadingFileSS;
+ LANGChecksumNotChecked := LANGplChecksumNotChecked;
+ LANGChecksumChecking := LANGplChecksumChecking;
+ LANGChecksumInterrupted := LANGplChecksumInterrupted;
+ LANGChecksumDOK := LANGplChecksumDOK;
+
+ LANGmiCreateChecksumsCaption := LANGplmiCreateChecksumsCaption;
+ LANGYouMustSelectAtLeastOneFileToCalculateChecksum := LANGplYouMustSelectAtLeastOneFileToCalculateChecksum;
+ LANGCreateChecksumsCaption := LANGplCreateChecksumsCaption;
+ LANGCCHKSUMPage1Text := LANGplCCHKSUMPage1Text;
+ LANGCCHKSUMPage4Text := LANGplCCHKSUMPage4Text;
+ LANGCCHKSUMPage6Text := LANGplCCHKSUMPage6Text;
+ LANGCCHKSUMPage7Text := LANGplCCHKSUMPage7Text;
+ LANGCCHKSUMPage1Title := LANGplCCHKSUMPage1Title;
+ LANGCCHKSUMPage2Title := LANGplCCHKSUMPage2Title;
+ LANGCCHKSUMPage3Title := LANGplCCHKSUMPage3Title;
+ LANGCCHKSUMPage5Title := LANGplCCHKSUMPage5Title;
+ LANGCCHKSUMPage6Title := LANGplCCHKSUMPage6Title;
+ LANGCCHKSUMPage7Title := LANGplCCHKSUMPage7Title;
+ LANGCCHKSUMSFVFile := LANGplCCHKSUMSFVFile;
+ LANGCCHKSUMMD5sumFile := LANGplCCHKSUMMD5sumFile;
+ LANGCCHKSUMFileName := LANGplCCHKSUMFileName;
+ LANGCCHKSUMCreateSeparateChecksumFiles := LANGplCCHKSUMCreateSeparateChecksumFiles;
+ LANGCCHKSUMNowProcessingFileS := LANGplCCHKSUMNowProcessingFileS;
+ LANGCCHKSUMFinishCaption := LANGplCCHKSUMFinishCaption;
+ LANGCCHKSUMAreYouSureYouWantToAbortTheProcessing := LANGplCCHKSUMAreYouSureYouWantToAbortTheProcessing;
+ LANGCCHKSUMAnErrorOccuredWhileOpeningFileSS := LANGplCCHKSUMAnErrorOccuredWhileOpeningFileSS;
+ LANGCCHKSUMAnErrorOccuredWhileReadingFileSS := LANGplCCHKSUMAnErrorOccuredWhileReadingFileSS;
+ LANGCCHKSUMAnErrorOccuredWhileWritingFileSS := LANGplCCHKSUMAnErrorOccuredWhileWritingFileSS;
+
+ LANGAnErrorOccuredWhileWritingFileSS := LANGplAnErrorOccuredWhileWritingFileSS;
+ LANGTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt := LANGplTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt;
+ LANGTheTargetFileSCannotBeRemovedS := LANGplTheTargetFileSCannotBeRemovedS;
+ LANGMergeCaption := LANGplMergeCaption;
+ LANGPleaseInsertNextDiskOrGiveDifferentLocation := LANGplPleaseInsertNextDiskOrGiveDifferentLocation;
+ LANGMergeOfSSucceeded := LANGplMergeOfSSucceeded;
+ LANGWarningCreatedFileFailsCRCCheck := LANGplWarningCreatedFileFailsCRCCheck;
+ LANGMergeOfSSucceeded_NoCRCFileAvailable := LANGplMergeOfSSucceeded_NoCRCFileAvailable;
+ LANGMergeSAndAllFilesWithAscendingNamesToTheFollowingDirectory := LANGplMergeSAndAllFilesWithAscendingNamesToTheFollowingDirectory;
+
+ LANGPopupDefault := LANGplPopupDefault;
+ LANGPopupOpenWith := LANGplPopupOpenWith;
+ LANGPopupViewFile := LANGplPopupViewFile;
+ LANGPopupEditFile := LANGplPopupEditFile;
+ LANGPopupMakeSymlink := LANGplPopupMakeSymlink;
+ LANGPopupRename := LANGplPopupRename;
+ LANGPopupDelete := LANGplPopupDelete;
+ LANGDialogChangePermissions := LANGplDialogChangePermissions;
+ LANGCouldNotBeChmoddedS := LANGplCouldNotBeChmoddedS;
+ LANGDialogChangeOwner := LANGplDialogChangeOwner;
+ LANGCouldNotBeChownedS := LANGplCouldNotBeChownedS;
+ LANGDialogMakeSymlink := LANGplDialogMakeSymlink;
+ LANGDialogEditSymlink := LANGplDialogEditSymlink;
+ LANGFEditSymlink_Caption := LANGplFEditSymlink_Caption;
+ LANGFEditSymlink_SymbolicLinkFilename := LANGplFEditSymlink_SymbolicLinkFilename;
+ LANGFEditSymlink_SymbolicLinkPointsTo := LANGplFEditSymlink_SymbolicLinkPointsTo;
+
+ LANGFChmod_Caption := LANGplFChmod_Caption;
+ LANGFChmod_PermissionFrame := LANGplFChmod_PermissionFrame;
+ LANGFChmod_FileFrame := LANGplFChmod_FileFrame;
+ LANGFChmod_ApplyRecursivelyFor := LANGplFChmod_ApplyRecursivelyFor;
+ LANGFChmod_miAllFiles := LANGplFChmod_miAllFiles;
+ LANGFChmod_miDirectories := LANGplFChmod_miDirectories;
+ LANGFChmod_OctalLabel := LANGplFChmod_OctalLabel;
+ LANGFChmod_SUID := LANGplFChmod_SUID;
+ LANGFChmod_SGID := LANGplFChmod_SGID;
+ LANGFChmod_Sticky := LANGplFChmod_Sticky;
+ LANGFChmod_RUSR := LANGplFChmod_RUSR;
+ LANGFChmod_WUSR := LANGplFChmod_WUSR;
+ LANGFChmod_XUSR := LANGplFChmod_XUSR;
+ LANGFChmod_RGRP := LANGplFChmod_RGRP;
+ LANGFChmod_WGRP := LANGplFChmod_WGRP;
+ LANGFChmod_XGRP := LANGplFChmod_XGRP;
+ LANGFChmod_ROTH := LANGplFChmod_ROTH;
+ LANGFChmod_WOTH := LANGplFChmod_WOTH;
+ LANGFChmod_TextLabel := LANGplFChmod_TextLabel;
+ LANGFChmod_FileLabel := LANGplFChmod_FileLabel;
+ LANGFChown_Caption := LANGplFChown_Caption;
+ LANGFChown_OwnerFrame := LANGplFChown_OwnerFrame;
+ LANGFChown_GroupFrame := LANGplFChown_GroupFrame;
+ LANGFChown_FileFrame := LANGplFChown_FileFrame;
+ LANGFChown_ApplyRecursively := LANGplFChown_ApplyRecursively;
+
+ LANGFSymlink_Caption := LANGplFSymlink_Caption;
+ LANGFSymlink_ExistingFilename := LANGplFSymlink_ExistingFilename;
+ LANGFSymlink_SymlinkFilename := LANGplFSymlink_SymlinkFilename;
+
+ LANGmnuBookmarks_Caption := LANGplmnuBookmarks_Caption;
+ LANGmiAddBookmark_Caption := LANGplmiAddBookmark_Caption;
+ LANGmiEditBookmarks_Caption := LANGplmiEditBookmarks_Caption;
+ LANGBookmarkPopupDelete_Caption := LANGplBookmarkPopupDelete_Caption;
+ LANGmiPreferences_Caption := LANGplmiPreferences_Caption;
+ LANGTheCurrentDirectoryAlreadyExistsInTheBookmarksList := LANGplTheCurrentDirectoryAlreadyExistsInTheBookmarksList;
+ LANGSomeOtherInstanceChanged := LANGplSomeOtherInstanceChanged;
+
+ LANGPreferences_Caption := LANGplPreferences_Caption;
+ LANGPreferences_TitleLabel_Caption := LANGplPreferences_TitleLabel_Caption;
+ LANGPreferences_GeneralPage := LANGplPreferences_GeneralPage;
+ LANGPreferences_FontsPage := LANGplPreferences_FontsPage;
+ LANGPreferences_ColorsPage := LANGplPreferences_ColorsPage;
+ LANGPreferences_RowHeight := LANGplPreferences_RowHeight;
+ LANGPreferences_NumHistoryItems := LANGplPreferences_NumHistoryItems;
+ LANGPreferences_ClearReadonlyAttribute := LANGplPreferences_ClearReadonlyAttribute;
+ LANGPreferences_DisableMouseRenaming := LANGplPreferences_DisableMouseRenaming;
+ LANGPreferences_ShowFiletypeIconsInList := LANGplPreferences_ShowFiletypeIconsInList;
+ LANGPreferences_ExternalAppsLabel := LANGplPreferences_ExternalAppsLabel;
+ LANGPreferences_Viewer := LANGplPreferences_Viewer;
+ LANGPreferences_Editor := LANGplPreferences_Editor;
+ LANGPreferences_Terminal := LANGplPreferences_Terminal;
+ LANGPreferences_ListFont := LANGplPreferences_ListFont;
+ LANGPreferences_Change := LANGplPreferences_Change;
+ LANGPreferences_UseDefaultFont := LANGplPreferences_UseDefaultFont;
+ LANGPreferences_Foreground := LANGplPreferences_Foreground;
+ LANGPreferences_Background := LANGplPreferences_Background;
+ LANGPreferences_NormalItem := LANGplPreferences_NormalItem;
+ LANGPreferences_SetToDefaultToUseGTKThemeColors := LANGplPreferences_SetToDefaultToUseGTKThemeColors;
+ LANGPreferences_Cursor := LANGplPreferences_Cursor;
+ LANGPreferences_InactiveItem := LANGplPreferences_InactiveItem;
+ LANGPreferences_SelectedItem := LANGplPreferences_SelectedItem;
+ LANGPreferences_LinkItem := LANGplPreferences_LinkItem;
+ LANGPreferences_LinkItemHint := LANGplPreferences_LinkItemHint;
+ LANGPreferences_DotFileItem := LANGplPreferences_DotFileItem;
+ LANGPreferences_DotFileItemHint := LANGplPreferences_DotFileItemHint;
+ LANGPreferences_BrowseForApplication := LANGplPreferences_BrowseForApplication;
+ LANGPreferences_DefaultS := LANGplPreferences_DefaultS;
+ LANGPreferences_SelectFont := LANGplPreferences_SelectFont;
+
+ LANGBookmarkButton_Tooltip := LANGplBookmarkButton_Tooltip;
+ LANGUpButton_Tooltip := LANGplUpButton_Tooltip;
+ LANGRootButton_Tooltip := LANGplRootButton_Tooltip;
+ LANGHomeButton_Tooltip := LANGplHomeButton_Tooltip;
+ LANGLeftEqualButton_Tooltip := LANGplLeftEqualButton_Tooltip;
+ LANGRightEqualButton_Tooltip := LANGplRightEqualButton_Tooltip;
+ LANGmiShowDirectorySizes_Caption := LANGplmiShowDirectorySizes_Caption;
+ LANGmiTargetSource_Caption := LANGplmiTargetSource_Caption;
+ LANGFileTypeDirectory := LANGplFileTypeDirectory;
+ LANGFileTypeFile := LANGplFileTypeFile;
+ LANGFileTypeMetafile := LANGplFileTypeMetafile;
+ LANGPreferencesPanelsPage := LANGplPreferencesPanelsPage;
+ LANGPreferencesApplicationsPage := LANGplPreferencesApplicationsPage;
+ LANGPreferencesExperimentalPage := LANGplPreferencesExperimentalPage;
+ LANGPreferencesSelectAllDirectoriesCheckBox_Caption := LANGplPreferencesSelectAllDirectoriesCheckBox_Caption;
+ LANGPreferencesNewStyleAltOCheckBox_Caption := LANGplPreferencesNewStyleAltOCheckBox_Caption;
+ LANGPreferencesNewStyleAltOCheckBox_Tooltip := LANGplPreferencesNewStyleAltOCheckBox_Tooltip;
+ LANGPreferencesShowFuncButtonsCheckBox_Caption := LANGplPreferencesShowFuncButtonsCheckBox_Caption;
+ LANGPreferencesSizeFormatLabel_Caption := LANGplPreferencesSizeFormatLabel_Caption;
+ LANGPreferencesmiSizeFormat1 := LANGplPreferencesmiSizeFormat1;
+ LANGPreferencesmiSizeFormat6 := LANGplPreferencesmiSizeFormat6;
+ LANGPreferencesAutodetectXApp := LANGplPreferencesAutodetectXApp;
+ LANGPreferencesAlwaysRunInTerminal := LANGplPreferencesAlwaysRunInTerminal;
+ LANGPreferencesNeverRunInTerminal := LANGplPreferencesNeverRunInTerminal;
+ LANGPreferencesCmdLineBehaviourLabel_Caption := LANGplPreferencesCmdLineBehaviourLabel_Caption;
+ LANGPreferencesFeatures := LANGplPreferencesFeatures;
+ LANGPreferencesDisableMouseRename_Tooltip := LANGplPreferencesDisableMouseRename_Tooltip;
+ LANGPreferencesDisableFileTipsCheckBox_Caption := LANGplPreferencesDisableFileTipsCheckBox_Caption;
+ LANGPreferencesDisableFileTipsCheckBox_Tooltip := LANGplPreferencesDisableFileTipsCheckBox_Tooltip;
+ LANGPreferencesShow := LANGplPreferencesShow;
+ LANGPreferencesDisableDirectoryBracketsCheckBox_Caption := LANGplPreferencesDisableDirectoryBracketsCheckBox_Caption;
+ LANGPreferencesOctalPermissionsCheckBox_Caption := LANGplPreferencesOctalPermissionsCheckBox_Caption;
+ LANGPreferencesOctalPermissionsCheckBox_Tooltip := LANGplPreferencesOctalPermissionsCheckBox_Tooltip;
+ LANGPreferencesMovement := LANGplPreferencesMovement;
+ LANGPreferencesLynxLikeMotionCheckBox_Caption := LANGplPreferencesLynxLikeMotionCheckBox_Caption;
+ LANGPreferencesInsertMovesDownCheckBox_Caption := LANGplPreferencesInsertMovesDownCheckBox_Caption;
+ LANGPreferencesSpaceMovesDownCheckBox_Caption := LANGplPreferencesSpaceMovesDownCheckBox_Caption;
+ LANGPreferencesViewer := LANGplPreferencesViewer;
+ LANGPreferencesCommandSC := LANGplPreferencesCommandSC;
+ LANGPreferencesUseInternalViewer := LANGplPreferencesUseInternalViewer;
+ LANGPreferencesEditor := LANGplPreferencesEditor;
+ LANGPreferencesTerminal := LANGplPreferencesTerminal;
+ LANGPreferencesExperimentalFeatures := LANGplPreferencesExperimentalFeatures;
+ LANGPreferencesExperimentalWarningLabel_Caption := LANGplPreferencesExperimentalWarningLabel_Caption;
+ LANGPreferencesFocusRefreshCheckBox_Caption := LANGplPreferencesFocusRefreshCheckBox_Caption;
+ LANGPreferencesFocusRefreshCheckBox_Tooltip := LANGplPreferencesFocusRefreshCheckBox_Tooltip;
+ LANGPreferencesWMCompatModeCheckBox_Caption := LANGplPreferencesWMCompatModeCheckBox_Caption;
+ LANGPreferencesWMCompatModeCheckBox_Tooltip := LANGplPreferencesWMCompatModeCheckBox_Tooltip;
+ LANGPreferencesCompatUseLibcSystemCheckBox_Caption := LANGplPreferencesCompatUseLibcSystemCheckBox_Caption;
+ LANGPreferencesCompatUseLibcSystemCheckBox_Tooltip := LANGplPreferencesCompatUseLibcSystemCheckBox_Tooltip;
+
+ LANGmiSearchCaption2 := LANGplmiSearchCaption2;
+ LANGmiNoMounterBarCaption := LANGplmiNoMounterBarCaption;
+ LANGmiShowOneMounterBarCaption := LANGplmiShowOneMounterBarCaption;
+ LANGmiShowTwoMounterBarCaption := LANGplmiShowTwoMounterBarCaption;
+ LANGmnuNetworkCaption := LANGplmnuNetworkCaption;
+ LANGmiConnectionsCaption := LANGplmiConnectionsCaption;
+ LANGmiOpenConnectionCaption := LANGplmiOpenConnectionCaption;
+ LANGmiQuickConnectCaption := LANGplmiQuickConnectCaption;
+ LANGmnuPluginsCaption := LANGplmnuPluginsCaption;
+ LANGmiTestPluginCaption := LANGplmiTestPluginCaption;
+ LANGmiMounterSettingsCaption := LANGplmiMounterSettingsCaption;
+ LANGmiColumnsCaption := LANGplmiColumnsCaption;
+ LANGmiSavePositionCaption := LANGplmiSavePositionCaption;
+ LANGmiMountCaption := LANGplmiMountCaption;
+ LANGmiUmountCaption := LANGplmiUmountCaption;
+ LANGmiEjectCaption := LANGplmiEjectCaption;
+ LANGmiDuplicateTabCaption := LANGplmiDuplicateTabCaption;
+ LANGmiCloseTabCaption := LANGplmiCloseTabCaption;
+ LANGmiCloseAllTabsCaption := LANGplmiCloseAllTabsCaption;
+ LANGCannotDetermineDestinationEngine := LANGplCannotDetermineDestinationEngine;
+ LANGCannotLoadFile := LANGplCannotLoadFile;
+ LANGMountPointDevice := LANGplMountPointDevice;
+ LANGMountSC := LANGplMountSC;
+ LANGNoPluginsFound := LANGplNoPluginsFound;
+ LANGPluginAbout := LANGplPluginAbout;
+ LANGCouldntOpenURI := LANGplCouldntOpenURI;
+ LANGPluginAboutInside := LANGplPluginAboutInside;
+ LANGAreYouSureCloseAllTabs := LANGplAreYouSureCloseAllTabs;
+ LANGCouldntOpenURIArchive := LANGplCouldntOpenURIArchive;
+ LANGThereIsNoModuleAvailable := LANGplThereIsNoModuleAvailable;
+ LANGIgnoreError := LANGplIgnoreError;
+ LANGErrorMount := LANGplErrorMount;
+ LANGErrorUmount := LANGplErrorUmount;
+ LANGErrorEject := LANGplErrorEject;
+
+ LANGMounterPrefs_Caption := LANGplMounterPrefs_Caption;
+ LANGMounterPrefs_TitleLabelCaption := LANGplMounterPrefs_TitleLabelCaption;
+ LANGMounterPrefs_ListViewFrameCaption := LANGplMounterPrefs_ListViewFrameCaption;
+ LANGMounterPrefs_MountName := LANGplMounterPrefs_MountName;
+ LANGMounterPrefs_MountPoint := LANGplMounterPrefs_MountPoint;
+ LANGMounterPrefs_Device := LANGplMounterPrefs_Device;
+ LANGMounterPrefs_MoveUpButtonTooltip := LANGplMounterPrefs_MoveUpButtonTooltip;
+ LANGMounterPrefs_MoveDownButtonTooltip := LANGplMounterPrefs_MoveDownButtonTooltip;
+ LANGMounterPrefs_UseFSTabDefaultsCheckBox := LANGplMounterPrefs_UseFSTabDefaultsCheckBox;
+ LANGMounterPrefs_UseFSTabDefaultsCheckBoxTooltip := LANGplMounterPrefs_UseFSTabDefaultsCheckBoxTooltip;
+ LANGMounterPrefs_ToggleModeCheckBox := LANGplMounterPrefs_ToggleModeCheckBox;
+ LANGMounterPrefs_ToggleModeCheckBoxTooltip := LANGplMounterPrefs_ToggleModeCheckBoxTooltip;
+ LANGMounterPrefs_PropertiesFrameCaption := LANGplMounterPrefs_PropertiesFrameCaption;
+ LANGMounterPrefs_DisplayTextLabelCaption := LANGplMounterPrefs_DisplayTextLabelCaption;
+ LANGMounterPrefs_MountPointLabelCaption := LANGplMounterPrefs_MountPointLabelCaption;
+ LANGMounterPrefs_MountDeviceLabelCaption := LANGplMounterPrefs_MountDeviceLabelCaption;
+ LANGMounterPrefs_DeviceTypeLabelCaption := LANGplMounterPrefs_DeviceTypeLabelCaption;
+ LANGMounterPrefs_miLocalDiskCaption := LANGplMounterPrefs_miLocalDiskCaption;
+ LANGMounterPrefs_miRemovableCaption := LANGplMounterPrefs_miRemovableCaption;
+ LANGMounterPrefs_miCDCaption := LANGplMounterPrefs_miCDCaption;
+ LANGMounterPrefs_miFloppyCaption := LANGplMounterPrefs_miFloppyCaption;
+ LANGMounterPrefs_miNetworkCaption := LANGplMounterPrefs_miNetworkCaption;
+ LANGMounterPrefs_MountCommandLabelCaption := LANGplMounterPrefs_MountCommandLabelCaption;
+ LANGMounterPrefs_UmountCommandLabelCaption := LANGplMounterPrefs_UmountCommandLabelCaption;
+ LANGMounterPrefs_MountCommandEntryTooltip := LANGplMounterPrefs_MountCommandEntryTooltip;
+ LANGMounterPrefs_UmountCommandEntryTooltip := LANGplMounterPrefs_UmountCommandEntryTooltip;
+ LANGMounterPrefs_IconLabelCaption := LANGplMounterPrefs_IconLabelCaption;
+
+ LANGConnMgr_Caption := LANGplConnMgr_Caption;
+ LANGConnMgr_ConnectButton := LANGplConnMgr_ConnectButton;
+ LANGConnMgr_OpenConnection := LANGplConnMgr_OpenConnection;
+ LANGConnMgr_NameColumn := LANGplConnMgr_NameColumn;
+ LANGConnMgr_URIColumn := LANGplConnMgr_URIColumn;
+ LANGConnMgr_AddConnectionButtonCaption := LANGplConnMgr_AddConnectionButtonCaption;
+ LANGConnMgr_AddConnectionButtonTooltip := LANGplConnMgr_AddConnectionButtonTooltip;
+ LANGConnMgr_EditButtonCaption := LANGplConnMgr_EditButtonCaption;
+ LANGConnMgr_EditButtonTooltip := LANGplConnMgr_EditButtonTooltip;
+ LANGConnMgr_RemoveButtonCaption := LANGplConnMgr_RemoveButtonCaption;
+ LANGConnMgr_RemoveButtonTooltip := LANGplConnMgr_RemoveButtonTooltip;
+ LANGConnMgr_DoYouWantDelete := LANGplConnMgr_DoYouWantDelete;
+
+ LANGConnProp_FTP := LANGplConnProp_FTP;
+ LANGConnProp_SFTP := LANGplConnProp_SFTP;
+ LANGConnProp_SMB := LANGplConnProp_SMB;
+ LANGConnProp_HTTP := LANGplConnProp_HTTP;
+ LANGConnProp_HTTPS := LANGplConnProp_HTTPS;
+ LANGConnProp_Other := LANGplConnProp_Other;
+ LANGConnProp_Caption := LANGplConnProp_Caption;
+ LANGConnProp_VFSModule := LANGplConnProp_VFSModule;
+ LANGConnProp_URI := LANGplConnProp_URI;
+ LANGConnProp_URIEntryTooltip := LANGplConnProp_URIEntryTooltip;
+ LANGConnProp_DetailedInformations := LANGplConnProp_DetailedInformations;
+ LANGConnProp_Name := LANGplConnProp_Name;
+ LANGConnProp_Server := LANGplConnProp_Server;
+ LANGConnProp_Username := LANGplConnProp_Username;
+ LANGConnProp_UserNameEntryTooltip := LANGplConnProp_UserNameEntryTooltip;
+ LANGConnProp_Password := LANGplConnProp_Password;
+ LANGConnProp_TargetDirectory := LANGplConnProp_TargetDirectory;
+ LANGConnProp_ServiceType := LANGplConnProp_ServiceType;
+ LANGConnProp_MaskPassword := LANGplConnProp_MaskPassword;
+ LANGConnProp_MenuItemCaption := LANGplConnProp_MenuItemCaption;
+
+ LANGConnLogin_Caption := LANGplConnLogin_Caption;
+ LANGConnLogin_Login := LANGplConnLogin_Login;
+ LANGConnLogin_ExperimentalWarningLabelCaption := LANGplConnLogin_ExperimentalWarningLabelCaption;
+ LANGConnLogin_Username := LANGplConnLogin_Username;
+ LANGConnLogin_Password := LANGplConnLogin_Password;
+ LANGConnLogin_AnonymousCheckButton := LANGplConnLogin_AnonymousCheckButton;
+
+ LANGColumns_Caption := LANGplColumns_Caption;
+ LANGColumns_Title := LANGplColumns_Title;
+ LANGColumns_MoveUpButtonTooltip := LANGplColumns_MoveUpButtonTooltip;
+ LANGColumns_MoveDownButtonTooltip := LANGplColumns_MoveDownButtonTooltip;
+ LANGColumns_TitlesLongName := LANGplColumns_TitlesLongName;
+ LANGColumns_TitlesLongNameExt := LANGplColumns_TitlesLongNameExt;
+ LANGColumns_TitlesLongExt := LANGplColumns_TitlesLongExt;
+ LANGColumns_TitlesLongSize := LANGplColumns_TitlesLongSize;
+ LANGColumns_TitlesLongDateTime := LANGplColumns_TitlesLongDateTime;
+ LANGColumns_TitlesLongDate := LANGplColumns_TitlesLongDate;
+ LANGColumns_TitlesLongTime := LANGplColumns_TitlesLongTime;
+ LANGColumns_TitlesLongUser := LANGplColumns_TitlesLongUser;
+ LANGColumns_TitlesLongGroup := LANGplColumns_TitlesLongGroup;
+ LANGColumns_TitlesLongAttr := LANGplColumns_TitlesLongAttr;
+ LANGColumns_TitlesShortName := LANGplColumns_TitlesShortName;
+ LANGColumns_TitlesShortNameExt := LANGplColumns_TitlesShortNameExt;
+ LANGColumns_TitlesShortExt := LANGplColumns_TitlesShortExt;
+ LANGColumns_TitlesShortSize := LANGplColumns_TitlesShortSize;
+ LANGColumns_TitlesShortDateTime := LANGplColumns_TitlesShortDateTime;
+ LANGColumns_TitlesShortDate := LANGplColumns_TitlesShortDate;
+ LANGColumns_TitlesShortTime := LANGplColumns_TitlesShortTime;
+ LANGColumns_TitlesShortUser := LANGplColumns_TitlesShortUser;
+ LANGColumns_TitlesShortGroup := LANGplColumns_TitlesShortGroup;
+ LANGColumns_TitlesShortAttr := LANGplColumns_TitlesShortAttr;
+
+ LANGTestPlugin_Caption := LANGplTestPlugin_Caption;
+ LANGTestPlugin_Title := LANGplTestPlugin_Title;
+ LANGTestPlugin_ExperimentalWarningLabelCaption := LANGplTestPlugin_ExperimentalWarningLabelCaption;
+ LANGTestPlugin_Plugin := LANGplTestPlugin_Plugin;
+ LANGTestPlugin_Command := LANGplTestPlugin_Command;
+ LANGTestPlugin_Username := LANGplTestPlugin_Username;
+ LANGTestPlugin_Password := LANGplTestPlugin_Password;
+ LANGTestPlugin_AnonymousCheckButton := LANGplTestPlugin_AnonymousCheckButton;
+ LANGTestPlugin_NoPluginsFound := LANGplTestPlugin_NoPluginsFound;
+
+ LANGRemoteWait_Caption := LANGplRemoteWait_Caption;
+ LANGRemoteWait_OperationInProgress := LANGplRemoteWait_OperationInProgress;
+ LANGRemoteWait_ItemsFound := LANGplRemoteWait_ItemsFound;
+
+ LANGSearch_Bytes := LANGplSearch_Bytes;
+ LANGSearch_kB := LANGplSearch_kB;
+ LANGSearch_MB := LANGplSearch_MB;
+ LANGSearch_days := LANGplSearch_days;
+ LANGSearch_weeks := LANGplSearch_weeks;
+ LANGSearch_months := LANGplSearch_months;
+ LANGSearch_years := LANGplSearch_years;
+ LANGSearch_Caption := LANGplSearch_Caption;
+ LANGSearch_General := LANGplSearch_General;
+ LANGSearch_Advanced := LANGplSearch_Advanced;
+ LANGSearch_SearchResults := LANGplSearch_SearchResults;
+ LANGSearch_SearchFor := LANGplSearch_SearchFor;
+ LANGSearch_FileMaskEntryTooltip := LANGplSearch_FileMaskEntryTooltip;
+ LANGSearch_SearchIn := LANGplSearch_SearchIn;
+ LANGSearch_SearchArchivesCheckButton := LANGplSearch_SearchArchivesCheckButton;
+ LANGSearch_FindText := LANGplSearch_FindText;
+ LANGSearch_FindTextEntryTooltip := LANGplSearch_FindTextEntryTooltip;
+ LANGSearch_CaseSensitiveCheckButton := LANGplSearch_CaseSensitiveCheckButton;
+ LANGSearch_StayCurrentFSCheckButton := LANGplSearch_StayCurrentFSCheckButton;
+ LANGSearch_CaseSensitiveMatchCheckButton := LANGplSearch_CaseSensitiveMatchCheckButton;
+ LANGSearch_Size := LANGplSearch_Size;
+ LANGSearch_Date := LANGplSearch_Date;
+ LANGSearch_BiggerThan := LANGplSearch_BiggerThan;
+ LANGSearch_SmallerThan := LANGplSearch_SmallerThan;
+ LANGSearch_ModifiedBetweenRadioButton := LANGplSearch_ModifiedBetweenRadioButton;
+ LANGSearch_NotModifiedAfterRadioButton := LANGplSearch_NotModifiedAfterRadioButton;
+ LANGSearch_ModifiedLastRadioButton := LANGplSearch_ModifiedLastRadioButton;
+ LANGSearch_ModifiedNotLastRadionButton := LANGplSearch_ModifiedNotLastRadionButton;
+ LANGSearch_ModifiedBetweenEntry1 := LANGplSearch_ModifiedBetweenEntry1;
+ LANGSearch_ViewButtonCaption := LANGplSearch_ViewButtonCaption;
+ LANGSearch_NewSearchButtonCaption := LANGplSearch_NewSearchButtonCaption;
+ LANGSearch_GoToFileButtonCaption := LANGplSearch_GoToFileButtonCaption;
+ LANGSearch_FeedToListboxButtonCaption := LANGplSearch_FeedToListboxButtonCaption;
+ LANGSearch_StatusSC := LANGplSearch_StatusSC;
+ LANGSearch_Ready := LANGplSearch_Ready;
+ LANGSearch_PreparingToSearch := LANGplSearch_PreparingToSearch;
+ LANGSearch_SearchInProgress := LANGplSearch_SearchInProgress;
+ LANGSearch_UserCancelled := LANGplSearch_UserCancelled;
+ LANGSearch_SearchFinished := LANGplSearch_SearchFinished;
+ LANGSearch_FilesFound := LANGplSearch_FilesFound;
+ LANGSearch_And := LANGplSearch_And;
+
+ LANGCloseOpenConnection := LANGplCloseOpenConnection;
+ LANGDuplicateTabWarning := LANGplDuplicateTabWarning;
+ LANGDontShowAgain := LANGplDontShowAgain;
+ LANGSwitchOtherPanelWarning := LANGplSwitchOtherPanelWarning;
+ LANGOpenConnectionsWarning := LANGplOpenConnectionsWarning;
+ LANGmiDisconnect_Caption := LANGplmiDisconnect_Caption;
+ LANGDisconnectButton_Tooltip := LANGplDisconnectButton_Tooltip;
+ LANGLeaveArchiveButton_Tooltip := LANGplLeaveArchiveButton_Tooltip;
+ LANGOpenTerminalButton_Tooltip := LANGplOpenTerminalButton_Tooltip;
+ LANGOpenTerminalButton_Caption := LANGplOpenTerminalButton_Caption;
+ LANGShowTextUIDsCheckBox_Caption := LANGplShowTextUIDsCheckBox_Caption;
+ LANGShowTextUIDsCheckBox_Tooltip := LANGplShowTextUIDsCheckBox_Tooltip;
+
+ LANGmiNewTab_Caption := LANGplmiNewTab_Caption;
+ LANGFilePopupMenu_Properties := LANGplFilePopupMenu_Properties;
+ LANGCommandEntry_Tooltip := LANGplCommandEntry_Tooltip;
+ LANGmiFiles_Caption := LANGplmiFiles_Caption;
+
+ LANGPasswordButton_Tooltip := LANGplPasswordButton_Tooltip;
+ LANGHandleRunFromArchive_Bytes := LANGplHandleRunFromArchive_Bytes;
+ LANGHandleRunFromArchive_FileTypeDesc_Unknown := LANGplHandleRunFromArchive_FileTypeDesc_Unknown;
+ LANGHandleRunFromArchive_NotAssociated := LANGplHandleRunFromArchive_NotAssociated;
+ LANGHandleRunFromArchive_SelfExecutable := LANGplHandleRunFromArchive_SelfExecutable;
+ LANGHandleRunFromArchive_CouldntCreateTemporaryDirectory := LANGplHandleRunFromArchive_CouldntCreateTemporaryDirectory;
+ LANGFRunFromVFS_Caption := LANGplFRunFromVFS_Caption;
+ LANGFRunFromVFS_TitleLabel := LANGplFRunFromVFS_TitleLabel;
+ LANGFRunFromVFS_FileNameLabel := LANGplFRunFromVFS_FileNameLabel;
+ LANGFRunFromVFS_FileTypeLabel := LANGplFRunFromVFS_FileTypeLabel;
+ LANGFRunFromVFS_SizeLabel := LANGplFRunFromVFS_SizeLabel;
+ LANGFRunFromVFS_PackedSizeLabel := LANGplFRunFromVFS_PackedSizeLabel;
+ LANGFRunFromVFS_DateLabel := LANGplFRunFromVFS_DateLabel;
+ LANGFRunFromVFS_InfoLabel := LANGplFRunFromVFS_InfoLabel;
+ LANGFRunFromVFS_OpensWithLabel := LANGplFRunFromVFS_OpensWithLabel;
+ LANGFRunFromVFS_ExecuteButton := LANGplFRunFromVFS_ExecuteButton;
+ LANGFRunFromVFS_ExecuteAllButton := LANGplFRunFromVFS_ExecuteAllButton;
+ LANGFSetPassword_Caption := LANGplFSetPassword_Caption;
+ LANGFSetPassword_Label1_Caption := LANGplFSetPassword_Label1_Caption;
+ LANGFSetPassword_Label2_Caption := LANGplFSetPassword_Label2_Caption;
+ LANGFSetPassword_ShowPasswordCheckButton := LANGplFSetPassword_ShowPasswordCheckButton;
+end;
+
+initialization
+ AddTranslation('PL', @SetTranslation);
+ AddTranslation('pl_PL', @SetTranslation);
+end.
diff --git a/translations/UTranslation_RU.pas b/translations/UTranslation_RU.pas
new file mode 100644
index 0000000..0455466
--- /dev/null
+++ b/translations/UTranslation_RU.pas
@@ -0,0 +1,1254 @@
+(*
+ Tux Commander - UTranslation_RU - Russian Localization constants
+ Copyright (C) 2004 Maxim Baranov <maxbaranov@hotbox.ru>
+ !! Currently unmaintained, new translator needed !!
+
+ 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
+*)
+unit UTranslation_RU;
+
+interface
+
+implementation
+
+uses ULocale;
+
+const LANGruF2Button_Caption = 'F2 - Переименов';
+ LANGruF3Button_Caption = 'F3 - Просмотр';
+ LANGruF4Button_Caption = 'F4 - Правка';
+ LANGruF5Button_Caption = 'F5 - Копия';
+ LANGruF6Button_Caption = 'F6 - Перемещ';
+ LANGruF7Button_Caption = 'F7 - Каталог';
+ LANGruF8Button_Caption = 'F8 - Удалить';
+
+ LANGrumnuFile_Caption = '_Файл';
+ LANGrumnuMark_Caption = '_Выделение';
+ LANGrumnuCommands_Caption = 'Коман_ды';
+ LANGrumnuHelp_Caption = '_Справка';
+ LANGrumiExit_Caption = 'В_ыход';
+ LANGrumiSelectGroup_Caption = 'Выделить _группу...';
+ LANGrumiUnselectGroup_Caption = '_Снять Выделение...';
+ LANGrumiSelectAll_Caption = 'Вы_делить Все';
+ LANGrumiUnselectAll_Caption = 'Сн_ять все выделение';
+ LANGrumiInvertSelection_Caption = '_Инвертировать выделение';
+ LANGrumiRefresh_Caption = 'О_бновить окно';
+ LANGrumiAbout_Caption = '_О Программе...';
+
+ LANGruColumn1_Caption = 'Имя';
+ LANGruColumn2_Caption = 'Тип';
+ LANGruColumn3_Caption = 'Размер';
+ LANGruColumn4_Caption = 'Дата';
+ LANGruColumn5_Caption = 'Атрибуты';
+
+ LANGruExpandSelection = 'Расширить выделение';
+ LANGruShrinkSelection = 'Уменьшить выделение';
+ LANGruNoMatchesFound = 'Такие файлы не найдены.';
+ LANGruNoFilesSelected = 'Нет выбранных файлов.';
+ LANGruSelectedFilesDirectories = '%d файла(ов)/каталога(ов)';
+ LANGruDirectoryS = 'каталог %s';
+ LANGruFileS = 'файл %s';
+ LANGruDoYouReallyWantToDeleteTheS = 'Действительно удалить %s ?';
+ LANGruDoYouReallyWantToDeleteTheSS = 'Действительно удалить %s ?'#10'%s';
+ LANGruCopyFiles = 'Копировать файлы';
+ LANGruMoveRenameFiles = 'Переименовать/Переместить файлы';
+ LANGruCopyDFileDirectoriesTo = 'Копировать %d файла(ов)/каталога(ов) в';
+ LANGruMoveRenameDFileDirectoriesTo = 'Переименовать/Переместить %d файла(ов)/каталога(ов) в';
+ LANGruCopySC = 'Копировать:';
+ LANGruMoveRenameSC = 'Переименовать/Переместить:';
+
+ LANGruQuickFind = ' Поиск:';
+
+ LANGruAboutString = 'Tux Commander'#10'Version %s'#10'Build date: %s'#10#10'Copyright (c) 2008 Tomas Bzatek'#10'E-mail: tbzatek@users.sourceforge.net'#10'Website: http://tuxcmd.sourceforge.net/';
+ LANGruAboutStringGnome = 'version %s'#10'Build date: %s'#10'Website: http://tuxcmd.sourceforge.net/';
+ LANGruDiskStatFmt = '%s из %s свободно';
+ LANGruDiskStatVolNameFmt = '[%s] %s из %s кБ свободно';
+ LANGruStatusLineFmt = 'выбрано: %s из %s , файлов: %d из %d';
+ LANGruPanelStrings : array[boolean] of string = ('правой', 'левой');
+
+ LANGruDIR = '<DIR>';
+ LANGruErrorGettingListingForSPanel = 'Невозможно получить список для %s панели:'#10' %s'#10#10'Путь = ''%s''';
+ LANGruErrorGettingListingForSPanelNoPath = 'Невозможно получить список для %s панели:'#10' %s';
+ LANGruErrorCreatingNewDirectorySInSPanel = 'Ошибка создания нового каталога ''%s'' в %s панели:'#10' %s';
+ LANGruErrorCreatingNewDirectorySInSPanelNoPath = 'Ошибка создания нового каталога в %s панели:'#10' %s';
+ LANGruTheFileDirectory = 'Файл/Каталог';
+ LANGruCouldNotBeDeleted = 'не может быть удален';
+ LANGruCouldNotBeDeletedS = 'не может быть удален: %s';
+ LANGruUserCancelled = 'Прервано пользователем';
+ LANGruTheDirectorySIsNotEmpty = 'Каталог %s содержит файлы и/или подкаталоги.';
+ LANGruCannotCopyFile = 'Не могу скопировать файл';
+ LANGruCopyError = 'Ошибка копирования файлов';
+ LANGruMoveError = 'Ошибка перемещения файлов';
+ LANGruOverwriteS = 'Заменить: %s';
+ LANGruWithFileS = 'Файлом: %s';
+ LANGruOvewriteSBytesS = '%s байт, %s';
+ LANGruTheFile = 'Файл';
+ LANGruCopy = 'Копировать';
+ LANGruMove = 'Переместить';
+ LANGruTheDirectory = 'Каталог';
+ LANGruTheSymbolicLink = 'Символьная ссылка';
+ LANGruCannotMoveFile = 'Не могу пререместить файл';
+ LANGruCouldNotBeCreated = 'не может быть создан';
+ LANGruCouldNotBeCreatedS = 'не может быть создан: %s';
+ LANGruFromS = 'Из: %s';
+ LANGruToS = 'В: %s';
+ LANGruCannotCopyFileToItself = 'Нельзя скопировать файл сам в себя';
+ LANGruMemoryAllocationFailed = 'Не хватает памяти:';
+ LANGruCannotOpenSourceFile = 'Не могу открыть исходный файл';
+ LANGruCannotOpenDestinationFile = 'Не могу создать выходной файл';
+ LANGruCannotCloseDestinationFile = 'Не могу закрыть выходной файл';
+ LANGruCannotCloseSourceFile = 'Не могу закрыть исходный файл';
+ LANGruCannotReadFromSourceFile = 'Ошибка чтения исходного файла';
+ LANGruCannotWriteToDestinationFile = 'Ошибка записи в выходной файл';
+
+ LANGruUnknownException = 'Неизвестное исключение';
+ LANGruNoAccess = 'Нет доступа';
+ LANGruUnknownError = 'Неизвестная ошибка';
+
+ LANGruCreateANewDirectory = 'Создать новый каталог';
+ LANGruEnterDirectoryName = 'Укажите имя _каталога:';
+
+ LANGruOverwriteQuestion = 'Подтверждение замены';
+ LANGruOverwriteButton_Caption = '_Заменить';
+ LANGruOverwriteAllButton_Caption = 'Заменить _все';
+ LANGruSkipButton_Caption = '_Пропустить';
+ LANGruOverwriteAllOlderButton_Caption = 'Заменить более _старые';
+ LANGruSkipAllButton_Caption = 'Пропустить вс_е';
+ LANGruRenameButton_Caption = 'Пере_именовать';
+ LANGruAppendButton_Caption = '_Дописать';
+ LANGruRename = 'Переименовать';
+ LANGruRenameFile = 'Переименовать файл ''%s'' в';
+ LANGruIgnoreButton_Caption = '_Игнорировать';
+
+ LANGruProgress = 'Прогресс';
+ LANGruCancel = '_Отмена';
+ LANGruDelete = 'Удалить:';
+
+ LANGruSpecifyFileType = '_Тип файла:';
+
+ LANGruRemoveDirectory = 'Удалить каталог';
+ LANGruDoYouWantToDeleteItWithAllItsFilesAndSubdirectories = 'Вы действительно хотите удалить его целиком, со всеми файлами и подкаталогами?';
+ LANGruRetry = '_Повторить';
+ LANGruDeleteButton_Caption = '_Удалить';
+ LANGruAll = '_Все';
+
+ LANGruCopyFilesSC = 'Копировать файлы:';
+ LANGruAppendQuestion = 'Вы действительно хотите добавить файл ''%s'' в ''%s''?';
+ LANGruPreparingList = 'Подготовка списка...';
+
+ LANGruYouMustSelectAValidFile = 'выбран неверный файл!';
+ LANGrumiVerifyChecksums = 'Пров_ерить контрольную сумму';
+ LANGruVerifyChecksumsCaption = 'Проверка контрольной суммы';
+ LANGruCheckButtonCaptionCheck = '_Проверка';
+ LANGruCheckButtonCaptionStop = '_Остановить';
+ LANGruFileListTooltip = '[?] - Не Проверен'#10'[OK] - Контрольная сумма ОК'#10'[BAD] - Плохая контрольная сумма'#10'[N/A] - Файл не доступен';
+ LANGruFilenameColumnCaption = 'Имя файла';
+ LANGruTheFileSYouAreTryingToOpenIsQuiteBig = 'Файл ''%s'' слишком большой. Вероятно, он не содержит контрольной суммы.'#10#10'Все равно продолжить?';
+ LANGruAnErrorOccuredWhileInitializingMemoryBlock = 'Ошибка инициализации блока памяти. Закройте несколько программ и попробуйте еще раз.';
+ LANGruAnErrorOccuredWhileOpeningFileSS = 'Ошибка открытия файла ''%s'':'#10' %s';
+ LANGruAnErrorOccuredWhileReadingFileSS = 'Ошибка чтения файла ''%s'':'#10' %s';
+ LANGruChecksumNotChecked = '<span weight="bold">Статус:</span> Не Проверен';
+ LANGruChecksumChecking = '<span weight="bold">Статус:</span> Проверяю...';
+ LANGruChecksumInterrupted = '<span weight="bold">Статус:</span> Проверка прервана';
+ LANGruChecksumDOK = '<span weight="bold">Статус:</span> %d%% ОК';
+
+ LANGrumiCreateChecksumsCaption = '_Создать контрольные суммы...';
+ LANGruYouMustSelectAtLeastOneFileToCalculateChecksum = 'Нужно выбрать по крайней мере один файл для создания контрольной суммы!';
+ LANGruCreateChecksumsCaption = 'Создание контрольных сумм';
+ LANGruCCHKSUMPage1Text = 'Если Вы не выбрали'#10'все нужные Вам файлы, закройте это окно и'#10'выберите остальные файлы.';
+ LANGruCCHKSUMPage4Text = 'Друид готов к созданию контрольных сумм'#10'для выбраных файлов. Это может занять несколько минут.'#10'Нажмите "Вперед" для продолжения.';
+ LANGruCCHKSUMPage6Text = 'Ошибка создания контрольной суммы:';
+ LANGruCCHKSUMPage7Text = 'Создание контрольных сумм завершено.'#10#10'Нажмите "Завершить" для выхода.';
+ LANGruCCHKSUMPage1Title = '<span size="xx-large" weight="ultrabold">Подготовка к созданию контрольной суммы</span>';
+ LANGruCCHKSUMPage2Title = '<span size="xx-large" weight="ultrabold">Выберите тип контрольной суммы</span>';
+ LANGruCCHKSUMPage3Title = '<span size="xx-large" weight="ultrabold">Выберите имя файла</span>';
+ LANGruCCHKSUMPage4Title = '<span size="xx-large" weight="ultrabold">Готов к созданию контрольных сумм</span>';
+ LANGruCCHKSUMPage5Title = '<span size="xx-large" weight="ultrabold">В процессе...</span>';
+ LANGruCCHKSUMPage6Title = '<span size="xx-large" weight="ultrabold">Ошибка!</span>';
+ LANGruCCHKSUMPage7Title = '<span size="xx-large" weight="ultrabold">Готово</span>';
+ LANGruCCHKSUMSFVFile = 'Файл SFV';
+ LANGruCCHKSUMMD5sumFile = 'Файл MD5';
+ LANGruCCHKSUMFileName = '_Имя файла:';
+ LANGruCCHKSUMCreateSeparateChecksumFiles = 'Создать _отделные файлы контрольнух сумм';
+ LANGruCCHKSUMNowProcessingFileS = 'В прецессе создания файла: %s';
+ LANGruCCHKSUMFinishCaption = '_Завершить';
+ LANGruCCHKSUMAreYouSureYouWantToAbortTheProcessing = 'Хотите прервать текущий процесс?';
+ LANGruCCHKSUMAnErrorOccuredWhileOpeningFileSS = 'Ошибка открытия файла ''%s'': %s'#10;
+ LANGruCCHKSUMAnErrorOccuredWhileReadingFileSS = 'Ошибка чтения файла ''%s'': %s'#10;
+ LANGruCCHKSUMAnErrorOccuredWhileWritingFileSS = 'Ошибка записи в файл ''%s'': %s'#10;
+
+ LANGruAnErrorOccuredWhileWritingFileSS = 'Ошибка записи в файл ''%s'':'#10' %s';
+ LANGruTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt = 'Файл ''%s'' уже существует. Хотите его заменить?';
+ LANGruTheTargetFileSCannotBeRemovedS = 'Невозможно удалить файл ''%s'' : %s';
+ LANGruMergeCaption = 'Объединить';
+ LANGruPleaseInsertNextDiskOrGiveDifferentLocation = 'Пожалуьста, вставте следующий диск, или укажите другой каталог: ';
+ LANGruMergeOfSSucceeded = 'Объединение файла ''%s'' произошло успешно (CRC checksum OK).';
+ LANGruWarningCreatedFileFailsCRCCheck = 'Внимание: Созданный файл имеет неверную контрольную сумму!';
+ LANGruMergeOfSSucceeded_NoCRCFileAvailable = 'Объединение ''%s'' произошло успешно (без проверки контрольной суммы).';
+ LANGruMergeSAndAllFilesWithAscendingNamesToTheFollowingDirectory = 'Объединить все файлы начинающиеся с ''%s'' в каталог:';
+ LANGruMergeSC = 'Объединение:';
+ LANGrumiSplitFileCaption = '_Разделить файл...';
+ LANGrumiMergeFilesCaption = '_Объедить файлы...';
+
+ LANGruSplitTheFileSToDirectory = '_Разбить файл ''%s'' в каталог:';
+ LANGruSplitSC = 'Разбить:';
+ LANGruSplitFile = 'Разбить файл';
+ LANGruBytesPerFile = 'Разбить _на части размером:';
+ LANGruAutomatic = 'Автоматически';
+ LANGruDeleteFilesOnTargetDisk = '_Удалить все файлы на получателе (только для сменных дисков)';
+ LANGruSplitCaption = 'Разбить';
+ LANGruCannotOpenFileS = 'Невозможно открыть файл ''%s''';
+ LANGruCannotSplitTheFileToMoreThan999Parts = 'Невозможно разбить файл на более чем 999 частей!';
+ LANGruThereAreSomeFilesInTheTargetDirectorySDoYouWantToDeleteThem = 'Каталог получатель %s содержит файлы '#10' Вы действительно хотите удалить его содержимое?';
+ LANGruThereAreDFilesInTheTargetDirectoryDoYouWantToDeleteThem = 'Каталог получатель содержит %d файлов. Вы действительно хотите удалить его содержимое?';
+ LANGruAnErrorOccuredWhileOperationS = 'Ошибка во время выполнения: %s';
+ LANGruSplitOfSSucceeded = 'Разделение файла ''%s'' произошло успешно.';
+ LANGruSplitOfSFailed = 'Невосможно разделить файл: %s';
+
+ LANGrumnuShow_Caption = 'В_ид';
+ LANGrumiShowDotFiles_Caption = 'Показать _Спрятаные файлы';
+ LANGruTheFileYouAreTryingToOpenIsQuiteBig = 'Открываемый файл слишком большой. Программа загружающая этот файл может вызвать замедление системы.'#10'Вы действительно хотите продолжить';
+ LANGruCannotExecuteSPleaseCheckTheConfiguration = 'Невозможно выполнить ''%s''. Проверьте конфигурацию или произведите ассоциацию типов файлов сначала.';
+ LANGruEdit = 'Правка';
+ LANGruEnterFilenameToEdit = '_Введите имя файла для правки:';
+
+ LANGrumnuSettings_Caption = '_Настройки';
+ LANGrumiFileTypes_Caption = '_Типы файлов...';
+ LANGruThereIsNoApplicationAssociatedWithS = 'Нет приложений, ассоциированных с файлом "%s".'#10#10'Вы хотите произвести ассоциацию сейчас?';
+ LANGruErrorExecutingCommand = 'Ошибка выполнения команды!';
+ LANGruEditFileTypesCaption = 'Типы файлов';
+ LANGruTitleLabel_Caption = '<span size="x-large" weight="ultrabold">Конфигурация типов файлов</span>';
+ LANGruExtensionsColumn = 'Типы';
+ LANGruDescriptionColumn = 'Описание';
+ LANGruFileTypesList = 'Список типов файлов';
+ LANGruActionName = 'Имя действия';
+ LANGruCommand = 'Команда';
+ LANGruSetDefaultActionButton_Caption = '_Использовать по умолчанию';
+ LANGruRunInTerminalCheckBox_Caption = 'Запустить в _теминале';
+ LANGruAutodetectCheckBox_Caption = 'Авто-определение _графических программ';
+ LANGruBrowseButton_Caption = '_Поиск...';
+ LANGruCommandLabel_Caption = 'Ко_манда:';
+ LANGruDescriptionLabel_Caption = '_Описание:';
+ LANGruFNameExtLabel_Caption = '_Добавить тип:';
+ LANGruNotebookPageExtensions = 'Тип файла';
+ LANGruNotebookPageActions = 'Действия';
+ LANGruDefault = ' (по умолчанию)';
+ LANGruCannotSaveFileTypeAssociationsBecauseOtherProcess = 'Невозможно сохранить цонфигурацию типов файлов: другой процесс обновил ее на диске.';
+
+ LANGruDefaultColor = 'Цвет по _умолчанию';
+ LANGruIcon = '_Значок:';
+ LANGruBrowseForIcon = 'Выбрерите значок';
+ LANGruSelectFileTypeColor = 'Выберите Цвет';
+ LANGruColor = '_Цвет:';
+
+ LANGrumiChangePermissions_Caption = 'Изменить _Права...';
+ LANGrumiChangeOwner_Caption = 'Изменить _Владельца/Группу...';
+ LANGrumiCreateSymlink_Caption = 'Со_здать Ссылку...';
+ LANGrumiEditSymlink_Caption = 'Пр_авить Ссылку';
+ LANGruChmodProgress = 'Изменить права:';
+ LANGruChownProgress = 'Изменить владельца:';
+ LANGruYouMustSelectAValidSymbolicLink = 'Необходимо выбрать символьную ссылку!';
+ LANGruPopupRunS = '_Выполнить %s';
+ LANGruPopupOpenS = '_Открыть %s';
+ LANGruPopupGoUp = 'Прейти на уровень в_ыше';
+ LANGruPopupOpenWithS = 'Открыть с помощью %s';
+ LANGruPopupDefault = ' (по умолчанию)';
+ LANGruPopupOpenWith = 'Открыть с помо_щью...';
+ LANGruPopupViewFile = '_Просмотр файла';
+ LANGruPopupEditFile = 'Пр_авить файл';
+ LANGruPopupMakeSymlink = 'создать _ссылку';
+ LANGruPopupRename = 'Переи_меновать';
+ LANGruPopupDelete = 'У_далить';
+ LANGruDialogChangePermissions = 'Изменить права';
+ LANGruCouldNotBeChmoddedS = 'Невозможно изменить права доступа: %s';
+ LANGruDialogChangeOwner = 'Изменить владельца';
+ LANGruCouldNotBeChownedS = 'Невозможно изменить владельца: %s';
+ LANGruDialogMakeSymlink = 'Создать ссылку';
+ LANGruDialogEditSymlink = 'Править ссылку';
+ LANGruFEditSymlink_Caption = 'Править символьную ссылку';
+ LANGruFEditSymlink_SymbolicLinkFilename = '_Имя символьной ссылки:';
+ LANGruFEditSymlink_SymbolicLinkPointsTo = 'Ссылка указывает _на:';
+
+ LANGruFChmod_Caption = 'Права доступа';
+ LANGruFChmod_PermissionFrame = 'Права';
+ LANGruFChmod_FileFrame = 'Файл';
+ LANGruFChmod_ApplyRecursivelyFor = 'Применить _Рекурсивно';
+ LANGruFChmod_miAllFiles = 'Для всех файлов и каталогов';
+ LANGruFChmod_miDirectories = 'Только для каталогов';
+ LANGruFChmod_OctalLabel = '_Восьмеричный:';
+ LANGruFChmod_SUID = 'SUID - Установить идентификатор пользователя';
+ LANGruFChmod_SGID = 'SGID - Установить идентификатор группы';
+ LANGruFChmod_Sticky = 'Приклееный';
+ LANGruFChmod_RUSR = 'RUSR - Чтение для владельца';
+ LANGruFChmod_WUSR = 'WUSR - Запись для владельца';
+ LANGruFChmod_XUSR = 'XUSR - Выполнение/Поиск для владельца';
+ LANGruFChmod_RGRP = 'RGRP - Чтение для группы';
+ LANGruFChmod_WGRP = 'WGRP - Запись для группы';
+ LANGruFChmod_XGRP = 'XGRP - Выполнение/Поиск для группы';
+ LANGruFChmod_ROTH = 'ROTH - Чтение для остальных';
+ LANGruFChmod_WOTH = 'WOTH - Запись для остальных';
+ LANGruFChmod_XOTH = 'XOTH - Выполнение/Поиск для остальных';
+ LANGruFChmod_TextLabel = '<span weight="ultrabold">Текст:</span> %s';
+ LANGruFChmod_FileLabel = '<span weight="ultrabold">Файл:</span> %s'#10'<span weight="ultrabold">Текст:</span> %s'#10 +
+ '<span weight="ultrabold">Восьмеричный:</span> %d'#10'<span weight="ultrabold">Владелец:</span> %s'#10 +
+ '<span weight="ultrabold">Группа:</span> %s';
+
+ LANGruFChown_Caption = 'Изменить владельца/группу';
+ LANGruFChown_OwnerFrame = 'Имя владельца';
+ LANGruFChown_GroupFrame = 'Имя группы';
+ LANGruFChown_FileFrame = 'Файл';
+ LANGruFChown_ApplyRecursively = 'Применить _Рекусивно';
+
+ LANGruFSymlink_Caption = 'Создать символьную ссылку';
+ LANGruFSymlink_ExistingFilename = 'Существующий _файл:';
+ LANGruFSymlink_SymlinkFilename = 'Имя символьной _ссылки:';
+
+ LANGrumnuBookmarks_Caption = '_Закладки';
+ LANGrumiAddBookmark_Caption = 'Добавить закладку';
+ LANGrumiEditBookmarks_Caption = 'Изменить закладку';
+ LANGruBookmarkPopupDelete_Caption = 'У_далить';
+ LANGrumiPreferences_Caption = 'Изменить _настройки...';
+ LANGruTheCurrentDirectoryAlreadyExistsInTheBookmarksList = 'Текущий каталог уже добавлен к закладкам';
+ LANGruSomeOtherInstanceChanged1 = 'Другая программа изменила файл конфигурации на диске. Вы хотите применить нове установки?'#10#10'Внимание: Если Вы сейчас нажмете ';
+ LANGruSomeOtherInstanceChanged2 = '"Нет", конфигурация будет перезаписана во время завершения программы!';
+
+ LANGruPreferences_Caption = 'Настройки';
+ LANGruPreferences_TitleLabel_Caption = '<span size="x-large" weight="ultrabold">Настройки программы</span>';
+ LANGruPreferences_GeneralPage = 'Общие';
+ LANGruPreferences_FontsPage = 'Шрифты';
+ LANGruPreferences_ColorsPage = 'Цвета';
+ LANGruPreferences_RowHeight = ' _Высота строк:';
+ LANGruPreferences_NumHistoryItems = '_Элементы командной строки:';
+ LANGruPreferences_Default = 'По умолчанию';
+ LANGruPreferences_ClearReadonlyAttribute = 'Во время копирования с CD-ROM сбрасывать _атрибут "только для чтения"';
+ LANGruPreferences_DisableMouseRenaming = 'Запретить переименование _мышью';
+ LANGruPreferences_ShowFiletypeIconsInList = 'Показывать _значки';
+ LANGruPreferences_ExternalAppsLabel = '<span weight="ultrabold">Внешние программы</span>';
+ LANGruPreferences_Viewer = '_Просмотр:';
+ LANGruPreferences_Editor = '_Редактор:';
+ LANGruPreferences_Terminal = '_Терминал:';
+ LANGruPreferences_ListFont = 'Шрифт списков:';
+ LANGruPreferences_Change = 'Изменить...';
+ LANGruPreferences_UseDefaultFont = 'Использовать шрифт по _умолчанию';
+ LANGruPreferences_Foreground = 'Передний план';
+ LANGruPreferences_Background = 'Фон';
+ LANGruPreferences_NormalItem = 'Обычный элемент:';
+ LANGruPreferences_SetToDefaultToUseGTKThemeColors = 'Использовать цвета темы GTK';
+ LANGruPreferences_Cursor = 'Курсор:';
+ LANGruPreferences_InactiveItem = 'Неактивный элемент:';
+ LANGruPreferences_SelectedItem = 'Выбранный элемент:';
+ LANGruPreferences_LinkItem = 'Сымвольные ссылки:';
+ LANGruPreferences_LinkItemHint = 'Использовать цвета нормальных элементов для ссылок';
+ LANGruPreferences_DotFileItem = 'Спрятанные файлы:';
+ LANGruPreferences_DotFileItemHint = 'Использовать цвета нормальных элементов для спрятанных файлов';
+ LANGruPreferences_BrowseForApplication = 'Поиск программы';
+ LANGruPreferences_DefaultS = 'По умолчанию: %s';
+ LANGruPreferences_SelectFont = 'Выберите шрифт';
+
+ (*************** STRINGS ADDED TO v0.4.101 **********************************************************************************)
+ LANGruBookmarkButton_Tooltip = 'Show bookmarks';
+ LANGruUpButton_Tooltip = 'Go to the upper directory';
+ LANGruRootButton_Tooltip = 'Go to the root directory (/)';
+ LANGruHomeButton_Tooltip = 'Go to the home directory (/home/user)';
+ LANGruLeftEqualButton_Tooltip = 'Switch the right panel to the same directory';
+ LANGruRightEqualButton_Tooltip = 'Switch the left panel to the same directory';
+ LANGrumiShowDirectorySizes_Caption = 'Show d_irectory sizes';
+ LANGrumiTargetSource_Caption = 'Target = Source';
+ LANGruFileTypeDirectory = 'Directory';
+ LANGruFileTypeFile = 'File';
+ LANGruFileTypeMetafile = 'This is a common meta-item';
+ LANGruPreferencesPanelsPage = 'Panels';
+ LANGruPreferencesApplicationsPage = 'Applications';
+ LANGruPreferencesExperimentalPage = 'Experimental';
+ LANGruPreferencesSelectAllDirectoriesCheckBox_Caption = 'Select _also directories when selecting all';
+ LANGruPreferencesNewStyleAltOCheckBox_Caption = '_New style Alt+O';
+ LANGruPreferencesNewStyleAltOCheckBox_Tooltip = 'Stay in the same directory when switching directory opposite panel by pressing Ctrl/Alt+O';
+ LANGruPreferencesShowFuncButtonsCheckBox_Caption = 'Show function _key buttons';
+ LANGruPreferencesSizeFormatLabel_Caption = '_Size format:';
+ LANGruPreferencesmiSizeFormat1 = 'System';
+ LANGruPreferencesmiSizeFormat6 = 'Grouped';
+ LANGruPreferencesAutodetectXApp = 'Autodetect X app';
+ LANGruPreferencesAlwaysRunInTerminal = 'Always run in terminal';
+ LANGruPreferencesNeverRunInTerminal = 'Never run in terminal';
+ LANGruPreferencesCmdLineBehaviourLabel_Caption = '_Executing from commandline:';
+ LANGruPreferencesFeatures = 'Features';
+ LANGruPreferencesDisableMouseRename_Tooltip = 'You can still perform quick-rename by pressing Shift+F6';
+ LANGruPreferencesDisableFileTipsCheckBox_Caption = 'Disable file _tooltips';
+ LANGruPreferencesDisableFileTipsCheckBox_Tooltip = 'Don''t show panel tooltips if the text in a comlumn is truncated';
+ LANGruPreferencesShow = 'Show';
+ LANGruPreferencesDirsInBoldCheckBox_Caption = 'Directories in _bold';
+ LANGruPreferencesDisableDirectoryBracketsCheckBox_Caption = 'Disable directory b_rackets';
+ LANGruPreferencesOctalPermissionsCheckBox_Caption = 'Show _octal permissions';
+ LANGruPreferencesOctalPermissionsCheckBox_Tooltip = 'Show file/directory permissions as a number instead of text form (-rw-rw-rw-)';
+ LANGruPreferencesMovement = 'Movement';
+ LANGruPreferencesLynxLikeMotionCheckBox_Caption = '_Lynx-like motion';
+ LANGruPreferencesInsertMovesDownCheckBox_Caption = '_Insert moves down';
+ LANGruPreferencesSpaceMovesDownCheckBox_Caption = '_Space moves down';
+ LANGruPreferencesViewer = 'Viewer';
+ LANGruPreferencesCommandSC = 'Command:';
+ LANGruPreferencesUseInternalViewer = 'Use _internal viewer';
+ LANGruPreferencesEditor = 'Editor';
+ LANGruPreferencesTerminal = 'Terminal';
+ LANGruPreferencesExperimentalFeatures = 'Experimental features';
+ LANGruPreferencesExperimentalWarningLabel_Caption = '<span weight="ultrabold">Warning:</span> These features are currently under development and may not work properly. Use them at your own risk!';
+ LANGruPreferencesFocusRefreshCheckBox_Caption = 'Perform _refresh on window focus';
+ LANGruPreferencesFocusRefreshCheckBox_Tooltip = 'Very slow panel refreshing at this moment';
+ LANGruPreferencesWMCompatModeCheckBox_Caption = '_WM Compatibility mode';
+ LANGruPreferencesWMCompatModeCheckBox_Tooltip = 'Use if you have some window manager issues (for example IceWM doesn''t perform window maximize correctly)';
+ LANGruPreferencesCompatUseLibcSystemCheckBox_Caption = 'Use libc _system() for executing programs';
+ LANGruPreferencesCompatUseLibcSystemCheckBox_Tooltip = 'Use in case of freeze or crash problems when launching external applications';
+
+ (*************** STRINGS ADDED TO v0.5.70 **********************************************************************************)
+ LANGrumiSearchCaption2 = '_Search...';
+ LANGrumiNoMounterBarCaption = 'Do_n''t show mounter bar';
+ LANGrumiShowOneMounterBarCaption = 'Show _one mounter bar';
+ LANGrumiShowTwoMounterBarCaption = 'Show _two mounter bars';
+ LANGrumnuNetworkCaption = 'N_etwork';
+ LANGrumiConnectionsCaption = '_Connections...';
+ LANGrumiOpenConnectionCaption = '_Open connection...';
+ LANGrumiQuickConnectCaption = '_Quick connect...';
+ LANGrumnuPluginsCaption = 'Pl_ugins';
+ LANGrumiTestPluginCaption = '_Test plugin...';
+ LANGrumiMounterSettingsCaption = '_Mounter Settings...';
+ LANGrumiColumnsCaption = 'P_anel Columns...';
+ LANGrumiSavePositionCaption = '_Save position';
+ LANGrumiMountCaption = '_Mount';
+ LANGrumiUmountCaption = '_Umount';
+ LANGrumiEjectCaption = '_Eject';
+ LANGrumiDuplicateTabCaption = 'Duplicate current tab';
+ LANGrumiCloseTabCaption = 'Close current tab';
+ LANGrumiCloseAllTabsCaption = 'Close all tabs';
+ LANGruCannotDetermineDestinationEngine = 'Cannot determine destination engine. Please enter correct path and try it again.';
+ LANGruCannotLoadFile = 'Cannot load file ''%s''. Please check the permissions.';
+ LANGruMountPointDevice = 'Mount Point: %s'#10'Device: %s';
+ LANGruMountSC = 'Mount:';
+ LANGruNoPluginsFound = 'No plugins found';
+ LANGruPluginAbout = 'About...';
+ LANGruCouldntOpenURI = 'Couldn''t open the URI specified. Please check the consistency of the resource identifier and the access permission.';
+ LANGruPluginAboutInside = 'Plugin: %s'#10#10'%s'#10'%s';
+ LANGruAreYouSureCloseAllTabs = 'Are you sure you want to close all inactive tabs?';
+ LANGruCouldntOpenURIArchive = 'Couldn''t open the archive. Please check consistency and access permissions.';
+ LANGruThereIsNoModuleAvailable = 'There are no VFS modules available that can handle this connection';
+ LANGruIgnoreError = 'Do you really want to ignore the error? The source file will be then deleted';
+ LANGruErrorMount = 'There was an error while mounting the device ''%s'':'#10#10;
+ LANGruErrorUmount = 'There was an error while umounting the device ''%s'':'#10#10;
+ LANGruErrorEject = 'There was an error while ejecting the device ''%s'':'#10#10;
+
+ LANGruMounterPrefs_Caption = 'Mounter Settings';
+ LANGruMounterPrefs_TitleLabelCaption = 'Mounter Settings';
+ LANGruMounterPrefs_ListViewFrameCaption = 'Mounter';
+ LANGruMounterPrefs_MountName = 'Mount Name';
+ LANGruMounterPrefs_MountPoint = 'Mount Point';
+ LANGruMounterPrefs_Device = 'Device';
+ LANGruMounterPrefs_MoveUpButtonTooltip = 'Move item up';
+ LANGruMounterPrefs_MoveDownButtonTooltip = 'Move item down';
+ LANGruMounterPrefs_UseFSTabDefaultsCheckBox = 'Use _fstab default items';
+ LANGruMounterPrefs_UseFSTabDefaultsCheckBoxTooltip = 'By checking this, the mounter bar will be filled by default items found in the /etc/fstab (system mountlist file)';
+ LANGruMounterPrefs_ToggleModeCheckBox = 'Buttons stay _down when mounted';
+ LANGruMounterPrefs_ToggleModeCheckBoxTooltip = 'When checked, the mounter buttons will stay down if the device is mounted; another click will cause umounting them (eject in this case)';
+ LANGruMounterPrefs_PropertiesFrameCaption = 'Mounter item properties';
+ LANGruMounterPrefs_DisplayTextLabelCaption = 'Displayed _Text:';
+ LANGruMounterPrefs_MountPointLabelCaption = 'Mount _Point:';
+ LANGruMounterPrefs_MountDeviceLabelCaption = '_Device:';
+ LANGruMounterPrefs_DeviceTypeLabelCaption = 'Device T_ype:';
+ LANGruMounterPrefs_miLocalDiskCaption = 'Local disk';
+ LANGruMounterPrefs_miRemovableCaption = 'Removable';
+ LANGruMounterPrefs_miCDCaption = 'CD/DVD drive';
+ LANGruMounterPrefs_miFloppyCaption = 'Floppy drive';
+ LANGruMounterPrefs_miNetworkCaption = 'Network';
+ LANGruMounterPrefs_MountCommandLabelCaption = 'Mount _Command:';
+ LANGruMounterPrefs_UmountCommandLabelCaption = 'Umount C_ommand:';
+ LANGruMounterPrefs_MountCommandEntryTooltip = 'Syntax: use %dev for substitution of the device and %dir for the mount point or leave blank for default mount'#10'Note: beware of interactive commands, tuxcmd could freeze!'#10'Example: smbmount %dev %dir -o username=netuser,password=somepass';
+ LANGruMounterPrefs_UmountCommandEntryTooltip = 'Syntax: use %dev for substitution of the device and %dir for the mount point or leave blank for default umount'#10'Example: smbumount $dir';
+ LANGruMounterPrefs_IconLabelCaption = '_Icon:';
+
+ LANGruConnMgr_Caption = 'Open New Connection';
+ LANGruConnMgr_ConnectButton = 'Co_nnect';
+ LANGruConnMgr_OpenConnection = 'Open Connection';
+ LANGruConnMgr_NameColumn = 'Name';
+ LANGruConnMgr_URIColumn = 'URI';
+ LANGruConnMgr_AddConnectionButtonCaption = '_Add site...';
+ LANGruConnMgr_AddConnectionButtonTooltip = 'Add new connection';
+ LANGruConnMgr_EditButtonCaption = '_Edit...';
+ LANGruConnMgr_EditButtonTooltip = 'Edit selected connection';
+ LANGruConnMgr_RemoveButtonCaption = '_Remove site';
+ LANGruConnMgr_RemoveButtonTooltip = 'Delete selected connection';
+ LANGruConnMgr_DoYouWantDelete = 'Do you really want to delete the connection ''%s''?';
+
+ LANGruConnProp_FTP = 'FTP';
+ LANGruConnProp_SFTP = 'SFTP (ssh subsystem)';
+ LANGruConnProp_SMB = 'Windows share (SMB)';
+ LANGruConnProp_HTTP = 'WebDAV (HTTP)';
+ LANGruConnProp_HTTPS = 'Secure WebDAV (HTTPS)';
+ LANGruConnProp_Other = 'Other <span style="italic">(please specify in URI)</span>';
+ LANGruConnProp_Caption = 'Connection properties';
+ LANGruConnProp_VFSModule = '_VFS module:';
+ LANGruConnProp_URI = '_URI:';
+ LANGruConnProp_URIEntryTooltip = 'Correct URI should contain service type prefix and server address';
+ LANGruConnProp_DetailedInformations = 'Detailed informations';
+ LANGruConnProp_Name = '_Name:';
+ LANGruConnProp_Server = 'Ser_ver[:port]:';
+ LANGruConnProp_Username = 'Userna_me:';
+ LANGruConnProp_UserNameEntryTooltip = 'Leave blank for anonymous login';
+ LANGruConnProp_Password = '_Password:';
+ LANGruConnProp_TargetDirectory = 'Target _directory:';
+ LANGruConnProp_ServiceType = '_Service type:';
+ LANGruConnProp_MaskPassword = '_Mask password';
+ LANGruConnProp_MenuItemCaption = 'Default <span style="italic">(all suitable modules)</span>';
+
+ LANGruConnLogin_Caption = 'Authentication required';
+ LANGruConnLogin_Login = 'Login';
+ LANGruConnLogin_ExperimentalWarningLabelCaption = 'You must log in to access %s';
+ LANGruConnLogin_Username = '_Username:';
+ LANGruConnLogin_Password = '_Password:';
+ LANGruConnLogin_AnonymousCheckButton = '_Anonymous';
+
+ LANGruColumns_Caption = 'Panel Columns Settings';
+ LANGruColumns_Title = 'Panel Columns Settings';
+ LANGruColumns_MoveUpButtonTooltip = 'Move item up';
+ LANGruColumns_MoveDownButtonTooltip = 'Move item down';
+ LANGruColumns_TitlesLongName = 'Name';
+ LANGruColumns_TitlesLongNameExt = 'Name + Extension';
+ LANGruColumns_TitlesLongExt = 'Extension';
+ LANGruColumns_TitlesLongSize = 'Size';
+ LANGruColumns_TitlesLongDateTime = 'Date + Time';
+ LANGruColumns_TitlesLongDate = 'Date';
+ LANGruColumns_TitlesLongTime = 'Time';
+ LANGruColumns_TitlesLongUser = 'User';
+ LANGruColumns_TitlesLongGroup = 'Group';
+ LANGruColumns_TitlesLongAttr = 'Attributes';
+ LANGruColumns_TitlesShortName = 'Name';
+ LANGruColumns_TitlesShortNameExt = 'Name';
+ LANGruColumns_TitlesShortExt = 'Ext';
+ LANGruColumns_TitlesShortSize = 'Size';
+ LANGruColumns_TitlesShortDateTime = 'Date';
+ LANGruColumns_TitlesShortDate = 'Date';
+ LANGruColumns_TitlesShortTime = 'Time';
+ LANGruColumns_TitlesShortUser = 'User';
+ LANGruColumns_TitlesShortGroup = 'Group';
+ LANGruColumns_TitlesShortAttr = 'Attr';
+
+ LANGruTestPlugin_Caption = 'Test VFS Plugin';
+ LANGruTestPlugin_Title = 'Test VFS Plugin';
+ LANGruTestPlugin_ExperimentalWarningLabelCaption = '<span weight="ultrabold">Warning:</span> The VFS subsystem and its plugins are under heavy development and may contain bugs. Use this function under your own risk!';
+ LANGruTestPlugin_Plugin = '_Plugin:';
+ LANGruTestPlugin_Command = 'Co_mmand:';
+ LANGruTestPlugin_Username = '_Username:';
+ LANGruTestPlugin_Password = '_Password:';
+ LANGruTestPlugin_AnonymousCheckButton = '_Anonymous login (doesn''t call VFSLogin)';
+ LANGruTestPlugin_NoPluginsFound = 'No plugins found';
+
+ LANGruRemoteWait_Caption = 'Operation in progress';
+ LANGruRemoteWait_OperationInProgress = 'Operation in progress, please be patient...';
+ LANGruRemoteWait_ItemsFound = 'Items found so far: %d';
+
+ LANGruSearch_Bytes = 'Bytes';
+ LANGruSearch_kB = 'kB';
+ LANGruSearch_MB = 'MB';
+ LANGruSearch_days = 'days';
+ LANGruSearch_weeks = 'weeks';
+ LANGruSearch_months = 'months';
+ LANGruSearch_years = 'years';
+ LANGruSearch_Caption = 'Find Files';
+ LANGruSearch_General = 'General';
+ LANGruSearch_Advanced = 'Advanced';
+ LANGruSearch_SearchResults = 'Search _Results:';
+ LANGruSearch_SearchFor = 'Search _for:';
+ LANGruSearch_FileMaskEntryTooltip = 'Tip: Use colons (";") to specify multiple files to find';
+ LANGruSearch_SearchIn = 'Search _in:';
+ LANGruSearch_SearchArchivesCheckButton = 'Search _archives';
+ LANGruSearch_FindText = 'Find _text:';
+ LANGruSearch_FindTextEntryTooltip = 'Leave blank for no text matching'#10'Please note that we are using UTF-8 in GUI part';
+ LANGruSearch_CaseSensitiveCheckButton = 'Cas_e sensitive';
+ LANGruSearch_StayCurrentFSCheckButton = 'Include other files_ystems';
+ LANGruSearch_CaseSensitiveMatchCheckButton = 'Ca_se sensitive';
+ LANGruSearch_Size = 'Size';
+ LANGruSearch_Date = 'Date';
+ LANGruSearch_BiggerThan = '_Bigger than';
+ LANGruSearch_SmallerThan = '_Smaller than';
+ LANGruSearch_ModifiedBetweenRadioButton = '_Modified between';
+ LANGruSearch_NotModifiedAfterRadioButton = '_Not modified after';
+ LANGruSearch_ModifiedLastRadioButton = 'Mod_ified in the last';
+ LANGruSearch_ModifiedNotLastRadionButton = 'No_t modified in the last';
+ LANGruSearch_ModifiedBetweenEntry1 = '"Please use this date format:" c';
+ LANGruSearch_ViewButtonCaption = '_View file';
+ LANGruSearch_NewSearchButtonCaption = '_New search';
+ LANGruSearch_GoToFileButtonCaption = '_Go to file';
+ LANGruSearch_FeedToListboxButtonCaption = 'Feed to _listbox';
+ LANGruSearch_StatusSC = 'Status:';
+ LANGruSearch_Ready = 'Ready.';
+ LANGruSearch_PreparingToSearch = 'Preparing to search.';
+ LANGruSearch_SearchInProgress = 'Search in progress:';
+ LANGruSearch_UserCancelled = 'User cancelled.';
+ LANGruSearch_SearchFinished = 'Search finished';
+ LANGruSearch_FilesFound = '%d files found';
+ LANGruSearch_And = 'and';
+
+ (*************** STRINGS ADDED TO v0.5.82 **********************************************************************************)
+ LANGruCloseOpenConnection = 'You''re trying to open new connection over the another active connection. By continuing, the previous connection will be closed and replaced by the new requested one.'#10#10'Do you want to continue?';
+ LANGruDuplicateTabWarning = 'You are trying to open a new tab from a remote directory. However, engine cloning is not supported. The directory in the new tab will point to a local filesystem.';
+ LANGruDontShowAgain = '_Don''t show this message again';
+ LANGruSwitchOtherPanelWarning = 'You are trying to open the remote directory in the opposite panel. However, engine cloning is not supported. The target directory will not be switched.';
+ LANGruOpenConnectionsWarning = 'There are some active connections opened in the panel. By closing the application, these connections will be disconnected.'#10#10'Do you want to continue quit?';
+ LANGrumiDisconnect_Caption = '_Disconnect';
+ LANGruDisconnectButton_Tooltip = 'Disconnect active connection';
+ LANGruLeaveArchiveButton_Tooltip = 'Close current archive';
+ LANGruOpenTerminalButton_Tooltip = 'Opens a new terminal windows from the current directory';
+ LANGruOpenTerminalButton_Caption = 'Open Te_rminal';
+ LANGruShowTextUIDsCheckBox_Caption = 'Show text _UIDs';
+ LANGruShowTextUIDsCheckBox_Tooltip = 'Show textual User and Group informations instead of numbers (UID/GID)';
+
+ (*************** STRINGS ADDED TO v0.5.100 **********************************************************************************)
+ LANGrumiNewTab_Caption = 'New folder _tab';
+ LANGruFilePopupMenu_Properties = '_Properties';
+ LANGruCommandEntry_Tooltip = 'Use %s as file/directory placeholder';
+ LANGrumiFiles_Caption = 'Files only';
+
+ (*************** STRINGS ADDED TO v0.6.31 **********************************************************************************)
+ LANGruPasswordButton_Tooltip = 'Archive requires password.'#10'Click to set';
+ LANGruHandleRunFromArchive_Bytes = 'bytes';
+ LANGruHandleRunFromArchive_FileTypeDesc_Unknown = '(unknown)';
+ LANGruHandleRunFromArchive_NotAssociated = '(not associated)';
+ LANGruHandleRunFromArchive_SelfExecutable = '(self-executable)';
+ LANGruHandleRunFromArchive_CouldntCreateTemporaryDirectory = 'Couldn''t create temporary directory "%s": %s.'#10#10'Please check the temporary directory settings and try it again.';
+ LANGruFRunFromVFS_Caption = 'Packed file properties';
+ LANGruFRunFromVFS_TitleLabel = 'File Properties';
+ LANGruFRunFromVFS_FileNameLabel = 'File name:';
+ LANGruFRunFromVFS_FileTypeLabel = 'File type:';
+ LANGruFRunFromVFS_SizeLabel = 'Size:';
+ LANGruFRunFromVFS_PackedSizeLabel = 'Compressed size:';
+ LANGruFRunFromVFS_DateLabel = 'Modify date:';
+ LANGruFRunFromVFS_InfoLabel = 'Opening files directly from archives is not supported. By clicking the buttons below the file (all files respectively) will be extracted to a temporary location. Temporary files will be deleted when you close Tux Commander.';
+ LANGruFRunFromVFS_OpensWithLabel = 'Open with:';
+ LANGruFRunFromVFS_ExecuteButton = 'E_xtract and open';
+ LANGruFRunFromVFS_ExecuteAllButton = 'Extract _all and open';
+ LANGruFSetPassword_Caption = 'Set password';
+ LANGruFSetPassword_Label1_Caption = 'Password required';
+ LANGruFSetPassword_Label2_Caption = 'The archive is encrypted and requires password in order to extract the data';
+ LANGruFSetPassword_ShowPasswordCheckButton = 'Un_mask password';
+
+
+(********************************************************************************************************************************)
+procedure SetTranslation;
+begin
+ LANGF2Button_Caption := LANGruF2Button_Caption;
+ LANGF3Button_Caption := LANGruF3Button_Caption;
+ LANGF4Button_Caption := LANGruF4Button_Caption;
+ LANGF5Button_Caption := LANGruF5Button_Caption;
+ LANGF6Button_Caption := LANGruF6Button_Caption;
+ LANGF7Button_Caption := LANGruF7Button_Caption;
+ LANGF8Button_Caption := LANGruF8Button_Caption;
+
+ LANGmnuFile_Caption := LANGrumnuFile_Caption;
+ LANGmnuMark_Caption := LANGrumnuMark_Caption;
+ LANGmnuCommands_Caption := LANGrumnuCommands_Caption;
+ LANGmnuHelp_Caption := LANGrumnuHelp_Caption;
+ LANGmiExit_Caption := LANGrumiExit_Caption;
+ LANGmiSelectGroup_Caption := LANGrumiSelectGroup_Caption;
+ LANGmiUnselectGroup_Caption := LANGrumiUnselectGroup_Caption;
+ LANGmiSelectAll_Caption := LANGrumiSelectAll_Caption;
+ LANGmiUnselectAll_Caption := LANGrumiUnselectAll_Caption;
+ LANGmiInvertSelection_Caption := LANGrumiInvertSelection_Caption;
+ LANGmiRefresh_Caption := LANGrumiRefresh_Caption;
+ LANGmiAbout_Caption := LANGrumiAbout_Caption;
+
+ LANGColumn1_Caption := LANGruColumn1_Caption;
+ LANGColumn2_Caption := LANGruColumn2_Caption;
+ LANGColumn3_Caption := LANGruColumn3_Caption;
+ LANGColumn4_Caption := LANGruColumn4_Caption;
+ LANGColumn5_Caption := LANGruColumn5_Caption;
+
+ LANGExpandSelection := LANGruExpandSelection;
+ LANGShrinkSelection := LANGruShrinkSelection;
+ LANGNoMatchesFound := LANGruNoMatchesFound;
+ LANGNoFilesSelected := LANGruNoFilesSelected;
+ LANGSelectedFilesDirectories := LANGruSelectedFilesDirectories;
+ LANGDirectoryS := LANGruDirectoryS;
+ LANGFileS := LANGruFileS;
+ LANGDoYouReallyWantToDeleteTheS := LANGruDoYouReallyWantToDeleteTheS;
+ LANGDoYouReallyWantToDeleteTheSS := LANGruDoYouReallyWantToDeleteTheSS;
+ LANGCopyFiles := LANGruCopyFiles;
+ LANGMoveRenameFiles := LANGruMoveRenameFiles;
+ LANGCopyDFileDirectoriesTo := LANGruCopyDFileDirectoriesTo;
+ LANGMoveRenameDFileDirectoriesTo := LANGruMoveRenameDFileDirectoriesTo;
+ LANGCopySC := LANGruCopySC;
+ LANGMoveRenameSC := LANGruMoveRenameSC;
+
+ LANGQuickFind := LANGruQuickFind;
+
+ LANGAboutString := LANGruAboutString;
+ LANGAboutStringGnome := LANGruAboutStringGnome;
+ LANGDiskStatFmt := LANGruDiskStatFmt;
+ LANGDiskStatVolNameFmt := LANGruDiskStatVolNameFmt;
+ LANGStatusLineFmt := LANGruStatusLineFmt;
+ LANGPanelStrings[False] := LANGruPanelStrings[False];
+ LANGPanelStrings[True] := LANGruPanelStrings[True];
+ LANGDIR := LANGruDIR;
+ LANGErrorGettingListingForSPanel := LANGruErrorGettingListingForSPanel;
+ LANGErrorGettingListingForSPanelNoPath := LANGruErrorGettingListingForSPanelNoPath;
+ LANGErrorCreatingNewDirectorySInSPanel := LANGruErrorCreatingNewDirectorySInSPanel;
+ LANGErrorCreatingNewDirectorySInSPanelNoPath := LANGruErrorCreatingNewDirectorySInSPanelNoPath;
+ LANGTheFileDirectory := LANGruTheFileDirectory;
+ LANGCouldNotBeDeleted := LANGruCouldNotBeDeleted;
+ LANGCouldNotBeDeletedS := LANGruCouldNotBeDeletedS;
+ LANGUserCancelled := LANGruUserCancelled;
+ LANGTheDirectorySIsNotEmpty := LANGruTheDirectorySIsNotEmpty;
+ LANGCannotCopyFile := LANGruCannotCopyFile;
+ LANGCopyError := LANGruCopyError;
+ LANGMoveError := LANGruMoveError;
+ LANGOverwriteS := LANGruOverwriteS;
+ LANGWithFileS := LANGruWithFileS;
+ LANGOvewriteSBytesS := LANGruOvewriteSBytesS;
+ LANGTheFile := LANGruTheFile;
+ LANGCopy := LANGruCopy;
+ LANGMove := LANGruMove;
+ LANGTheDirectory := LANGruTheDirectory;
+ LANGTheSymbolicLink := LANGruTheSymbolicLink;
+ LANGCannotMoveFile := LANGruCannotMoveFile;
+ LANGCouldNotBeCreated := LANGruCouldNotBeCreated;
+ LANGCouldNotBeCreatedS := LANGruCouldNotBeCreatedS;
+ LANGFromS := LANGruFromS;
+ LANGToS := LANGruToS;
+ LANGCannotCopyFileToItself := LANGruCannotCopyFileToItself;
+ LANGMemoryAllocationFailed := LANGruMemoryAllocationFailed;
+ LANGCannotOpenSourceFile := LANGruCannotOpenSourceFile;
+ LANGCannotOpenDestinationFile := LANGruCannotOpenDestinationFile;
+ LANGCannotCloseDestinationFile := LANGruCannotCloseDestinationFile;
+ LANGCannotCloseSourceFile := LANGruCannotCloseSourceFile;
+ LANGCannotReadFromSourceFile := LANGruCannotReadFromSourceFile;
+ LANGCannotWriteToDestinationFile := LANGruCannotWriteToDestinationFile;
+
+ LANGUnknownException := LANGruUnknownException;
+ LANGNoAccess := LANGruNoAccess;
+ LANGUnknownError := LANGruUnknownError;
+
+ LANGCreateANewDirectory := LANGruCreateANewDirectory;
+ LANGEnterDirectoryName := LANGruEnterDirectoryName;
+
+ LANGOverwriteQuestion := LANGruOverwriteQuestion;
+ LANGOverwriteButton_Caption := LANGruOverwriteButton_Caption;
+ LANGOverwriteAllButton_Caption := LANGruOverwriteAllButton_Caption;
+ LANGSkipButton_Caption := LANGruSkipButton_Caption;
+ LANGOverwriteAllOlderButton_Caption := LANGruOverwriteAllOlderButton_Caption;
+ LANGSkipAllButton_Caption := LANGruSkipAllButton_Caption;
+ LANGRenameButton_Caption := LANGruRenameButton_Caption;
+ LANGAppendButton_Caption := LANGruAppendButton_Caption;
+ LANGRename := LANGruRename;
+ LANGRenameFile := LANGruRenameFile;
+ LANGIgnoreButton_Caption := LANGruIgnoreButton_Caption;
+
+ LANGProgress := LANGruProgress;
+ LANGCancel := LANGruCancel;
+ LANGDelete := LANGruDelete;
+
+ LANGSpecifyFileType := LANGruSpecifyFileType;
+
+ LANGRemoveDirectory := LANGruRemoveDirectory;
+ LANGDoYouWantToDeleteItWithAllItsFilesAndSubdirectories := LANGruDoYouWantToDeleteItWithAllItsFilesAndSubdirectories;
+ LANGRetry := LANGruRetry;
+ LANGDeleteButton_Caption := LANGruDeleteButton_Caption;
+ LANGAll := LANGruAll;
+
+ LANGCopyFilesSC := LANGruCopyFilesSC;
+ LANGAppendQuestion := LANGruAppendQuestion;
+ LANGPreparingList := LANGruPreparingList;
+
+ LANGYouMustSelectAValidFile := LANGruYouMustSelectAValidFile;
+ LANGmiVerifyChecksums := LANGrumiVerifyChecksums;
+ LANGVerifyChecksumsCaption := LANGruVerifyChecksumsCaption;
+ LANGCheckButtonCaptionCheck := LANGruCheckButtonCaptionCheck;
+ LANGCheckButtonCaptionStop := LANGruCheckButtonCaptionStop;
+ LANGFileListTooltip := LANGruFileListTooltip;
+ LANGFilenameColumnCaption := LANGruFilenameColumnCaption;
+ LANGTheFileSYouAreTryingToOpenIsQuiteBig := LANGruTheFileSYouAreTryingToOpenIsQuiteBig;
+ LANGAnErrorOccuredWhileInitializingMemoryBlock := LANGruAnErrorOccuredWhileInitializingMemoryBlock;
+ LANGAnErrorOccuredWhileOpeningFileSS := LANGruAnErrorOccuredWhileOpeningFileSS;
+ LANGAnErrorOccuredWhileReadingFileSS := LANGruAnErrorOccuredWhileReadingFileSS;
+ LANGChecksumNotChecked := LANGruChecksumNotChecked;
+ LANGChecksumChecking := LANGruChecksumChecking;
+ LANGChecksumInterrupted := LANGruChecksumInterrupted;
+ LANGChecksumDOK := LANGruChecksumDOK;
+
+ LANGmiCreateChecksumsCaption := LANGrumiCreateChecksumsCaption;
+ LANGYouMustSelectAtLeastOneFileToCalculateChecksum := LANGruYouMustSelectAtLeastOneFileToCalculateChecksum;
+ LANGCreateChecksumsCaption := LANGruCreateChecksumsCaption;
+ LANGCCHKSUMPage1Text := LANGruCCHKSUMPage1Text;
+ LANGCCHKSUMPage4Text := LANGruCCHKSUMPage4Text;
+ LANGCCHKSUMPage6Text := LANGruCCHKSUMPage6Text;
+ LANGCCHKSUMPage7Text := LANGruCCHKSUMPage7Text;
+ LANGCCHKSUMPage1Title := LANGruCCHKSUMPage1Title;
+ LANGCCHKSUMPage2Title := LANGruCCHKSUMPage2Title;
+ LANGCCHKSUMPage3Title := LANGruCCHKSUMPage3Title;
+ LANGCCHKSUMPage4Title := LANGruCCHKSUMPage4Title;
+ LANGCCHKSUMPage5Title := LANGruCCHKSUMPage5Title;
+ LANGCCHKSUMPage6Title := LANGruCCHKSUMPage6Title;
+ LANGCCHKSUMPage7Title := LANGruCCHKSUMPage7Title;
+ LANGCCHKSUMSFVFile := LANGruCCHKSUMSFVFile;
+ LANGCCHKSUMMD5sumFile := LANGruCCHKSUMMD5sumFile;
+ LANGCCHKSUMFileName := LANGruCCHKSUMFileName;
+ LANGCCHKSUMCreateSeparateChecksumFiles := LANGruCCHKSUMCreateSeparateChecksumFiles;
+ LANGCCHKSUMNowProcessingFileS := LANGruCCHKSUMNowProcessingFileS;
+ LANGCCHKSUMFinishCaption := LANGruCCHKSUMFinishCaption;
+ LANGCCHKSUMAreYouSureYouWantToAbortTheProcessing := LANGruCCHKSUMAreYouSureYouWantToAbortTheProcessing;
+ LANGCCHKSUMAnErrorOccuredWhileOpeningFileSS := LANGruCCHKSUMAnErrorOccuredWhileOpeningFileSS;
+ LANGCCHKSUMAnErrorOccuredWhileReadingFileSS := LANGruCCHKSUMAnErrorOccuredWhileReadingFileSS;
+ LANGCCHKSUMAnErrorOccuredWhileWritingFileSS := LANGruCCHKSUMAnErrorOccuredWhileWritingFileSS;
+
+ LANGAnErrorOccuredWhileWritingFileSS := LANGruAnErrorOccuredWhileWritingFileSS;
+ LANGTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt := LANGruTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt;
+ LANGTheTargetFileSCannotBeRemovedS := LANGruTheTargetFileSCannotBeRemovedS;
+ LANGMergeCaption := LANGruMergeCaption;
+ LANGPleaseInsertNextDiskOrGiveDifferentLocation := LANGruPleaseInsertNextDiskOrGiveDifferentLocation;
+ LANGMergeOfSSucceeded := LANGruMergeOfSSucceeded;
+ LANGWarningCreatedFileFailsCRCCheck := LANGruWarningCreatedFileFailsCRCCheck;
+ LANGMergeOfSSucceeded_NoCRCFileAvailable := LANGruMergeOfSSucceeded_NoCRCFileAvailable;
+ LANGMergeSAndAllFilesWithAscendingNamesToTheFollowingDirectory := LANGruMergeSAndAllFilesWithAscendingNamesToTheFollowingDirectory;
+ LANGMergeSC := LANGruMergeSC;
+ LANGmiSplitFileCaption := LANGrumiSplitFileCaption;
+ LANGmiMergeFilesCaption := LANGrumiMergeFilesCaption;
+
+ LANGSplitTheFileSToDirectory := LANGruSplitTheFileSToDirectory;
+ LANGSplitSC := LANGruSplitSC;
+ LANGSplitFile := LANGruSplitFile;
+ LANGBytesPerFile := LANGruBytesPerFile;
+ LANGAutomatic := LANGruAutomatic;
+ LANGDeleteFilesOnTargetDisk := LANGruDeleteFilesOnTargetDisk;
+ LANGSplitCaption := LANGruSplitCaption;
+ LANGCannotOpenFileS := LANGruCannotOpenFileS;
+ LANGCannotSplitTheFileToMoreThan999Parts := LANGruCannotSplitTheFileToMoreThan999Parts;
+ LANGThereAreSomeFilesInTheTargetDirectorySDoYouWantToDeleteThem := LANGruThereAreSomeFilesInTheTargetDirectorySDoYouWantToDeleteThem;
+ LANGThereAreDFilesInTheTargetDirectoryDoYouWantToDeleteThem := LANGruThereAreDFilesInTheTargetDirectoryDoYouWantToDeleteThem;
+ LANGAnErrorOccuredWhileOperationS := LANGruAnErrorOccuredWhileOperationS;
+ LANGSplitOfSSucceeded := LANGruSplitOfSSucceeded;
+ LANGSplitOfSFailed := LANGruSplitOfSFailed;
+
+ LANGmnuShow_Caption := LANGrumnuShow_Caption;
+ LANGmiShowDotFiles_Caption := LANGrumiShowDotFiles_Caption;
+ LANGTheFileYouAreTryingToOpenIsQuiteBig := LANGruTheFileYouAreTryingToOpenIsQuiteBig;
+ LANGCannotExecuteSPleaseCheckTheConfiguration := LANGruCannotExecuteSPleaseCheckTheConfiguration;
+ LANGEdit := LANGruEdit;
+ LANGEnterFilenameToEdit := LANGruEnterFilenameToEdit;
+
+ LANGmnuSettings_Caption := LANGrumnuSettings_Caption;
+ LANGmiFileTypes_Caption := LANGrumiFileTypes_Caption;
+ LANGThereIsNoApplicationAssociatedWithS := LANGruThereIsNoApplicationAssociatedWithS;
+ LANGErrorExecutingCommand := LANGruErrorExecutingCommand;
+ LANGEditFileTypesCaption := LANGruEditFileTypesCaption;
+ LANGTitleLabel_Caption := LANGruTitleLabel_Caption;
+ LANGExtensionsColumn := LANGruExtensionsColumn;
+ LANGDescriptionColumn := LANGruDescriptionColumn;
+ LANGFileTypesList := LANGruFileTypesList;
+ LANGActionName := LANGruActionName;
+ LANGCommand := LANGruCommand;
+ LANGSetDefaultActionButton_Caption := LANGruSetDefaultActionButton_Caption;
+ LANGRunInTerminalCheckBox_Caption := LANGruRunInTerminalCheckBox_Caption;
+ LANGAutodetectCheckBox_Caption := LANGruAutodetectCheckBox_Caption;
+ LANGBrowseButton_Caption := LANGruBrowseButton_Caption;
+ LANGCommandLabel_Caption := LANGruCommandLabel_Caption;
+ LANGDescriptionLabel_Caption := LANGruDescriptionLabel_Caption;
+ LANGFNameExtLabel_Caption := LANGruFNameExtLabel_Caption;
+ LANGNotebookPageExtensions := LANGruNotebookPageExtensions;
+ LANGNotebookPageActions := LANGruNotebookPageActions;
+ LANGDefault := LANGruDefault;
+ LANGCannotSaveFileTypeAssociationsBecauseOtherProcess := LANGruCannotSaveFileTypeAssociationsBecauseOtherProcess;
+
+ LANGDefaultColor := LANGruDefaultColor;
+ LANGIcon := LANGruIcon;
+ LANGBrowseForIcon := LANGruBrowseForIcon;
+ LANGSelectFileTypeColor := LANGruSelectFileTypeColor;
+ LANGColor := LANGruColor;
+
+ LANGmiChangePermissions_Caption := LANGrumiChangePermissions_Caption;
+ LANGmiChangeOwner_Caption := LANGrumiChangeOwner_Caption;
+ LANGmiCreateSymlink_Caption := LANGrumiCreateSymlink_Caption;
+ LANGmiEditSymlink_Caption := LANGrumiEditSymlink_Caption;
+ LANGChmodProgress := LANGruChmodProgress;
+ LANGChownProgress := LANGruChownProgress;
+ LANGYouMustSelectAValidSymbolicLink := LANGruYouMustSelectAValidSymbolicLink;
+ LANGPopupRunS := LANGruPopupRunS;
+ LANGPopupOpenS := LANGruPopupOpenS;
+ LANGPopupGoUp := LANGruPopupGoUp;
+ LANGPopupOpenWithS := LANGruPopupOpenWithS;
+ LANGPopupDefault := LANGruPopupDefault;
+ LANGPopupOpenWith := LANGruPopupOpenWith;
+ LANGPopupViewFile := LANGruPopupViewFile;
+ LANGPopupEditFile := LANGruPopupEditFile;
+ LANGPopupMakeSymlink := LANGruPopupMakeSymlink;
+ LANGPopupRename := LANGruPopupRename;
+ LANGPopupDelete := LANGruPopupDelete;
+ LANGDialogChangePermissions := LANGruDialogChangePermissions;
+ LANGCouldNotBeChmoddedS := LANGruCouldNotBeChmoddedS;
+ LANGDialogChangeOwner := LANGruDialogChangeOwner;
+ LANGCouldNotBeChownedS := LANGruCouldNotBeChownedS;
+ LANGDialogMakeSymlink := LANGruDialogMakeSymlink;
+ LANGDialogEditSymlink := LANGruDialogEditSymlink;
+ LANGFEditSymlink_Caption := LANGruFEditSymlink_Caption;
+ LANGFEditSymlink_SymbolicLinkFilename := LANGruFEditSymlink_SymbolicLinkFilename;
+ LANGFEditSymlink_SymbolicLinkPointsTo := LANGruFEditSymlink_SymbolicLinkPointsTo;
+
+ LANGFChmod_Caption := LANGruFChmod_Caption;
+ LANGFChmod_PermissionFrame := LANGruFChmod_PermissionFrame;
+ LANGFChmod_FileFrame := LANGruFChmod_FileFrame;
+ LANGFChmod_ApplyRecursivelyFor := LANGruFChmod_ApplyRecursivelyFor;
+ LANGFChmod_miAllFiles := LANGruFChmod_miAllFiles;
+ LANGFChmod_miDirectories := LANGruFChmod_miDirectories;
+ LANGFChmod_OctalLabel := LANGruFChmod_OctalLabel;
+ LANGFChmod_SUID := LANGruFChmod_SUID;
+ LANGFChmod_SGID := LANGruFChmod_SGID;
+ LANGFChmod_Sticky := LANGruFChmod_Sticky;
+ LANGFChmod_RUSR := LANGruFChmod_RUSR;
+ LANGFChmod_WUSR := LANGruFChmod_WUSR;
+ LANGFChmod_XUSR := LANGruFChmod_XUSR;
+ LANGFChmod_RGRP := LANGruFChmod_RGRP;
+ LANGFChmod_WGRP := LANGruFChmod_WGRP;
+ LANGFChmod_XGRP := LANGruFChmod_XGRP;
+ LANGFChmod_ROTH := LANGruFChmod_ROTH;
+ LANGFChmod_WOTH := LANGruFChmod_WOTH;
+ LANGFChmod_XOTH := LANGruFChmod_XOTH;
+ LANGFChmod_TextLabel := LANGruFChmod_TextLabel;
+ LANGFChmod_FileLabel := LANGruFChmod_FileLabel;
+ LANGFChown_Caption := LANGruFChown_Caption;
+ LANGFChown_OwnerFrame := LANGruFChown_OwnerFrame;
+ LANGFChown_GroupFrame := LANGruFChown_GroupFrame;
+ LANGFChown_FileFrame := LANGruFChown_FileFrame;
+ LANGFChown_ApplyRecursively := LANGruFChown_ApplyRecursively;
+
+ LANGFSymlink_Caption := LANGruFSymlink_Caption;
+ LANGFSymlink_ExistingFilename := LANGruFSymlink_ExistingFilename;
+ LANGFSymlink_SymlinkFilename := LANGruFSymlink_SymlinkFilename;
+
+ LANGmnuBookmarks_Caption := LANGrumnuBookmarks_Caption;
+ LANGmiAddBookmark_Caption := LANGrumiAddBookmark_Caption;
+ LANGmiEditBookmarks_Caption := LANGrumiEditBookmarks_Caption;
+ LANGBookmarkPopupDelete_Caption := LANGruBookmarkPopupDelete_Caption;
+ LANGmiPreferences_Caption := LANGrumiPreferences_Caption;
+ LANGTheCurrentDirectoryAlreadyExistsInTheBookmarksList := LANGruTheCurrentDirectoryAlreadyExistsInTheBookmarksList;
+ LANGSomeOtherInstanceChanged := LANGruSomeOtherInstanceChanged1 + LANGruSomeOtherInstanceChanged2;
+
+ LANGPreferences_Caption := LANGruPreferences_Caption;
+ LANGPreferences_TitleLabel_Caption := LANGruPreferences_TitleLabel_Caption;
+ LANGPreferences_GeneralPage := LANGruPreferences_GeneralPage;
+ LANGPreferences_FontsPage := LANGruPreferences_FontsPage;
+ LANGPreferences_ColorsPage := LANGruPreferences_ColorsPage;
+ LANGPreferences_RowHeight := LANGruPreferences_RowHeight;
+ LANGPreferences_NumHistoryItems := LANGruPreferences_NumHistoryItems;
+ LANGPreferences_Default := LANGruPreferences_Default;
+ LANGPreferences_ClearReadonlyAttribute := LANGruPreferences_ClearReadonlyAttribute;
+ LANGPreferences_DisableMouseRenaming := LANGruPreferences_DisableMouseRenaming;
+ LANGPreferences_ShowFiletypeIconsInList := LANGruPreferences_ShowFiletypeIconsInList;
+ LANGPreferences_ExternalAppsLabel := LANGruPreferences_ExternalAppsLabel;
+ LANGPreferences_Viewer := LANGruPreferences_Viewer;
+ LANGPreferences_Editor := LANGruPreferences_Editor;
+ LANGPreferences_Terminal := LANGruPreferences_Terminal;
+ LANGPreferences_ListFont := LANGruPreferences_ListFont;
+ LANGPreferences_Change := LANGruPreferences_Change;
+ LANGPreferences_UseDefaultFont := LANGruPreferences_UseDefaultFont;
+ LANGPreferences_Foreground := LANGruPreferences_Foreground;
+ LANGPreferences_Background := LANGruPreferences_Background;
+ LANGPreferences_NormalItem := LANGruPreferences_NormalItem;
+ LANGPreferences_SetToDefaultToUseGTKThemeColors := LANGruPreferences_SetToDefaultToUseGTKThemeColors;
+ LANGPreferences_Cursor := LANGruPreferences_Cursor;
+ LANGPreferences_InactiveItem := LANGruPreferences_InactiveItem;
+ LANGPreferences_SelectedItem := LANGruPreferences_SelectedItem;
+ LANGPreferences_LinkItem := LANGruPreferences_LinkItem;
+ LANGPreferences_LinkItemHint := LANGruPreferences_LinkItemHint;
+ LANGPreferences_DotFileItem := LANGruPreferences_DotFileItem;
+ LANGPreferences_DotFileItemHint := LANGruPreferences_DotFileItemHint;
+ LANGPreferences_BrowseForApplication := LANGruPreferences_BrowseForApplication;
+ LANGPreferences_DefaultS := LANGruPreferences_DefaultS;
+ LANGPreferences_SelectFont := LANGruPreferences_SelectFont;
+
+ LANGBookmarkButton_Tooltip := LANGruBookmarkButton_Tooltip;
+ LANGUpButton_Tooltip := LANGruUpButton_Tooltip;
+ LANGRootButton_Tooltip := LANGruRootButton_Tooltip;
+ LANGHomeButton_Tooltip := LANGruHomeButton_Tooltip;
+ LANGLeftEqualButton_Tooltip := LANGruLeftEqualButton_Tooltip;
+ LANGRightEqualButton_Tooltip := LANGruRightEqualButton_Tooltip;
+ LANGmiShowDirectorySizes_Caption := LANGrumiShowDirectorySizes_Caption;
+ LANGmiTargetSource_Caption := LANGrumiTargetSource_Caption;
+ LANGFileTypeDirectory := LANGruFileTypeDirectory;
+ LANGFileTypeFile := LANGruFileTypeFile;
+ LANGFileTypeMetafile := LANGruFileTypeMetafile;
+ LANGPreferencesPanelsPage := LANGruPreferencesPanelsPage;
+ LANGPreferencesApplicationsPage := LANGruPreferencesApplicationsPage;
+ LANGPreferencesExperimentalPage := LANGruPreferencesExperimentalPage;
+ LANGPreferencesSelectAllDirectoriesCheckBox_Caption := LANGruPreferencesSelectAllDirectoriesCheckBox_Caption;
+ LANGPreferencesNewStyleAltOCheckBox_Caption := LANGruPreferencesNewStyleAltOCheckBox_Caption;
+ LANGPreferencesNewStyleAltOCheckBox_Tooltip := LANGruPreferencesNewStyleAltOCheckBox_Tooltip;
+ LANGPreferencesShowFuncButtonsCheckBox_Caption := LANGruPreferencesShowFuncButtonsCheckBox_Caption;
+ LANGPreferencesSizeFormatLabel_Caption := LANGruPreferencesSizeFormatLabel_Caption;
+ LANGPreferencesmiSizeFormat1 := LANGruPreferencesmiSizeFormat1;
+ LANGPreferencesmiSizeFormat6 := LANGruPreferencesmiSizeFormat6;
+ LANGPreferencesAutodetectXApp := LANGruPreferencesAutodetectXApp;
+ LANGPreferencesAlwaysRunInTerminal := LANGruPreferencesAlwaysRunInTerminal;
+ LANGPreferencesNeverRunInTerminal := LANGruPreferencesNeverRunInTerminal;
+ LANGPreferencesCmdLineBehaviourLabel_Caption := LANGruPreferencesCmdLineBehaviourLabel_Caption;
+ LANGPreferencesFeatures := LANGruPreferencesFeatures;
+ LANGPreferencesDisableMouseRename_Tooltip := LANGruPreferencesDisableMouseRename_Tooltip;
+ LANGPreferencesDisableFileTipsCheckBox_Caption := LANGruPreferencesDisableFileTipsCheckBox_Caption;
+ LANGPreferencesDisableFileTipsCheckBox_Tooltip := LANGruPreferencesDisableFileTipsCheckBox_Tooltip;
+ LANGPreferencesShow := LANGruPreferencesShow;
+ LANGPreferencesDirsInBoldCheckBox_Caption := LANGruPreferencesDirsInBoldCheckBox_Caption;
+ LANGPreferencesDisableDirectoryBracketsCheckBox_Caption := LANGruPreferencesDisableDirectoryBracketsCheckBox_Caption;
+ LANGPreferencesOctalPermissionsCheckBox_Caption := LANGruPreferencesOctalPermissionsCheckBox_Caption;
+ LANGPreferencesOctalPermissionsCheckBox_Tooltip := LANGruPreferencesOctalPermissionsCheckBox_Tooltip;
+ LANGPreferencesMovement := LANGruPreferencesMovement;
+ LANGPreferencesLynxLikeMotionCheckBox_Caption := LANGruPreferencesLynxLikeMotionCheckBox_Caption;
+ LANGPreferencesInsertMovesDownCheckBox_Caption := LANGruPreferencesInsertMovesDownCheckBox_Caption;
+ LANGPreferencesSpaceMovesDownCheckBox_Caption := LANGruPreferencesSpaceMovesDownCheckBox_Caption;
+ LANGPreferencesViewer := LANGruPreferencesViewer;
+ LANGPreferencesCommandSC := LANGruPreferencesCommandSC;
+ LANGPreferencesUseInternalViewer := LANGruPreferencesUseInternalViewer;
+ LANGPreferencesEditor := LANGruPreferencesEditor;
+ LANGPreferencesTerminal := LANGruPreferencesTerminal;
+ LANGPreferencesExperimentalFeatures := LANGruPreferencesExperimentalFeatures;
+ LANGPreferencesExperimentalWarningLabel_Caption := LANGruPreferencesExperimentalWarningLabel_Caption;
+ LANGPreferencesFocusRefreshCheckBox_Caption := LANGruPreferencesFocusRefreshCheckBox_Caption;
+ LANGPreferencesFocusRefreshCheckBox_Tooltip := LANGruPreferencesFocusRefreshCheckBox_Tooltip;
+ LANGPreferencesWMCompatModeCheckBox_Caption := LANGruPreferencesWMCompatModeCheckBox_Caption;
+ LANGPreferencesWMCompatModeCheckBox_Tooltip := LANGruPreferencesWMCompatModeCheckBox_Tooltip;
+ LANGPreferencesCompatUseLibcSystemCheckBox_Caption := LANGruPreferencesCompatUseLibcSystemCheckBox_Caption;
+ LANGPreferencesCompatUseLibcSystemCheckBox_Tooltip := LANGruPreferencesCompatUseLibcSystemCheckBox_Tooltip;
+
+ LANGmiSearchCaption2 := LANGrumiSearchCaption2;
+ LANGmiNoMounterBarCaption := LANGrumiNoMounterBarCaption;
+ LANGmiShowOneMounterBarCaption := LANGrumiShowOneMounterBarCaption;
+ LANGmiShowTwoMounterBarCaption := LANGrumiShowTwoMounterBarCaption;
+ LANGmnuNetworkCaption := LANGrumnuNetworkCaption;
+ LANGmiConnectionsCaption := LANGrumiConnectionsCaption;
+ LANGmiOpenConnectionCaption := LANGrumiOpenConnectionCaption;
+ LANGmiQuickConnectCaption := LANGrumiQuickConnectCaption;
+ LANGmnuPluginsCaption := LANGrumnuPluginsCaption;
+ LANGmiTestPluginCaption := LANGrumiTestPluginCaption;
+ LANGmiMounterSettingsCaption := LANGrumiMounterSettingsCaption;
+ LANGmiColumnsCaption := LANGrumiColumnsCaption;
+ LANGmiSavePositionCaption := LANGrumiSavePositionCaption;
+ LANGmiMountCaption := LANGrumiMountCaption;
+ LANGmiUmountCaption := LANGrumiUmountCaption;
+ LANGmiEjectCaption := LANGrumiEjectCaption;
+ LANGmiDuplicateTabCaption := LANGrumiDuplicateTabCaption;
+ LANGmiCloseTabCaption := LANGrumiCloseTabCaption;
+ LANGmiCloseAllTabsCaption := LANGrumiCloseAllTabsCaption;
+ LANGCannotDetermineDestinationEngine := LANGruCannotDetermineDestinationEngine;
+ LANGCannotLoadFile := LANGruCannotLoadFile;
+ LANGMountPointDevice := LANGruMountPointDevice;
+ LANGMountSC := LANGruMountSC;
+ LANGNoPluginsFound := LANGruNoPluginsFound;
+ LANGPluginAbout := LANGruPluginAbout;
+ LANGCouldntOpenURI := LANGruCouldntOpenURI;
+ LANGPluginAboutInside := LANGruPluginAboutInside;
+ LANGAreYouSureCloseAllTabs := LANGruAreYouSureCloseAllTabs;
+ LANGCouldntOpenURIArchive := LANGruCouldntOpenURIArchive;
+ LANGThereIsNoModuleAvailable := LANGruThereIsNoModuleAvailable;
+ LANGIgnoreError := LANGruIgnoreError;
+ LANGErrorMount := LANGruErrorMount;
+ LANGErrorUmount := LANGruErrorUmount;
+ LANGErrorEject := LANGruErrorEject;
+
+ LANGMounterPrefs_Caption := LANGruMounterPrefs_Caption;
+ LANGMounterPrefs_TitleLabelCaption := LANGruMounterPrefs_TitleLabelCaption;
+ LANGMounterPrefs_ListViewFrameCaption := LANGruMounterPrefs_ListViewFrameCaption;
+ LANGMounterPrefs_MountName := LANGruMounterPrefs_MountName;
+ LANGMounterPrefs_MountPoint := LANGruMounterPrefs_MountPoint;
+ LANGMounterPrefs_Device := LANGruMounterPrefs_Device;
+ LANGMounterPrefs_MoveUpButtonTooltip := LANGruMounterPrefs_MoveUpButtonTooltip;
+ LANGMounterPrefs_MoveDownButtonTooltip := LANGruMounterPrefs_MoveDownButtonTooltip;
+ LANGMounterPrefs_UseFSTabDefaultsCheckBox := LANGruMounterPrefs_UseFSTabDefaultsCheckBox;
+ LANGMounterPrefs_UseFSTabDefaultsCheckBoxTooltip := LANGruMounterPrefs_UseFSTabDefaultsCheckBoxTooltip;
+ LANGMounterPrefs_ToggleModeCheckBox := LANGruMounterPrefs_ToggleModeCheckBox;
+ LANGMounterPrefs_ToggleModeCheckBoxTooltip := LANGruMounterPrefs_ToggleModeCheckBoxTooltip;
+ LANGMounterPrefs_PropertiesFrameCaption := LANGruMounterPrefs_PropertiesFrameCaption;
+ LANGMounterPrefs_DisplayTextLabelCaption := LANGruMounterPrefs_DisplayTextLabelCaption;
+ LANGMounterPrefs_MountPointLabelCaption := LANGruMounterPrefs_MountPointLabelCaption;
+ LANGMounterPrefs_MountDeviceLabelCaption := LANGruMounterPrefs_MountDeviceLabelCaption;
+ LANGMounterPrefs_DeviceTypeLabelCaption := LANGruMounterPrefs_DeviceTypeLabelCaption;
+ LANGMounterPrefs_miLocalDiskCaption := LANGruMounterPrefs_miLocalDiskCaption;
+ LANGMounterPrefs_miRemovableCaption := LANGruMounterPrefs_miRemovableCaption;
+ LANGMounterPrefs_miCDCaption := LANGruMounterPrefs_miCDCaption;
+ LANGMounterPrefs_miFloppyCaption := LANGruMounterPrefs_miFloppyCaption;
+ LANGMounterPrefs_miNetworkCaption := LANGruMounterPrefs_miNetworkCaption;
+ LANGMounterPrefs_MountCommandLabelCaption := LANGruMounterPrefs_MountCommandLabelCaption;
+ LANGMounterPrefs_UmountCommandLabelCaption := LANGruMounterPrefs_UmountCommandLabelCaption;
+ LANGMounterPrefs_MountCommandEntryTooltip := LANGruMounterPrefs_MountCommandEntryTooltip;
+ LANGMounterPrefs_UmountCommandEntryTooltip := LANGruMounterPrefs_UmountCommandEntryTooltip;
+ LANGMounterPrefs_IconLabelCaption := LANGruMounterPrefs_IconLabelCaption;
+
+ LANGConnMgr_Caption := LANGruConnMgr_Caption;
+ LANGConnMgr_ConnectButton := LANGruConnMgr_ConnectButton;
+ LANGConnMgr_OpenConnection := LANGruConnMgr_OpenConnection;
+ LANGConnMgr_NameColumn := LANGruConnMgr_NameColumn;
+ LANGConnMgr_URIColumn := LANGruConnMgr_URIColumn;
+ LANGConnMgr_AddConnectionButtonCaption := LANGruConnMgr_AddConnectionButtonCaption;
+ LANGConnMgr_AddConnectionButtonTooltip := LANGruConnMgr_AddConnectionButtonTooltip;
+ LANGConnMgr_EditButtonCaption := LANGruConnMgr_EditButtonCaption;
+ LANGConnMgr_EditButtonTooltip := LANGruConnMgr_EditButtonTooltip;
+ LANGConnMgr_RemoveButtonCaption := LANGruConnMgr_RemoveButtonCaption;
+ LANGConnMgr_RemoveButtonTooltip := LANGruConnMgr_RemoveButtonTooltip;
+ LANGConnMgr_DoYouWantDelete := LANGruConnMgr_DoYouWantDelete;
+
+ LANGConnProp_FTP := LANGruConnProp_FTP;
+ LANGConnProp_SFTP := LANGruConnProp_SFTP;
+ LANGConnProp_SMB := LANGruConnProp_SMB;
+ LANGConnProp_HTTP := LANGruConnProp_HTTP;
+ LANGConnProp_HTTPS := LANGruConnProp_HTTPS;
+ LANGConnProp_Other := LANGruConnProp_Other;
+ LANGConnProp_Caption := LANGruConnProp_Caption;
+ LANGConnProp_VFSModule := LANGruConnProp_VFSModule;
+ LANGConnProp_URI := LANGruConnProp_URI;
+ LANGConnProp_URIEntryTooltip := LANGruConnProp_URIEntryTooltip;
+ LANGConnProp_DetailedInformations := LANGruConnProp_DetailedInformations;
+ LANGConnProp_Name := LANGruConnProp_Name;
+ LANGConnProp_Server := LANGruConnProp_Server;
+ LANGConnProp_Username := LANGruConnProp_Username;
+ LANGConnProp_UserNameEntryTooltip := LANGruConnProp_UserNameEntryTooltip;
+ LANGConnProp_Password := LANGruConnProp_Password;
+ LANGConnProp_TargetDirectory := LANGruConnProp_TargetDirectory;
+ LANGConnProp_ServiceType := LANGruConnProp_ServiceType;
+ LANGConnProp_MaskPassword := LANGruConnProp_MaskPassword;
+ LANGConnProp_MenuItemCaption := LANGruConnProp_MenuItemCaption;
+
+ LANGConnLogin_Caption := LANGruConnLogin_Caption;
+ LANGConnLogin_Login := LANGruConnLogin_Login;
+ LANGConnLogin_ExperimentalWarningLabelCaption := LANGruConnLogin_ExperimentalWarningLabelCaption;
+ LANGConnLogin_Username := LANGruConnLogin_Username;
+ LANGConnLogin_Password := LANGruConnLogin_Password;
+ LANGConnLogin_AnonymousCheckButton := LANGruConnLogin_AnonymousCheckButton;
+
+ LANGColumns_Caption := LANGruColumns_Caption;
+ LANGColumns_Title := LANGruColumns_Title;
+ LANGColumns_MoveUpButtonTooltip := LANGruColumns_MoveUpButtonTooltip;
+ LANGColumns_MoveDownButtonTooltip := LANGruColumns_MoveDownButtonTooltip;
+ LANGColumns_TitlesLongName := LANGruColumns_TitlesLongName;
+ LANGColumns_TitlesLongNameExt := LANGruColumns_TitlesLongNameExt;
+ LANGColumns_TitlesLongExt := LANGruColumns_TitlesLongExt;
+ LANGColumns_TitlesLongSize := LANGruColumns_TitlesLongSize;
+ LANGColumns_TitlesLongDateTime := LANGruColumns_TitlesLongDateTime;
+ LANGColumns_TitlesLongDate := LANGruColumns_TitlesLongDate;
+ LANGColumns_TitlesLongTime := LANGruColumns_TitlesLongTime;
+ LANGColumns_TitlesLongUser := LANGruColumns_TitlesLongUser;
+ LANGColumns_TitlesLongGroup := LANGruColumns_TitlesLongGroup;
+ LANGColumns_TitlesLongAttr := LANGruColumns_TitlesLongAttr;
+ LANGColumns_TitlesShortName := LANGruColumns_TitlesShortName;
+ LANGColumns_TitlesShortNameExt := LANGruColumns_TitlesShortNameExt;
+ LANGColumns_TitlesShortExt := LANGruColumns_TitlesShortExt;
+ LANGColumns_TitlesShortSize := LANGruColumns_TitlesShortSize;
+ LANGColumns_TitlesShortDateTime := LANGruColumns_TitlesShortDateTime;
+ LANGColumns_TitlesShortDate := LANGruColumns_TitlesShortDate;
+ LANGColumns_TitlesShortTime := LANGruColumns_TitlesShortTime;
+ LANGColumns_TitlesShortUser := LANGruColumns_TitlesShortUser;
+ LANGColumns_TitlesShortGroup := LANGruColumns_TitlesShortGroup;
+ LANGColumns_TitlesShortAttr := LANGruColumns_TitlesShortAttr;
+
+ LANGTestPlugin_Caption := LANGruTestPlugin_Caption;
+ LANGTestPlugin_Title := LANGruTestPlugin_Title;
+ LANGTestPlugin_ExperimentalWarningLabelCaption := LANGruTestPlugin_ExperimentalWarningLabelCaption;
+ LANGTestPlugin_Plugin := LANGruTestPlugin_Plugin;
+ LANGTestPlugin_Command := LANGruTestPlugin_Command;
+ LANGTestPlugin_Username := LANGruTestPlugin_Username;
+ LANGTestPlugin_Password := LANGruTestPlugin_Password;
+ LANGTestPlugin_AnonymousCheckButton := LANGruTestPlugin_AnonymousCheckButton;
+ LANGTestPlugin_NoPluginsFound := LANGruTestPlugin_NoPluginsFound;
+
+ LANGRemoteWait_Caption := LANGruRemoteWait_Caption;
+ LANGRemoteWait_OperationInProgress := LANGruRemoteWait_OperationInProgress;
+ LANGRemoteWait_ItemsFound := LANGruRemoteWait_ItemsFound;
+
+ LANGSearch_Bytes := LANGruSearch_Bytes;
+ LANGSearch_kB := LANGruSearch_kB;
+ LANGSearch_MB := LANGruSearch_MB;
+ LANGSearch_days := LANGruSearch_days;
+ LANGSearch_weeks := LANGruSearch_weeks;
+ LANGSearch_months := LANGruSearch_months;
+ LANGSearch_years := LANGruSearch_years;
+ LANGSearch_Caption := LANGruSearch_Caption;
+ LANGSearch_General := LANGruSearch_General;
+ LANGSearch_Advanced := LANGruSearch_Advanced;
+ LANGSearch_SearchResults := LANGruSearch_SearchResults;
+ LANGSearch_SearchFor := LANGruSearch_SearchFor;
+ LANGSearch_FileMaskEntryTooltip := LANGruSearch_FileMaskEntryTooltip;
+ LANGSearch_SearchIn := LANGruSearch_SearchIn;
+ LANGSearch_SearchArchivesCheckButton := LANGruSearch_SearchArchivesCheckButton;
+ LANGSearch_FindText := LANGruSearch_FindText;
+ LANGSearch_FindTextEntryTooltip := LANGruSearch_FindTextEntryTooltip;
+ LANGSearch_CaseSensitiveCheckButton := LANGruSearch_CaseSensitiveCheckButton;
+ LANGSearch_StayCurrentFSCheckButton := LANGruSearch_StayCurrentFSCheckButton;
+ LANGSearch_CaseSensitiveMatchCheckButton := LANGruSearch_CaseSensitiveMatchCheckButton;
+ LANGSearch_Size := LANGruSearch_Size;
+ LANGSearch_Date := LANGruSearch_Date;
+ LANGSearch_BiggerThan := LANGruSearch_BiggerThan;
+ LANGSearch_SmallerThan := LANGruSearch_SmallerThan;
+ LANGSearch_ModifiedBetweenRadioButton := LANGruSearch_ModifiedBetweenRadioButton;
+ LANGSearch_NotModifiedAfterRadioButton := LANGruSearch_NotModifiedAfterRadioButton;
+ LANGSearch_ModifiedLastRadioButton := LANGruSearch_ModifiedLastRadioButton;
+ LANGSearch_ModifiedNotLastRadionButton := LANGruSearch_ModifiedNotLastRadionButton;
+ LANGSearch_ModifiedBetweenEntry1 := LANGruSearch_ModifiedBetweenEntry1;
+ LANGSearch_ViewButtonCaption := LANGruSearch_ViewButtonCaption;
+ LANGSearch_NewSearchButtonCaption := LANGruSearch_NewSearchButtonCaption;
+ LANGSearch_GoToFileButtonCaption := LANGruSearch_GoToFileButtonCaption;
+ LANGSearch_FeedToListboxButtonCaption := LANGruSearch_FeedToListboxButtonCaption;
+ LANGSearch_StatusSC := LANGruSearch_StatusSC;
+ LANGSearch_Ready := LANGruSearch_Ready;
+ LANGSearch_PreparingToSearch := LANGruSearch_PreparingToSearch;
+ LANGSearch_SearchInProgress := LANGruSearch_SearchInProgress;
+ LANGSearch_UserCancelled := LANGruSearch_UserCancelled;
+ LANGSearch_SearchFinished := LANGruSearch_SearchFinished;
+ LANGSearch_FilesFound := LANGruSearch_FilesFound;
+ LANGSearch_And := LANGruSearch_And;
+
+ LANGCloseOpenConnection := LANGruCloseOpenConnection;
+ LANGDuplicateTabWarning := LANGruDuplicateTabWarning;
+ LANGDontShowAgain := LANGruDontShowAgain;
+ LANGSwitchOtherPanelWarning := LANGruSwitchOtherPanelWarning;
+ LANGOpenConnectionsWarning := LANGruOpenConnectionsWarning;
+ LANGmiDisconnect_Caption := LANGrumiDisconnect_Caption;
+ LANGDisconnectButton_Tooltip := LANGruDisconnectButton_Tooltip;
+ LANGLeaveArchiveButton_Tooltip := LANGruLeaveArchiveButton_Tooltip;
+ LANGOpenTerminalButton_Tooltip := LANGruOpenTerminalButton_Tooltip;
+ LANGOpenTerminalButton_Caption := LANGruOpenTerminalButton_Caption;
+ LANGShowTextUIDsCheckBox_Caption := LANGruShowTextUIDsCheckBox_Caption;
+ LANGShowTextUIDsCheckBox_Tooltip := LANGruShowTextUIDsCheckBox_Tooltip;
+
+ LANGmiNewTab_Caption := LANGrumiNewTab_Caption;
+ LANGFilePopupMenu_Properties := LANGruFilePopupMenu_Properties;
+ LANGCommandEntry_Tooltip := LANGruCommandEntry_Tooltip;
+ LANGmiFiles_Caption := LANGrumiFiles_Caption;
+
+ LANGPasswordButton_Tooltip := LANGruPasswordButton_Tooltip;
+ LANGHandleRunFromArchive_Bytes := LANGruHandleRunFromArchive_Bytes;
+ LANGHandleRunFromArchive_FileTypeDesc_Unknown := LANGruHandleRunFromArchive_FileTypeDesc_Unknown;
+ LANGHandleRunFromArchive_NotAssociated := LANGruHandleRunFromArchive_NotAssociated;
+ LANGHandleRunFromArchive_SelfExecutable := LANGruHandleRunFromArchive_SelfExecutable;
+ LANGHandleRunFromArchive_CouldntCreateTemporaryDirectory := LANGruHandleRunFromArchive_CouldntCreateTemporaryDirectory;
+ LANGFRunFromVFS_Caption := LANGruFRunFromVFS_Caption;
+ LANGFRunFromVFS_TitleLabel := LANGruFRunFromVFS_TitleLabel;
+ LANGFRunFromVFS_FileNameLabel := LANGruFRunFromVFS_FileNameLabel;
+ LANGFRunFromVFS_FileTypeLabel := LANGruFRunFromVFS_FileTypeLabel;
+ LANGFRunFromVFS_SizeLabel := LANGruFRunFromVFS_SizeLabel;
+ LANGFRunFromVFS_PackedSizeLabel := LANGruFRunFromVFS_PackedSizeLabel;
+ LANGFRunFromVFS_DateLabel := LANGruFRunFromVFS_DateLabel;
+ LANGFRunFromVFS_InfoLabel := LANGruFRunFromVFS_InfoLabel;
+ LANGFRunFromVFS_OpensWithLabel := LANGruFRunFromVFS_OpensWithLabel;
+ LANGFRunFromVFS_ExecuteButton := LANGruFRunFromVFS_ExecuteButton;
+ LANGFRunFromVFS_ExecuteAllButton := LANGruFRunFromVFS_ExecuteAllButton;
+ LANGFSetPassword_Caption := LANGruFSetPassword_Caption;
+ LANGFSetPassword_Label1_Caption := LANGruFSetPassword_Label1_Caption;
+ LANGFSetPassword_Label2_Caption := LANGruFSetPassword_Label2_Caption;
+ LANGFSetPassword_ShowPasswordCheckButton := LANGruFSetPassword_ShowPasswordCheckButton;
+end;
+
+initialization
+ AddTranslation('ru_RU', @SetTranslation);
+ AddTranslation('ru_RU.utf8', @SetTranslation);
+ AddTranslation('RU', @SetTranslation);
+end.
diff --git a/translations/UTranslation_SR.pas b/translations/UTranslation_SR.pas
new file mode 100644
index 0000000..b6c9328
--- /dev/null
+++ b/translations/UTranslation_SR.pas
@@ -0,0 +1,1261 @@
+(*
+ Tux Commander - UTranslation_SR - Serbian Localization constants
+ Copyright (C) 2005 Bojan Bozovic <bojanb@sbb.co.yu>
+ !! Currently unmaintained, new translator needed !!
+
+ 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
+*)
+unit UTranslation_SR;
+
+interface
+
+implementation
+
+uses ULocale;
+
+const LANGsrF2Button_Caption = 'F2 - Преименуј';
+ LANGsrF3Button_Caption = 'F3 - Преглед';
+ LANGsrF4Button_Caption = 'F4 - Измена';
+ LANGsrF5Button_Caption = 'F5 - Копирај';
+ LANGsrF6Button_Caption = 'F6 - Премести';
+ LANGsrF7Button_Caption = 'F7 - НовиДир';
+ LANGsrF8Button_Caption = 'F8 - Обриши';
+
+ LANGsrmnuFile_Caption = '_Фајл';
+ LANGsrmnuMark_Caption = '_Обележи';
+ LANGsrmnuCommands_Caption = '_Команде';
+ LANGsrmnuHelp_Caption = '_Помоћ';
+ LANGsrmiExit_Caption = 'И_злаз';
+ LANGsrmiSelectGroup_Caption = 'Изабери _Групу...';
+ LANGsrmiUnselectGroup_Caption = '_Поништи Избор...';
+ LANGsrmiSelectAll_Caption = '_Обележи Све';
+ LANGsrmiUnselectAll_Caption = 'П_оништи Избор';
+ LANGsrmiInvertSelection_Caption = '_Окрени Избор';
+ LANGsrmiRefresh_Caption = '_Освежи';
+ LANGsrmiAbout_Caption = '_О програму...';
+
+ LANGsrColumn1_Caption = 'Име';
+ LANGsrColumn2_Caption = 'Екст';
+ LANGsrColumn3_Caption = 'Величина';
+ LANGsrColumn4_Caption = 'Датум';
+ LANGsrColumn5_Caption = 'Атр';
+
+ LANGsrExpandSelection = 'Прошири избор';
+ LANGsrShrinkSelection = 'Смањи избор';
+ LANGsrNoMatchesFound = 'Нисам пронашао поклапања';
+ LANGsrNoFilesSelected = 'Нема изабраних фајлова!';
+ LANGsrSelectedFilesDirectories = '%d изабрани фајлови/директоријуми';
+ LANGsrDirectoryS = 'директоријум %s';
+ LANGsrFileS = 'фајл %s';
+ LANGsrDoYouReallyWantToDeleteTheS = 'Да ли стварно желите да обришете %s ?';
+ LANGsrDoYouReallyWantToDeleteTheSS = 'Да ли стварно желите да обришете %s ?'#10'%s';
+ LANGsrCopyFiles = 'Копирај фајлове';
+ LANGsrMoveRenameFiles = 'Премести/Преименуј фајлове';
+ LANGsrCopyDFileDirectoriesTo = 'Копирај %d фајл/директоријуме у';
+ LANGsrMoveRenameDFileDirectoriesTo = 'Премести/Преименуј %d фајл/директоријуме у';
+ LANGsrCopySC = 'Копирај:';
+ LANGsrMoveRenameSC = 'Премести/Преименуј:';
+
+ LANGsrQuickFind = ' Брза Претрага:';
+
+ LANGsrAboutString = 'Tux Commander'#10'Верзија %s'#10'Датум градње: %s'#10#10'Copyright (c) 2008 Tomas Bzatek'#10'Е-пошта: tbzatek@users.sourceforge.net'#10'Сајт: http://tuxcmd.sourceforge.net/';
+ LANGsrAboutStringGnome = 'верзија %s'#10'Датум градње: %s'#10'Сајт: http://tuxcmd.sourceforge.net/';
+ LANGsrDiskStatFmt = '%s од %s слободно';
+ LANGsrDiskStatVolNameFmt = '[%s] %s од %s слободно';
+ LANGsrStatusLineFmt = '%s од %s у %d од %d изабраних фајлова';
+ LANGsrPanelStrings : array[boolean] of string = ('десно', 'лево');
+
+ LANGsrDIR = '<ДИР>';
+ LANGsrErrorGettingListingForSPanel = 'Грешка при добављању листинга за %s панел:'#10' %s'#10#10'Путања = ''%s''';
+ LANGsrErrorGettingListingForSPanelNoPath = 'Грешка при добављању листинга за %s панел:'#10' %s';
+ LANGsrErrorCreatingNewDirectorySInSPanel = 'Грешка при прављењу новог директоријума ''%s'' у %s панелу:'#10' %s';
+ LANGsrErrorCreatingNewDirectorySInSPanelNoPath = 'Грешка при прављењу новог директоријума у %s панелу:'#10' %s';
+ LANGsrTheFileDirectory = 'Фајл/директоријум';
+ LANGsrCouldNotBeDeleted = 'није могуће обрисати';
+ LANGsrCouldNotBeDeletedS = 'није могуће обрисати: %s';
+ LANGsrUserCancelled = 'Корисник поништио!';
+ LANGsrTheDirectorySIsNotEmpty = 'Директоријум %s није празан!';
+ LANGsrCannotCopyFile = 'Не могу да копирам фајл';
+ LANGsrCopyError = 'Грешка при копирању';
+ LANGsrMoveError = 'Грешка при премештању';
+ LANGsrOverwriteS = 'Препиши: %s';
+ LANGsrWithFileS = 'Фајлом: %s';
+ LANGsrOvewriteSBytesS = '%s бајта, %s';
+ LANGsrTheFile = 'Фајл';
+ LANGsrCopy = 'Копирај';
+ LANGsrMove = 'Премести';
+ LANGsrTheDirectory = 'Директоријум';
+ LANGsrTheSymbolicLink = 'Симболичка веза';
+ LANGsrCannotMoveFile = 'Не могу да преместим фајл';
+ LANGsrCouldNotBeCreated = 'није могуће направити';
+ LANGsrCouldNotBeCreatedS = 'није могуће направити: %s';
+ LANGsrFromS = 'Од: %s';
+ LANGsrToS = 'За: %s';
+ LANGsrCannotCopyFileToItself = 'Не могу да копирам фајл у њега самог';
+ LANGsrMemoryAllocationFailed = 'Премештање меморије није успело:';
+ LANGsrCannotOpenSourceFile = 'Не могу да отворим изворни фајл';
+ LANGsrCannotOpenDestinationFile = 'Не могу да отворим одредишни фајл';
+ LANGsrCannotCloseDestinationFile = 'Не могу да затворим одредишни фајл';
+ LANGsrCannotCloseSourceFile = 'Не могу да затворим изворни фајл';
+ LANGsrCannotReadFromSourceFile = 'Не могу да читам из изворног фајла';
+ LANGsrCannotWriteToDestinationFile = 'Не могу да уписујем у одредишни фајл';
+
+ LANGsrUnknownException = 'Непознат Изузетак';
+ LANGsrNoAccess = 'Нема Приступа';
+ LANGsrUnknownError = 'Непозната Грешка';
+
+ LANGsrCreateANewDirectory = 'Направи нови директоријум';
+ LANGsrEnterDirectoryName = 'Унесите _име директоријума:';
+
+ LANGsrOverwriteQuestion = 'Препиши питање';
+ LANGsrOverwriteButton_Caption = '_Препиши';
+ LANGsrOverwriteAllButton_Caption = 'Препиши _све';
+ LANGsrSkipButton_Caption = '_Прескочи';
+ LANGsrOverwriteAllOlderButton_Caption = 'Препиши све ст_арије';
+ LANGsrSkipAllButton_Caption = 'П_рескочи све';
+ LANGsrRenameButton_Caption = '_Преименуј';
+ LANGsrAppendButton_Caption = 'П_римени';
+ LANGsrRename = 'Преименуј';
+ LANGsrRenameFile = 'Преименуј фајл ''%s'' у';
+ LANGsrIgnoreButton_Caption = '_Игнориши';
+
+ LANGsrProgress = 'Напредак';
+ LANGsrCancel = '_Поништи';
+ LANGsrDelete = 'Обриши:';
+
+ LANGsrSpecifyFileType = '_Прецизирајте врсте фајлова:';
+
+ LANGsrRemoveDirectory = 'Уклони директоријум';
+ LANGsrDoYouWantToDeleteItWithAllItsFilesAndSubdirectories = 'Да ли желите да га обришете са свим фајловима и поддиректоријумима?';
+ LANGsrRetry = '_Покушај поново';
+ LANGsrDeleteButton_Caption = '_Обриши';
+ LANGsrAll = '_Све';
+
+ LANGsrCopyFilesSC = 'Копирај фајлове:';
+ LANGsrAppendQuestion = 'Да ли сте сигурни да желите да примените фајл ''%s'' на ''%s''?';
+ LANGsrPreparingList = 'Припремам листу...';
+
+ LANGsrYouMustSelectAValidFile = 'Морате изабрати исправан фајл!';
+ LANGsrmiVerifyChecksums = '_Потврди чексуме';
+ LANGsrVerifyChecksumsCaption = 'Потврди чексуме';
+ LANGsrCheckButtonCaptionCheck = '_Провери';
+ LANGsrCheckButtonCaptionStop = '_Заустави';
+ LANGsrFileListTooltip = '[?] - Није проверено'#10'[У реду] - Чексума у реду'#10'[ЛОШЕ] - Лоша чексума'#10'[Н/Д] - Фајл није доступан';
+ LANGsrFilenameColumnCaption = 'Име фајла';
+ LANGsrTheFileSYouAreTryingToOpenIsQuiteBig = 'Фајл ''%s'' који покушавате да отворите је прилично велики (%s бајта). Можда то није исправан фајл чексуме.'#10#10'Да ли свакако желите да га учитате?';
+ LANGsrAnErrorOccuredWhileInitializingMemoryBlock = 'Дошло је до грешке приликом покретања меморијског блока. Затворите неке програме и покушајте поново.';
+ LANGsrAnErrorOccuredWhileOpeningFileSS = 'Дошло је до грешке приликом отварања фајла ''%s'':'#10' %s';
+ LANGsrAnErrorOccuredWhileReadingFileSS = 'Дошло је до грешке приликом читања фајла ''%s'':'#10' %s';
+ LANGsrChecksumNotChecked = '<span weight="bold">Статус:</span> Није проверено';
+ LANGsrChecksumChecking = '<span weight="bold">Статус:</span> Проверавам...';
+ LANGsrChecksumInterrupted = '<span weight="bold">Статус:</span> Прекинуто';
+ LANGsrChecksumDOK = '<span weight="bold">Статус:</span> %d%% У реду';
+
+ LANGsrmiCreateChecksumsCaption = '_Направи чексуму...';
+ LANGsrYouMustSelectAtLeastOneFileToCalculateChecksum = 'Морате изабрати бар један фајл како би чексума била израчуната!';
+ LANGsrCreateChecksumsCaption = 'Направи чексуме';
+ LANGsrCCHKSUMPage1Text = 'Направићете чексуме за'#10'изабраних фајлова. Ако нисте изабрали'#10'све фајлове које желите, затворите овај друид и'#10'изаберите још фајлова.';
+ LANGsrCCHKSUMPage4Text = 'Друид је спреман да направи чексуме за '#10' фајлова које сте изабрали. ' +
+ 'Ово може да потраје неколико минута.'#10'Притисните Напред да бисте наставили.';
+ LANGsrCCHKSUMPage6Text = 'Дошло је до грешака при прављењу чексума:';
+ LANGsrCCHKSUMPage7Text = 'Прављење чексума је завршено и'#10'Ваших фајлова је спремно.'#10#10'Кликните "Заврши" да бисте изашли.';
+ LANGsrCCHKSUMPage1Title = '<span size="xx-large" weight="ultrabold">Припремите фајлове за чексуме</span>';
+ LANGsrCCHKSUMPage2Title = '<span size="xx-large" weight="ultrabold">Изаберите врсту фајлова за чексуме</span>';
+ LANGsrCCHKSUMPage3Title = '<span size="xx-large" weight="ultrabold">Изаберите имена фајлова</span>';
+ LANGsrCCHKSUMPage4Title = '<span size="xx-large" weight="ultrabold">Спреман за проверу</span>';
+ LANGsrCCHKSUMPage5Title = '<span size="xx-large" weight="ultrabold">Обрађујем...</span>';
+ LANGsrCCHKSUMPage6Title = '<span size="xx-large" weight="ultrabold">Грешка!</span>';
+ LANGsrCCHKSUMPage7Title = '<span size="xx-large" weight="ultrabold">Готово</span>';
+ LANGsrCCHKSUMSFVFile = 'SFV Фајл';
+ LANGsrCCHKSUMMD5sumFile = 'MD5sum Фајл';
+ LANGsrCCHKSUMFileName = 'Име _Фајла:';
+ LANGsrCCHKSUMCreateSeparateChecksumFiles = 'Направи _одвојене фајлове чексума';
+ LANGsrCCHKSUMNowProcessingFileS = 'Тренутно обрађујем фајл: %s';
+ LANGsrCCHKSUMFinishCaption = '_Заврши';
+ LANGsrCCHKSUMAreYouSureYouWantToAbortTheProcessing = 'Да ли сте сигурни да желите да прекинете обраду?';
+ LANGsrCCHKSUMAnErrorOccuredWhileOpeningFileSS = 'Дошло је до грешке при отварању фајла ''%s'': %s'#10;
+ LANGsrCCHKSUMAnErrorOccuredWhileReadingFileSS = 'Дошло је до грешке при читању фајла ''%s'': %s'#10;
+ LANGsrCCHKSUMAnErrorOccuredWhileWritingFileSS = 'Дошло је до грешке при уписивању фајла ''%s'': %s'#10;
+
+ LANGsrAnErrorOccuredWhileWritingFileSS = 'Дошло је до грешке при уписивању фајла ''%s'':'#10' %s';
+ LANGsrTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt = 'Одредишни фајл ''%s'' већ постоји. Да ли желите да га препишете?';
+ LANGsrTheTargetFileSCannotBeRemovedS = 'Одредишни фајл ''%s'' не може бити уклоњен: %s';
+ LANGsrMergeCaption = 'Споји';
+ LANGsrPleaseInsertNextDiskOrGiveDifferentLocation = 'Молим Вас убаците следећи диск, или унесите другачију локацију:';
+ LANGsrMergeOfSSucceeded = 'Спајање ''%s'' успело (CRC чексума у реду).';
+ LANGsrWarningCreatedFileFailsCRCCheck = 'Упозорење: Направљени фајл не пролази CRC проверу!';
+ LANGsrMergeOfSSucceeded_NoCRCFileAvailable = 'Спајање ''%s'' успело (није доступан CRC фајл).';
+ LANGsrMergeSAndAllFilesWithAscendingNamesToTheFollowingDirectory = 'Спајање ''%s'' и свих фајлова са опадајућим именима у следећи директоријум:';
+ LANGsrMergeSC = 'Споји:';
+ LANGsrmiSplitFileCaption = '_Подели фајл...';
+ LANGsrmiMergeFilesCaption = '_Споји фајлове...';
+
+ LANGsrSplitTheFileSToDirectory = '_Подели фајл ''%s'' у директоријум:';
+ LANGsrSplitSC = 'Подели:';
+ LANGsrSplitFile = 'Подели Фајл';
+ LANGsrBytesPerFile = '_Бајта по фајлу:';
+ LANGsrAutomatic = 'Аутоматски';
+ LANGsrDeleteFilesOnTargetDisk = '_Обриши фајлове на одредишном диску (usable for removable media)';
+ LANGsrSplitCaption = 'Подели';
+ LANGsrCannotOpenFileS = 'Не могу да отворим фајл ''%s''';
+ LANGsrCannotSplitTheFileToMoreThan999Parts = 'Не могу да поделим фајл на више од 999 делова!';
+ LANGsrThereAreSomeFilesInTheTargetDirectorySDoYouWantToDeleteThem = 'У одредишном директоријуму има фајлова:'#10'%s'#10'Да ли желите да их обришете?';
+ LANGsrThereAreDFilesInTheTargetDirectoryDoYouWantToDeleteThem = 'Има %d фајлова у одредишном директоријуму. Да ли желите да их обришете?';
+ LANGsrAnErrorOccuredWhileOperationS = 'Дошло је до грешке током операције: %s';
+ LANGsrSplitOfSSucceeded = 'Дељење ''%s'' успело.';
+ LANGsrSplitOfSFailed = 'Дељење ''%s'' није успело!';
+
+ LANGsrmnuShow_Caption = 'Прикаж_и';
+ LANGsrmiShowDotFiles_Caption = 'Прикажи фајлове са _тачком ';
+ LANGsrTheFileYouAreTryingToOpenIsQuiteBig = 'Фајл који покушавате да отворите је прилично велики. Његово учитавање у спољном програму ' +
+ '(као што је gedit) може изазвати успорење система.'#10'Да ли желите да наставите?';
+ LANGsrCannotExecuteSPleaseCheckTheConfiguration = 'Не могу да извршим ''%s''. Молим Вас проверите подешавања или исправно поставите везе са врстама фајлова.';
+ LANGsrEdit = 'Измени';
+ LANGsrEnterFilenameToEdit = '_Унесите име фајла за измену:';
+
+ LANGsrmnuSettings_Caption = 'По_дешавања';
+ LANGsrmiFileTypes_Caption = '_Врсте фајлова...';
+ LANGsrThereIsNoApplicationAssociatedWithS = 'Ниједан програм није повезан са "%s".'#10#10'Можете подесити Tux Commander да повезује програме са ' +
+ 'врстама фајлова. Да ли сада желите да повежете програм са овом врстом фајла?';
+ LANGsrErrorExecutingCommand = 'Грешка при извршавању наредбе!';
+ LANGsrEditFileTypesCaption = 'Измени врсте фајлова';
+ LANGsrTitleLabel_Caption = '<span size="x-large" weight="ultrabold">Подешавање врста фајлова</span>';
+ LANGsrExtensionsColumn = 'Екстензије';
+ LANGsrDescriptionColumn = 'Опис';
+ LANGsrFileTypesList = 'Листа врста фајлова';
+ LANGsrActionName = 'Име акције';
+ LANGsrCommand = 'Наредба';
+ LANGsrSetDefaultActionButton_Caption = '_Постави као подразумевано';
+ LANGsrRunInTerminalCheckBox_Caption = 'Покрени _Терминалу';
+ LANGsrAutodetectCheckBox_Caption = 'Аутоматско препознавање _GUI програма';
+ LANGsrBrowseButton_Caption = '_Прегледај...';
+ LANGsrCommandLabel_Caption = 'На_редба:';
+ LANGsrDescriptionLabel_Caption = 'О_пис:';
+ LANGsrFNameExtLabel_Caption = 'Д_одај екстензију:';
+ LANGsrNotebookPageExtensions = 'Врста фајла';
+ LANGsrNotebookPageActions = 'Акције';
+ LANGsrDefault = ' (подразумевано)';
+ LANGsrCannotSaveFileTypeAssociationsBecauseOtherProcess = 'Не могу да снимим везу са врстом фајла зато што је други процес обновио док је био покренут овај део програма.';
+
+ LANGsrDefaultColor = 'По_дразумевана боја';
+ LANGsrIcon = '_Икона:';
+ LANGsrBrowseForIcon = 'Прегледај за икону';
+ LANGsrSelectFileTypeColor = 'Изаберите боју за врсту фајла';
+ LANGsrColor = 'Бо_ја:';
+
+ LANGsrmiChangePermissions_Caption = 'Промени Доз_воле...';
+ LANGsrmiChangeOwner_Caption = 'Промени _Власника/Групу...';
+ LANGsrmiCreateSymlink_Caption = 'Направи Симболичку_везу...';
+ LANGsrmiEditSymlink_Caption = '_Измени симболичку везу...';
+ LANGsrChmodProgress = 'Промени дозволе:';
+ LANGsrChownProgress = 'Промени власника:';
+ LANGsrYouMustSelectAValidSymbolicLink = 'Морате изабрати исправну симболичку везу!';
+ LANGsrPopupRunS = 'И_зврши %s';
+ LANGsrPopupOpenS = 'О_твори %s';
+ LANGsrPopupGoUp = '_Иди горе';
+ LANGsrPopupOpenWithS = 'Отвори помоћу %s';
+ LANGsrPopupDefault = ' (подразумевано)';
+ LANGsrPopupOpenWith = 'О_твори помоћу...';
+ LANGsrPopupViewFile = '_Прегледај фајл';
+ LANGsrPopupEditFile = 'Из_мени фајл';
+ LANGsrPopupMakeSymlink = 'Направи _симболичку везу';
+ LANGsrPopupRename = '_Преименуј';
+ LANGsrPopupDelete = '_Обриши';
+ LANGsrDialogChangePermissions = 'Промени дозволе';
+ LANGsrCouldNotBeChmoddedS = 'није могуће извршити chmod: %s';
+ LANGsrDialogChangeOwner = 'Промени власника';
+ LANGsrCouldNotBeChownedS = 'није могуће извршити chown: %s';
+ LANGsrDialogMakeSymlink = 'Направи симболичку везу';
+ LANGsrDialogEditSymlink = 'Измени симболичку везу';
+ LANGsrFEditSymlink_Caption = 'Измени симболичку везу';
+ LANGsrFEditSymlink_SymbolicLinkFilename = 'Име фајла _симболичке везе:';
+ LANGsrFEditSymlink_SymbolicLinkPointsTo = 'Симболичка веза показује _на:';
+
+ LANGsrFChmod_Caption = 'Дозволе Приступа';
+ LANGsrFChmod_PermissionFrame = 'Дозволе';
+ LANGsrFChmod_FileFrame = 'Фајл';
+ LANGsrFChmod_ApplyRecursivelyFor = 'Примени _рекурзивно за';
+ LANGsrFChmod_miAllFiles = 'Сви фајлови и директоријуми';
+ LANGsrFChmod_miDirectories = 'Само директоријуми';
+ LANGsrFChmod_OctalLabel = '_Octal:';
+ LANGsrFChmod_SUID = 'SUID - Постави ИД корисника по извршавању';
+ LANGsrFChmod_SGID = 'SGID - Постави ИД групе по извршавању';
+ LANGsrFChmod_Sticky = 'Лепљиви део';
+ LANGsrFChmod_RUSR = 'RUSR - Читање од стране власника';
+ LANGsrFChmod_WUSR = 'WUSR - Уписивање од стране власника';
+ LANGsrFChmod_XUSR = 'XUSR - Извршавање/Претрага од стране власника';
+ LANGsrFChmod_RGRP = 'RGRP - Читање од стране групе';
+ LANGsrFChmod_WGRP = 'WGRP - Уписивање од стране групе';
+ LANGsrFChmod_XGRP = 'XGRP - Извршавање/Претрага од стране групе';
+ LANGsrFChmod_ROTH = 'ROTH - Читање од стране осталих';
+ LANGsrFChmod_WOTH = 'WOTH - Уписивање од стране осталих';
+ LANGsrFChmod_XOTH = 'XOTH - Извршавање/Претрага од стране осталих';
+ LANGsrFChmod_TextLabel = '<span weight="ultrabold">Текст:</span> %s';
+ LANGsrFChmod_FileLabel = '<span weight="ultrabold">Фајл:</span> %s'#10'<span weight="ultrabold">Текст:</span> %s'#10 +
+ '<span weight="ultrabold">Octal:</span> %d'#10'<span weight="ultrabold">Власник:</span> %s'#10 +
+ '<span weight="ultrabold">Група:</span> %s';
+
+ LANGsrFChown_Caption = 'Промени власника/групу';
+ LANGsrFChown_OwnerFrame = 'Корисничко име';
+ LANGsrFChown_GroupFrame = 'Име групе';
+ LANGsrFChown_FileFrame = 'Фајл';
+ LANGsrFChown_ApplyRecursively = 'Примени _рекурзивно';
+
+ LANGsrFSymlink_Caption = 'Направи симболичку везу';
+ LANGsrFSymlink_ExistingFilename = '_Постојеће име фајла (име фајла на које ће указивати симболичка веза):';
+ LANGsrFSymlink_SymlinkFilename = '_Име фајла симболичке везе:';
+
+ LANGsrmnuBookmarks_Caption = '_Маркер';
+ LANGsrmiAddBookmark_Caption = 'Додај Маркер';
+ LANGsrmiEditBookmarks_Caption = 'Измени Маркере';
+ LANGsrBookmarkPopupDelete_Caption = '_Обриши';
+ LANGsrmiPreferences_Caption = '_Поставке...';
+ LANGsrTheCurrentDirectoryAlreadyExistsInTheBookmarksList = 'Текући директоријум већ постоји у листи маркера';
+ LANGsrSomeOtherInstanceChanged = 'Неки други Tux Commander је променио подешавања. Да ли желите да примените нова подешавања?'#10#10'Упозорење: Ако притиснете Не у овом ' +
+ 'тренутку, подешавања ће бити преписана у овом прозору'' изађи!';
+
+ LANGsrPreferences_Caption = 'Поставке';
+ LANGsrPreferences_TitleLabel_Caption = '<span size="x-large" weight="ultrabold">Поставке програма</span>';
+ LANGsrPreferences_GeneralPage = 'Опште';
+ LANGsrPreferences_FontsPage = 'Фонтови';
+ LANGsrPreferences_ColorsPage = 'Боје';
+ LANGsrPreferences_RowHeight = '_Висина реда:';
+ LANGsrPreferences_NumHistoryItems = 'Историја Ко_мандне линије:';
+ LANGsrPreferences_Default = '_Подразумевано';
+ LANGsrPreferences_ClearReadonlyAttribute = 'Уклони _readonly атрибуте при копирању са CD-ROM-а';
+ LANGsrPreferences_DisableMouseRenaming = 'Онемогући преименовање помоћу _миша ';
+ LANGsrPreferences_ShowFiletypeIconsInList = 'Прикажи иконе за _врсте фајлова';
+ LANGsrPreferences_ExternalAppsLabel = '<span weight="ultrabold">Спољни програми</span>';
+ LANGsrPreferences_Viewer = '_Прегледач:';
+ LANGsrPreferences_Editor = '_Измењивач:';
+ LANGsrPreferences_Terminal = '_Терминал:';
+ LANGsrPreferences_ListFont = 'Фонт листе:';
+ LANGsrPreferences_Change = 'Промени...';
+ LANGsrPreferences_UseDefaultFont = 'Користи _подразумевани фонт';
+ LANGsrPreferences_Foreground = 'Спреда';
+ LANGsrPreferences_Background = 'Позадина';
+ LANGsrPreferences_NormalItem = 'Нормална Ставка:';
+ LANGsrPreferences_SetToDefaultToUseGTKThemeColors = 'Постави коришћење GTK тема за боје као подразумевано';
+ LANGsrPreferences_Cursor = 'Курсор:';
+ LANGsrPreferences_InactiveItem = 'Неактивна ставка:';
+ LANGsrPreferences_SelectedItem = 'Изабрана ставка:';
+ LANGsrPreferences_LinkItem = 'Симболичке везе:';
+ LANGsrPreferences_LinkItemHint = 'Постави као подразумевано да се симболичке везе приказују коришћењем подразумеваних нормалних боја за ставке';
+ LANGsrPreferences_DotFileItem = 'Фајлови са тачком:';
+ LANGsrPreferences_DotFileItemHint = 'Постави као подразумевано да се фајлови са тачком приказују коришћењем подразумеваних нормалних боја за ставке';
+ LANGsrPreferences_BrowseForApplication = 'Прегледај за програм';
+ LANGsrPreferences_DefaultS = 'Подразумевано: %s';
+ LANGsrPreferences_SelectFont = 'Изаберите фонт';
+
+ (*************** STRINGS ADDED TO v0.4.101 **********************************************************************************)
+ LANGsrBookmarkButton_Tooltip = 'Прикажи маркере';
+ LANGsrUpButton_Tooltip = 'Иди у претходни директоријум';
+ LANGsrRootButton_Tooltip = 'Иди у корени директоријум (/)';
+ LANGsrHomeButton_Tooltip = 'Иди у матични директоријум (/home/user)';
+ LANGsrLeftEqualButton_Tooltip = 'Пребаци десну таблу на исти директоријум';
+ LANGsrRightEqualButton_Tooltip = 'Пребаци леву таблу на исти директоријум';
+ LANGsrmiShowDirectorySizes_Caption = 'Прикажи величине д_иректоријума';
+ LANGsrmiTargetSource_Caption = '_Одредиште = Извор';
+ LANGsrFileTypeDirectory = 'Директоријум';
+ LANGsrFileTypeFile = 'Фајл';
+ LANGsrFileTypeMetafile = 'Ово је уобичајена мета-ставка';
+ LANGsrPreferencesPanelsPage = 'Табла';
+ LANGsrPreferencesApplicationsPage = 'Програми';
+ LANGsrPreferencesExperimentalPage = 'Експериментално';
+ LANGsrPreferencesSelectAllDirectoriesCheckBox_Caption = 'Обележи _и директоријуме када се обележава све';
+ LANGsrPreferencesNewStyleAltOCheckBox_Caption = '_Нови стил Alt+O';
+ LANGsrPreferencesNewStyleAltOCheckBox_Tooltip = 'Остани у истом директоријуму при промени директоријума на супротној табли притискањем Ctrl/Alt+O';
+ LANGsrPreferencesShowFuncButtonsCheckBox_Caption = 'Прикажи дугмад функцијских _тастера';
+ LANGsrPreferencesSizeFormatLabel_Caption = '_Формат величине:';
+ LANGsrPreferencesmiSizeFormat1 = 'Систем';
+ LANGsrPreferencesmiSizeFormat6 = 'Груписано';
+ LANGsrPreferencesAutodetectXApp = 'Аутоматски препознај X програм';
+ LANGsrPreferencesAlwaysRunInTerminal = 'Увек покрени у терминалу';
+ LANGsrPreferencesNeverRunInTerminal = 'Никада немој да покренеш у терминалу';
+ LANGsrPreferencesCmdLineBehaviourLabel_Caption = '_Извршавање из командне линије:';
+ LANGsrPreferencesFeatures = 'Могућности';
+ LANGsrPreferencesDisableMouseRename_Tooltip = 'Још увек можете извршити брзо преименовање притискањем Shift+F6';
+ LANGsrPreferencesDisableFileTipsCheckBox_Caption = 'Онемогући _облачиће за фајлове';
+ LANGsrPreferencesDisableFileTipsCheckBox_Tooltip = 'Немој да приказујеш облачиће на табли ако је текст у колони скраћен';
+ LANGsrPreferencesShow = 'Прикажи';
+ LANGsrPreferencesDirsInBoldCheckBox_Caption = 'Директоријуми _подебљани';
+ LANGsrPreferencesDisableDirectoryBracketsCheckBox_Caption = 'Онемогући з_аграде за директоријуме';
+ LANGsrPreferencesOctalPermissionsCheckBox_Caption = 'Прикажи _octal дозволе';
+ LANGsrPreferencesOctalPermissionsCheckBox_Tooltip = 'Прикажи дозволе за фајлове/директоријуме као број уместо у текстуалном облику (-rw-rw-rw-)';
+ LANGsrPreferencesMovement = 'Кретање';
+ LANGsrPreferencesLynxLikeMotionCheckBox_Caption = 'Кретање попут _Lynx-а';
+ LANGsrPreferencesInsertMovesDownCheckBox_Caption = '_Insert помера на доле';
+ LANGsrPreferencesSpaceMovesDownCheckBox_Caption = '_Space помера на доле';
+ LANGsrPreferencesViewer = 'Прегледач';
+ LANGsrPreferencesCommandSC = 'Наредба:';
+ LANGsrPreferencesUseInternalViewer = 'Користи _унутрашњи прегледач';
+ LANGsrPreferencesEditor = 'Измењивач';
+ LANGsrPreferencesTerminal = 'Терминал';
+ LANGsrPreferencesExperimentalFeatures = 'Експерименталне могућности';
+ LANGsrPreferencesExperimentalWarningLabel_Caption = '<span weight="ultrabold">Упозорење:</span> Ове могућности су тренутно у развоју и можда не раде како треба. Користите их на сопствени ризик!';
+ LANGsrPreferencesFocusRefreshCheckBox_Caption = 'Обави _освежење при фокусирању прозора';
+ LANGsrPreferencesFocusRefreshCheckBox_Tooltip = 'Веома споро освежавање табле у овом тренутку';
+ LANGsrPreferencesWMCompatModeCheckBox_Caption = '_WM режим компатибилности';
+ LANGsrPreferencesWMCompatModeCheckBox_Tooltip = 'Користите ако имате неких проблема са управљачем прозорима (на пример IceWM не обавља увеличавање прозора исправно)';
+ LANGsrPreferencesCompatUseLibcSystemCheckBox_Caption = 'Користи libc _систем() за извршавање програма';
+ LANGsrPreferencesCompatUseLibcSystemCheckBox_Tooltip = 'Користите у случају проблема са замрзавањем и падањем при покретању спољних програма';
+
+ (*************** STRINGS ADDED TO v0.5.70 **********************************************************************************)
+ LANGsrmiSearchCaption2 = '_Претрага...';
+ LANGsrmiNoMounterBarCaption = '_Не приказуј линију за монтирање';
+ LANGsrmiShowOneMounterBarCaption = 'Прикажи _једну линију за монтирање';
+ LANGsrmiShowTwoMounterBarCaption = 'Прикажи _две линије за монтирање';
+ LANGsrmnuNetworkCaption = 'М_режа';
+ LANGsrmiConnectionsCaption = '_Везе...';
+ LANGsrmiOpenConnectionCaption = '_Отвори везу...';
+ LANGsrmiQuickConnectCaption = '_Брзо повезивање...';
+ LANGsrmnuPluginsCaption = 'Пр_икључци';
+ LANGsrmiTestPluginCaption = '_Тестирај прикључак...';
+ LANGsrmiMounterSettingsCaption = 'Подешавања за _монтирање...';
+ LANGsrmiColumnsCaption = 'Колоне т_абле...';
+ LANGsrmiSavePositionCaption = '_Сними позицију';
+ LANGsrmiMountCaption = '_Mount';
+ LANGsrmiUmountCaption = '_Umount';
+ LANGsrmiEjectCaption = '_Отвори';
+ LANGsrmiDuplicateTabCaption = 'Дуплирај текући језичак';
+ LANGsrmiCloseTabCaption = 'Затвори текући језичак';
+ LANGsrmiCloseAllTabsCaption = 'Затвори све језичке';
+ LANGsrCannotDetermineDestinationEngine = 'Не могу да утврдим одредишни мотор. Молим Вас унесите исправну путању и покушајте поново.';
+ LANGsrCannotLoadFile = 'Не могу да учитам фајл ''%s''. Молим Вас проверите дозволе.';
+ LANGsrMountPointDevice = 'Тачка Монтирања: %s'#10'Уређај: %s';
+ LANGsrMountSC = 'Монтирај:';
+ LANGsrNoPluginsFound = 'Нису пронађени прикључци';
+ LANGsrPluginAbout = 'О програму...';
+ LANGsrCouldntOpenURI = 'Нисам могао да отворим наведени URI. Молим Вас проверите постојаност идентификатора извора и дозволе приступа.';
+ LANGsrPluginAboutInside = 'Прикључак: %s'#10#10'%s'#10'%s';
+ LANGsrAreYouSureCloseAllTabs = 'Да ли сте сигурни да желите да затворите све активне језичке?';
+ LANGsrCouldntOpenURIArchive = 'Нисам могао да отворим архиву. Молим Вас проверите постојаност и дозволе приступа.';
+ LANGsrThereIsNoModuleAvailable = 'Нема доступних VFS модула који могу да раде са овом везом';
+ LANGsrIgnoreError = 'Да ли стварно желите да игноришете грешку? Изворни фајл ће бити обрисан';
+ LANGsrErrorMount = 'Дошло је до грешке при монтирању уређаја ''%s'':'#10#10;
+ LANGsrErrorUmount = 'Дошло је до грешке при одмонтиравању уређаја ''%s'':'#10#10;
+ LANGsrErrorEject = 'Дошло је до грешке при отварању уређаја ''%s'':'#10#10;
+
+ LANGsrMounterPrefs_Caption = 'Подешавања Монтера';
+ LANGsrMounterPrefs_TitleLabelCaption = 'Подешавања Монтера';
+ LANGsrMounterPrefs_ListViewFrameCaption = 'Монтер';
+ LANGsrMounterPrefs_MountName = 'Име за монтирање';
+ LANGsrMounterPrefs_MountPoint = 'Тачка монтирања';
+ LANGsrMounterPrefs_Device = 'Уређај';
+ LANGsrMounterPrefs_MoveUpButtonTooltip = 'Помери ставку на горе';
+ LANGsrMounterPrefs_MoveDownButtonTooltip = 'Помери ставку на доле';
+ LANGsrMounterPrefs_UseFSTabDefaultsCheckBox = 'Користи _fstab подразумеване ставке';
+ LANGsrMounterPrefs_UseFSTabDefaultsCheckBoxTooltip = 'Штиклирањем овога, линија монтера ће бити попуњена подразумеваним ставкама које се ' +
+ 'могу пронаћи у /etc/fstab (системски фајл са листом монтирања)';
+ LANGsrMounterPrefs_ToggleModeCheckBox = 'Дугмад остају _притиснута када је уређај монтиран';
+ LANGsrMounterPrefs_ToggleModeCheckBoxTooltip = 'Када је штиклирано, дугмад монтера ће остати притиснута ако је уређај монтиран; још један клик ће ' +
+ 'резултовати одмонтиравањем (отварањем у овом случају)';
+ LANGsrMounterPrefs_PropertiesFrameCaption = 'Поставке ставки монтера';
+ LANGsrMounterPrefs_DisplayTextLabelCaption = 'Приказани _Текст:';
+ LANGsrMounterPrefs_MountPointLabelCaption = 'Тачка _Монтирања:';
+ LANGsrMounterPrefs_MountDeviceLabelCaption = '_Уређај:';
+ LANGsrMounterPrefs_DeviceTypeLabelCaption = '_Врста Уређаја:';
+ LANGsrMounterPrefs_miLocalDiskCaption = 'Локални диск';
+ LANGsrMounterPrefs_miRemovableCaption = 'Измењиви';
+ LANGsrMounterPrefs_miCDCaption = 'CD/DVD уређај';
+ LANGsrMounterPrefs_miFloppyCaption = 'Флопи драјв';
+ LANGsrMounterPrefs_miNetworkCaption = 'Мрежа';
+ LANGsrMounterPrefs_MountCommandLabelCaption = '_Команда Монтирања:';
+ LANGsrMounterPrefs_UmountCommandLabelCaption = 'К_оманда Одмонтиравања:';
+ LANGsrMounterPrefs_MountCommandEntryTooltip = 'Синтакса: користите %dev уместо уређаја и %dir уместо тачке монтирања или оставите празно за подразумевано монтирање'#10'Обратите пажњу: ' +
+ 'чувајте се интерактивних команди, tuxcmd би могао да се укочи!'#10'Пример: smbmount %dev %dir -o username=netuser,password=somepass';
+ LANGsrMounterPrefs_UmountCommandEntryTooltip = 'Синтакса: користите %dev уместо уређаја и %dir уместо тачке монтирања или оставите празно за подразумевано монтирање'#10'Пример: smbumount $dir';
+ LANGsrMounterPrefs_IconLabelCaption = '_Икона:';
+
+ LANGsrConnMgr_Caption = 'Отвори Нову Везу';
+ LANGsrConnMgr_ConnectButton = 'По_вежи се';
+ LANGsrConnMgr_OpenConnection = 'Отвори Везу';
+ LANGsrConnMgr_NameColumn = 'Име';
+ LANGsrConnMgr_URIColumn = 'URI';
+ LANGsrConnMgr_AddConnectionButtonCaption = '_Додај сајт...';
+ LANGsrConnMgr_AddConnectionButtonTooltip = 'Додај нову везу';
+ LANGsrConnMgr_EditButtonCaption = '_Измени...';
+ LANGsrConnMgr_EditButtonTooltip = 'Измени изабрану везу';
+ LANGsrConnMgr_RemoveButtonCaption = '_Уклони сајт';
+ LANGsrConnMgr_RemoveButtonTooltip = 'Обриши изабрану везу';
+ LANGsrConnMgr_DoYouWantDelete = 'Да ли стварно желите да обришете везу ''%s''?';
+
+ LANGsrConnProp_FTP = 'FTP';
+ LANGsrConnProp_SFTP = 'SFTP (ssh подсистем)';
+ LANGsrConnProp_SMB = 'Windows share (SMB)';
+ LANGsrConnProp_HTTP = 'WebDAV (HTTP)';
+ LANGsrConnProp_HTTPS = 'Secure WebDAV (HTTPS)';
+ LANGsrConnProp_Other = 'Друго <span style="italic">(молим Вас наведите у URI)</span>';
+ LANGsrConnProp_Caption = 'Поставке везе';
+ LANGsrConnProp_VFSModule = '_VFS модул:';
+ LANGsrConnProp_URI = '_URI:';
+ LANGsrConnProp_URIEntryTooltip = 'Исправан URI би требало да садржи префикс врсте услуге и адресу сервера';
+ LANGsrConnProp_DetailedInformations = 'Детаљне Информације';
+ LANGsrConnProp_Name = '_Име:';
+ LANGsrConnProp_Server = 'Сер_вер[:порт]:';
+ LANGsrConnProp_Username = 'Корисничко_ко име:';
+ LANGsrConnProp_UserNameEntryTooltip = 'Оставите празно за анониман приступ';
+ LANGsrConnProp_Password = '_Лозинка:';
+ LANGsrConnProp_TargetDirectory = 'Одредишни _директоријум:';
+ LANGsrConnProp_ServiceType = 'Врста _услуге:';
+ LANGsrConnProp_MaskPassword = 'Сакриј _шифру';
+ LANGsrConnProp_MenuItemCaption = 'Подразумевано <span style="italic">(сви погодни модули)</span>';
+
+ LANGsrConnLogin_Caption = 'Захтевана ауторизација';
+ LANGsrConnLogin_Login = 'Пријава';
+ LANGsrConnLogin_ExperimentalWarningLabelCaption = 'Морате се пријавити ради приступа %s';
+ LANGsrConnLogin_Username = '_Корисничко име:';
+ LANGsrConnLogin_Password = '_Лозинка:';
+ LANGsrConnLogin_AnonymousCheckButton = '_Анонимно';
+
+ LANGsrColumns_Caption = 'Подешавања Колона Табле';
+ LANGsrColumns_Title = 'Подешавања Колона Табле';
+ LANGsrColumns_MoveUpButtonTooltip = 'Помери ставку на горе';
+ LANGsrColumns_MoveDownButtonTooltip = 'Помери ставку на доле';
+ LANGsrColumns_TitlesLongName = 'Име';
+ LANGsrColumns_TitlesLongNameExt = 'Име + Екстензија';
+ LANGsrColumns_TitlesLongExt = 'Екстензија';
+ LANGsrColumns_TitlesLongSize = 'Величина';
+ LANGsrColumns_TitlesLongDateTime = 'Датум + Време';
+ LANGsrColumns_TitlesLongDate = 'Датум';
+ LANGsrColumns_TitlesLongTime = 'Време';
+ LANGsrColumns_TitlesLongUser = 'Корисник';
+ LANGsrColumns_TitlesLongGroup = 'Група';
+ LANGsrColumns_TitlesLongAttr = 'Атрибути';
+ LANGsrColumns_TitlesShortName = 'Име';
+ LANGsrColumns_TitlesShortNameExt = 'Име';
+ LANGsrColumns_TitlesShortExt = 'Екст';
+ LANGsrColumns_TitlesShortSize = 'Величина';
+ LANGsrColumns_TitlesShortDateTime = 'Датум';
+ LANGsrColumns_TitlesShortDate = 'Датум';
+ LANGsrColumns_TitlesShortTime = 'Време';
+ LANGsrColumns_TitlesShortUser = 'Корисник';
+ LANGsrColumns_TitlesShortGroup = 'Група';
+ LANGsrColumns_TitlesShortAttr = 'Атр';
+
+ LANGsrTestPlugin_Caption = 'Тестирај VFS Прикључак';
+ LANGsrTestPlugin_Title = 'Тестирај VFS Прикључак';
+ LANGsrTestPlugin_ExperimentalWarningLabelCaption = '<span weight="ultrabold">Упозорење:</span> VFS подсистем и његови прикључци су у раној фази развоја и могу садржати ' +
+ 'грешке. Користите ову функцију на сопствени ризик!';
+ LANGsrTestPlugin_Plugin = '_Прикључак:';
+ LANGsrTestPlugin_Command = 'На_редба:';
+ LANGsrTestPlugin_Username = '_Корисничко име:';
+ LANGsrTestPlugin_Password = '_Лозинка:';
+ LANGsrTestPlugin_AnonymousCheckButton = '_Анонимна пријава (не позива VFSLogin)';
+ LANGsrTestPlugin_NoPluginsFound = 'Нису пронађени прикључци';
+
+ LANGsrRemoteWait_Caption = 'Операција у току';
+ LANGsrRemoteWait_OperationInProgress = 'Операција у току, молим Вас будите стрпљиви...';
+ LANGsrRemoteWait_ItemsFound = 'Ставке пронађене до сада: %d';
+
+ LANGsrSearch_Bytes = 'Бајта';
+ LANGsrSearch_kB = 'kB';
+ LANGsrSearch_MB = 'MB';
+ LANGsrSearch_days = 'дана';
+ LANGsrSearch_weeks = 'недеља';
+ LANGsrSearch_months = 'месеци';
+ LANGsrSearch_years = 'година';
+ LANGsrSearch_Caption = 'Пронађи фајлове';
+ LANGsrSearch_General = 'Опште';
+ LANGsrSearch_Advanced = 'Напредно';
+ LANGsrSearch_SearchResults = '_Резултати претраге:';
+ LANGsrSearch_SearchFor = '_Тражи:';
+ LANGsrSearch_FileMaskEntryTooltip = 'Савет: Користите тачку-зарез (";") како бисте навели више фајлова које тражите';
+ LANGsrSearch_SearchIn = 'Тражи _у:';
+ LANGsrSearch_SearchArchivesCheckButton = 'Тражи у _архивама';
+ LANGsrSearch_FindText = 'Нађи _текст:';
+ LANGsrSearch_FindTextEntryTooltip = 'Оставите празно ако не желите поклапање текста'#10'Обратите пажњу да користимо UTF-8 у GUI делу';
+ LANGsrSearch_CaseSensitiveCheckButton = 'Осетљиво на м_ала и велика слова';
+ LANGsrSearch_StayCurrentFSCheckButton = 'Укључи и друге фајл _системе';
+ LANGsrSearch_CaseSensitiveMatchCheckButton = 'Осетљиво на м_ала и велика слова';
+ LANGsrSearch_Size = 'Величина';
+ LANGsrSearch_Date = 'Датум';
+ LANGsrSearch_BiggerThan = '_Веће од';
+ LANGsrSearch_SmallerThan = '_Мање од';
+ LANGsrSearch_ModifiedBetweenRadioButton = '_Мењано између';
+ LANGsrSearch_NotModifiedAfterRadioButton = '_Није мењано након';
+ LANGsrSearch_ModifiedLastRadioButton = 'Мењ_ано у последњих';
+ LANGsrSearch_ModifiedNotLastRadionButton = 'Ниј_е мењано у последњих';
+ LANGsrSearch_ModifiedBetweenEntry1 = '"Молим Вас користите овај облик датума:" c';
+ LANGsrSearch_ViewButtonCaption = '_Прегледај фајл';
+ LANGsrSearch_NewSearchButtonCaption = '_Нова претрага';
+ LANGsrSearch_GoToFileButtonCaption = '_Иди на фајл';
+ LANGsrSearch_FeedToListboxButtonCaption = 'Похрани у _прозор листе';
+ LANGsrSearch_StatusSC = 'Статус:';
+ LANGsrSearch_Ready = 'Спреман.';
+ LANGsrSearch_PreparingToSearch = 'Припрема за претрагу.';
+ LANGsrSearch_SearchInProgress = 'Претрага у току:';
+ LANGsrSearch_UserCancelled = 'Поништено од стране корисника.';
+ LANGsrSearch_SearchFinished = 'Претрага завршена';
+ LANGsrSearch_FilesFound = '%d фајлова пронађено';
+ LANGsrSearch_And = 'и';
+
+ (*************** STRINGS ADDED TO v0.5.82 **********************************************************************************)
+ LANGsrCloseOpenConnection = 'You''re trying to open new connection over the another active connection. By continuing, the previous connection will be closed and replaced by the new requested one.'#10#10'Do you want to continue?';
+ LANGsrDuplicateTabWarning = 'You are trying to open a new tab from a remote directory. However, engine cloning is not supported. The directory in the new tab will point to a local filesystem.';
+ LANGsrDontShowAgain = '_Don''t show this message again';
+ LANGsrSwitchOtherPanelWarning = 'You are trying to open the remote directory in the opposite panel. However, engine cloning is not supported. The target directory will not be switched.';
+ LANGsrOpenConnectionsWarning = 'There are some active connections opened in the panel. By closing the application, these connections will be disconnected.'#10#10'Do you want to continue quit?';
+ LANGsrmiDisconnect_Caption = '_Disconnect';
+ LANGsrDisconnectButton_Tooltip = 'Disconnect active connection';
+ LANGsrLeaveArchiveButton_Tooltip = 'Close current archive';
+ LANGsrOpenTerminalButton_Tooltip = 'Opens a new terminal windows from the current directory';
+ LANGsrOpenTerminalButton_Caption = 'Open Te_rminal';
+ LANGsrShowTextUIDsCheckBox_Caption = 'Show text _UIDs';
+ LANGsrShowTextUIDsCheckBox_Tooltip = 'Show textual User and Group informations instead of numbers (UID/GID)';
+
+ (*************** STRINGS ADDED TO v0.5.100 **********************************************************************************)
+ LANGsrmiNewTab_Caption = 'New folder _tab';
+ LANGsrFilePopupMenu_Properties = '_Properties';
+ LANGsrCommandEntry_Tooltip = 'Use %s as file/directory placeholder';
+ LANGsrmiFiles_Caption = 'Files only';
+
+ (*************** STRINGS ADDED TO v0.6.31 **********************************************************************************)
+ LANGsrPasswordButton_Tooltip = 'Archive requires password.'#10'Click to set';
+ LANGsrHandleRunFromArchive_Bytes = 'bytes';
+ LANGsrHandleRunFromArchive_FileTypeDesc_Unknown = '(unknown)';
+ LANGsrHandleRunFromArchive_NotAssociated = '(not associated)';
+ LANGsrHandleRunFromArchive_SelfExecutable = '(self-executable)';
+ LANGsrHandleRunFromArchive_CouldntCreateTemporaryDirectory = 'Couldn''t create temporary directory "%s": %s.'#10#10'Please check the temporary directory settings and try it again.';
+ LANGsrFRunFromVFS_Caption = 'Packed file properties';
+ LANGsrFRunFromVFS_TitleLabel = 'File Properties';
+ LANGsrFRunFromVFS_FileNameLabel = 'File name:';
+ LANGsrFRunFromVFS_FileTypeLabel = 'File type:';
+ LANGsrFRunFromVFS_SizeLabel = 'Size:';
+ LANGsrFRunFromVFS_PackedSizeLabel = 'Compressed size:';
+ LANGsrFRunFromVFS_DateLabel = 'Modify date:';
+ LANGsrFRunFromVFS_InfoLabel = 'Opening files directly from archives is not supported. By clicking the buttons below the file (all files respectively) will be extracted to a temporary location. Temporary files will be deleted when you close Tux Commander.';
+ LANGsrFRunFromVFS_OpensWithLabel = 'Open with:';
+ LANGsrFRunFromVFS_ExecuteButton = 'E_xtract and open';
+ LANGsrFRunFromVFS_ExecuteAllButton = 'Extract _all and open';
+ LANGsrFSetPassword_Caption = 'Set password';
+ LANGsrFSetPassword_Label1_Caption = 'Password required';
+ LANGsrFSetPassword_Label2_Caption = 'The archive is encrypted and requires password in order to extract the data';
+ LANGsrFSetPassword_ShowPasswordCheckButton = 'Un_mask password';
+
+
+(********************************************************************************************************************************)
+procedure SetTranslation;
+begin
+ LANGF2Button_Caption := LANGsrF2Button_Caption;
+ LANGF3Button_Caption := LANGsrF3Button_Caption;
+ LANGF4Button_Caption := LANGsrF4Button_Caption;
+ LANGF5Button_Caption := LANGsrF5Button_Caption;
+ LANGF6Button_Caption := LANGsrF6Button_Caption;
+ LANGF7Button_Caption := LANGsrF7Button_Caption;
+ LANGF8Button_Caption := LANGsrF8Button_Caption;
+
+ LANGmnuFile_Caption := LANGsrmnuFile_Caption;
+ LANGmnuMark_Caption := LANGsrmnuMark_Caption;
+ LANGmnuCommands_Caption := LANGsrmnuCommands_Caption;
+ LANGmnuHelp_Caption := LANGsrmnuHelp_Caption;
+ LANGmiExit_Caption := LANGsrmiExit_Caption;
+ LANGmiSelectGroup_Caption := LANGsrmiSelectGroup_Caption;
+ LANGmiUnselectGroup_Caption := LANGsrmiUnselectGroup_Caption;
+ LANGmiSelectAll_Caption := LANGsrmiSelectAll_Caption;
+ LANGmiUnselectAll_Caption := LANGsrmiUnselectAll_Caption;
+ LANGmiInvertSelection_Caption := LANGsrmiInvertSelection_Caption;
+ LANGmiRefresh_Caption := LANGsrmiRefresh_Caption;
+ LANGmiAbout_Caption := LANGsrmiAbout_Caption;
+
+ LANGColumn1_Caption := LANGsrColumn1_Caption;
+ LANGColumn2_Caption := LANGsrColumn2_Caption;
+ LANGColumn3_Caption := LANGsrColumn3_Caption;
+ LANGColumn4_Caption := LANGsrColumn4_Caption;
+ LANGColumn5_Caption := LANGsrColumn5_Caption;
+
+ LANGExpandSelection := LANGsrExpandSelection;
+ LANGShrinkSelection := LANGsrShrinkSelection;
+ LANGNoMatchesFound := LANGsrNoMatchesFound;
+ LANGNoFilesSelected := LANGsrNoFilesSelected;
+ LANGSelectedFilesDirectories := LANGsrSelectedFilesDirectories;
+ LANGDirectoryS := LANGsrDirectoryS;
+ LANGFileS := LANGsrFileS;
+ LANGDoYouReallyWantToDeleteTheS := LANGsrDoYouReallyWantToDeleteTheS;
+ LANGDoYouReallyWantToDeleteTheSS := LANGsrDoYouReallyWantToDeleteTheSS;
+ LANGCopyFiles := LANGsrCopyFiles;
+ LANGMoveRenameFiles := LANGsrMoveRenameFiles;
+ LANGCopyDFileDirectoriesTo := LANGsrCopyDFileDirectoriesTo;
+ LANGMoveRenameDFileDirectoriesTo := LANGsrMoveRenameDFileDirectoriesTo;
+ LANGCopySC := LANGsrCopySC;
+ LANGMoveRenameSC := LANGsrMoveRenameSC;
+
+ LANGQuickFind := LANGsrQuickFind;
+
+ LANGAboutString := LANGsrAboutString;
+ LANGAboutStringGnome := LANGsrAboutStringGnome;
+ LANGDiskStatFmt := LANGsrDiskStatFmt;
+ LANGDiskStatVolNameFmt := LANGsrDiskStatVolNameFmt;
+ LANGStatusLineFmt := LANGsrStatusLineFmt;
+ LANGPanelStrings[False] := LANGsrPanelStrings[False];
+ LANGPanelStrings[True] := LANGsrPanelStrings[True];
+ LANGDIR := LANGsrDIR;
+ LANGErrorGettingListingForSPanel := LANGsrErrorGettingListingForSPanel;
+ LANGErrorGettingListingForSPanelNoPath := LANGsrErrorGettingListingForSPanelNoPath;
+ LANGErrorCreatingNewDirectorySInSPanel := LANGsrErrorCreatingNewDirectorySInSPanel;
+ LANGErrorCreatingNewDirectorySInSPanelNoPath := LANGsrErrorCreatingNewDirectorySInSPanelNoPath;
+ LANGTheFileDirectory := LANGsrTheFileDirectory;
+ LANGCouldNotBeDeleted := LANGsrCouldNotBeDeleted;
+ LANGCouldNotBeDeletedS := LANGsrCouldNotBeDeletedS;
+ LANGUserCancelled := LANGsrUserCancelled;
+ LANGTheDirectorySIsNotEmpty := LANGsrTheDirectorySIsNotEmpty;
+ LANGCannotCopyFile := LANGsrCannotCopyFile;
+ LANGCopyError := LANGsrCopyError;
+ LANGMoveError := LANGsrMoveError;
+ LANGOverwriteS := LANGsrOverwriteS;
+ LANGWithFileS := LANGsrWithFileS;
+ LANGOvewriteSBytesS := LANGsrOvewriteSBytesS;
+ LANGTheFile := LANGsrTheFile;
+ LANGCopy := LANGsrCopy;
+ LANGMove := LANGsrMove;
+ LANGTheDirectory := LANGsrTheDirectory;
+ LANGTheSymbolicLink := LANGsrTheSymbolicLink;
+ LANGCannotMoveFile := LANGsrCannotMoveFile;
+ LANGCouldNotBeCreated := LANGsrCouldNotBeCreated;
+ LANGCouldNotBeCreatedS := LANGsrCouldNotBeCreatedS;
+ LANGFromS := LANGsrFromS;
+ LANGToS := LANGsrToS;
+ LANGCannotCopyFileToItself := LANGsrCannotCopyFileToItself;
+ LANGMemoryAllocationFailed := LANGsrMemoryAllocationFailed;
+ LANGCannotOpenSourceFile := LANGsrCannotOpenSourceFile;
+ LANGCannotOpenDestinationFile := LANGsrCannotOpenDestinationFile;
+ LANGCannotCloseDestinationFile := LANGsrCannotCloseDestinationFile;
+ LANGCannotCloseSourceFile := LANGsrCannotCloseSourceFile;
+ LANGCannotReadFromSourceFile := LANGsrCannotReadFromSourceFile;
+ LANGCannotWriteToDestinationFile := LANGsrCannotWriteToDestinationFile;
+
+ LANGUnknownException := LANGsrUnknownException;
+ LANGNoAccess := LANGsrNoAccess;
+ LANGUnknownError := LANGsrUnknownError;
+
+ LANGCreateANewDirectory := LANGsrCreateANewDirectory;
+ LANGEnterDirectoryName := LANGsrEnterDirectoryName;
+
+ LANGOverwriteQuestion := LANGsrOverwriteQuestion;
+ LANGOverwriteButton_Caption := LANGsrOverwriteButton_Caption;
+ LANGOverwriteAllButton_Caption := LANGsrOverwriteAllButton_Caption;
+ LANGSkipButton_Caption := LANGsrSkipButton_Caption;
+ LANGOverwriteAllOlderButton_Caption := LANGsrOverwriteAllOlderButton_Caption;
+ LANGSkipAllButton_Caption := LANGsrSkipAllButton_Caption;
+ LANGRenameButton_Caption := LANGsrRenameButton_Caption;
+ LANGAppendButton_Caption := LANGsrAppendButton_Caption;
+ LANGRename := LANGsrRename;
+ LANGRenameFile := LANGsrRenameFile;
+ LANGIgnoreButton_Caption := LANGsrIgnoreButton_Caption;
+
+ LANGProgress := LANGsrProgress;
+ LANGCancel := LANGsrCancel;
+ LANGDelete := LANGsrDelete;
+
+ LANGSpecifyFileType := LANGsrSpecifyFileType;
+
+ LANGRemoveDirectory := LANGsrRemoveDirectory;
+ LANGDoYouWantToDeleteItWithAllItsFilesAndSubdirectories := LANGsrDoYouWantToDeleteItWithAllItsFilesAndSubdirectories;
+ LANGRetry := LANGsrRetry;
+ LANGDeleteButton_Caption := LANGsrDeleteButton_Caption;
+ LANGAll := LANGsrAll;
+
+ LANGCopyFilesSC := LANGsrCopyFilesSC;
+ LANGAppendQuestion := LANGsrAppendQuestion;
+ LANGPreparingList := LANGsrPreparingList;
+
+ LANGYouMustSelectAValidFile := LANGsrYouMustSelectAValidFile;
+ LANGmiVerifyChecksums := LANGsrmiVerifyChecksums;
+ LANGVerifyChecksumsCaption := LANGsrVerifyChecksumsCaption;
+ LANGCheckButtonCaptionCheck := LANGsrCheckButtonCaptionCheck;
+ LANGCheckButtonCaptionStop := LANGsrCheckButtonCaptionStop;
+ LANGFileListTooltip := LANGsrFileListTooltip;
+ LANGFilenameColumnCaption := LANGsrFilenameColumnCaption;
+ LANGTheFileSYouAreTryingToOpenIsQuiteBig := LANGsrTheFileSYouAreTryingToOpenIsQuiteBig;
+ LANGAnErrorOccuredWhileInitializingMemoryBlock := LANGsrAnErrorOccuredWhileInitializingMemoryBlock;
+ LANGAnErrorOccuredWhileOpeningFileSS := LANGsrAnErrorOccuredWhileOpeningFileSS;
+ LANGAnErrorOccuredWhileReadingFileSS := LANGsrAnErrorOccuredWhileReadingFileSS;
+ LANGChecksumNotChecked := LANGsrChecksumNotChecked;
+ LANGChecksumChecking := LANGsrChecksumChecking;
+ LANGChecksumInterrupted := LANGsrChecksumInterrupted;
+ LANGChecksumDOK := LANGsrChecksumDOK;
+
+ LANGmiCreateChecksumsCaption := LANGsrmiCreateChecksumsCaption;
+ LANGYouMustSelectAtLeastOneFileToCalculateChecksum := LANGsrYouMustSelectAtLeastOneFileToCalculateChecksum;
+ LANGCreateChecksumsCaption := LANGsrCreateChecksumsCaption;
+ LANGCCHKSUMPage1Text := LANGsrCCHKSUMPage1Text;
+ LANGCCHKSUMPage4Text := LANGsrCCHKSUMPage4Text;
+ LANGCCHKSUMPage6Text := LANGsrCCHKSUMPage6Text;
+ LANGCCHKSUMPage7Text := LANGsrCCHKSUMPage7Text;
+ LANGCCHKSUMPage1Title := LANGsrCCHKSUMPage1Title;
+ LANGCCHKSUMPage2Title := LANGsrCCHKSUMPage2Title;
+ LANGCCHKSUMPage3Title := LANGsrCCHKSUMPage3Title;
+ LANGCCHKSUMPage4Title := LANGsrCCHKSUMPage4Title;
+ LANGCCHKSUMPage5Title := LANGsrCCHKSUMPage5Title;
+ LANGCCHKSUMPage6Title := LANGsrCCHKSUMPage6Title;
+ LANGCCHKSUMPage7Title := LANGsrCCHKSUMPage7Title;
+ LANGCCHKSUMSFVFile := LANGsrCCHKSUMSFVFile;
+ LANGCCHKSUMMD5sumFile := LANGsrCCHKSUMMD5sumFile;
+ LANGCCHKSUMFileName := LANGsrCCHKSUMFileName;
+ LANGCCHKSUMCreateSeparateChecksumFiles := LANGsrCCHKSUMCreateSeparateChecksumFiles;
+ LANGCCHKSUMNowProcessingFileS := LANGsrCCHKSUMNowProcessingFileS;
+ LANGCCHKSUMFinishCaption := LANGsrCCHKSUMFinishCaption;
+ LANGCCHKSUMAreYouSureYouWantToAbortTheProcessing := LANGsrCCHKSUMAreYouSureYouWantToAbortTheProcessing;
+ LANGCCHKSUMAnErrorOccuredWhileOpeningFileSS := LANGsrCCHKSUMAnErrorOccuredWhileOpeningFileSS;
+ LANGCCHKSUMAnErrorOccuredWhileReadingFileSS := LANGsrCCHKSUMAnErrorOccuredWhileReadingFileSS;
+ LANGCCHKSUMAnErrorOccuredWhileWritingFileSS := LANGsrCCHKSUMAnErrorOccuredWhileWritingFileSS;
+
+ LANGAnErrorOccuredWhileWritingFileSS := LANGsrAnErrorOccuredWhileWritingFileSS;
+ LANGTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt := LANGsrTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt;
+ LANGTheTargetFileSCannotBeRemovedS := LANGsrTheTargetFileSCannotBeRemovedS;
+ LANGMergeCaption := LANGsrMergeCaption;
+ LANGPleaseInsertNextDiskOrGiveDifferentLocation := LANGsrPleaseInsertNextDiskOrGiveDifferentLocation;
+ LANGMergeOfSSucceeded := LANGsrMergeOfSSucceeded;
+ LANGWarningCreatedFileFailsCRCCheck := LANGsrWarningCreatedFileFailsCRCCheck;
+ LANGMergeOfSSucceeded_NoCRCFileAvailable := LANGsrMergeOfSSucceeded_NoCRCFileAvailable;
+ LANGMergeSAndAllFilesWithAscendingNamesToTheFollowingDirectory := LANGsrMergeSAndAllFilesWithAscendingNamesToTheFollowingDirectory;
+ LANGMergeSC := LANGsrMergeSC;
+ LANGmiSplitFileCaption := LANGsrmiSplitFileCaption;
+ LANGmiMergeFilesCaption := LANGsrmiMergeFilesCaption;
+
+ LANGSplitTheFileSToDirectory := LANGsrSplitTheFileSToDirectory;
+ LANGSplitSC := LANGsrSplitSC;
+ LANGSplitFile := LANGsrSplitFile;
+ LANGBytesPerFile := LANGsrBytesPerFile;
+ LANGAutomatic := LANGsrAutomatic;
+ LANGDeleteFilesOnTargetDisk := LANGsrDeleteFilesOnTargetDisk;
+ LANGSplitCaption := LANGsrSplitCaption;
+ LANGCannotOpenFileS := LANGsrCannotOpenFileS;
+ LANGCannotSplitTheFileToMoreThan999Parts := LANGsrCannotSplitTheFileToMoreThan999Parts;
+ LANGThereAreSomeFilesInTheTargetDirectorySDoYouWantToDeleteThem := LANGsrThereAreSomeFilesInTheTargetDirectorySDoYouWantToDeleteThem;
+ LANGThereAreDFilesInTheTargetDirectoryDoYouWantToDeleteThem := LANGsrThereAreDFilesInTheTargetDirectoryDoYouWantToDeleteThem;
+ LANGAnErrorOccuredWhileOperationS := LANGsrAnErrorOccuredWhileOperationS;
+ LANGSplitOfSSucceeded := LANGsrSplitOfSSucceeded;
+ LANGSplitOfSFailed := LANGsrSplitOfSFailed;
+
+ LANGmnuShow_Caption := LANGsrmnuShow_Caption;
+ LANGmiShowDotFiles_Caption := LANGsrmiShowDotFiles_Caption;
+ LANGTheFileYouAreTryingToOpenIsQuiteBig := LANGsrTheFileYouAreTryingToOpenIsQuiteBig;
+ LANGCannotExecuteSPleaseCheckTheConfiguration := LANGsrCannotExecuteSPleaseCheckTheConfiguration;
+ LANGEdit := LANGsrEdit;
+ LANGEnterFilenameToEdit := LANGsrEnterFilenameToEdit;
+
+ LANGmnuSettings_Caption := LANGsrmnuSettings_Caption;
+ LANGmiFileTypes_Caption := LANGsrmiFileTypes_Caption;
+ LANGThereIsNoApplicationAssociatedWithS := LANGsrThereIsNoApplicationAssociatedWithS;
+ LANGErrorExecutingCommand := LANGsrErrorExecutingCommand;
+ LANGEditFileTypesCaption := LANGsrEditFileTypesCaption;
+ LANGTitleLabel_Caption := LANGsrTitleLabel_Caption;
+ LANGExtensionsColumn := LANGsrExtensionsColumn;
+ LANGDescriptionColumn := LANGsrDescriptionColumn;
+ LANGFileTypesList := LANGsrFileTypesList;
+ LANGActionName := LANGsrActionName;
+ LANGCommand := LANGsrCommand;
+ LANGSetDefaultActionButton_Caption := LANGsrSetDefaultActionButton_Caption;
+ LANGRunInTerminalCheckBox_Caption := LANGsrRunInTerminalCheckBox_Caption;
+ LANGAutodetectCheckBox_Caption := LANGsrAutodetectCheckBox_Caption;
+ LANGBrowseButton_Caption := LANGsrBrowseButton_Caption;
+ LANGCommandLabel_Caption := LANGsrCommandLabel_Caption;
+ LANGDescriptionLabel_Caption := LANGsrDescriptionLabel_Caption;
+ LANGFNameExtLabel_Caption := LANGsrFNameExtLabel_Caption;
+ LANGNotebookPageExtensions := LANGsrNotebookPageExtensions;
+ LANGNotebookPageActions := LANGsrNotebookPageActions;
+ LANGDefault := LANGsrDefault;
+ LANGCannotSaveFileTypeAssociationsBecauseOtherProcess := LANGsrCannotSaveFileTypeAssociationsBecauseOtherProcess;
+
+ LANGDefaultColor := LANGsrDefaultColor;
+ LANGIcon := LANGsrIcon;
+ LANGBrowseForIcon := LANGsrBrowseForIcon;
+ LANGSelectFileTypeColor := LANGsrSelectFileTypeColor;
+ LANGColor := LANGsrColor;
+
+ LANGmiChangePermissions_Caption := LANGsrmiChangePermissions_Caption;
+ LANGmiChangeOwner_Caption := LANGsrmiChangeOwner_Caption;
+ LANGmiCreateSymlink_Caption := LANGsrmiCreateSymlink_Caption;
+ LANGmiEditSymlink_Caption := LANGsrmiEditSymlink_Caption;
+ LANGChmodProgress := LANGsrChmodProgress;
+ LANGChownProgress := LANGsrChownProgress;
+ LANGYouMustSelectAValidSymbolicLink := LANGsrYouMustSelectAValidSymbolicLink;
+ LANGPopupRunS := LANGsrPopupRunS;
+ LANGPopupOpenS := LANGsrPopupOpenS;
+ LANGPopupGoUp := LANGsrPopupGoUp;
+ LANGPopupOpenWithS := LANGsrPopupOpenWithS;
+ LANGPopupDefault := LANGsrPopupDefault;
+ LANGPopupOpenWith := LANGsrPopupOpenWith;
+ LANGPopupViewFile := LANGsrPopupViewFile;
+ LANGPopupEditFile := LANGsrPopupEditFile;
+ LANGPopupMakeSymlink := LANGsrPopupMakeSymlink;
+ LANGPopupRename := LANGsrPopupRename;
+ LANGPopupDelete := LANGsrPopupDelete;
+ LANGDialogChangePermissions := LANGsrDialogChangePermissions;
+ LANGCouldNotBeChmoddedS := LANGsrCouldNotBeChmoddedS;
+ LANGDialogChangeOwner := LANGsrDialogChangeOwner;
+ LANGCouldNotBeChownedS := LANGsrCouldNotBeChownedS;
+ LANGDialogMakeSymlink := LANGsrDialogMakeSymlink;
+ LANGDialogEditSymlink := LANGsrDialogEditSymlink;
+ LANGFEditSymlink_Caption := LANGsrFEditSymlink_Caption;
+ LANGFEditSymlink_SymbolicLinkFilename := LANGsrFEditSymlink_SymbolicLinkFilename;
+ LANGFEditSymlink_SymbolicLinkPointsTo := LANGsrFEditSymlink_SymbolicLinkPointsTo;
+
+ LANGFChmod_Caption := LANGsrFChmod_Caption;
+ LANGFChmod_PermissionFrame := LANGsrFChmod_PermissionFrame;
+ LANGFChmod_FileFrame := LANGsrFChmod_FileFrame;
+ LANGFChmod_ApplyRecursivelyFor := LANGsrFChmod_ApplyRecursivelyFor;
+ LANGFChmod_miAllFiles := LANGsrFChmod_miAllFiles;
+ LANGFChmod_miDirectories := LANGsrFChmod_miDirectories;
+ LANGFChmod_OctalLabel := LANGsrFChmod_OctalLabel;
+ LANGFChmod_SUID := LANGsrFChmod_SUID;
+ LANGFChmod_SGID := LANGsrFChmod_SGID;
+ LANGFChmod_Sticky := LANGsrFChmod_Sticky;
+ LANGFChmod_RUSR := LANGsrFChmod_RUSR;
+ LANGFChmod_WUSR := LANGsrFChmod_WUSR;
+ LANGFChmod_XUSR := LANGsrFChmod_XUSR;
+ LANGFChmod_RGRP := LANGsrFChmod_RGRP;
+ LANGFChmod_WGRP := LANGsrFChmod_WGRP;
+ LANGFChmod_XGRP := LANGsrFChmod_XGRP;
+ LANGFChmod_ROTH := LANGsrFChmod_ROTH;
+ LANGFChmod_WOTH := LANGsrFChmod_WOTH;
+ LANGFChmod_XOTH := LANGsrFChmod_XOTH;
+ LANGFChmod_TextLabel := LANGsrFChmod_TextLabel;
+ LANGFChmod_FileLabel := LANGsrFChmod_FileLabel;
+ LANGFChown_Caption := LANGsrFChown_Caption;
+ LANGFChown_OwnerFrame := LANGsrFChown_OwnerFrame;
+ LANGFChown_GroupFrame := LANGsrFChown_GroupFrame;
+ LANGFChown_FileFrame := LANGsrFChown_FileFrame;
+ LANGFChown_ApplyRecursively := LANGsrFChown_ApplyRecursively;
+
+ LANGFSymlink_Caption := LANGsrFSymlink_Caption;
+ LANGFSymlink_ExistingFilename := LANGsrFSymlink_ExistingFilename;
+ LANGFSymlink_SymlinkFilename := LANGsrFSymlink_SymlinkFilename;
+
+ LANGmnuBookmarks_Caption := LANGsrmnuBookmarks_Caption;
+ LANGmiAddBookmark_Caption := LANGsrmiAddBookmark_Caption;
+ LANGmiEditBookmarks_Caption := LANGsrmiEditBookmarks_Caption;
+ LANGBookmarkPopupDelete_Caption := LANGsrBookmarkPopupDelete_Caption;
+ LANGmiPreferences_Caption := LANGsrmiPreferences_Caption;
+ LANGTheCurrentDirectoryAlreadyExistsInTheBookmarksList := LANGsrTheCurrentDirectoryAlreadyExistsInTheBookmarksList;
+ LANGSomeOtherInstanceChanged := LANGsrSomeOtherInstanceChanged;
+
+ LANGPreferences_Caption := LANGsrPreferences_Caption;
+ LANGPreferences_TitleLabel_Caption := LANGsrPreferences_TitleLabel_Caption;
+ LANGPreferences_GeneralPage := LANGsrPreferences_GeneralPage;
+ LANGPreferences_FontsPage := LANGsrPreferences_FontsPage;
+ LANGPreferences_ColorsPage := LANGsrPreferences_ColorsPage;
+ LANGPreferences_RowHeight := LANGsrPreferences_RowHeight;
+ LANGPreferences_NumHistoryItems := LANGsrPreferences_NumHistoryItems;
+ LANGPreferences_Default := LANGsrPreferences_Default;
+ LANGPreferences_ClearReadonlyAttribute := LANGsrPreferences_ClearReadonlyAttribute;
+ LANGPreferences_DisableMouseRenaming := LANGsrPreferences_DisableMouseRenaming;
+ LANGPreferences_ShowFiletypeIconsInList := LANGsrPreferences_ShowFiletypeIconsInList;
+ LANGPreferences_ExternalAppsLabel := LANGsrPreferences_ExternalAppsLabel;
+ LANGPreferences_Viewer := LANGsrPreferences_Viewer;
+ LANGPreferences_Editor := LANGsrPreferences_Editor;
+ LANGPreferences_Terminal := LANGsrPreferences_Terminal;
+ LANGPreferences_ListFont := LANGsrPreferences_ListFont;
+ LANGPreferences_Change := LANGsrPreferences_Change;
+ LANGPreferences_UseDefaultFont := LANGsrPreferences_UseDefaultFont;
+ LANGPreferences_Foreground := LANGsrPreferences_Foreground;
+ LANGPreferences_Background := LANGsrPreferences_Background;
+ LANGPreferences_NormalItem := LANGsrPreferences_NormalItem;
+ LANGPreferences_SetToDefaultToUseGTKThemeColors := LANGsrPreferences_SetToDefaultToUseGTKThemeColors;
+ LANGPreferences_Cursor := LANGsrPreferences_Cursor;
+ LANGPreferences_InactiveItem := LANGsrPreferences_InactiveItem;
+ LANGPreferences_SelectedItem := LANGsrPreferences_SelectedItem;
+ LANGPreferences_LinkItem := LANGsrPreferences_LinkItem;
+ LANGPreferences_LinkItemHint := LANGsrPreferences_LinkItemHint;
+ LANGPreferences_DotFileItem := LANGsrPreferences_DotFileItem;
+ LANGPreferences_DotFileItemHint := LANGsrPreferences_DotFileItemHint;
+ LANGPreferences_BrowseForApplication := LANGsrPreferences_BrowseForApplication;
+ LANGPreferences_DefaultS := LANGsrPreferences_DefaultS;
+ LANGPreferences_SelectFont := LANGsrPreferences_SelectFont;
+
+ LANGBookmarkButton_Tooltip := LANGsrBookmarkButton_Tooltip;
+ LANGUpButton_Tooltip := LANGsrUpButton_Tooltip;
+ LANGRootButton_Tooltip := LANGsrRootButton_Tooltip;
+ LANGHomeButton_Tooltip := LANGsrHomeButton_Tooltip;
+ LANGLeftEqualButton_Tooltip := LANGsrLeftEqualButton_Tooltip;
+ LANGRightEqualButton_Tooltip := LANGsrRightEqualButton_Tooltip;
+ LANGmiShowDirectorySizes_Caption := LANGsrmiShowDirectorySizes_Caption;
+ LANGmiTargetSource_Caption := LANGsrmiTargetSource_Caption;
+ LANGFileTypeDirectory := LANGsrFileTypeDirectory;
+ LANGFileTypeFile := LANGsrFileTypeFile;
+ LANGFileTypeMetafile := LANGsrFileTypeMetafile;
+ LANGPreferencesPanelsPage := LANGsrPreferencesPanelsPage;
+ LANGPreferencesApplicationsPage := LANGsrPreferencesApplicationsPage;
+ LANGPreferencesExperimentalPage := LANGsrPreferencesExperimentalPage;
+ LANGPreferencesSelectAllDirectoriesCheckBox_Caption := LANGsrPreferencesSelectAllDirectoriesCheckBox_Caption;
+ LANGPreferencesNewStyleAltOCheckBox_Caption := LANGsrPreferencesNewStyleAltOCheckBox_Caption;
+ LANGPreferencesNewStyleAltOCheckBox_Tooltip := LANGsrPreferencesNewStyleAltOCheckBox_Tooltip;
+ LANGPreferencesShowFuncButtonsCheckBox_Caption := LANGsrPreferencesShowFuncButtonsCheckBox_Caption;
+ LANGPreferencesSizeFormatLabel_Caption := LANGsrPreferencesSizeFormatLabel_Caption;
+ LANGPreferencesmiSizeFormat1 := LANGsrPreferencesmiSizeFormat1;
+ LANGPreferencesmiSizeFormat6 := LANGsrPreferencesmiSizeFormat6;
+ LANGPreferencesAutodetectXApp := LANGsrPreferencesAutodetectXApp;
+ LANGPreferencesAlwaysRunInTerminal := LANGsrPreferencesAlwaysRunInTerminal;
+ LANGPreferencesNeverRunInTerminal := LANGsrPreferencesNeverRunInTerminal;
+ LANGPreferencesCmdLineBehaviourLabel_Caption := LANGsrPreferencesCmdLineBehaviourLabel_Caption;
+ LANGPreferencesFeatures := LANGsrPreferencesFeatures;
+ LANGPreferencesDisableMouseRename_Tooltip := LANGsrPreferencesDisableMouseRename_Tooltip;
+ LANGPreferencesDisableFileTipsCheckBox_Caption := LANGsrPreferencesDisableFileTipsCheckBox_Caption;
+ LANGPreferencesDisableFileTipsCheckBox_Tooltip := LANGsrPreferencesDisableFileTipsCheckBox_Tooltip;
+ LANGPreferencesShow := LANGsrPreferencesShow;
+ LANGPreferencesDirsInBoldCheckBox_Caption := LANGsrPreferencesDirsInBoldCheckBox_Caption;
+ LANGPreferencesDisableDirectoryBracketsCheckBox_Caption := LANGsrPreferencesDisableDirectoryBracketsCheckBox_Caption;
+ LANGPreferencesOctalPermissionsCheckBox_Caption := LANGsrPreferencesOctalPermissionsCheckBox_Caption;
+ LANGPreferencesOctalPermissionsCheckBox_Tooltip := LANGsrPreferencesOctalPermissionsCheckBox_Tooltip;
+ LANGPreferencesMovement := LANGsrPreferencesMovement;
+ LANGPreferencesLynxLikeMotionCheckBox_Caption := LANGsrPreferencesLynxLikeMotionCheckBox_Caption;
+ LANGPreferencesInsertMovesDownCheckBox_Caption := LANGsrPreferencesInsertMovesDownCheckBox_Caption;
+ LANGPreferencesSpaceMovesDownCheckBox_Caption := LANGsrPreferencesSpaceMovesDownCheckBox_Caption;
+ LANGPreferencesViewer := LANGsrPreferencesViewer;
+ LANGPreferencesCommandSC := LANGsrPreferencesCommandSC;
+ LANGPreferencesUseInternalViewer := LANGsrPreferencesUseInternalViewer;
+ LANGPreferencesEditor := LANGsrPreferencesEditor;
+ LANGPreferencesTerminal := LANGsrPreferencesTerminal;
+ LANGPreferencesExperimentalFeatures := LANGsrPreferencesExperimentalFeatures;
+ LANGPreferencesExperimentalWarningLabel_Caption := LANGsrPreferencesExperimentalWarningLabel_Caption;
+ LANGPreferencesFocusRefreshCheckBox_Caption := LANGsrPreferencesFocusRefreshCheckBox_Caption;
+ LANGPreferencesFocusRefreshCheckBox_Tooltip := LANGsrPreferencesFocusRefreshCheckBox_Tooltip;
+ LANGPreferencesWMCompatModeCheckBox_Caption := LANGsrPreferencesWMCompatModeCheckBox_Caption;
+ LANGPreferencesWMCompatModeCheckBox_Tooltip := LANGsrPreferencesWMCompatModeCheckBox_Tooltip;
+ LANGPreferencesCompatUseLibcSystemCheckBox_Caption := LANGsrPreferencesCompatUseLibcSystemCheckBox_Caption;
+ LANGPreferencesCompatUseLibcSystemCheckBox_Tooltip := LANGsrPreferencesCompatUseLibcSystemCheckBox_Tooltip;
+
+ LANGmiSearchCaption2 := LANGsrmiSearchCaption2;
+ LANGmiNoMounterBarCaption := LANGsrmiNoMounterBarCaption;
+ LANGmiShowOneMounterBarCaption := LANGsrmiShowOneMounterBarCaption;
+ LANGmiShowTwoMounterBarCaption := LANGsrmiShowTwoMounterBarCaption;
+ LANGmnuNetworkCaption := LANGsrmnuNetworkCaption;
+ LANGmiConnectionsCaption := LANGsrmiConnectionsCaption;
+ LANGmiOpenConnectionCaption := LANGsrmiOpenConnectionCaption;
+ LANGmiQuickConnectCaption := LANGsrmiQuickConnectCaption;
+ LANGmnuPluginsCaption := LANGsrmnuPluginsCaption;
+ LANGmiTestPluginCaption := LANGsrmiTestPluginCaption;
+ LANGmiMounterSettingsCaption := LANGsrmiMounterSettingsCaption;
+ LANGmiColumnsCaption := LANGsrmiColumnsCaption;
+ LANGmiSavePositionCaption := LANGsrmiSavePositionCaption;
+ LANGmiMountCaption := LANGsrmiMountCaption;
+ LANGmiUmountCaption := LANGsrmiUmountCaption;
+ LANGmiEjectCaption := LANGsrmiEjectCaption;
+ LANGmiDuplicateTabCaption := LANGsrmiDuplicateTabCaption;
+ LANGmiCloseTabCaption := LANGsrmiCloseTabCaption;
+ LANGmiCloseAllTabsCaption := LANGsrmiCloseAllTabsCaption;
+ LANGCannotDetermineDestinationEngine := LANGsrCannotDetermineDestinationEngine;
+ LANGCannotLoadFile := LANGsrCannotLoadFile;
+ LANGMountPointDevice := LANGsrMountPointDevice;
+ LANGMountSC := LANGsrMountSC;
+ LANGNoPluginsFound := LANGsrNoPluginsFound;
+ LANGPluginAbout := LANGsrPluginAbout;
+ LANGCouldntOpenURI := LANGsrCouldntOpenURI;
+ LANGPluginAboutInside := LANGsrPluginAboutInside;
+ LANGAreYouSureCloseAllTabs := LANGsrAreYouSureCloseAllTabs;
+ LANGCouldntOpenURIArchive := LANGsrCouldntOpenURIArchive;
+ LANGThereIsNoModuleAvailable := LANGsrThereIsNoModuleAvailable;
+ LANGIgnoreError := LANGsrIgnoreError;
+ LANGErrorMount := LANGsrErrorMount;
+ LANGErrorUmount := LANGsrErrorUmount;
+ LANGErrorEject := LANGsrErrorEject;
+
+ LANGMounterPrefs_Caption := LANGsrMounterPrefs_Caption;
+ LANGMounterPrefs_TitleLabelCaption := LANGsrMounterPrefs_TitleLabelCaption;
+ LANGMounterPrefs_ListViewFrameCaption := LANGsrMounterPrefs_ListViewFrameCaption;
+ LANGMounterPrefs_MountName := LANGsrMounterPrefs_MountName;
+ LANGMounterPrefs_MountPoint := LANGsrMounterPrefs_MountPoint;
+ LANGMounterPrefs_Device := LANGsrMounterPrefs_Device;
+ LANGMounterPrefs_MoveUpButtonTooltip := LANGsrMounterPrefs_MoveUpButtonTooltip;
+ LANGMounterPrefs_MoveDownButtonTooltip := LANGsrMounterPrefs_MoveDownButtonTooltip;
+ LANGMounterPrefs_UseFSTabDefaultsCheckBox := LANGsrMounterPrefs_UseFSTabDefaultsCheckBox;
+ LANGMounterPrefs_UseFSTabDefaultsCheckBoxTooltip := LANGsrMounterPrefs_UseFSTabDefaultsCheckBoxTooltip;
+ LANGMounterPrefs_ToggleModeCheckBox := LANGsrMounterPrefs_ToggleModeCheckBox;
+ LANGMounterPrefs_ToggleModeCheckBoxTooltip := LANGsrMounterPrefs_ToggleModeCheckBoxTooltip;
+ LANGMounterPrefs_PropertiesFrameCaption := LANGsrMounterPrefs_PropertiesFrameCaption;
+ LANGMounterPrefs_DisplayTextLabelCaption := LANGsrMounterPrefs_DisplayTextLabelCaption;
+ LANGMounterPrefs_MountPointLabelCaption := LANGsrMounterPrefs_MountPointLabelCaption;
+ LANGMounterPrefs_MountDeviceLabelCaption := LANGsrMounterPrefs_MountDeviceLabelCaption;
+ LANGMounterPrefs_DeviceTypeLabelCaption := LANGsrMounterPrefs_DeviceTypeLabelCaption;
+ LANGMounterPrefs_miLocalDiskCaption := LANGsrMounterPrefs_miLocalDiskCaption;
+ LANGMounterPrefs_miRemovableCaption := LANGsrMounterPrefs_miRemovableCaption;
+ LANGMounterPrefs_miCDCaption := LANGsrMounterPrefs_miCDCaption;
+ LANGMounterPrefs_miFloppyCaption := LANGsrMounterPrefs_miFloppyCaption;
+ LANGMounterPrefs_miNetworkCaption := LANGsrMounterPrefs_miNetworkCaption;
+ LANGMounterPrefs_MountCommandLabelCaption := LANGsrMounterPrefs_MountCommandLabelCaption;
+ LANGMounterPrefs_UmountCommandLabelCaption := LANGsrMounterPrefs_UmountCommandLabelCaption;
+ LANGMounterPrefs_MountCommandEntryTooltip := LANGsrMounterPrefs_MountCommandEntryTooltip;
+ LANGMounterPrefs_UmountCommandEntryTooltip := LANGsrMounterPrefs_UmountCommandEntryTooltip;
+ LANGMounterPrefs_IconLabelCaption := LANGsrMounterPrefs_IconLabelCaption;
+
+ LANGConnMgr_Caption := LANGsrConnMgr_Caption;
+ LANGConnMgr_ConnectButton := LANGsrConnMgr_ConnectButton;
+ LANGConnMgr_OpenConnection := LANGsrConnMgr_OpenConnection;
+ LANGConnMgr_NameColumn := LANGsrConnMgr_NameColumn;
+ LANGConnMgr_URIColumn := LANGsrConnMgr_URIColumn;
+ LANGConnMgr_AddConnectionButtonCaption := LANGsrConnMgr_AddConnectionButtonCaption;
+ LANGConnMgr_AddConnectionButtonTooltip := LANGsrConnMgr_AddConnectionButtonTooltip;
+ LANGConnMgr_EditButtonCaption := LANGsrConnMgr_EditButtonCaption;
+ LANGConnMgr_EditButtonTooltip := LANGsrConnMgr_EditButtonTooltip;
+ LANGConnMgr_RemoveButtonCaption := LANGsrConnMgr_RemoveButtonCaption;
+ LANGConnMgr_RemoveButtonTooltip := LANGsrConnMgr_RemoveButtonTooltip;
+ LANGConnMgr_DoYouWantDelete := LANGsrConnMgr_DoYouWantDelete;
+
+ LANGConnProp_FTP := LANGsrConnProp_FTP;
+ LANGConnProp_SFTP := LANGsrConnProp_SFTP;
+ LANGConnProp_SMB := LANGsrConnProp_SMB;
+ LANGConnProp_HTTP := LANGsrConnProp_HTTP;
+ LANGConnProp_HTTPS := LANGsrConnProp_HTTPS;
+ LANGConnProp_Other := LANGsrConnProp_Other;
+ LANGConnProp_Caption := LANGsrConnProp_Caption;
+ LANGConnProp_VFSModule := LANGsrConnProp_VFSModule;
+ LANGConnProp_URI := LANGsrConnProp_URI;
+ LANGConnProp_URIEntryTooltip := LANGsrConnProp_URIEntryTooltip;
+ LANGConnProp_DetailedInformations := LANGsrConnProp_DetailedInformations;
+ LANGConnProp_Name := LANGsrConnProp_Name;
+ LANGConnProp_Server := LANGsrConnProp_Server;
+ LANGConnProp_Username := LANGsrConnProp_Username;
+ LANGConnProp_UserNameEntryTooltip := LANGsrConnProp_UserNameEntryTooltip;
+ LANGConnProp_Password := LANGsrConnProp_Password;
+ LANGConnProp_TargetDirectory := LANGsrConnProp_TargetDirectory;
+ LANGConnProp_ServiceType := LANGsrConnProp_ServiceType;
+ LANGConnProp_MaskPassword := LANGsrConnProp_MaskPassword;
+ LANGConnProp_MenuItemCaption := LANGsrConnProp_MenuItemCaption;
+
+ LANGConnLogin_Caption := LANGsrConnLogin_Caption;
+ LANGConnLogin_Login := LANGsrConnLogin_Login;
+ LANGConnLogin_ExperimentalWarningLabelCaption := LANGsrConnLogin_ExperimentalWarningLabelCaption;
+ LANGConnLogin_Username := LANGsrConnLogin_Username;
+ LANGConnLogin_Password := LANGsrConnLogin_Password;
+ LANGConnLogin_AnonymousCheckButton := LANGsrConnLogin_AnonymousCheckButton;
+
+ LANGColumns_Caption := LANGsrColumns_Caption;
+ LANGColumns_Title := LANGsrColumns_Title;
+ LANGColumns_MoveUpButtonTooltip := LANGsrColumns_MoveUpButtonTooltip;
+ LANGColumns_MoveDownButtonTooltip := LANGsrColumns_MoveDownButtonTooltip;
+ LANGColumns_TitlesLongName := LANGsrColumns_TitlesLongName;
+ LANGColumns_TitlesLongNameExt := LANGsrColumns_TitlesLongNameExt;
+ LANGColumns_TitlesLongExt := LANGsrColumns_TitlesLongExt;
+ LANGColumns_TitlesLongSize := LANGsrColumns_TitlesLongSize;
+ LANGColumns_TitlesLongDateTime := LANGsrColumns_TitlesLongDateTime;
+ LANGColumns_TitlesLongDate := LANGsrColumns_TitlesLongDate;
+ LANGColumns_TitlesLongTime := LANGsrColumns_TitlesLongTime;
+ LANGColumns_TitlesLongUser := LANGsrColumns_TitlesLongUser;
+ LANGColumns_TitlesLongGroup := LANGsrColumns_TitlesLongGroup;
+ LANGColumns_TitlesLongAttr := LANGsrColumns_TitlesLongAttr;
+ LANGColumns_TitlesShortName := LANGsrColumns_TitlesShortName;
+ LANGColumns_TitlesShortNameExt := LANGsrColumns_TitlesShortNameExt;
+ LANGColumns_TitlesShortExt := LANGsrColumns_TitlesShortExt;
+ LANGColumns_TitlesShortSize := LANGsrColumns_TitlesShortSize;
+ LANGColumns_TitlesShortDateTime := LANGsrColumns_TitlesShortDateTime;
+ LANGColumns_TitlesShortDate := LANGsrColumns_TitlesShortDate;
+ LANGColumns_TitlesShortTime := LANGsrColumns_TitlesShortTime;
+ LANGColumns_TitlesShortUser := LANGsrColumns_TitlesShortUser;
+ LANGColumns_TitlesShortGroup := LANGsrColumns_TitlesShortGroup;
+ LANGColumns_TitlesShortAttr := LANGsrColumns_TitlesShortAttr;
+
+ LANGTestPlugin_Caption := LANGsrTestPlugin_Caption;
+ LANGTestPlugin_Title := LANGsrTestPlugin_Title;
+ LANGTestPlugin_ExperimentalWarningLabelCaption := LANGsrTestPlugin_ExperimentalWarningLabelCaption;
+ LANGTestPlugin_Plugin := LANGsrTestPlugin_Plugin;
+ LANGTestPlugin_Command := LANGsrTestPlugin_Command;
+ LANGTestPlugin_Username := LANGsrTestPlugin_Username;
+ LANGTestPlugin_Password := LANGsrTestPlugin_Password;
+ LANGTestPlugin_AnonymousCheckButton := LANGsrTestPlugin_AnonymousCheckButton;
+ LANGTestPlugin_NoPluginsFound := LANGsrTestPlugin_NoPluginsFound;
+
+ LANGRemoteWait_Caption := LANGsrRemoteWait_Caption;
+ LANGRemoteWait_OperationInProgress := LANGsrRemoteWait_OperationInProgress;
+ LANGRemoteWait_ItemsFound := LANGsrRemoteWait_ItemsFound;
+
+ LANGSearch_Bytes := LANGsrSearch_Bytes;
+ LANGSearch_kB := LANGsrSearch_kB;
+ LANGSearch_MB := LANGsrSearch_MB;
+ LANGSearch_days := LANGsrSearch_days;
+ LANGSearch_weeks := LANGsrSearch_weeks;
+ LANGSearch_months := LANGsrSearch_months;
+ LANGSearch_years := LANGsrSearch_years;
+ LANGSearch_Caption := LANGsrSearch_Caption;
+ LANGSearch_General := LANGsrSearch_General;
+ LANGSearch_Advanced := LANGsrSearch_Advanced;
+ LANGSearch_SearchResults := LANGsrSearch_SearchResults;
+ LANGSearch_SearchFor := LANGsrSearch_SearchFor;
+ LANGSearch_FileMaskEntryTooltip := LANGsrSearch_FileMaskEntryTooltip;
+ LANGSearch_SearchIn := LANGsrSearch_SearchIn;
+ LANGSearch_SearchArchivesCheckButton := LANGsrSearch_SearchArchivesCheckButton;
+ LANGSearch_FindText := LANGsrSearch_FindText;
+ LANGSearch_FindTextEntryTooltip := LANGsrSearch_FindTextEntryTooltip;
+ LANGSearch_CaseSensitiveCheckButton := LANGsrSearch_CaseSensitiveCheckButton;
+ LANGSearch_StayCurrentFSCheckButton := LANGsrSearch_StayCurrentFSCheckButton;
+ LANGSearch_CaseSensitiveMatchCheckButton := LANGsrSearch_CaseSensitiveMatchCheckButton;
+ LANGSearch_Size := LANGsrSearch_Size;
+ LANGSearch_Date := LANGsrSearch_Date;
+ LANGSearch_BiggerThan := LANGsrSearch_BiggerThan;
+ LANGSearch_SmallerThan := LANGsrSearch_SmallerThan;
+ LANGSearch_ModifiedBetweenRadioButton := LANGsrSearch_ModifiedBetweenRadioButton;
+ LANGSearch_NotModifiedAfterRadioButton := LANGsrSearch_NotModifiedAfterRadioButton;
+ LANGSearch_ModifiedLastRadioButton := LANGsrSearch_ModifiedLastRadioButton;
+ LANGSearch_ModifiedNotLastRadionButton := LANGsrSearch_ModifiedNotLastRadionButton;
+ LANGSearch_ModifiedBetweenEntry1 := LANGsrSearch_ModifiedBetweenEntry1;
+ LANGSearch_ViewButtonCaption := LANGsrSearch_ViewButtonCaption;
+ LANGSearch_NewSearchButtonCaption := LANGsrSearch_NewSearchButtonCaption;
+ LANGSearch_GoToFileButtonCaption := LANGsrSearch_GoToFileButtonCaption;
+ LANGSearch_FeedToListboxButtonCaption := LANGsrSearch_FeedToListboxButtonCaption;
+ LANGSearch_StatusSC := LANGsrSearch_StatusSC;
+ LANGSearch_Ready := LANGsrSearch_Ready;
+ LANGSearch_PreparingToSearch := LANGsrSearch_PreparingToSearch;
+ LANGSearch_SearchInProgress := LANGsrSearch_SearchInProgress;
+ LANGSearch_UserCancelled := LANGsrSearch_UserCancelled;
+ LANGSearch_SearchFinished := LANGsrSearch_SearchFinished;
+ LANGSearch_FilesFound := LANGsrSearch_FilesFound;
+ LANGSearch_And := LANGsrSearch_And;
+
+ LANGCloseOpenConnection := LANGsrCloseOpenConnection;
+ LANGDuplicateTabWarning := LANGsrDuplicateTabWarning;
+ LANGDontShowAgain := LANGsrDontShowAgain;
+ LANGSwitchOtherPanelWarning := LANGsrSwitchOtherPanelWarning;
+ LANGOpenConnectionsWarning := LANGsrOpenConnectionsWarning;
+ LANGmiDisconnect_Caption := LANGsrmiDisconnect_Caption;
+ LANGDisconnectButton_Tooltip := LANGsrDisconnectButton_Tooltip;
+ LANGLeaveArchiveButton_Tooltip := LANGsrLeaveArchiveButton_Tooltip;
+ LANGOpenTerminalButton_Tooltip := LANGsrOpenTerminalButton_Tooltip;
+ LANGOpenTerminalButton_Caption := LANGsrOpenTerminalButton_Caption;
+ LANGShowTextUIDsCheckBox_Caption := LANGsrShowTextUIDsCheckBox_Caption;
+ LANGShowTextUIDsCheckBox_Tooltip := LANGsrShowTextUIDsCheckBox_Tooltip;
+
+ LANGmiNewTab_Caption := LANGsrmiNewTab_Caption;
+ LANGFilePopupMenu_Properties := LANGsrFilePopupMenu_Properties;
+ LANGCommandEntry_Tooltip := LANGsrCommandEntry_Tooltip;
+ LANGmiFiles_Caption := LANGsrmiFiles_Caption;
+
+ LANGPasswordButton_Tooltip := LANGsrPasswordButton_Tooltip;
+ LANGHandleRunFromArchive_Bytes := LANGsrHandleRunFromArchive_Bytes;
+ LANGHandleRunFromArchive_FileTypeDesc_Unknown := LANGsrHandleRunFromArchive_FileTypeDesc_Unknown;
+ LANGHandleRunFromArchive_NotAssociated := LANGsrHandleRunFromArchive_NotAssociated;
+ LANGHandleRunFromArchive_SelfExecutable := LANGsrHandleRunFromArchive_SelfExecutable;
+ LANGHandleRunFromArchive_CouldntCreateTemporaryDirectory := LANGsrHandleRunFromArchive_CouldntCreateTemporaryDirectory;
+ LANGFRunFromVFS_Caption := LANGsrFRunFromVFS_Caption;
+ LANGFRunFromVFS_TitleLabel := LANGsrFRunFromVFS_TitleLabel;
+ LANGFRunFromVFS_FileNameLabel := LANGsrFRunFromVFS_FileNameLabel;
+ LANGFRunFromVFS_FileTypeLabel := LANGsrFRunFromVFS_FileTypeLabel;
+ LANGFRunFromVFS_SizeLabel := LANGsrFRunFromVFS_SizeLabel;
+ LANGFRunFromVFS_PackedSizeLabel := LANGsrFRunFromVFS_PackedSizeLabel;
+ LANGFRunFromVFS_DateLabel := LANGsrFRunFromVFS_DateLabel;
+ LANGFRunFromVFS_InfoLabel := LANGsrFRunFromVFS_InfoLabel;
+ LANGFRunFromVFS_OpensWithLabel := LANGsrFRunFromVFS_OpensWithLabel;
+ LANGFRunFromVFS_ExecuteButton := LANGsrFRunFromVFS_ExecuteButton;
+ LANGFRunFromVFS_ExecuteAllButton := LANGsrFRunFromVFS_ExecuteAllButton;
+ LANGFSetPassword_Caption := LANGsrFSetPassword_Caption;
+ LANGFSetPassword_Label1_Caption := LANGsrFSetPassword_Label1_Caption;
+ LANGFSetPassword_Label2_Caption := LANGsrFSetPassword_Label2_Caption;
+ LANGFSetPassword_ShowPasswordCheckButton := LANGsrFSetPassword_ShowPasswordCheckButton;
+end;
+
+initialization
+ AddTranslation('SR', @SetTranslation);
+ AddTranslation('sr_YU', @SetTranslation);
+ AddTranslation('sr_YU.ISO_8859_2', @SetTranslation);
+end.
diff --git a/translations/UTranslation_SV.pas b/translations/UTranslation_SV.pas
new file mode 100644
index 0000000..d11ebcf
--- /dev/null
+++ b/translations/UTranslation_SV.pas
@@ -0,0 +1,1252 @@
+(*
+ Tux Commander - UTranslation_SV - Swedish Localization constants
+ Copyright (C) 2004 Johan kesson <johan@badanka.com>
+ !! Currently unmaintained, new translator needed !!
+
+ 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
+*)
+unit UTranslation_SV;
+
+interface
+
+implementation
+
+uses ULocale;
+
+const LANGsvF2Button_Caption = 'F2 - Byt namn';
+ LANGsvF3Button_Caption = 'F3 - Läs';
+ LANGsvF4Button_Caption = 'F4 - Editera';
+ LANGsvF5Button_Caption = 'F5 - Kopiera';
+ LANGsvF6Button_Caption = 'F6 - Flytta';
+ LANGsvF7Button_Caption = 'F7 - MkDir';
+ LANGsvF8Button_Caption = 'F8 - Ta bort';
+
+ LANGsvmnuFile_Caption = '_Arkiv';
+ LANGsvmnuMark_Caption = '_Markera';
+ LANGsvmnuCommands_Caption = '_Kommandon';
+ LANGsvmnuHelp_Caption = '_Hjälp';
+ LANGsvmiExit_Caption = 'E_xit';
+ LANGsvmiSelectGroup_Caption = 'Välj _Grupp...';
+ LANGsvmiUnselectGroup_Caption = '_Avmarkera Grupp...';
+ LANGsvmiSelectAll_Caption = '_Välj Alla';
+ LANGsvmiUnselectAll_Caption = 'A_vmarkera Allt';
+ LANGsvmiInvertSelection_Caption = '_Omvänt Val';
+ LANGsvmiRefresh_Caption = '_Uppdatera';
+ LANGsvmiAbout_Caption = '_Om...';
+
+ LANGsvColumn1_Caption = 'Namn';
+ LANGsvColumn2_Caption = 'Ext';
+ LANGsvColumn3_Caption = 'Strl';
+ LANGsvColumn4_Caption = 'Datum';
+ LANGsvColumn5_Caption = 'Attr';
+
+ LANGsvExpandSelection = 'Expandera val';
+ LANGsvShrinkSelection = 'Minimera val';
+ LANGsvNoMatchesFound = 'Inga träffar funna';
+ LANGsvNoFilesSelected = 'Inga filer valda!';
+ LANGsvSelectedFilesDirectories = '%d valda filer/kataloger';
+ LANGsvDirectoryS = 'katalog %s';
+ LANGsvFileS = 'fil %s';
+ LANGsvDoYouReallyWantToDeleteTheS = 'Vill du verkligen radera %s ?';
+ LANGsvDoYouReallyWantToDeleteTheSS = 'Vill du verkligen radera %s ?'#10'%s';
+ LANGsvCopyFiles = 'Kopiera filer';
+ LANGsvMoveRenameFiles = 'Flytta/Döp om files';
+ LANGsvCopyDFileDirectoriesTo = 'Kopiera %d fil/kataloger till';
+ LANGsvMoveRenameDFileDirectoriesTo = 'Flytta/Döp om %d fil/kataloger till';
+ LANGsvCopySC = 'Kopiera:';
+ LANGsvMoveRenameSC = 'Flytta/Döp om:';
+
+ LANGsvQuickFind = ' Snabbsök:';
+
+ LANGsvAboutString = 'Tux Commander'#10'Version %s'#10'Build date: %s'#10#10'Copyright (c) 2008 Tomas Bzatek'#10'E-mail: tbzatek@users.sourceforge.net'#10'Website: http://tuxcmd.sourceforge.net/';
+ LANGsvAboutStringGnome = 'version %s'#10'Build date: %s'#10'Website: http://tuxcmd.sourceforge.net/';
+ LANGsvDiskStatFmt = '%s of %s kB ledigt';
+ LANGsvDiskStatVolNameFmt = '[%s] %s av %s kB ledigt';
+ LANGsvStatusLineFmt = '%s of %s kB i %d av %d filer valda';
+ LANGsvPanelStrings : array[boolean] of string = ('höger', 'vänster');
+
+ LANGsvDIR = '<DIR>';
+ LANGsvErrorGettingListingForSPanel = 'Fel vid hämtning av listning for %s panel:'#10' %s'#10#10'Sökväg = ''%s''';
+ LANGsvErrorGettingListingForSPanelNoPath = 'Fel vid hämtning av listning för %s panel:'#10' %s';
+ LANGsvErrorCreatingNewDirectorySInSPanel = 'Fel vid skapande av ny katalog ''%s'' i %s panel:'#10' %s';
+ LANGsvErrorCreatingNewDirectorySInSPanelNoPath = 'Fel vid skapande av ny katalog i %s panel:'#10' %s';
+ LANGsvTheFileDirectory = 'Filen/katalogen';
+ LANGsvCouldNotBeDeleted = 'kunde inte raderas';
+ LANGsvCouldNotBeDeletedS = 'kunde inte raderas: %s';
+ LANGsvUserCancelled = 'Användaren avbröt!';
+ LANGsvTheDirectorySIsNotEmpty = 'Katalogen %s är inte tom!';
+ LANGsvCannotCopyFile = 'Kan inte kopiera fil';
+ LANGsvCopyError = 'Kopieringsfel';
+ LANGsvMoveError = 'Flyttningsfel';
+ LANGsvOverwriteS = 'Skriv över: %s';
+ LANGsvWithFileS = 'Med fil: %s';
+ LANGsvOvewriteSBytesS = '%s bytes, %s';
+ LANGsvTheFile = 'Filen';
+ LANGsvCopy = 'Kopiera';
+ LANGsvMove = 'Flytta';
+ LANGsvTheDirectory = 'Katalogen';
+ LANGsvTheSymbolicLink = 'Den symboliska länken';
+ LANGsvCannotMoveFile = 'Kan inte flytta fil';
+ LANGsvCouldNotBeCreated = 'kunde inte skapas';
+ LANGsvCouldNotBeCreatedS = 'kunde inte skapas: %s';
+ LANGsvFromS = 'Från: %s';
+ LANGsvToS = 'Till: %s';
+ LANGsvCannotCopyFileToItself = 'Kan inte kopiera fil till sig själv';
+ LANGsvMemoryAllocationFailed = 'Minnesallokation misslyckades:';
+ LANGsvCannotOpenSourceFile = 'Kan inte öppna källfil';
+ LANGsvCannotOpenDestinationFile = 'Kan inte öppna målfil';
+ LANGsvCannotCloseDestinationFile = 'Kan inte stänga målfil';
+ LANGsvCannotCloseSourceFile = 'Kan inte stänga källfil';
+ LANGsvCannotReadFromSourceFile = 'Kan inte läsa från källfil';
+ LANGsvCannotWriteToDestinationFile = 'Kan inte skriva till målfil';
+
+ LANGsvUnknownException = 'Okänd Avvikelse';
+ LANGsvNoAccess = 'Ingen Behörighet';
+ LANGsvUnknownError = 'Okänt Fel';
+
+ LANGsvCreateANewDirectory = 'Skapa en ny katalog';
+ LANGsvEnterDirectoryName = 'Fyll i _katalognamn:';
+
+ LANGsvOverwriteQuestion = 'Skriv över fråga';
+ LANGsvOverwriteButton_Caption = '_Skriv över';
+ LANGsvOverwriteAllButton_Caption = 'Skriv över _allt';
+ LANGsvSkipButton_Caption = '_Skippa';
+ LANGsvOverwriteAllOlderButton_Caption = 'Skriv över alla äldre';
+ LANGsvSkipAllButton_Caption = 'S_kippa alla';
+ LANGsvRenameButton_Caption = '_Byt namn';
+ LANGsvAppendButton_Caption = 'L_ägg till';
+ LANGsvRename = 'Byt namn';
+ LANGsvRenameFile = 'Byt namn på ''%s'' till';
+ LANGsvIgnoreButton_Caption = '_Ignorera';
+
+ LANGsvProgress = 'Framsteg';
+ LANGsvCancel = '_Avbryt';
+ LANGsvDelete = 'Radera:';
+
+ LANGsvSpecifyFileType = '_Specifiera filtyp:';
+
+ LANGsvRemoveDirectory = 'Radera katalog';
+ LANGsvDoYouWantToDeleteItWithAllItsFilesAndSubdirectories = 'Vill du radera den med alla dess filer och underkataloger?';
+ LANGsvRetry = '_Försök igen';
+ LANGsvDeleteButton_Caption = '_Radera';
+ LANGsvAll = '_Allt';
+
+ LANGsvCopyFilesSC = 'Kopiera filer:';
+ LANGsvAppendQuestion = 'Är du säker på att du vill lägga till fil ''%s'' till ''%s''?';
+ LANGsvPreparingList = 'Förbereder lista...';
+
+ LANGsvYouMustSelectAValidFile = 'Du måste välja en giltig fil!';
+ LANGsvmiVerifyChecksums = '_Verifierar checksums';
+ LANGsvVerifyChecksumsCaption = 'Verifiera checksums';
+ LANGsvCheckButtonCaptionCheck = '_Kontrollera';
+ LANGsvCheckButtonCaptionStop = '_Stopp';
+ LANGsvFileListTooltip = '[?] - Inte kontrollerad'#10'[OK] - Checksum OK'#10'[BAD] - Checksum BAD'#10'[N/A] - Filen inte tillgänglig';
+ LANGsvFilenameColumnCaption = 'Filnamn';
+ LANGsvTheFileSYouAreTryingToOpenIsQuiteBig = 'Filen ''%s'' som du försöker öppna är relativt stor (%s bytes). Det kanske inte är en giltig checksum-fil.'#10#10'Vill du ladda den ändå?';
+ LANGsvAnErrorOccuredWhileInitializingMemoryBlock = 'Ett fel uppstod medan minnesblocket initierades. Stäng alla program och försök igen.';
+ LANGsvAnErrorOccuredWhileOpeningFileSS = 'Ett fel uppstod vid öppnandet av ''%s'':'#10' %s';
+ LANGsvAnErrorOccuredWhileReadingFileSS = 'Ett fel uppstod vid läsning av ''%s'':'#10' %s';
+ LANGsvChecksumNotChecked = '<span weight="bold">Status:</span> Inte kontrollerad';
+ LANGsvChecksumChecking = '<span weight="bold">Status:</span> Kontrollerar...';
+ LANGsvChecksumInterrupted = '<span weight="bold">Status:</span> Avbruten';
+ LANGsvChecksumDOK = '<span weight="bold">Status:</span> %d%% OK';
+
+ LANGsvmiCreateChecksumsCaption = '_Skapa checksums...';
+ LANGsvYouMustSelectAtLeastOneFileToCalculateChecksum = 'Du måste välja åtminstone en fil för att räkna ut checksums!';
+ LANGsvCreateChecksumsCaption = 'Skapa checksums';
+ LANGsvCCHKSUMPage1Text = 'Du kommer att skapa checksums för'#10'de valda filerna. Om du inte valde'#10'alla filer du vill användat, stäng den här druiden och'#10'välj fler filer.';
+ LANGsvCCHKSUMPage4Text = 'Druiden är redo att skapa checksums för dina'#10'valda filer. Den här processen kan ta ett par minuter.'#10'Tryck Framåt för att fortsätta.';
+ LANGsvCCHKSUMPage6Text = 'Det uppstod fel vid skapandet av checksums:';
+ LANGsvCCHKSUMPage7Text = 'Skapandet av checksums är färdigt och'#10'dina filer är färdiga.'#10#10'Klicka "Avsluta" för att avsluta.';
+ LANGsvCCHKSUMPage1Title = '<span size="xx-large" weight="ultrabold">Förbered filer för checksum</span>';
+ LANGsvCCHKSUMPage2Title = '<span size="xx-large" weight="ultrabold">Välj checksums-filtyper</span>';
+ LANGsvCCHKSUMPage3Title = '<span size="xx-large" weight="ultrabold">Välj filnamn</span>';
+ LANGsvCCHKSUMPage4Title = '<span size="xx-large" weight="ultrabold">Redo att kontrollera</span>';
+ LANGsvCCHKSUMPage5Title = '<span size="xx-large" weight="ultrabold">Kontrollerar...</span>';
+ LANGsvCCHKSUMPage6Title = '<span size="xx-large" weight="ultrabold">Fel!</span>';
+ LANGsvCCHKSUMPage7Title = '<span size="xx-large" weight="ultrabold">Färdig</span>';
+ LANGsvCCHKSUMSFVFile = 'SFV-fil';
+ LANGsvCCHKSUMMD5sumFile = 'MD5sum-fil';
+ LANGsvCCHKSUMFileName = 'Fil _namn:';
+ LANGsvCCHKSUMCreateSeparateChecksumFiles = 'Skapa _separata checksum-filer';
+ LANGsvCCHKSUMNowProcessingFileS = 'Kontrollerar nu fil: %s';
+ LANGsvCCHKSUMFinishCaption = '_Avsluta';
+ LANGsvCCHKSUMAreYouSureYouWantToAbortTheProcessing = 'Är du säker på att du vill avbryta?';
+ LANGsvCCHKSUMAnErrorOccuredWhileOpeningFileSS = 'Ett fel uppstod vid öppnandet av ''%s'': %s'#10;
+ LANGsvCCHKSUMAnErrorOccuredWhileReadingFileSS = 'Ett fel uppstod vid läsandet av ''%s'': %s'#10;
+ LANGsvCCHKSUMAnErrorOccuredWhileWritingFileSS = 'Ett fel uppstod vid skrivandet till ''%s'': %s'#10;
+
+ LANGsvAnErrorOccuredWhileWritingFileSS = 'Ett fel uppstod vid skrivandet till ''%s'':'#10' %s';
+ LANGsvTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt = 'Målfilen ''%s'' existerar redan. Vill du skriva över den?';
+ LANGsvTheTargetFileSCannotBeRemovedS = 'Målfilen ''%s'' kan inte raderas: %s';
+ LANGsvMergeCaption = 'Förena';
+ LANGsvPleaseInsertNextDiskOrGiveDifferentLocation = 'Var god sätt i nästa disk eller ange annan plats:';
+ LANGsvMergeOfSSucceeded = 'Förening av ''%s'' lyckades (CRC checksum OK).';
+ LANGsvWarningCreatedFileFailsCRCCheck = 'Varning: Skapad fil passerar inte CRC-kontrollen!';
+ LANGsvMergeOfSSucceeded_NoCRCFileAvailable = 'Förening av ''%s'' lyckades (ingen CRC-fil tillgänglig).';
+ LANGsvMergeSAndAllFilesWithAscendingNamesToTheFollowingDirectory = 'Förena ''%s'' och alla filer med stigande namn till följande katalog:';
+ LANGsvMergeSC = 'Förena:';
+ LANGsvmiSplitFileCaption = '_Dela Fil...';
+ LANGsvmiMergeFilesCaption = '_Förena Filer...';
+
+ LANGsvSplitTheFileSToDirectory = '_Dela filen ''%s'' till katalog:';
+ LANGsvSplitSC = 'Dela:';
+ LANGsvSplitFile = 'Dela Fil';
+ LANGsvBytesPerFile = '_Bytes per fil:';
+ LANGsvAutomatic = 'Automatisk';
+ LANGsvDeleteFilesOnTargetDisk = '_Radera filer på måldisk (användbart på flyttbara enheter)';
+ LANGsvSplitCaption = 'Dela';
+ LANGsvCannotOpenFileS = 'Kan inte öppna fil ''%s''';
+ LANGsvCannotSplitTheFileToMoreThan999Parts = 'Kan inte dela filen i mer än 999 delar!';
+ LANGsvThereAreSomeFilesInTheTargetDirectorySDoYouWantToDeleteThem = 'Det existerar några filer i målkatalogen:'#10'%s'#10'Vill du radera dem?';
+ LANGsvThereAreDFilesInTheTargetDirectoryDoYouWantToDeleteThem = 'Det finns %d filer i målkatalogen. Vill du radera dem?';
+ LANGsvAnErrorOccuredWhileOperationS = 'Ett fel uppstod vid: %s';
+ LANGsvSplitOfSSucceeded = 'Delning av ''%s'' lyckades.';
+ LANGsvSplitOfSFailed = 'Delning av ''%s'' misslyckades!';
+
+ LANGsvmnuShow_Caption = 'Vis_a';
+ LANGsvmiShowDotFiles_Caption = 'Visa _punktfiler';
+ LANGsvTheFileYouAreTryingToOpenIsQuiteBig = 'Filen du försöker öppna är relativt stor. Genom att ladda den i ett externt program (som gedit) kan systemet bli långsamt.'#10'Vill du fortsätta?';
+ LANGsvCannotExecuteSPleaseCheckTheConfiguration = 'Kan inte exekvera ''%s''. Var god kontrollera konfigurationen eller ställ in filtyps-associationen korrekt.';
+ LANGsvEdit = 'Editera';
+ LANGsvEnterFilenameToEdit = '_Fyll i filnamn att editera:';
+
+ LANGsvmnuSettings_Caption = 'In_ställningar';
+ LANGsvmiFileTypes_Caption = 'Fil_typer...';
+ LANGsvThereIsNoApplicationAssociatedWithS = 'Det finns inget program associerat med "%s".'#10#10'Du kan konfigurera Tux Commander att associera program med filtyper. Vill du associera ett program med den här filen?';
+ LANGsvErrorExecutingCommand = 'Kommandot misslyckades!';
+ LANGsvEditFileTypesCaption = 'Editera filtyper';
+ LANGsvTitleLabel_Caption = '<span size="x-large" weight="ultrabold">Filtypskonfiguration</span>';
+ LANGsvExtensionsColumn = 'Extensions';
+ LANGsvDescriptionColumn = 'Beskrivning';
+ LANGsvFileTypesList = 'Filtypslista';
+ LANGsvActionName = 'Händelsenamn';
+ LANGsvCommand = 'Kommando';
+ LANGsvSetDefaultActionButton_Caption = '_Sätt som standard';
+ LANGsvRunInTerminalCheckBox_Caption = 'Kör i _Terminal';
+ LANGsvAutodetectCheckBox_Caption = 'Autoupptäck _GUI-program';
+ LANGsvBrowseButton_Caption = '_Bläddra...';
+ LANGsvCommandLabel_Caption = 'Ko_mmando:';
+ LANGsvDescriptionLabel_Caption = 'B_eskrivning:';
+ LANGsvFNameExtLabel_Caption = 'L_ägg till extension:';
+ LANGsvNotebookPageExtensions = 'Filtyp';
+ LANGsvNotebookPageActions = 'Händelser';
+ LANGsvDefault = ' (standard)';
+ LANGsvCannotSaveFileTypeAssociationsBecauseOtherProcess = 'Kan inte spara filtypsassociation därför att en annan process har uppdaterat den under tiden som det här programmet körts.';
+
+ LANGsvDefaultColor = 'St_andardfärg';
+ LANGsvIcon = '_Ikon:';
+ LANGsvBrowseForIcon = 'Bläddra efter ikon';
+ LANGsvSelectFileTypeColor = 'Välj filtypsfärg';
+ LANGsvColor = 'Fä_rg:';
+
+ LANGsvmiChangePermissions_Caption = 'Ändra Rät_ttigheter...';
+ LANGsvmiChangeOwner_Caption = 'Ändra _Ägare/Grupp...';
+ LANGsvmiCreateSymlink_Caption = 'Skapa Sym_länk...';
+ LANGsvmiEditSymlink_Caption = '_Editera Symlänk...';
+ LANGsvChmodProgress = 'Ändra rättigheter:';
+ LANGsvChownProgress = 'Ändra ägare:';
+ LANGsvYouMustSelectAValidSymbolicLink = 'Du måste välja en giltig symbolisk länk!';
+ LANGsvPopupRunS = 'E_xekvera %s';
+ LANGsvPopupOpenS = 'Ö_ppna %s';
+ LANGsvPopupGoUp = '_Gå upp';
+ LANGsvPopupOpenWithS = 'Öppna med %s';
+ LANGsvPopupDefault = ' (standard)';
+ LANGsvPopupOpenWith = 'Ö_ppna med...';
+ LANGsvPopupViewFile = '_Läs fil';
+ LANGsvPopupEditFile = 'Ed_itera fil';
+ LANGsvPopupMakeSymlink = 'Skapa _symlänk';
+ LANGsvPopupRename = '_Döp om';
+ LANGsvPopupDelete = '_Radera';
+ LANGsvDialogChangePermissions = 'Ändra rättigheter';
+ LANGsvCouldNotBeChmoddedS = 'kunde inte chmoddas: %s';
+ LANGsvDialogChangeOwner = 'Ändra ägare';
+ LANGsvCouldNotBeChownedS = 'kunde inte chownas: %s';
+ LANGsvDialogMakeSymlink = 'Skapa symlänk';
+ LANGsvDialogEditSymlink = 'Editera symlänk';
+ LANGsvFEditSymlink_Caption = 'Editera symbolisk länk';
+ LANGsvFEditSymlink_SymbolicLinkFilename = '_Symbolisk länk filnamn:';
+ LANGsvFEditSymlink_SymbolicLinkPointsTo = 'Symbolisk länk pekar _på:';
+
+ LANGsvFChmod_Caption = 'Tillgå Rättigheter';
+ LANGsvFChmod_PermissionFrame = 'Rättigheter';
+ LANGsvFChmod_FileFrame = 'Fil';
+ LANGsvFChmod_ApplyRecursivelyFor = 'Applicera _rekursivt för';
+ LANGsvFChmod_miAllFiles = 'Alla filer och kataloger';
+ LANGsvFChmod_miDirectories = 'Endast kataloger';
+ LANGsvFChmod_OctalLabel = '_Oktal:';
+ LANGsvFChmod_SUID = 'SUID - Sätt användar ID vid exekvering';
+ LANGsvFChmod_SGID = 'SGID - Sätt användar group ID vid exekvering';
+ LANGsvFChmod_Sticky = 'Sticky bit';
+ LANGsvFChmod_RUSR = 'RUSR - Läs av ägare';
+ LANGsvFChmod_WUSR = 'WUSR - Skriv av ägare';
+ LANGsvFChmod_XUSR = 'XUSR - Exekvera/Sök av ägare';
+ LANGsvFChmod_RGRP = 'RGRP - Läs av grupp';
+ LANGsvFChmod_WGRP = 'WGRP - Skriv av grupp';
+ LANGsvFChmod_XGRP = 'XGRP - Exekvera/Sök av grupp';
+ LANGsvFChmod_ROTH = 'ROTH - Läs av andra';
+ LANGsvFChmod_WOTH = 'WOTH - Skriv av andra';
+ LANGsvFChmod_XOTH = 'XOTH - Exekvera/Sök av andra';
+ LANGsvFChmod_TextLabel = '<span weight="ultrabold">Text:</span> %s';
+ LANGsvFChmod_FileLabel = '<span weight="ultrabold">Fil:</span> %s'#10'<span weight="ultrabold">Text:</span> %s'#10 +
+ '<span weight="ultrabold">Oktal:</span> %d'#10'<span weight="ultrabold">Ägare:</span> %s'#10 +
+ '<span weight="ultrabold">Grupp:</span> %s';
+
+ LANGsvFChown_Caption = 'Ändra ägare/grupp';
+ LANGsvFChown_OwnerFrame = 'Användarnamn';
+ LANGsvFChown_GroupFrame = 'Gruppname';
+ LANGsvFChown_FileFrame = 'Fil';
+ LANGsvFChown_ApplyRecursively = 'Applicera _rekursivt';
+
+ LANGsvFSymlink_Caption = 'Skapa symbolisk länk';
+ LANGsvFSymlink_ExistingFilename = '_Befintligt filnamn (filnamnets symlänk kommer peka på):';
+ LANGsvFSymlink_SymlinkFilename = '_Symbolisk länks filnamn:';
+
+ LANGsvmnuBookmarks_Caption = '_Bokmärken';
+ LANGsvmiAddBookmark_Caption = 'Lägg till Bokmärke';
+ LANGsvmiEditBookmarks_Caption = 'Editera Bokmärken';
+ LANGsvBookmarkPopupDelete_Caption = '_Radera';
+ LANGsvmiPreferences_Caption = '_Inställningar...';
+ LANGsvTheCurrentDirectoryAlreadyExistsInTheBookmarksList = 'Nuvarande katalog finns redan i bokmärkelistan';
+ LANGsvSomeOtherInstanceChanged = 'En annan instans av Tux Commander ändrade konfigurationen. Vill du applicera de nya inställningarna?'#10#10'Varning: Om du trycker Nej nu kommer konfigurationen skrivas över från den här instansen'' exit!';
+
+ LANGsvPreferences_Caption = 'Inställningar';
+ LANGsvPreferences_TitleLabel_Caption = '<span size="x-large" weight="ultrabold">Applikationsinställningar</span>';
+ LANGsvPreferences_GeneralPage = 'Allmänt';
+ LANGsvPreferences_FontsPage = 'Teckensnitt';
+ LANGsvPreferences_ColorsPage = 'Färger';
+ LANGsvPreferences_RowHeight = 'Rad _höjd:';
+ LANGsvPreferences_NumHistoryItems = '_Kommandoradens gamla poster:';
+ LANGsvPreferences_Default = 'Standard';
+ LANGsvPreferences_ClearReadonlyAttribute = 'Ta bort _skrivskydd-sattribut vid kopiering från CD-ROM';
+ LANGsvPreferences_DisableMouseRenaming = 'Inaktivera namnbyte via _mus';
+ LANGsvPreferences_ShowFiletypeIconsInList = 'Visa _filtypsikoner';
+ LANGsvPreferences_ExternalAppsLabel = '<span weight="ultrabold">Externa program</span>';
+ LANGsvPreferences_Viewer = '_Visningsprogram:';
+ LANGsvPreferences_Editor = '_Editerare:';
+ LANGsvPreferences_Terminal = '_Terminal:';
+ LANGsvPreferences_ListFont = 'List-teckensnitt:';
+ LANGsvPreferences_Change = 'Ändra...';
+ LANGsvPreferences_UseDefaultFont = 'Använd _standardteckensnitt';
+ LANGsvPreferences_Foreground = 'Förgrund';
+ LANGsvPreferences_Background = 'Bakgrund';
+ LANGsvPreferences_NormalItem = 'Normalt:';
+ LANGsvPreferences_SetToDefaultToUseGTKThemeColors = 'Sätt som standard att använda GTK-temafärger';
+ LANGsvPreferences_Cursor = 'Muspekare:';
+ LANGsvPreferences_InactiveItem = 'Inaktiva:';
+ LANGsvPreferences_SelectedItem = 'Valda:';
+ LANGsvPreferences_LinkItem = 'Symboliska länkar:';
+ LANGsvPreferences_LinkItemHint = 'Sätt som standard att visa symlänkar med normala färger';
+ LANGsvPreferences_DotFileItem = 'Punktfiler:';
+ LANGsvPreferences_DotFileItemHint = 'Sätt som standard att visa punktfiler med normala färger';
+ LANGsvPreferences_BrowseForApplication = 'Bläddra efter applikation';
+ LANGsvPreferences_DefaultS = 'Standard: %s';
+ LANGsvPreferences_SelectFont = 'Välj teckensnitt';
+
+ (*************** STRINGS ADDED TO v0.4.101 **********************************************************************************)
+ LANGsvBookmarkButton_Tooltip = 'Visa bokmärken';
+ LANGsvUpButton_Tooltip = 'Gå till övre katalog';
+ LANGsvRootButton_Tooltip = 'Gå till rotkatalog (/)';
+ LANGsvHomeButton_Tooltip = 'Gå till hemkatalog (/home/user)';
+ LANGsvLeftEqualButton_Tooltip = 'Byt högerpanalen till samma katalog';
+ LANGsvRightEqualButton_Tooltip = 'Byt högerpanalen till samma katalog';
+ LANGsvmiShowDirectorySizes_Caption = 'Visa k_atalogstorlek';
+ LANGsvmiTargetSource_Caption = 'Mål = Källa';
+ LANGsvFileTypeDirectory = 'Katalog';
+ LANGsvFileTypeFile = 'Fil';
+ LANGsvFileTypeMetafile = 'Detta är en vanlig meta';
+ LANGsvPreferencesPanelsPage = 'Paneler';
+ LANGsvPreferencesApplicationsPage = 'Applikationer';
+ LANGsvPreferencesExperimentalPage = 'Experimentiell';
+ LANGsvPreferencesSelectAllDirectoriesCheckBox_Caption = 'Välj _även kataloger när allt markeras';
+ LANGsvPreferencesNewStyleAltOCheckBox_Caption = '_Ny stil Alt+O';
+ LANGsvPreferencesNewStyleAltOCheckBox_Tooltip = 'Stanna i samma katalog vid byte av katalog mittemot panel genom att trycka Ctrl/Alt+O';
+ LANGsvPreferencesShowFuncButtonsCheckBox_Caption = 'Visa funktion_knappar';
+ LANGsvPreferencesSizeFormatLabel_Caption = '_Storleksformat:';
+ LANGsvPreferencesmiSizeFormat1 = 'System';
+ LANGsvPreferencesmiSizeFormat6 = 'Grupperad';
+ LANGsvPreferencesAutodetectXApp = 'Autodetecta X app';
+ LANGsvPreferencesAlwaysRunInTerminal = 'Kör alltid i terminal';
+ LANGsvPreferencesNeverRunInTerminal = 'Kör aldrig i terminal';
+ LANGsvPreferencesCmdLineBehaviourLabel_Caption = '_Exekverar från kommandoraden:';
+ LANGsvPreferencesFeatures = 'Finesser';
+ LANGsvPreferencesDisableMouseRename_Tooltip = 'Du kan fortfarande göra snabb omdöpning av filer genom att trycka Shift+F6';
+ LANGsvPreferencesDisableFileTipsCheckBox_Caption = 'Avaktivera fil _tips';
+ LANGsvPreferencesDisableFileTipsCheckBox_Tooltip = 'Visa inte tips om texten i en kolumn är avskuren';
+ LANGsvPreferencesShow = 'Visa';
+ LANGsvPreferencesDirsInBoldCheckBox_Caption = 'Kataloger i _fetstil';
+ LANGsvPreferencesDisableDirectoryBracketsCheckBox_Caption = 'Avaktivera katalog p_aranteser';
+ LANGsvPreferencesOctalPermissionsCheckBox_Caption = 'Visa _oktala rättigheter';
+ LANGsvPreferencesOctalPermissionsCheckBox_Tooltip = 'Visa fil/katalog-rättigheter som nummer istället för i textform (-rw-rw-rw-)';
+ LANGsvPreferencesMovement = 'Rörelse';
+ LANGsvPreferencesLynxLikeMotionCheckBox_Caption = '_Lynx-liknande rörelse';
+ LANGsvPreferencesInsertMovesDownCheckBox_Caption = '_Insert scrollar uppåt';
+ LANGsvPreferencesSpaceMovesDownCheckBox_Caption = '_Space scrollar neråt';
+ LANGsvPreferencesViewer = 'Läsare';
+ LANGsvPreferencesCommandSC = 'Kommando:';
+ LANGsvPreferencesUseInternalViewer = 'Använd _intern läsare';
+ LANGsvPreferencesEditor = 'Redigerare';
+ LANGsvPreferencesTerminal = 'Terminal';
+ LANGsvPreferencesExperimentalFeatures = 'Experimentiella finesser';
+ LANGsvPreferencesExperimentalWarningLabel_Caption = '<span weight="ultrabold">Warning:</span> Dessa funktioner är under utveckling och kanske inte fungerar som väntat. Använd dem på egen risk!';
+ LANGsvPreferencesFocusRefreshCheckBox_Caption = '_Uppdatera vid fönsterfokusering';
+ LANGsvPreferencesFocusRefreshCheckBox_Tooltip = 'Väldigt långsam panel-uppdatering just nu';
+ LANGsvPreferencesWMCompatModeCheckBox_Caption = '_WM Kompatibilitetsläge';
+ LANGsvPreferencesWMCompatModeCheckBox_Tooltip = 'Använd om du har problem med din window manager (IceWM kan inte maximera fönster riktigt tex.)';
+ LANGsvPreferencesCompatUseLibcSystemCheckBox_Caption = 'Använd libc _system() för att köra program';
+ LANGsvPreferencesCompatUseLibcSystemCheckBox_Tooltip = 'Använd mot frysning eller krasch vid start av externa applikationer';
+
+ (*************** STRINGS ADDED TO v0.5.70 **********************************************************************************)
+ LANGsvmiSearchCaption2 = '_Search...';
+ LANGsvmiNoMounterBarCaption = 'Do_n''t show mounter bar';
+ LANGsvmiShowOneMounterBarCaption = 'Show _one mounter bar';
+ LANGsvmiShowTwoMounterBarCaption = 'Show _two mounter bars';
+ LANGsvmnuNetworkCaption = 'N_etwork';
+ LANGsvmiConnectionsCaption = '_Connections...';
+ LANGsvmiOpenConnectionCaption = '_Open connection...';
+ LANGsvmiQuickConnectCaption = '_Quick connect...';
+ LANGsvmnuPluginsCaption = 'Pl_ugins';
+ LANGsvmiTestPluginCaption = '_Test plugin...';
+ LANGsvmiMounterSettingsCaption = '_Mounter Settings...';
+ LANGsvmiColumnsCaption = 'P_anel Columns...';
+ LANGsvmiSavePositionCaption = '_Save position';
+ LANGsvmiMountCaption = '_Mount';
+ LANGsvmiUmountCaption = '_Umount';
+ LANGsvmiEjectCaption = '_Eject';
+ LANGsvmiDuplicateTabCaption = 'Duplicate current tab';
+ LANGsvmiCloseTabCaption = 'Close current tab';
+ LANGsvmiCloseAllTabsCaption = 'Close all tabs';
+ LANGsvCannotDetermineDestinationEngine = 'Cannot determine destination engine. Please enter correct path and try it again.';
+ LANGsvCannotLoadFile = 'Cannot load file ''%s''. Please check the permissions.';
+ LANGsvMountPointDevice = 'Mount Point: %s'#10'Device: %s';
+ LANGsvMountSC = 'Mount:';
+ LANGsvNoPluginsFound = 'No plugins found';
+ LANGsvPluginAbout = 'About...';
+ LANGsvCouldntOpenURI = 'Couldn''t open the URI specified. Please check the consistency of the resource identifier and the access permission.';
+ LANGsvPluginAboutInside = 'Plugin: %s'#10#10'%s'#10'%s';
+ LANGsvAreYouSureCloseAllTabs = 'Are you sure you want to close all inactive tabs?';
+ LANGsvCouldntOpenURIArchive = 'Couldn''t open the archive. Please check consistency and access permissions.';
+ LANGsvThereIsNoModuleAvailable = 'There are no VFS modules available that can handle this connection';
+ LANGsvIgnoreError = 'Do you really want to ignore the error? The source file will be then deleted';
+ LANGsvErrorMount = 'There was an error while mounting the device ''%s'':'#10#10;
+ LANGsvErrorUmount = 'There was an error while umounting the device ''%s'':'#10#10;
+ LANGsvErrorEject = 'There was an error while ejecting the device ''%s'':'#10#10;
+
+ LANGsvMounterPrefs_Caption = 'Mounter Settings';
+ LANGsvMounterPrefs_TitleLabelCaption = 'Mounter Settings';
+ LANGsvMounterPrefs_ListViewFrameCaption = 'Mounter';
+ LANGsvMounterPrefs_MountName = 'Mount Name';
+ LANGsvMounterPrefs_MountPoint = 'Mount Point';
+ LANGsvMounterPrefs_Device = 'Device';
+ LANGsvMounterPrefs_MoveUpButtonTooltip = 'Move item up';
+ LANGsvMounterPrefs_MoveDownButtonTooltip = 'Move item down';
+ LANGsvMounterPrefs_UseFSTabDefaultsCheckBox = 'Use _fstab default items';
+ LANGsvMounterPrefs_UseFSTabDefaultsCheckBoxTooltip = 'By checking this, the mounter bar will be filled by default items found in the /etc/fstab (system mountlist file)';
+ LANGsvMounterPrefs_ToggleModeCheckBox = 'Buttons stay _down when mounted';
+ LANGsvMounterPrefs_ToggleModeCheckBoxTooltip = 'When checked, the mounter buttons will stay down if the device is mounted; another click will cause umounting them (eject in this case)';
+ LANGsvMounterPrefs_PropertiesFrameCaption = 'Mounter item properties';
+ LANGsvMounterPrefs_DisplayTextLabelCaption = 'Displayed _Text:';
+ LANGsvMounterPrefs_MountPointLabelCaption = 'Mount _Point:';
+ LANGsvMounterPrefs_MountDeviceLabelCaption = '_Device:';
+ LANGsvMounterPrefs_DeviceTypeLabelCaption = 'Device T_ype:';
+ LANGsvMounterPrefs_miLocalDiskCaption = 'Local disk';
+ LANGsvMounterPrefs_miRemovableCaption = 'Removable';
+ LANGsvMounterPrefs_miCDCaption = 'CD/DVD drive';
+ LANGsvMounterPrefs_miFloppyCaption = 'Floppy drive';
+ LANGsvMounterPrefs_miNetworkCaption = 'Network';
+ LANGsvMounterPrefs_MountCommandLabelCaption = 'Mount _Command:';
+ LANGsvMounterPrefs_UmountCommandLabelCaption = 'Umount C_ommand:';
+ LANGsvMounterPrefs_MountCommandEntryTooltip = 'Syntax: use %dev for substitution of the device and %dir for the mount point or leave blank for default mount'#10'Note: beware of interactive commands, tuxcmd could freeze!'#10'Example: smbmount %dev %dir -o username=netuser,password=somepass';
+ LANGsvMounterPrefs_UmountCommandEntryTooltip = 'Syntax: use %dev for substitution of the device and %dir for the mount point or leave blank for default umount'#10'Example: smbumount $dir';
+ LANGsvMounterPrefs_IconLabelCaption = '_Icon:';
+
+ LANGsvConnMgr_Caption = 'Open New Connection';
+ LANGsvConnMgr_ConnectButton = 'Co_nnect';
+ LANGsvConnMgr_OpenConnection = 'Open Connection';
+ LANGsvConnMgr_NameColumn = 'Name';
+ LANGsvConnMgr_URIColumn = 'URI';
+ LANGsvConnMgr_AddConnectionButtonCaption = '_Add site...';
+ LANGsvConnMgr_AddConnectionButtonTooltip = 'Add new connection';
+ LANGsvConnMgr_EditButtonCaption = '_Edit...';
+ LANGsvConnMgr_EditButtonTooltip = 'Edit selected connection';
+ LANGsvConnMgr_RemoveButtonCaption = '_Remove site';
+ LANGsvConnMgr_RemoveButtonTooltip = 'Delete selected connection';
+ LANGsvConnMgr_DoYouWantDelete = 'Do you really want to delete the connection ''%s''?';
+
+ LANGsvConnProp_FTP = 'FTP';
+ LANGsvConnProp_SFTP = 'SFTP (ssh subsystem)';
+ LANGsvConnProp_SMB = 'Windows share (SMB)';
+ LANGsvConnProp_HTTP = 'WebDAV (HTTP)';
+ LANGsvConnProp_HTTPS = 'Secure WebDAV (HTTPS)';
+ LANGsvConnProp_Other = 'Other <span style="italic">(please specify in URI)</span>';
+ LANGsvConnProp_Caption = 'Connection properties';
+ LANGsvConnProp_VFSModule = '_VFS module:';
+ LANGsvConnProp_URI = '_URI:';
+ LANGsvConnProp_URIEntryTooltip = 'Correct URI should contain service type prefix and server address';
+ LANGsvConnProp_DetailedInformations = 'Detailed informations';
+ LANGsvConnProp_Name = '_Name:';
+ LANGsvConnProp_Server = 'Ser_ver[:port]:';
+ LANGsvConnProp_Username = 'Userna_me:';
+ LANGsvConnProp_UserNameEntryTooltip = 'Leave blank for anonymous login';
+ LANGsvConnProp_Password = '_Password:';
+ LANGsvConnProp_TargetDirectory = 'Target _directory:';
+ LANGsvConnProp_ServiceType = '_Service type:';
+ LANGsvConnProp_MaskPassword = '_Mask password';
+ LANGsvConnProp_MenuItemCaption = 'Default <span style="italic">(all suitable modules)</span>';
+
+ LANGsvConnLogin_Caption = 'Authentication required';
+ LANGsvConnLogin_Login = 'Login';
+ LANGsvConnLogin_ExperimentalWarningLabelCaption = 'You must log in to access %s';
+ LANGsvConnLogin_Username = '_Username:';
+ LANGsvConnLogin_Password = '_Password:';
+ LANGsvConnLogin_AnonymousCheckButton = '_Anonymous';
+
+ LANGsvColumns_Caption = 'Panel Columns Settings';
+ LANGsvColumns_Title = 'Panel Columns Settings';
+ LANGsvColumns_MoveUpButtonTooltip = 'Move item up';
+ LANGsvColumns_MoveDownButtonTooltip = 'Move item down';
+ LANGsvColumns_TitlesLongName = 'Name';
+ LANGsvColumns_TitlesLongNameExt = 'Name + Extension';
+ LANGsvColumns_TitlesLongExt = 'Extension';
+ LANGsvColumns_TitlesLongSize = 'Size';
+ LANGsvColumns_TitlesLongDateTime = 'Date + Time';
+ LANGsvColumns_TitlesLongDate = 'Date';
+ LANGsvColumns_TitlesLongTime = 'Time';
+ LANGsvColumns_TitlesLongUser = 'User';
+ LANGsvColumns_TitlesLongGroup = 'Group';
+ LANGsvColumns_TitlesLongAttr = 'Attributes';
+ LANGsvColumns_TitlesShortName = 'Name';
+ LANGsvColumns_TitlesShortNameExt = 'Name';
+ LANGsvColumns_TitlesShortExt = 'Ext';
+ LANGsvColumns_TitlesShortSize = 'Size';
+ LANGsvColumns_TitlesShortDateTime = 'Date';
+ LANGsvColumns_TitlesShortDate = 'Date';
+ LANGsvColumns_TitlesShortTime = 'Time';
+ LANGsvColumns_TitlesShortUser = 'User';
+ LANGsvColumns_TitlesShortGroup = 'Group';
+ LANGsvColumns_TitlesShortAttr = 'Attr';
+
+ LANGsvTestPlugin_Caption = 'Test VFS Plugin';
+ LANGsvTestPlugin_Title = 'Test VFS Plugin';
+ LANGsvTestPlugin_ExperimentalWarningLabelCaption = '<span weight="ultrabold">Warning:</span> The VFS subsystem and its plugins are under heavy development and may contain bugs. Use this function under your own risk!';
+ LANGsvTestPlugin_Plugin = '_Plugin:';
+ LANGsvTestPlugin_Command = 'Co_mmand:';
+ LANGsvTestPlugin_Username = '_Username:';
+ LANGsvTestPlugin_Password = '_Password:';
+ LANGsvTestPlugin_AnonymousCheckButton = '_Anonymous login (doesn''t call VFSLogin)';
+ LANGsvTestPlugin_NoPluginsFound = 'No plugins found';
+
+ LANGsvRemoteWait_Caption = 'Operation in progress';
+ LANGsvRemoteWait_OperationInProgress = 'Operation in progress, please be patient...';
+ LANGsvRemoteWait_ItemsFound = 'Items found so far: %d';
+
+ LANGsvSearch_Bytes = 'Bytes';
+ LANGsvSearch_kB = 'kB';
+ LANGsvSearch_MB = 'MB';
+ LANGsvSearch_days = 'days';
+ LANGsvSearch_weeks = 'weeks';
+ LANGsvSearch_months = 'months';
+ LANGsvSearch_years = 'years';
+ LANGsvSearch_Caption = 'Find Files';
+ LANGsvSearch_General = 'General';
+ LANGsvSearch_Advanced = 'Advanced';
+ LANGsvSearch_SearchResults = 'Search _Results:';
+ LANGsvSearch_SearchFor = 'Search _for:';
+ LANGsvSearch_FileMaskEntryTooltip = 'Tip: Use colons (";") to specify multiple files to find';
+ LANGsvSearch_SearchIn = 'Search _in:';
+ LANGsvSearch_SearchArchivesCheckButton = 'Search _archives';
+ LANGsvSearch_FindText = 'Find _text:';
+ LANGsvSearch_FindTextEntryTooltip = 'Leave blank for no text matching'#10'Please note that we are using UTF-8 in GUI part';
+ LANGsvSearch_CaseSensitiveCheckButton = 'Cas_e sensitive';
+ LANGsvSearch_StayCurrentFSCheckButton = 'Include other files_ystems';
+ LANGsvSearch_CaseSensitiveMatchCheckButton = 'Ca_se sensitive';
+ LANGsvSearch_Size = 'Size';
+ LANGsvSearch_Date = 'Date';
+ LANGsvSearch_BiggerThan = '_Bigger than';
+ LANGsvSearch_SmallerThan = '_Smaller than';
+ LANGsvSearch_ModifiedBetweenRadioButton = '_Modified between';
+ LANGsvSearch_NotModifiedAfterRadioButton = '_Not modified after';
+ LANGsvSearch_ModifiedLastRadioButton = 'Mod_ified in the last';
+ LANGsvSearch_ModifiedNotLastRadionButton = 'No_t modified in the last';
+ LANGsvSearch_ModifiedBetweenEntry1 = '"Please use this date format:" c';
+ LANGsvSearch_ViewButtonCaption = '_View file';
+ LANGsvSearch_NewSearchButtonCaption = '_New search';
+ LANGsvSearch_GoToFileButtonCaption = '_Go to file';
+ LANGsvSearch_FeedToListboxButtonCaption = 'Feed to _listbox';
+ LANGsvSearch_StatusSC = 'Status:';
+ LANGsvSearch_Ready = 'Ready.';
+ LANGsvSearch_PreparingToSearch = 'Preparing to search.';
+ LANGsvSearch_SearchInProgress = 'Search in progress:';
+ LANGsvSearch_UserCancelled = 'User cancelled.';
+ LANGsvSearch_SearchFinished = 'Search finished';
+ LANGsvSearch_FilesFound = '%d files found';
+ LANGsvSearch_And = 'and';
+
+ (*************** STRINGS ADDED TO v0.5.82 **********************************************************************************)
+ LANGsvCloseOpenConnection = 'You''re trying to open new connection over the another active connection. By continuing, the previous connection will be closed and replaced by the new requested one.'#10#10'Do you want to continue?';
+ LANGsvDuplicateTabWarning = 'You are trying to open a new tab from a remote directory. However, engine cloning is not supported. The directory in the new tab will point to a local filesystem.';
+ LANGsvDontShowAgain = '_Don''t show this message again';
+ LANGsvSwitchOtherPanelWarning = 'You are trying to open the remote directory in the opposite panel. However, engine cloning is not supported. The target directory will not be switched.';
+ LANGsvOpenConnectionsWarning = 'There are some active connections opened in the panel. By closing the application, these connections will be disconnected.'#10#10'Do you want to continue quit?';
+ LANGsvmiDisconnect_Caption = '_Disconnect';
+ LANGsvDisconnectButton_Tooltip = 'Disconnect active connection';
+ LANGsvLeaveArchiveButton_Tooltip = 'Close current archive';
+ LANGsvOpenTerminalButton_Tooltip = 'Opens a new terminal windows from the current directory';
+ LANGsvOpenTerminalButton_Caption = 'Open Te_rminal';
+ LANGsvShowTextUIDsCheckBox_Caption = 'Show text _UIDs';
+ LANGsvShowTextUIDsCheckBox_Tooltip = 'Show textual User and Group informations instead of numbers (UID/GID)';
+
+ (*************** STRINGS ADDED TO v0.5.100 **********************************************************************************)
+ LANGsvmiNewTab_Caption = 'New folder _tab';
+ LANGsvFilePopupMenu_Properties = '_Properties';
+ LANGsvCommandEntry_Tooltip = 'Use %s as file/directory placeholder';
+ LANGsvmiFiles_Caption = 'Files only';
+
+ (*************** STRINGS ADDED TO v0.6.31 **********************************************************************************)
+ LANGsvPasswordButton_Tooltip = 'Archive requires password.'#10'Click to set';
+ LANGsvHandleRunFromArchive_Bytes = 'bytes';
+ LANGsvHandleRunFromArchive_FileTypeDesc_Unknown = '(unknown)';
+ LANGsvHandleRunFromArchive_NotAssociated = '(not associated)';
+ LANGsvHandleRunFromArchive_SelfExecutable = '(self-executable)';
+ LANGsvHandleRunFromArchive_CouldntCreateTemporaryDirectory = 'Couldn''t create temporary directory "%s": %s.'#10#10'Please check the temporary directory settings and try it again.';
+ LANGsvFRunFromVFS_Caption = 'Packed file properties';
+ LANGsvFRunFromVFS_TitleLabel = 'File Properties';
+ LANGsvFRunFromVFS_FileNameLabel = 'File name:';
+ LANGsvFRunFromVFS_FileTypeLabel = 'File type:';
+ LANGsvFRunFromVFS_SizeLabel = 'Size:';
+ LANGsvFRunFromVFS_PackedSizeLabel = 'Compressed size:';
+ LANGsvFRunFromVFS_DateLabel = 'Modify date:';
+ LANGsvFRunFromVFS_InfoLabel = 'Opening files directly from archives is not supported. By clicking the buttons below the file (all files respectively) will be extracted to a temporary location. Temporary files will be deleted when you close Tux Commander.';
+ LANGsvFRunFromVFS_OpensWithLabel = 'Open with:';
+ LANGsvFRunFromVFS_ExecuteButton = 'E_xtract and open';
+ LANGsvFRunFromVFS_ExecuteAllButton = 'Extract _all and open';
+ LANGsvFSetPassword_Caption = 'Set password';
+ LANGsvFSetPassword_Label1_Caption = 'Password required';
+ LANGsvFSetPassword_Label2_Caption = 'The archive is encrypted and requires password in order to extract the data';
+ LANGsvFSetPassword_ShowPasswordCheckButton = 'Un_mask password';
+
+
+(********************************************************************************************************************************)
+procedure SetTranslation;
+begin
+ LANGF2Button_Caption := LANGsvF2Button_Caption;
+ LANGF3Button_Caption := LANGsvF3Button_Caption;
+ LANGF4Button_Caption := LANGsvF4Button_Caption;
+ LANGF5Button_Caption := LANGsvF5Button_Caption;
+ LANGF6Button_Caption := LANGsvF6Button_Caption;
+ LANGF7Button_Caption := LANGsvF7Button_Caption;
+ LANGF8Button_Caption := LANGsvF8Button_Caption;
+
+ LANGmnuFile_Caption := LANGsvmnuFile_Caption;
+ LANGmnuMark_Caption := LANGsvmnuMark_Caption;
+ LANGmnuCommands_Caption := LANGsvmnuCommands_Caption;
+ LANGmnuHelp_Caption := LANGsvmnuHelp_Caption;
+ LANGmiExit_Caption := LANGsvmiExit_Caption;
+ LANGmiSelectGroup_Caption := LANGsvmiSelectGroup_Caption;
+ LANGmiUnselectGroup_Caption := LANGsvmiUnselectGroup_Caption;
+ LANGmiSelectAll_Caption := LANGsvmiSelectAll_Caption;
+ LANGmiUnselectAll_Caption := LANGsvmiUnselectAll_Caption;
+ LANGmiInvertSelection_Caption := LANGsvmiInvertSelection_Caption;
+ LANGmiRefresh_Caption := LANGsvmiRefresh_Caption;
+ LANGmiAbout_Caption := LANGsvmiAbout_Caption;
+
+ LANGColumn1_Caption := LANGsvColumn1_Caption;
+ LANGColumn2_Caption := LANGsvColumn2_Caption;
+ LANGColumn3_Caption := LANGsvColumn3_Caption;
+ LANGColumn4_Caption := LANGsvColumn4_Caption;
+ LANGColumn5_Caption := LANGsvColumn5_Caption;
+
+ LANGExpandSelection := LANGsvExpandSelection;
+ LANGShrinkSelection := LANGsvShrinkSelection;
+ LANGNoMatchesFound := LANGsvNoMatchesFound;
+ LANGNoFilesSelected := LANGsvNoFilesSelected;
+ LANGSelectedFilesDirectories := LANGsvSelectedFilesDirectories;
+ LANGDirectoryS := LANGsvDirectoryS;
+ LANGFileS := LANGsvFileS;
+ LANGDoYouReallyWantToDeleteTheS := LANGsvDoYouReallyWantToDeleteTheS;
+ LANGDoYouReallyWantToDeleteTheSS := LANGsvDoYouReallyWantToDeleteTheSS;
+ LANGCopyFiles := LANGsvCopyFiles;
+ LANGMoveRenameFiles := LANGsvMoveRenameFiles;
+ LANGCopyDFileDirectoriesTo := LANGsvCopyDFileDirectoriesTo;
+ LANGMoveRenameDFileDirectoriesTo := LANGsvMoveRenameDFileDirectoriesTo;
+ LANGCopySC := LANGsvCopySC;
+ LANGMoveRenameSC := LANGsvMoveRenameSC;
+
+ LANGQuickFind := LANGsvQuickFind;
+
+ LANGAboutString := LANGsvAboutString;
+ LANGAboutStringGnome := LANGsvAboutStringGnome;
+ LANGDiskStatFmt := LANGsvDiskStatFmt;
+ LANGDiskStatVolNameFmt := LANGsvDiskStatVolNameFmt;
+ LANGStatusLineFmt := LANGsvStatusLineFmt;
+ LANGPanelStrings[False] := LANGsvPanelStrings[False];
+ LANGPanelStrings[True] := LANGsvPanelStrings[True];
+ LANGDIR := LANGsvDIR;
+ LANGErrorGettingListingForSPanel := LANGsvErrorGettingListingForSPanel;
+ LANGErrorGettingListingForSPanelNoPath := LANGsvErrorGettingListingForSPanelNoPath;
+ LANGErrorCreatingNewDirectorySInSPanel := LANGsvErrorCreatingNewDirectorySInSPanel;
+ LANGErrorCreatingNewDirectorySInSPanelNoPath := LANGsvErrorCreatingNewDirectorySInSPanelNoPath;
+ LANGTheFileDirectory := LANGsvTheFileDirectory;
+ LANGCouldNotBeDeleted := LANGsvCouldNotBeDeleted;
+ LANGCouldNotBeDeletedS := LANGsvCouldNotBeDeletedS;
+ LANGUserCancelled := LANGsvUserCancelled;
+ LANGTheDirectorySIsNotEmpty := LANGsvTheDirectorySIsNotEmpty;
+ LANGCannotCopyFile := LANGsvCannotCopyFile;
+ LANGCopyError := LANGsvCopyError;
+ LANGMoveError := LANGsvMoveError;
+ LANGOverwriteS := LANGsvOverwriteS;
+ LANGWithFileS := LANGsvWithFileS;
+ LANGOvewriteSBytesS := LANGsvOvewriteSBytesS;
+ LANGTheFile := LANGsvTheFile;
+ LANGCopy := LANGsvCopy;
+ LANGMove := LANGsvMove;
+ LANGTheDirectory := LANGsvTheDirectory;
+ LANGTheSymbolicLink := LANGsvTheSymbolicLink;
+ LANGCannotMoveFile := LANGsvCannotMoveFile;
+ LANGCouldNotBeCreated := LANGsvCouldNotBeCreated;
+ LANGCouldNotBeCreatedS := LANGsvCouldNotBeCreatedS;
+ LANGFromS := LANGsvFromS;
+ LANGToS := LANGsvToS;
+ LANGCannotCopyFileToItself := LANGsvCannotCopyFileToItself;
+ LANGMemoryAllocationFailed := LANGsvMemoryAllocationFailed;
+ LANGCannotOpenSourceFile := LANGsvCannotOpenSourceFile;
+ LANGCannotOpenDestinationFile := LANGsvCannotOpenDestinationFile;
+ LANGCannotCloseDestinationFile := LANGsvCannotCloseDestinationFile;
+ LANGCannotCloseSourceFile := LANGsvCannotCloseSourceFile;
+ LANGCannotReadFromSourceFile := LANGsvCannotReadFromSourceFile;
+ LANGCannotWriteToDestinationFile := LANGsvCannotWriteToDestinationFile;
+
+ LANGUnknownException := LANGsvUnknownException;
+ LANGNoAccess := LANGsvNoAccess;
+ LANGUnknownError := LANGsvUnknownError;
+
+ LANGCreateANewDirectory := LANGsvCreateANewDirectory;
+ LANGEnterDirectoryName := LANGsvEnterDirectoryName;
+
+ LANGOverwriteQuestion := LANGsvOverwriteQuestion;
+ LANGOverwriteButton_Caption := LANGsvOverwriteButton_Caption;
+ LANGOverwriteAllButton_Caption := LANGsvOverwriteAllButton_Caption;
+ LANGSkipButton_Caption := LANGsvSkipButton_Caption;
+ LANGOverwriteAllOlderButton_Caption := LANGsvOverwriteAllOlderButton_Caption;
+ LANGSkipAllButton_Caption := LANGsvSkipAllButton_Caption;
+ LANGRenameButton_Caption := LANGsvRenameButton_Caption;
+ LANGAppendButton_Caption := LANGsvAppendButton_Caption;
+ LANGRename := LANGsvRename;
+ LANGRenameFile := LANGsvRenameFile;
+ LANGIgnoreButton_Caption := LANGsvIgnoreButton_Caption;
+
+ LANGProgress := LANGsvProgress;
+ LANGCancel := LANGsvCancel;
+ LANGDelete := LANGsvDelete;
+
+ LANGSpecifyFileType := LANGsvSpecifyFileType;
+
+ LANGRemoveDirectory := LANGsvRemoveDirectory;
+ LANGDoYouWantToDeleteItWithAllItsFilesAndSubdirectories := LANGsvDoYouWantToDeleteItWithAllItsFilesAndSubdirectories;
+ LANGRetry := LANGsvRetry;
+ LANGDeleteButton_Caption := LANGsvDeleteButton_Caption;
+ LANGAll := LANGsvAll;
+
+ LANGCopyFilesSC := LANGsvCopyFilesSC;
+ LANGAppendQuestion := LANGsvAppendQuestion;
+ LANGPreparingList := LANGsvPreparingList;
+
+ LANGYouMustSelectAValidFile := LANGsvYouMustSelectAValidFile;
+ LANGmiVerifyChecksums := LANGsvmiVerifyChecksums;
+ LANGVerifyChecksumsCaption := LANGsvVerifyChecksumsCaption;
+ LANGCheckButtonCaptionCheck := LANGsvCheckButtonCaptionCheck;
+ LANGCheckButtonCaptionStop := LANGsvCheckButtonCaptionStop;
+ LANGFileListTooltip := LANGsvFileListTooltip;
+ LANGFilenameColumnCaption := LANGsvFilenameColumnCaption;
+ LANGTheFileSYouAreTryingToOpenIsQuiteBig := LANGsvTheFileSYouAreTryingToOpenIsQuiteBig;
+ LANGAnErrorOccuredWhileInitializingMemoryBlock := LANGsvAnErrorOccuredWhileInitializingMemoryBlock;
+ LANGAnErrorOccuredWhileOpeningFileSS := LANGsvAnErrorOccuredWhileOpeningFileSS;
+ LANGAnErrorOccuredWhileReadingFileSS := LANGsvAnErrorOccuredWhileReadingFileSS;
+ LANGChecksumNotChecked := LANGsvChecksumNotChecked;
+ LANGChecksumChecking := LANGsvChecksumChecking;
+ LANGChecksumInterrupted := LANGsvChecksumInterrupted;
+ LANGChecksumDOK := LANGsvChecksumDOK;
+
+ LANGmiCreateChecksumsCaption := LANGsvmiCreateChecksumsCaption;
+ LANGYouMustSelectAtLeastOneFileToCalculateChecksum := LANGsvYouMustSelectAtLeastOneFileToCalculateChecksum;
+ LANGCreateChecksumsCaption := LANGsvCreateChecksumsCaption;
+ LANGCCHKSUMPage1Text := LANGsvCCHKSUMPage1Text;
+ LANGCCHKSUMPage4Text := LANGsvCCHKSUMPage4Text;
+ LANGCCHKSUMPage6Text := LANGsvCCHKSUMPage6Text;
+ LANGCCHKSUMPage7Text := LANGsvCCHKSUMPage7Text;
+ LANGCCHKSUMPage1Title := LANGsvCCHKSUMPage1Title;
+ LANGCCHKSUMPage2Title := LANGsvCCHKSUMPage2Title;
+ LANGCCHKSUMPage3Title := LANGsvCCHKSUMPage3Title;
+ LANGCCHKSUMPage4Title := LANGsvCCHKSUMPage4Title;
+ LANGCCHKSUMPage5Title := LANGsvCCHKSUMPage5Title;
+ LANGCCHKSUMPage6Title := LANGsvCCHKSUMPage6Title;
+ LANGCCHKSUMPage7Title := LANGsvCCHKSUMPage7Title;
+ LANGCCHKSUMSFVFile := LANGsvCCHKSUMSFVFile;
+ LANGCCHKSUMMD5sumFile := LANGsvCCHKSUMMD5sumFile;
+ LANGCCHKSUMFileName := LANGsvCCHKSUMFileName;
+ LANGCCHKSUMCreateSeparateChecksumFiles := LANGsvCCHKSUMCreateSeparateChecksumFiles;
+ LANGCCHKSUMNowProcessingFileS := LANGsvCCHKSUMNowProcessingFileS;
+ LANGCCHKSUMFinishCaption := LANGsvCCHKSUMFinishCaption;
+ LANGCCHKSUMAreYouSureYouWantToAbortTheProcessing := LANGsvCCHKSUMAreYouSureYouWantToAbortTheProcessing;
+ LANGCCHKSUMAnErrorOccuredWhileOpeningFileSS := LANGsvCCHKSUMAnErrorOccuredWhileOpeningFileSS;
+ LANGCCHKSUMAnErrorOccuredWhileReadingFileSS := LANGsvCCHKSUMAnErrorOccuredWhileReadingFileSS;
+ LANGCCHKSUMAnErrorOccuredWhileWritingFileSS := LANGsvCCHKSUMAnErrorOccuredWhileWritingFileSS;
+
+ LANGAnErrorOccuredWhileWritingFileSS := LANGsvAnErrorOccuredWhileWritingFileSS;
+ LANGTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt := LANGsvTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt;
+ LANGTheTargetFileSCannotBeRemovedS := LANGsvTheTargetFileSCannotBeRemovedS;
+ LANGMergeCaption := LANGsvMergeCaption;
+ LANGPleaseInsertNextDiskOrGiveDifferentLocation := LANGsvPleaseInsertNextDiskOrGiveDifferentLocation;
+ LANGMergeOfSSucceeded := LANGsvMergeOfSSucceeded;
+ LANGWarningCreatedFileFailsCRCCheck := LANGsvWarningCreatedFileFailsCRCCheck;
+ LANGMergeOfSSucceeded_NoCRCFileAvailable := LANGsvMergeOfSSucceeded_NoCRCFileAvailable;
+ LANGMergeSAndAllFilesWithAscendingNamesToTheFollowingDirectory := LANGsvMergeSAndAllFilesWithAscendingNamesToTheFollowingDirectory;
+ LANGMergeSC := LANGsvMergeSC;
+ LANGmiSplitFileCaption := LANGsvmiSplitFileCaption;
+ LANGmiMergeFilesCaption := LANGsvmiMergeFilesCaption;
+
+ LANGSplitTheFileSToDirectory := LANGsvSplitTheFileSToDirectory;
+ LANGSplitSC := LANGsvSplitSC;
+ LANGSplitFile := LANGsvSplitFile;
+ LANGBytesPerFile := LANGsvBytesPerFile;
+ LANGAutomatic := LANGsvAutomatic;
+ LANGDeleteFilesOnTargetDisk := LANGsvDeleteFilesOnTargetDisk;
+ LANGSplitCaption := LANGsvSplitCaption;
+ LANGCannotOpenFileS := LANGsvCannotOpenFileS;
+ LANGCannotSplitTheFileToMoreThan999Parts := LANGsvCannotSplitTheFileToMoreThan999Parts;
+ LANGThereAreSomeFilesInTheTargetDirectorySDoYouWantToDeleteThem := LANGsvThereAreSomeFilesInTheTargetDirectorySDoYouWantToDeleteThem;
+ LANGThereAreDFilesInTheTargetDirectoryDoYouWantToDeleteThem := LANGsvThereAreDFilesInTheTargetDirectoryDoYouWantToDeleteThem;
+ LANGAnErrorOccuredWhileOperationS := LANGsvAnErrorOccuredWhileOperationS;
+ LANGSplitOfSSucceeded := LANGsvSplitOfSSucceeded;
+ LANGSplitOfSFailed := LANGsvSplitOfSFailed;
+
+ LANGmnuShow_Caption := LANGsvmnuShow_Caption;
+ LANGmiShowDotFiles_Caption := LANGsvmiShowDotFiles_Caption;
+ LANGTheFileYouAreTryingToOpenIsQuiteBig := LANGsvTheFileYouAreTryingToOpenIsQuiteBig;
+ LANGCannotExecuteSPleaseCheckTheConfiguration := LANGsvCannotExecuteSPleaseCheckTheConfiguration;
+ LANGEdit := LANGsvEdit;
+ LANGEnterFilenameToEdit := LANGsvEnterFilenameToEdit;
+
+ LANGmnuSettings_Caption := LANGsvmnuSettings_Caption;
+ LANGmiFileTypes_Caption := LANGsvmiFileTypes_Caption;
+ LANGThereIsNoApplicationAssociatedWithS := LANGsvThereIsNoApplicationAssociatedWithS;
+ LANGErrorExecutingCommand := LANGsvErrorExecutingCommand;
+ LANGEditFileTypesCaption := LANGsvEditFileTypesCaption;
+ LANGTitleLabel_Caption := LANGsvTitleLabel_Caption;
+ LANGExtensionsColumn := LANGsvExtensionsColumn;
+ LANGDescriptionColumn := LANGsvDescriptionColumn;
+ LANGFileTypesList := LANGsvFileTypesList;
+ LANGActionName := LANGsvActionName;
+ LANGCommand := LANGsvCommand;
+ LANGSetDefaultActionButton_Caption := LANGsvSetDefaultActionButton_Caption;
+ LANGRunInTerminalCheckBox_Caption := LANGsvRunInTerminalCheckBox_Caption;
+ LANGAutodetectCheckBox_Caption := LANGsvAutodetectCheckBox_Caption;
+ LANGBrowseButton_Caption := LANGsvBrowseButton_Caption;
+ LANGCommandLabel_Caption := LANGsvCommandLabel_Caption;
+ LANGDescriptionLabel_Caption := LANGsvDescriptionLabel_Caption;
+ LANGFNameExtLabel_Caption := LANGsvFNameExtLabel_Caption;
+ LANGNotebookPageExtensions := LANGsvNotebookPageExtensions;
+ LANGNotebookPageActions := LANGsvNotebookPageActions;
+ LANGDefault := LANGsvDefault;
+ LANGCannotSaveFileTypeAssociationsBecauseOtherProcess := LANGsvCannotSaveFileTypeAssociationsBecauseOtherProcess;
+
+ LANGDefaultColor := LANGsvDefaultColor;
+ LANGIcon := LANGsvIcon;
+ LANGBrowseForIcon := LANGsvBrowseForIcon;
+ LANGSelectFileTypeColor := LANGsvSelectFileTypeColor;
+ LANGColor := LANGsvColor;
+
+ LANGmiChangePermissions_Caption := LANGsvmiChangePermissions_Caption;
+ LANGmiChangeOwner_Caption := LANGsvmiChangeOwner_Caption;
+ LANGmiCreateSymlink_Caption := LANGsvmiCreateSymlink_Caption;
+ LANGmiEditSymlink_Caption := LANGsvmiEditSymlink_Caption;
+ LANGChmodProgress := LANGsvChmodProgress;
+ LANGChownProgress := LANGsvChownProgress;
+ LANGYouMustSelectAValidSymbolicLink := LANGsvYouMustSelectAValidSymbolicLink;
+ LANGPopupRunS := LANGsvPopupRunS;
+ LANGPopupOpenS := LANGsvPopupOpenS;
+ LANGPopupGoUp := LANGsvPopupGoUp;
+ LANGPopupOpenWithS := LANGsvPopupOpenWithS;
+ LANGPopupDefault := LANGsvPopupDefault;
+ LANGPopupOpenWith := LANGsvPopupOpenWith;
+ LANGPopupViewFile := LANGsvPopupViewFile;
+ LANGPopupEditFile := LANGsvPopupEditFile;
+ LANGPopupMakeSymlink := LANGsvPopupMakeSymlink;
+ LANGPopupRename := LANGsvPopupRename;
+ LANGPopupDelete := LANGsvPopupDelete;
+ LANGDialogChangePermissions := LANGsvDialogChangePermissions;
+ LANGCouldNotBeChmoddedS := LANGsvCouldNotBeChmoddedS;
+ LANGDialogChangeOwner := LANGsvDialogChangeOwner;
+ LANGCouldNotBeChownedS := LANGsvCouldNotBeChownedS;
+ LANGDialogMakeSymlink := LANGsvDialogMakeSymlink;
+ LANGDialogEditSymlink := LANGsvDialogEditSymlink;
+ LANGFEditSymlink_Caption := LANGsvFEditSymlink_Caption;
+ LANGFEditSymlink_SymbolicLinkFilename := LANGsvFEditSymlink_SymbolicLinkFilename;
+ LANGFEditSymlink_SymbolicLinkPointsTo := LANGsvFEditSymlink_SymbolicLinkPointsTo;
+
+ LANGFChmod_Caption := LANGsvFChmod_Caption;
+ LANGFChmod_PermissionFrame := LANGsvFChmod_PermissionFrame;
+ LANGFChmod_FileFrame := LANGsvFChmod_FileFrame;
+ LANGFChmod_ApplyRecursivelyFor := LANGsvFChmod_ApplyRecursivelyFor;
+ LANGFChmod_miAllFiles := LANGsvFChmod_miAllFiles;
+ LANGFChmod_miDirectories := LANGsvFChmod_miDirectories;
+ LANGFChmod_OctalLabel := LANGsvFChmod_OctalLabel;
+ LANGFChmod_SUID := LANGsvFChmod_SUID;
+ LANGFChmod_SGID := LANGsvFChmod_SGID;
+ LANGFChmod_Sticky := LANGsvFChmod_Sticky;
+ LANGFChmod_RUSR := LANGsvFChmod_RUSR;
+ LANGFChmod_WUSR := LANGsvFChmod_WUSR;
+ LANGFChmod_XUSR := LANGsvFChmod_XUSR;
+ LANGFChmod_RGRP := LANGsvFChmod_RGRP;
+ LANGFChmod_WGRP := LANGsvFChmod_WGRP;
+ LANGFChmod_XGRP := LANGsvFChmod_XGRP;
+ LANGFChmod_ROTH := LANGsvFChmod_ROTH;
+ LANGFChmod_WOTH := LANGsvFChmod_WOTH;
+ LANGFChmod_XOTH := LANGsvFChmod_XOTH;
+ LANGFChmod_TextLabel := LANGsvFChmod_TextLabel;
+ LANGFChmod_FileLabel := LANGsvFChmod_FileLabel;
+ LANGFChown_Caption := LANGsvFChown_Caption;
+ LANGFChown_OwnerFrame := LANGsvFChown_OwnerFrame;
+ LANGFChown_GroupFrame := LANGsvFChown_GroupFrame;
+ LANGFChown_FileFrame := LANGsvFChown_FileFrame;
+ LANGFChown_ApplyRecursively := LANGsvFChown_ApplyRecursively;
+
+ LANGFSymlink_Caption := LANGsvFSymlink_Caption;
+ LANGFSymlink_ExistingFilename := LANGsvFSymlink_ExistingFilename;
+ LANGFSymlink_SymlinkFilename := LANGsvFSymlink_SymlinkFilename;
+
+ LANGmnuBookmarks_Caption := LANGsvmnuBookmarks_Caption;
+ LANGmiAddBookmark_Caption := LANGsvmiAddBookmark_Caption;
+ LANGmiEditBookmarks_Caption := LANGsvmiEditBookmarks_Caption;
+ LANGBookmarkPopupDelete_Caption := LANGsvBookmarkPopupDelete_Caption;
+ LANGmiPreferences_Caption := LANGsvmiPreferences_Caption;
+ LANGTheCurrentDirectoryAlreadyExistsInTheBookmarksList := LANGsvTheCurrentDirectoryAlreadyExistsInTheBookmarksList;
+ LANGSomeOtherInstanceChanged := LANGsvSomeOtherInstanceChanged;
+
+ LANGPreferences_Caption := LANGsvPreferences_Caption;
+ LANGPreferences_TitleLabel_Caption := LANGsvPreferences_TitleLabel_Caption;
+ LANGPreferences_GeneralPage := LANGsvPreferences_GeneralPage;
+ LANGPreferences_FontsPage := LANGsvPreferences_FontsPage;
+ LANGPreferences_ColorsPage := LANGsvPreferences_ColorsPage;
+ LANGPreferences_RowHeight := LANGsvPreferences_RowHeight;
+ LANGPreferences_NumHistoryItems := LANGsvPreferences_NumHistoryItems;
+ LANGPreferences_Default := LANGsvPreferences_Default;
+ LANGPreferences_ClearReadonlyAttribute := LANGsvPreferences_ClearReadonlyAttribute;
+ LANGPreferences_DisableMouseRenaming := LANGsvPreferences_DisableMouseRenaming;
+ LANGPreferences_ShowFiletypeIconsInList := LANGsvPreferences_ShowFiletypeIconsInList;
+ LANGPreferences_ExternalAppsLabel := LANGsvPreferences_ExternalAppsLabel;
+ LANGPreferences_Viewer := LANGsvPreferences_Viewer;
+ LANGPreferences_Editor := LANGsvPreferences_Editor;
+ LANGPreferences_Terminal := LANGsvPreferences_Terminal;
+ LANGPreferences_ListFont := LANGsvPreferences_ListFont;
+ LANGPreferences_Change := LANGsvPreferences_Change;
+ LANGPreferences_UseDefaultFont := LANGsvPreferences_UseDefaultFont;
+ LANGPreferences_Foreground := LANGsvPreferences_Foreground;
+ LANGPreferences_Background := LANGsvPreferences_Background;
+ LANGPreferences_NormalItem := LANGsvPreferences_NormalItem;
+ LANGPreferences_SetToDefaultToUseGTKThemeColors := LANGsvPreferences_SetToDefaultToUseGTKThemeColors;
+ LANGPreferences_Cursor := LANGsvPreferences_Cursor;
+ LANGPreferences_InactiveItem := LANGsvPreferences_InactiveItem;
+ LANGPreferences_SelectedItem := LANGsvPreferences_SelectedItem;
+ LANGPreferences_LinkItem := LANGsvPreferences_LinkItem;
+ LANGPreferences_LinkItemHint := LANGsvPreferences_LinkItemHint;
+ LANGPreferences_DotFileItem := LANGsvPreferences_DotFileItem;
+ LANGPreferences_DotFileItemHint := LANGsvPreferences_DotFileItemHint;
+ LANGPreferences_BrowseForApplication := LANGsvPreferences_BrowseForApplication;
+ LANGPreferences_DefaultS := LANGsvPreferences_DefaultS;
+ LANGPreferences_SelectFont := LANGsvPreferences_SelectFont;
+
+ LANGBookmarkButton_Tooltip := LANGsvBookmarkButton_Tooltip;
+ LANGUpButton_Tooltip := LANGsvUpButton_Tooltip;
+ LANGRootButton_Tooltip := LANGsvRootButton_Tooltip;
+ LANGHomeButton_Tooltip := LANGsvHomeButton_Tooltip;
+ LANGLeftEqualButton_Tooltip := LANGsvLeftEqualButton_Tooltip;
+ LANGRightEqualButton_Tooltip := LANGsvRightEqualButton_Tooltip;
+ LANGmiShowDirectorySizes_Caption := LANGsvmiShowDirectorySizes_Caption;
+ LANGmiTargetSource_Caption := LANGsvmiTargetSource_Caption;
+ LANGFileTypeDirectory := LANGsvFileTypeDirectory;
+ LANGFileTypeFile := LANGsvFileTypeFile;
+ LANGFileTypeMetafile := LANGsvFileTypeMetafile;
+ LANGPreferencesPanelsPage := LANGsvPreferencesPanelsPage;
+ LANGPreferencesApplicationsPage := LANGsvPreferencesApplicationsPage;
+ LANGPreferencesExperimentalPage := LANGsvPreferencesExperimentalPage;
+ LANGPreferencesSelectAllDirectoriesCheckBox_Caption := LANGsvPreferencesSelectAllDirectoriesCheckBox_Caption;
+ LANGPreferencesNewStyleAltOCheckBox_Caption := LANGsvPreferencesNewStyleAltOCheckBox_Caption;
+ LANGPreferencesNewStyleAltOCheckBox_Tooltip := LANGsvPreferencesNewStyleAltOCheckBox_Tooltip;
+ LANGPreferencesShowFuncButtonsCheckBox_Caption := LANGsvPreferencesShowFuncButtonsCheckBox_Caption;
+ LANGPreferencesSizeFormatLabel_Caption := LANGsvPreferencesSizeFormatLabel_Caption;
+ LANGPreferencesmiSizeFormat1 := LANGsvPreferencesmiSizeFormat1;
+ LANGPreferencesmiSizeFormat6 := LANGsvPreferencesmiSizeFormat6;
+ LANGPreferencesAutodetectXApp := LANGsvPreferencesAutodetectXApp;
+ LANGPreferencesAlwaysRunInTerminal := LANGsvPreferencesAlwaysRunInTerminal;
+ LANGPreferencesNeverRunInTerminal := LANGsvPreferencesNeverRunInTerminal;
+ LANGPreferencesCmdLineBehaviourLabel_Caption := LANGsvPreferencesCmdLineBehaviourLabel_Caption;
+ LANGPreferencesFeatures := LANGsvPreferencesFeatures;
+ LANGPreferencesDisableMouseRename_Tooltip := LANGsvPreferencesDisableMouseRename_Tooltip;
+ LANGPreferencesDisableFileTipsCheckBox_Caption := LANGsvPreferencesDisableFileTipsCheckBox_Caption;
+ LANGPreferencesDisableFileTipsCheckBox_Tooltip := LANGsvPreferencesDisableFileTipsCheckBox_Tooltip;
+ LANGPreferencesShow := LANGsvPreferencesShow;
+ LANGPreferencesDirsInBoldCheckBox_Caption := LANGsvPreferencesDirsInBoldCheckBox_Caption;
+ LANGPreferencesDisableDirectoryBracketsCheckBox_Caption := LANGsvPreferencesDisableDirectoryBracketsCheckBox_Caption;
+ LANGPreferencesOctalPermissionsCheckBox_Caption := LANGsvPreferencesOctalPermissionsCheckBox_Caption;
+ LANGPreferencesOctalPermissionsCheckBox_Tooltip := LANGsvPreferencesOctalPermissionsCheckBox_Tooltip;
+ LANGPreferencesMovement := LANGsvPreferencesMovement;
+ LANGPreferencesLynxLikeMotionCheckBox_Caption := LANGsvPreferencesLynxLikeMotionCheckBox_Caption;
+ LANGPreferencesInsertMovesDownCheckBox_Caption := LANGsvPreferencesInsertMovesDownCheckBox_Caption;
+ LANGPreferencesSpaceMovesDownCheckBox_Caption := LANGsvPreferencesSpaceMovesDownCheckBox_Caption;
+ LANGPreferencesViewer := LANGsvPreferencesViewer;
+ LANGPreferencesCommandSC := LANGsvPreferencesCommandSC;
+ LANGPreferencesUseInternalViewer := LANGsvPreferencesUseInternalViewer;
+ LANGPreferencesEditor := LANGsvPreferencesEditor;
+ LANGPreferencesTerminal := LANGsvPreferencesTerminal;
+ LANGPreferencesExperimentalFeatures := LANGsvPreferencesExperimentalFeatures;
+ LANGPreferencesExperimentalWarningLabel_Caption := LANGsvPreferencesExperimentalWarningLabel_Caption;
+ LANGPreferencesFocusRefreshCheckBox_Caption := LANGsvPreferencesFocusRefreshCheckBox_Caption;
+ LANGPreferencesFocusRefreshCheckBox_Tooltip := LANGsvPreferencesFocusRefreshCheckBox_Tooltip;
+ LANGPreferencesWMCompatModeCheckBox_Caption := LANGsvPreferencesWMCompatModeCheckBox_Caption;
+ LANGPreferencesWMCompatModeCheckBox_Tooltip := LANGsvPreferencesWMCompatModeCheckBox_Tooltip;
+ LANGPreferencesCompatUseLibcSystemCheckBox_Caption := LANGsvPreferencesCompatUseLibcSystemCheckBox_Caption;
+ LANGPreferencesCompatUseLibcSystemCheckBox_Tooltip := LANGsvPreferencesCompatUseLibcSystemCheckBox_Tooltip;
+
+ LANGmiSearchCaption2 := LANGsvmiSearchCaption2;
+ LANGmiNoMounterBarCaption := LANGsvmiNoMounterBarCaption;
+ LANGmiShowOneMounterBarCaption := LANGsvmiShowOneMounterBarCaption;
+ LANGmiShowTwoMounterBarCaption := LANGsvmiShowTwoMounterBarCaption;
+ LANGmnuNetworkCaption := LANGsvmnuNetworkCaption;
+ LANGmiConnectionsCaption := LANGsvmiConnectionsCaption;
+ LANGmiOpenConnectionCaption := LANGsvmiOpenConnectionCaption;
+ LANGmiQuickConnectCaption := LANGsvmiQuickConnectCaption;
+ LANGmnuPluginsCaption := LANGsvmnuPluginsCaption;
+ LANGmiTestPluginCaption := LANGsvmiTestPluginCaption;
+ LANGmiMounterSettingsCaption := LANGsvmiMounterSettingsCaption;
+ LANGmiColumnsCaption := LANGsvmiColumnsCaption;
+ LANGmiSavePositionCaption := LANGsvmiSavePositionCaption;
+ LANGmiMountCaption := LANGsvmiMountCaption;
+ LANGmiUmountCaption := LANGsvmiUmountCaption;
+ LANGmiEjectCaption := LANGsvmiEjectCaption;
+ LANGmiDuplicateTabCaption := LANGsvmiDuplicateTabCaption;
+ LANGmiCloseTabCaption := LANGsvmiCloseTabCaption;
+ LANGmiCloseAllTabsCaption := LANGsvmiCloseAllTabsCaption;
+ LANGCannotDetermineDestinationEngine := LANGsvCannotDetermineDestinationEngine;
+ LANGCannotLoadFile := LANGsvCannotLoadFile;
+ LANGMountPointDevice := LANGsvMountPointDevice;
+ LANGMountSC := LANGsvMountSC;
+ LANGNoPluginsFound := LANGsvNoPluginsFound;
+ LANGPluginAbout := LANGsvPluginAbout;
+ LANGCouldntOpenURI := LANGsvCouldntOpenURI;
+ LANGPluginAboutInside := LANGsvPluginAboutInside;
+ LANGAreYouSureCloseAllTabs := LANGsvAreYouSureCloseAllTabs;
+ LANGCouldntOpenURIArchive := LANGsvCouldntOpenURIArchive;
+ LANGThereIsNoModuleAvailable := LANGsvThereIsNoModuleAvailable;
+ LANGIgnoreError := LANGsvIgnoreError;
+ LANGErrorMount := LANGsvErrorMount;
+ LANGErrorUmount := LANGsvErrorUmount;
+ LANGErrorEject := LANGsvErrorEject;
+
+ LANGMounterPrefs_Caption := LANGsvMounterPrefs_Caption;
+ LANGMounterPrefs_TitleLabelCaption := LANGsvMounterPrefs_TitleLabelCaption;
+ LANGMounterPrefs_ListViewFrameCaption := LANGsvMounterPrefs_ListViewFrameCaption;
+ LANGMounterPrefs_MountName := LANGsvMounterPrefs_MountName;
+ LANGMounterPrefs_MountPoint := LANGsvMounterPrefs_MountPoint;
+ LANGMounterPrefs_Device := LANGsvMounterPrefs_Device;
+ LANGMounterPrefs_MoveUpButtonTooltip := LANGsvMounterPrefs_MoveUpButtonTooltip;
+ LANGMounterPrefs_MoveDownButtonTooltip := LANGsvMounterPrefs_MoveDownButtonTooltip;
+ LANGMounterPrefs_UseFSTabDefaultsCheckBox := LANGsvMounterPrefs_UseFSTabDefaultsCheckBox;
+ LANGMounterPrefs_UseFSTabDefaultsCheckBoxTooltip := LANGsvMounterPrefs_UseFSTabDefaultsCheckBoxTooltip;
+ LANGMounterPrefs_ToggleModeCheckBox := LANGsvMounterPrefs_ToggleModeCheckBox;
+ LANGMounterPrefs_ToggleModeCheckBoxTooltip := LANGsvMounterPrefs_ToggleModeCheckBoxTooltip;
+ LANGMounterPrefs_PropertiesFrameCaption := LANGsvMounterPrefs_PropertiesFrameCaption;
+ LANGMounterPrefs_DisplayTextLabelCaption := LANGsvMounterPrefs_DisplayTextLabelCaption;
+ LANGMounterPrefs_MountPointLabelCaption := LANGsvMounterPrefs_MountPointLabelCaption;
+ LANGMounterPrefs_MountDeviceLabelCaption := LANGsvMounterPrefs_MountDeviceLabelCaption;
+ LANGMounterPrefs_DeviceTypeLabelCaption := LANGsvMounterPrefs_DeviceTypeLabelCaption;
+ LANGMounterPrefs_miLocalDiskCaption := LANGsvMounterPrefs_miLocalDiskCaption;
+ LANGMounterPrefs_miRemovableCaption := LANGsvMounterPrefs_miRemovableCaption;
+ LANGMounterPrefs_miCDCaption := LANGsvMounterPrefs_miCDCaption;
+ LANGMounterPrefs_miFloppyCaption := LANGsvMounterPrefs_miFloppyCaption;
+ LANGMounterPrefs_miNetworkCaption := LANGsvMounterPrefs_miNetworkCaption;
+ LANGMounterPrefs_MountCommandLabelCaption := LANGsvMounterPrefs_MountCommandLabelCaption;
+ LANGMounterPrefs_UmountCommandLabelCaption := LANGsvMounterPrefs_UmountCommandLabelCaption;
+ LANGMounterPrefs_MountCommandEntryTooltip := LANGsvMounterPrefs_MountCommandEntryTooltip;
+ LANGMounterPrefs_UmountCommandEntryTooltip := LANGsvMounterPrefs_UmountCommandEntryTooltip;
+ LANGMounterPrefs_IconLabelCaption := LANGsvMounterPrefs_IconLabelCaption;
+
+ LANGConnMgr_Caption := LANGsvConnMgr_Caption;
+ LANGConnMgr_ConnectButton := LANGsvConnMgr_ConnectButton;
+ LANGConnMgr_OpenConnection := LANGsvConnMgr_OpenConnection;
+ LANGConnMgr_NameColumn := LANGsvConnMgr_NameColumn;
+ LANGConnMgr_URIColumn := LANGsvConnMgr_URIColumn;
+ LANGConnMgr_AddConnectionButtonCaption := LANGsvConnMgr_AddConnectionButtonCaption;
+ LANGConnMgr_AddConnectionButtonTooltip := LANGsvConnMgr_AddConnectionButtonTooltip;
+ LANGConnMgr_EditButtonCaption := LANGsvConnMgr_EditButtonCaption;
+ LANGConnMgr_EditButtonTooltip := LANGsvConnMgr_EditButtonTooltip;
+ LANGConnMgr_RemoveButtonCaption := LANGsvConnMgr_RemoveButtonCaption;
+ LANGConnMgr_RemoveButtonTooltip := LANGsvConnMgr_RemoveButtonTooltip;
+ LANGConnMgr_DoYouWantDelete := LANGsvConnMgr_DoYouWantDelete;
+
+ LANGConnProp_FTP := LANGsvConnProp_FTP;
+ LANGConnProp_SFTP := LANGsvConnProp_SFTP;
+ LANGConnProp_SMB := LANGsvConnProp_SMB;
+ LANGConnProp_HTTP := LANGsvConnProp_HTTP;
+ LANGConnProp_HTTPS := LANGsvConnProp_HTTPS;
+ LANGConnProp_Other := LANGsvConnProp_Other;
+ LANGConnProp_Caption := LANGsvConnProp_Caption;
+ LANGConnProp_VFSModule := LANGsvConnProp_VFSModule;
+ LANGConnProp_URI := LANGsvConnProp_URI;
+ LANGConnProp_URIEntryTooltip := LANGsvConnProp_URIEntryTooltip;
+ LANGConnProp_DetailedInformations := LANGsvConnProp_DetailedInformations;
+ LANGConnProp_Name := LANGsvConnProp_Name;
+ LANGConnProp_Server := LANGsvConnProp_Server;
+ LANGConnProp_Username := LANGsvConnProp_Username;
+ LANGConnProp_UserNameEntryTooltip := LANGsvConnProp_UserNameEntryTooltip;
+ LANGConnProp_Password := LANGsvConnProp_Password;
+ LANGConnProp_TargetDirectory := LANGsvConnProp_TargetDirectory;
+ LANGConnProp_ServiceType := LANGsvConnProp_ServiceType;
+ LANGConnProp_MaskPassword := LANGsvConnProp_MaskPassword;
+ LANGConnProp_MenuItemCaption := LANGsvConnProp_MenuItemCaption;
+
+ LANGConnLogin_Caption := LANGsvConnLogin_Caption;
+ LANGConnLogin_Login := LANGsvConnLogin_Login;
+ LANGConnLogin_ExperimentalWarningLabelCaption := LANGsvConnLogin_ExperimentalWarningLabelCaption;
+ LANGConnLogin_Username := LANGsvConnLogin_Username;
+ LANGConnLogin_Password := LANGsvConnLogin_Password;
+ LANGConnLogin_AnonymousCheckButton := LANGsvConnLogin_AnonymousCheckButton;
+
+ LANGColumns_Caption := LANGsvColumns_Caption;
+ LANGColumns_Title := LANGsvColumns_Title;
+ LANGColumns_MoveUpButtonTooltip := LANGsvColumns_MoveUpButtonTooltip;
+ LANGColumns_MoveDownButtonTooltip := LANGsvColumns_MoveDownButtonTooltip;
+ LANGColumns_TitlesLongName := LANGsvColumns_TitlesLongName;
+ LANGColumns_TitlesLongNameExt := LANGsvColumns_TitlesLongNameExt;
+ LANGColumns_TitlesLongExt := LANGsvColumns_TitlesLongExt;
+ LANGColumns_TitlesLongSize := LANGsvColumns_TitlesLongSize;
+ LANGColumns_TitlesLongDateTime := LANGsvColumns_TitlesLongDateTime;
+ LANGColumns_TitlesLongDate := LANGsvColumns_TitlesLongDate;
+ LANGColumns_TitlesLongTime := LANGsvColumns_TitlesLongTime;
+ LANGColumns_TitlesLongUser := LANGsvColumns_TitlesLongUser;
+ LANGColumns_TitlesLongGroup := LANGsvColumns_TitlesLongGroup;
+ LANGColumns_TitlesLongAttr := LANGsvColumns_TitlesLongAttr;
+ LANGColumns_TitlesShortName := LANGsvColumns_TitlesShortName;
+ LANGColumns_TitlesShortNameExt := LANGsvColumns_TitlesShortNameExt;
+ LANGColumns_TitlesShortExt := LANGsvColumns_TitlesShortExt;
+ LANGColumns_TitlesShortSize := LANGsvColumns_TitlesShortSize;
+ LANGColumns_TitlesShortDateTime := LANGsvColumns_TitlesShortDateTime;
+ LANGColumns_TitlesShortDate := LANGsvColumns_TitlesShortDate;
+ LANGColumns_TitlesShortTime := LANGsvColumns_TitlesShortTime;
+ LANGColumns_TitlesShortUser := LANGsvColumns_TitlesShortUser;
+ LANGColumns_TitlesShortGroup := LANGsvColumns_TitlesShortGroup;
+ LANGColumns_TitlesShortAttr := LANGsvColumns_TitlesShortAttr;
+
+ LANGTestPlugin_Caption := LANGsvTestPlugin_Caption;
+ LANGTestPlugin_Title := LANGsvTestPlugin_Title;
+ LANGTestPlugin_ExperimentalWarningLabelCaption := LANGsvTestPlugin_ExperimentalWarningLabelCaption;
+ LANGTestPlugin_Plugin := LANGsvTestPlugin_Plugin;
+ LANGTestPlugin_Command := LANGsvTestPlugin_Command;
+ LANGTestPlugin_Username := LANGsvTestPlugin_Username;
+ LANGTestPlugin_Password := LANGsvTestPlugin_Password;
+ LANGTestPlugin_AnonymousCheckButton := LANGsvTestPlugin_AnonymousCheckButton;
+ LANGTestPlugin_NoPluginsFound := LANGsvTestPlugin_NoPluginsFound;
+
+ LANGRemoteWait_Caption := LANGsvRemoteWait_Caption;
+ LANGRemoteWait_OperationInProgress := LANGsvRemoteWait_OperationInProgress;
+ LANGRemoteWait_ItemsFound := LANGsvRemoteWait_ItemsFound;
+
+ LANGSearch_Bytes := LANGsvSearch_Bytes;
+ LANGSearch_kB := LANGsvSearch_kB;
+ LANGSearch_MB := LANGsvSearch_MB;
+ LANGSearch_days := LANGsvSearch_days;
+ LANGSearch_weeks := LANGsvSearch_weeks;
+ LANGSearch_months := LANGsvSearch_months;
+ LANGSearch_years := LANGsvSearch_years;
+ LANGSearch_Caption := LANGsvSearch_Caption;
+ LANGSearch_General := LANGsvSearch_General;
+ LANGSearch_Advanced := LANGsvSearch_Advanced;
+ LANGSearch_SearchResults := LANGsvSearch_SearchResults;
+ LANGSearch_SearchFor := LANGsvSearch_SearchFor;
+ LANGSearch_FileMaskEntryTooltip := LANGsvSearch_FileMaskEntryTooltip;
+ LANGSearch_SearchIn := LANGsvSearch_SearchIn;
+ LANGSearch_SearchArchivesCheckButton := LANGsvSearch_SearchArchivesCheckButton;
+ LANGSearch_FindText := LANGsvSearch_FindText;
+ LANGSearch_FindTextEntryTooltip := LANGsvSearch_FindTextEntryTooltip;
+ LANGSearch_CaseSensitiveCheckButton := LANGsvSearch_CaseSensitiveCheckButton;
+ LANGSearch_StayCurrentFSCheckButton := LANGsvSearch_StayCurrentFSCheckButton;
+ LANGSearch_CaseSensitiveMatchCheckButton := LANGsvSearch_CaseSensitiveMatchCheckButton;
+ LANGSearch_Size := LANGsvSearch_Size;
+ LANGSearch_Date := LANGsvSearch_Date;
+ LANGSearch_BiggerThan := LANGsvSearch_BiggerThan;
+ LANGSearch_SmallerThan := LANGsvSearch_SmallerThan;
+ LANGSearch_ModifiedBetweenRadioButton := LANGsvSearch_ModifiedBetweenRadioButton;
+ LANGSearch_NotModifiedAfterRadioButton := LANGsvSearch_NotModifiedAfterRadioButton;
+ LANGSearch_ModifiedLastRadioButton := LANGsvSearch_ModifiedLastRadioButton;
+ LANGSearch_ModifiedNotLastRadionButton := LANGsvSearch_ModifiedNotLastRadionButton;
+ LANGSearch_ModifiedBetweenEntry1 := LANGsvSearch_ModifiedBetweenEntry1;
+ LANGSearch_ViewButtonCaption := LANGsvSearch_ViewButtonCaption;
+ LANGSearch_NewSearchButtonCaption := LANGsvSearch_NewSearchButtonCaption;
+ LANGSearch_GoToFileButtonCaption := LANGsvSearch_GoToFileButtonCaption;
+ LANGSearch_FeedToListboxButtonCaption := LANGsvSearch_FeedToListboxButtonCaption;
+ LANGSearch_StatusSC := LANGsvSearch_StatusSC;
+ LANGSearch_Ready := LANGsvSearch_Ready;
+ LANGSearch_PreparingToSearch := LANGsvSearch_PreparingToSearch;
+ LANGSearch_SearchInProgress := LANGsvSearch_SearchInProgress;
+ LANGSearch_UserCancelled := LANGsvSearch_UserCancelled;
+ LANGSearch_SearchFinished := LANGsvSearch_SearchFinished;
+ LANGSearch_FilesFound := LANGsvSearch_FilesFound;
+ LANGSearch_And := LANGsvSearch_And;
+
+ LANGCloseOpenConnection := LANGsvCloseOpenConnection;
+ LANGDuplicateTabWarning := LANGsvDuplicateTabWarning;
+ LANGDontShowAgain := LANGsvDontShowAgain;
+ LANGSwitchOtherPanelWarning := LANGsvSwitchOtherPanelWarning;
+ LANGOpenConnectionsWarning := LANGsvOpenConnectionsWarning;
+ LANGmiDisconnect_Caption := LANGsvmiDisconnect_Caption;
+ LANGDisconnectButton_Tooltip := LANGsvDisconnectButton_Tooltip;
+ LANGLeaveArchiveButton_Tooltip := LANGsvLeaveArchiveButton_Tooltip;
+ LANGOpenTerminalButton_Tooltip := LANGsvOpenTerminalButton_Tooltip;
+ LANGOpenTerminalButton_Caption := LANGsvOpenTerminalButton_Caption;
+ LANGShowTextUIDsCheckBox_Caption := LANGsvShowTextUIDsCheckBox_Caption;
+ LANGShowTextUIDsCheckBox_Tooltip := LANGsvShowTextUIDsCheckBox_Tooltip;
+
+ LANGmiNewTab_Caption := LANGsvmiNewTab_Caption;
+ LANGFilePopupMenu_Properties := LANGsvFilePopupMenu_Properties;
+ LANGCommandEntry_Tooltip := LANGsvCommandEntry_Tooltip;
+ LANGmiFiles_Caption := LANGsvmiFiles_Caption;
+
+ LANGPasswordButton_Tooltip := LANGsvPasswordButton_Tooltip;
+ LANGHandleRunFromArchive_Bytes := LANGsvHandleRunFromArchive_Bytes;
+ LANGHandleRunFromArchive_FileTypeDesc_Unknown := LANGsvHandleRunFromArchive_FileTypeDesc_Unknown;
+ LANGHandleRunFromArchive_NotAssociated := LANGsvHandleRunFromArchive_NotAssociated;
+ LANGHandleRunFromArchive_SelfExecutable := LANGsvHandleRunFromArchive_SelfExecutable;
+ LANGHandleRunFromArchive_CouldntCreateTemporaryDirectory := LANGsvHandleRunFromArchive_CouldntCreateTemporaryDirectory;
+ LANGFRunFromVFS_Caption := LANGsvFRunFromVFS_Caption;
+ LANGFRunFromVFS_TitleLabel := LANGsvFRunFromVFS_TitleLabel;
+ LANGFRunFromVFS_FileNameLabel := LANGsvFRunFromVFS_FileNameLabel;
+ LANGFRunFromVFS_FileTypeLabel := LANGsvFRunFromVFS_FileTypeLabel;
+ LANGFRunFromVFS_SizeLabel := LANGsvFRunFromVFS_SizeLabel;
+ LANGFRunFromVFS_PackedSizeLabel := LANGsvFRunFromVFS_PackedSizeLabel;
+ LANGFRunFromVFS_DateLabel := LANGsvFRunFromVFS_DateLabel;
+ LANGFRunFromVFS_InfoLabel := LANGsvFRunFromVFS_InfoLabel;
+ LANGFRunFromVFS_OpensWithLabel := LANGsvFRunFromVFS_OpensWithLabel;
+ LANGFRunFromVFS_ExecuteButton := LANGsvFRunFromVFS_ExecuteButton;
+ LANGFRunFromVFS_ExecuteAllButton := LANGsvFRunFromVFS_ExecuteAllButton;
+ LANGFSetPassword_Caption := LANGsvFSetPassword_Caption;
+ LANGFSetPassword_Label1_Caption := LANGsvFSetPassword_Label1_Caption;
+ LANGFSetPassword_Label2_Caption := LANGsvFSetPassword_Label2_Caption;
+ LANGFSetPassword_ShowPasswordCheckButton := LANGsvFSetPassword_ShowPasswordCheckButton;
+end;
+
+initialization
+ AddTranslation('sv_SE', @SetTranslation);
+ AddTranslation('SV', @SetTranslation);
+end.
diff --git a/translations/UTranslation_UA.pas b/translations/UTranslation_UA.pas
new file mode 100644
index 0000000..bbd2ad7
--- /dev/null
+++ b/translations/UTranslation_UA.pas
@@ -0,0 +1,1265 @@
+(*
+ Tux Commander - UTranslation_UA - Ukrainian Localization constants
+ Copyright (C) 2007 Serhij Dubyk <dubyk@ukr.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit UTranslation_UA;
+
+interface
+
+implementation
+
+uses ULocale;
+
+const LANGuaF2Button_Caption = 'F2 - Перейменувати';
+ LANGuaF3Button_Caption = 'F3 - Перегляд';
+ LANGuaF4Button_Caption = 'F4 - Редагувати';
+ LANGuaF5Button_Caption = 'F5 - Копіювати';
+ LANGuaF6Button_Caption = 'F6 - Перемістити';
+ LANGuaF7Button_Caption = 'F7 - Тека';
+ LANGuaF8Button_Caption = 'F8 - Вилучити';
+
+ LANGuamnuFile_Caption = '_Файл';
+ LANGuamnuMark_Caption = '_Виділення';
+ LANGuamnuCommands_Caption = 'Коман_ди';
+ LANGuamnuHelp_Caption = '_Допомога';
+ LANGuamiExit_Caption = 'В_ихід';
+ LANGuamiSelectGroup_Caption = 'Виділити _групу...';
+ LANGuamiUnselectGroup_Caption = '_Зняти виділення...';
+ LANGuamiSelectAll_Caption = 'Ви_ділити усе';
+ LANGuamiUnselectAll_Caption = 'Зн_яти усе виділення';
+ LANGuamiInvertSelection_Caption = '_Інвертувати виділення';
+ LANGuamiRefresh_Caption = 'О_новити вікно';
+ LANGuamiAbout_Caption = '_Про програму...';
+
+ LANGuaColumn1_Caption = 'І''мя';
+ LANGuaColumn2_Caption = 'Тип';
+ LANGuaColumn3_Caption = 'Розмір';
+ LANGuaColumn4_Caption = 'Дата';
+ LANGuaColumn5_Caption = 'Атрибути';
+
+ LANGuaExpandSelection = 'Розширити виділення';
+ LANGuaShrinkSelection = 'Зменшити виділення';
+ LANGuaNoMatchesFound = 'Такі файли не знайдені.';
+ LANGuaNoFilesSelected = 'Немає вибраних файлів.';
+ LANGuaSelectedFilesDirectories = '%d файли(ів)/тек(и)';
+ LANGuaDirectoryS = 'тека %s';
+ LANGuaFileS = 'файл %s';
+ LANGuaDoYouReallyWantToDeleteTheS = 'Дійсно видалити %s ?';
+ LANGuaDoYouReallyWantToDeleteTheSS = 'Дійсно видалити %s ?'#10'%s';
+ LANGuaCopyFiles = 'Копіювати файли';
+ LANGuaMoveRenameFiles = 'Перейменувати/Перемістити файли';
+ LANGuaCopyDFileDirectoriesTo = 'Копіювати %d файли(ів)/тек(и) в';
+ LANGuaMoveRenameDFileDirectoriesTo = 'Перейменувати/Перемістити %d файли(ів)/тек(и) у';
+ LANGuaCopySC = 'Копіювати:';
+ LANGuaMoveRenameSC = 'Перейменувати/Перемістити:';
+
+ LANGuaQuickFind = ' Пошук:';
+
+ LANGuaAboutString = 'Tux Commander'#10'Версія %s'#10'Дата збірки: %s'#10#10'Авторське право (c) 2008 Tomáš Bžatek'#10'електронна пошта: tbzatek@users.sourceforge.net'#10'Сайт: http://tuxcmd.sourceforge.net/';
+ LANGuaAboutStringGnome = 'версія %s'#10'Дата збірки: %s'#10'Сайт: http://tuxcmd.sourceforge.net/';
+ LANGuaDiskStatFmt = '%s зі %s вільно';
+ LANGuaDiskStatVolNameFmt = '[%s] %s зі %s кБ вільно';
+ LANGuaStatusLineFmt = 'вибрано: %s зі %s , файлів: %d зі %d';
+ LANGuaPanelStrings : array[boolean] of string = ('правої', 'лівої');
+
+ LANGuaDIR = '<DIR>';
+ LANGuaErrorGettingListingForSPanel = 'Неможливо отримати список для %s панелі:'#10' %s'#10#10'Шлях = ''%s''';
+ LANGuaErrorGettingListingForSPanelNoPath = 'Неможливо отримати список для %s панелі:'#10' %s';
+ LANGuaErrorCreatingNewDirectorySInSPanel = 'Помилка створення нової теки ''%s'' у %s панелі:'#10' %s';
+ LANGuaErrorCreatingNewDirectorySInSPanelNoPath = 'Помилка створення нової теки у %s панелі:'#10' %s';
+ LANGuaTheFileDirectory = 'Файл/Тека';
+ LANGuaCouldNotBeDeleted = 'не може бути вилучено';
+ LANGuaCouldNotBeDeletedS = 'не може бути вилучено: %s';
+ LANGuaUserCancelled = 'Перервано користувачем';
+ LANGuaTheDirectorySIsNotEmpty = 'Тека %s містить файли і/чи підтеки.';
+ LANGuaCannotCopyFile = 'Не можу скопіювати файл';
+ LANGuaCopyError = 'Помилка копіювання файлів';
+ LANGuaMoveError = 'Помилка переміщення файлів';
+ LANGuaOverwriteS = 'Замінити: %s';
+ LANGuaWithFileS = 'Файлом: %s';
+ LANGuaOvewriteSBytesS = '%s байт, %s';
+ LANGuaTheFile = 'Файл';
+ LANGuaCopy = 'Копіювати';
+ LANGuaMove = 'Перемістити';
+ LANGuaTheDirectory = 'Тека';
+ LANGuaTheSymbolicLink = 'Символьне посилання';
+ LANGuaCannotMoveFile = 'Не можу перемістити файл';
+ LANGuaCouldNotBeCreated = 'не може бути створений';
+ LANGuaCouldNotBeCreatedS = 'не може бути створений: %s';
+ LANGuaFromS = 'Зі: %s';
+ LANGuaToS = 'У: %s';
+ LANGuaCannotCopyFileToItself = 'Не можна скопіювати файл сам в себе';
+ LANGuaMemoryAllocationFailed = 'Не вистачає пам''яті:';
+ LANGuaCannotOpenSourceFile = 'Неможливо відкрити джерельний файл';
+ LANGuaCannotOpenDestinationFile = 'Неможливо створити файл-призначення';
+ LANGuaCannotCloseDestinationFile = 'Неможливо закрити файл-призначення';
+ LANGuaCannotCloseSourceFile = 'Неможливо закрити джерельний файл';
+ LANGuaCannotReadFromSourceFile = 'Помилка читання джерельного файла';
+ LANGuaCannotWriteToDestinationFile = 'Помилка запису до файлу-призначення';
+
+ LANGuaUnknownException = 'Невідомий збій';
+ LANGuaNoAccess = 'Немає доступу';
+ LANGuaUnknownError = 'Невідома помилка';
+
+ LANGuaCreateANewDirectory = 'Створити нову теку';
+ LANGuaEnterDirectoryName = 'Вкажіть ім''я _теки:';
+
+ LANGuaOverwriteQuestion = 'Підтвердження заміни';
+ LANGuaOverwriteButton_Caption = '_Замінити';
+ LANGuaOverwriteAllButton_Caption = 'Замінити _усе';
+ LANGuaSkipButton_Caption = '_Пропустити';
+ LANGuaOverwriteAllOlderButton_Caption = 'Замінити більш _старі';
+ LANGuaSkipAllButton_Caption = 'Пропустити ус_е';
+ LANGuaRenameButton_Caption = 'Пере_йменувати';
+ LANGuaAppendButton_Caption = '_Дописати';
+ LANGuaRename = 'Перейменувати';
+ LANGuaRenameFile = 'Перейменувати файл ''%s'' в';
+ LANGuaIgnoreButton_Caption = '_Ігнорувати';
+
+ LANGuaProgress = 'Прогрес';
+ LANGuaCancel = '_Відміна';
+ LANGuaDelete = 'Вилучити:';
+
+ LANGuaSpecifyFileType = '_Тип файлу:';
+
+ LANGuaRemoveDirectory = 'Вилучити теку';
+ LANGuaDoYouWantToDeleteItWithAllItsFilesAndSubdirectories = 'Чи дійсно хочете вилучити його повністю, зі всіма файлами та підтеками?';
+ LANGuaRetry = '_Повторити';
+ LANGuaDeleteButton_Caption = '_Вилучити';
+ LANGuaAll = '_Усе';
+
+ LANGuaCopyFilesSC = 'Копіювати файли:';
+ LANGuaAppendQuestion = 'Чи дійсно хочете додати файл ''%s'' до ''%s''?';
+ LANGuaPreparingList = 'Підготовка списку...';
+
+ LANGuaYouMustSelectAValidFile = 'вибраний невірний файл!';
+ LANGuamiVerifyChecksums = 'Перев_ірити контрольну суму';
+ LANGuaVerifyChecksumsCaption = 'Перевірка контрольної суми';
+ LANGuaCheckButtonCaptionCheck = '_Перевірка';
+ LANGuaCheckButtonCaptionStop = '_Зупинити';
+ LANGuaFileListTooltip = '[?] - Не перевірено'#10'[OK] - Контрольну суму перевірено'#10'[BAD] - Погана контрольна сума'#10'[N/A] - Файл не доступний';
+ LANGuaFilenameColumnCaption = 'Ім''я файла';
+ LANGuaTheFileSYouAreTryingToOpenIsQuiteBig = 'Файл ''%s'' занадто великий. Ймовірно, він не містить контрольної суми.'#10#10'Тим не менше продовжити?';
+ LANGuaAnErrorOccuredWhileInitializingMemoryBlock = 'Помилка ініціалізації блоку пам''яті. Закрийте декілька програм та спробуйте ще раз.';
+ LANGuaAnErrorOccuredWhileOpeningFileSS = 'Помилка відкриття файла ''%s'':'#10' %s';
+ LANGuaAnErrorOccuredWhileReadingFileSS = 'Помилка читання файла ''%s'':'#10' %s';
+ LANGuaChecksumNotChecked = '<span weight="bold">Статус:</span> не перевірено';
+ LANGuaChecksumChecking = '<span weight="bold">Статус:</span> перевіряю...';
+ LANGuaChecksumInterrupted = '<span weight="bold">Статус:</span> перевірку перервано';
+ LANGuaChecksumDOK = '<span weight="bold">Статус:</span> %d%% гаразд';
+
+ LANGuamiCreateChecksumsCaption = '_Створити контрольні суми...';
+ LANGuaYouMustSelectAtLeastOneFileToCalculateChecksum = 'Потрібно вибрати хоча б один файл для створення контрольної суми!';
+ LANGuaCreateChecksumsCaption = 'Створення контрольних сум';
+ LANGuaCCHKSUMPage1Text = 'Якщо Ви не вибрали'#10'усі необхідні Вам файли, закрийте це вікно та'#10'виберіть решту файлів.';
+ LANGuaCCHKSUMPage4Text = 'Друїд готовий до створення контрольних сум'#10'для вибраних файлів. Це може зайняти декілька хвилин.'#10'Натисніть "Вперед" для продовження.';
+ LANGuaCCHKSUMPage6Text = 'Помилка створення контрольної суми:';
+ LANGuaCCHKSUMPage7Text = 'Створення контрольних сум завершено.'#10#10'Натисніть "Завершити" для виходу.';
+ LANGuaCCHKSUMPage1Title = '<span size="xx-large" weight="ultrabold">Підготовка до створення контрольної суми</span>';
+ LANGuaCCHKSUMPage2Title = '<span size="xx-large" weight="ultrabold">Виберіть тип контрольної суми</span>';
+ LANGuaCCHKSUMPage3Title = '<span size="xx-large" weight="ultrabold">Виберіть ім''я файлу</span>';
+ LANGuaCCHKSUMPage4Title = '<span size="xx-large" weight="ultrabold">Готовий до створення контрольних сум</span>';
+ LANGuaCCHKSUMPage5Title = '<span size="xx-large" weight="ultrabold">В процесі...</span>';
+ LANGuaCCHKSUMPage6Title = '<span size="xx-large" weight="ultrabold">Помилка!</span>';
+ LANGuaCCHKSUMPage7Title = '<span size="xx-large" weight="ultrabold">Готово</span>';
+ LANGuaCCHKSUMSFVFile = 'Файл SFV';
+ LANGuaCCHKSUMMD5sumFile = 'Файл MD5';
+ LANGuaCCHKSUMFileName = '_Ім''я файлу:';
+ LANGuaCCHKSUMCreateSeparateChecksumFiles = 'Створити _окремі файли контрольних сум';
+ LANGuaCCHKSUMNowProcessingFileS = 'У процесі створення файлу: %s';
+ LANGuaCCHKSUMFinishCaption = '_Завершити';
+ LANGuaCCHKSUMAreYouSureYouWantToAbortTheProcessing = 'Хочете перервати поточний процес?';
+ LANGuaCCHKSUMAnErrorOccuredWhileOpeningFileSS = 'Помилка відкриття файлу ''%s'': %s'#10;
+ LANGuaCCHKSUMAnErrorOccuredWhileReadingFileSS = 'Помилка читання файлу ''%s'': %s'#10;
+ LANGuaCCHKSUMAnErrorOccuredWhileWritingFileSS = 'Помилка запису в файл ''%s'': %s'#10;
+
+ LANGuaAnErrorOccuredWhileWritingFileSS = 'Помилка запису в файл ''%s'':'#10' %s';
+ LANGuaTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt = 'Файл ''%s'' вже існує. Чи хочете його замінити?';
+ LANGuaTheTargetFileSCannotBeRemovedS = 'Неможливо вилучити файл ''%s'' : %s';
+ LANGuaMergeCaption = 'Об''єднати';
+ LANGuaPleaseInsertNextDiskOrGiveDifferentLocation = 'Будь-ласка, вставте наступний диск, чи вкажіть іншу теку: ';
+ LANGuaMergeOfSSucceeded = 'Об''єднання файла ''%s'' відбулося вдало (контрольну суму(CRC) перевірено).';
+ LANGuaWarningCreatedFileFailsCRCCheck = 'Увага: створений файл має невірну контрольну суму!';
+ LANGuaMergeOfSSucceeded_NoCRCFileAvailable = 'Об''єднання ''%s'' відбулося вдало (без перевірки контрольної суми).';
+ LANGuaMergeSAndAllFilesWithAscendingNamesToTheFollowingDirectory = 'Об''єднати усі файли, що починаються з ''%s'' до теки:';
+ LANGuaMergeSC = 'Об''єднання:';
+ LANGuamiSplitFileCaption = '_Розділити файл...';
+ LANGuamiMergeFilesCaption = '_Об''єднати файли...';
+
+ LANGuaSplitTheFileSToDirectory = '_Розбити файл ''%s'' до теки:';
+ LANGuaSplitSC = 'Розбити:';
+ LANGuaSplitFile = 'Розбити файл';
+ LANGuaBytesPerFile = 'Розбити _на частини розміром:';
+ LANGuaAutomatic = 'Автоматично';
+ LANGuaDeleteFilesOnTargetDisk = '_Вилучіть усі файли на приймальнику (лише для змінних дисків)';
+ LANGuaSplitCaption = 'Розбити';
+ LANGuaCannotOpenFileS = 'Неможливо відкрити файл ''%s''';
+ LANGuaCannotSplitTheFileToMoreThan999Parts = 'Неможливо розбити файл на більш ніж 999 частин!';
+ LANGuaThereAreSomeFilesInTheTargetDirectorySDoYouWantToDeleteThem = 'Тека-приймальник %s містить файли '#10' Чи дійсно хочете вилучити його вміст?';
+ LANGuaThereAreDFilesInTheTargetDirectoryDoYouWantToDeleteThem = 'Тека-приймальник містить %d файлів. Чи дійсно хочете вилучити його вміст?';
+ LANGuaAnErrorOccuredWhileOperationS = 'Помилка під час виконання: %s';
+ LANGuaSplitOfSSucceeded = 'Розбиття файла ''%s'' відбулося вдало.';
+ LANGuaSplitOfSFailed = 'Неможливо розбити файл: %s';
+
+ LANGuamnuShow_Caption = 'В_игляд';
+ LANGuamiShowDotFiles_Caption = 'Показати _приховані файли';
+ LANGuaTheFileYouAreTryingToOpenIsQuiteBig = 'Файл, що відкриваєте, занадто великий. Програма, що завантажує цей файл, може викликати сповільнення системи.'#10'Чи дійсно хочете продовжувати';
+ LANGuaCannotExecuteSPleaseCheckTheConfiguration = 'Неможливо виконати ''%s''. Перевірте конфігурацію чи зробіть асоціацію типів файлів спочатку.';
+ LANGuaEdit = 'Правка';
+ LANGuaEnterFilenameToEdit = '_Введіть ім''я файла для редагування:';
+
+ LANGuamnuSettings_Caption = '_Налаштування';
+ LANGuamiFileTypes_Caption = '_Типи файлів...';
+ LANGuaThereIsNoApplicationAssociatedWithS = 'Немає програм, асоційованих з файлом "%s".'#10#10'Чи хочете зробити асоціацію зараз?';
+ LANGuaErrorExecutingCommand = 'Помилка виконання команди!';
+ LANGuaEditFileTypesCaption = 'Типи файлів';
+ LANGuaTitleLabel_Caption = '<span size="x-large" weight="ultrabold">Конфігурація типів файлів</span>';
+ LANGuaExtensionsColumn = 'Типи';
+ LANGuaDescriptionColumn = 'Опис';
+ LANGuaFileTypesList = 'Список типів файлів';
+ LANGuaActionName = 'Ім''я дії';
+ LANGuaCommand = 'Команда';
+ LANGuaSetDefaultActionButton_Caption = '_Використовувати за умовчанням';
+ LANGuaRunInTerminalCheckBox_Caption = 'Запустити у _терміналі';
+ LANGuaAutodetectCheckBox_Caption = 'Авто-визначення _графічних програм';
+ LANGuaBrowseButton_Caption = '_Пошук...';
+ LANGuaCommandLabel_Caption = 'Ко_манда:';
+ LANGuaDescriptionLabel_Caption = '_Опис:';
+ LANGuaFNameExtLabel_Caption = '_Додати тип:';
+ LANGuaNotebookPageExtensions = 'Тип файлу';
+ LANGuaNotebookPageActions = 'Дії';
+ LANGuaDefault = ' (за умовчанням)';
+ LANGuaCannotSaveFileTypeAssociationsBecauseOtherProcess = 'Неможливо зберегти конфігурацію типів файлів: інший процес оновив її на диску.';
+
+ LANGuaDefaultColor = 'Колір по _умовчанню';
+ LANGuaIcon = '_Іконка:';
+ LANGuaBrowseForIcon = 'Виберіть іконку';
+ LANGuaSelectFileTypeColor = 'Виберіть колір';
+ LANGuaColor = '_Колір:';
+
+ LANGuamiChangePermissions_Caption = 'Змінити _права...';
+ LANGuamiChangeOwner_Caption = 'Змінити _власника/групу...';
+ LANGuamiCreateSymlink_Caption = 'С_творити посилання...';
+ LANGuamiEditSymlink_Caption = 'Ре_дагувати посилання';
+ LANGuaChmodProgress = 'Змінити права:';
+ LANGuaChownProgress = 'Змінити власника:';
+ LANGuaYouMustSelectAValidSymbolicLink = 'Необхідно вибрати символьне посилання!';
+ LANGuaPopupRunS = '_Виконати %s';
+ LANGuaPopupOpenS = '_Відкрити %s';
+ LANGuaPopupGoUp = 'Перейти на рівень в_ище';
+ LANGuaPopupOpenWithS = 'Відкрити з допомогою %s';
+ LANGuaPopupDefault = ' (за умовчанням)';
+ LANGuaPopupOpenWith = 'Відкрити з допо_могою...';
+ LANGuaPopupViewFile = '_Перегляд файла';
+ LANGuaPopupEditFile = 'Ре_дагувати файл';
+ LANGuaPopupMakeSymlink = 'створити _посилання';
+ LANGuaPopupRename = 'Перей_менувати';
+ LANGuaPopupDelete = 'Ви_лучити';
+ LANGuaDialogChangePermissions = 'Змінити права';
+ LANGuaCouldNotBeChmoddedS = 'Неможливо змінити права доступу: %s';
+ LANGuaDialogChangeOwner = 'Змінити власника';
+ LANGuaCouldNotBeChownedS = 'Неможливо змінити власника: %s';
+ LANGuaDialogMakeSymlink = 'Створити посилання';
+ LANGuaDialogEditSymlink = 'Редагувати посилання';
+ LANGuaFEditSymlink_Caption = 'Редагувати символьне посилання';
+ LANGuaFEditSymlink_SymbolicLinkFilename = '_Ім''я символьного посилання:';
+ LANGuaFEditSymlink_SymbolicLinkPointsTo = 'Посилання вказує _на:';
+
+ LANGuaFChmod_Caption = 'Права доступу';
+ LANGuaFChmod_PermissionFrame = 'Права';
+ LANGuaFChmod_FileFrame = 'Файл';
+ LANGuaFChmod_ApplyRecursivelyFor = 'Застосувати _рекурсивно';
+ LANGuaFChmod_miAllFiles = 'Для усіх файлів та тек';
+ LANGuaFChmod_miDirectories = 'Лише для тек';
+ LANGuaFChmod_OctalLabel = '_Вісімковий:';
+ LANGuaFChmod_SUID = 'SUID - Встановити ідентифікатор користувача';
+ LANGuaFChmod_SGID = 'SGID - Встановити ідентифікатор групи';
+ LANGuaFChmod_Sticky = 'Приклеєний';
+ LANGuaFChmod_RUSR = 'RUSR - Читання для власника';
+ LANGuaFChmod_WUSR = 'WUSR - Запис для власника';
+ LANGuaFChmod_XUSR = 'XUSR - Виконання/Пошук для власника';
+ LANGuaFChmod_RGRP = 'RGRP - Читання для групи';
+ LANGuaFChmod_WGRP = 'WGRP - Запис для групи';
+ LANGuaFChmod_XGRP = 'XGRP - Виконання/Пошук для групи';
+ LANGuaFChmod_ROTH = 'ROTH - Читання для решту';
+ LANGuaFChmod_WOTH = 'WOTH - Запис для решту';
+ LANGuaFChmod_XOTH = 'XOTH - Виконання/Пошук для решту';
+ LANGuaFChmod_TextLabel = '<span weight="ultrabold">Текст:</span> %s';
+ LANGuaFChmod_FileLabel = '<span weight="ultrabold">Файл:</span> %s'#10'<span weight="ultrabold">Текст:</span> %s'#10 +
+ '<span weight="ultrabold">Вісімковий:</span> %d'#10'<span weight="ultrabold">Власник:</span> %s'#10 +
+ '<span weight="ultrabold">Група:</span> %s';
+
+ LANGuaFChown_Caption = 'Змінити власника/групу';
+ LANGuaFChown_OwnerFrame = 'Ім''я власника';
+ LANGuaFChown_GroupFrame = 'Ім''я групи';
+ LANGuaFChown_FileFrame = 'Файл';
+ LANGuaFChown_ApplyRecursively = 'Застосувати _рекурсивно';
+
+ LANGuaFSymlink_Caption = 'Створити символьне посилання';
+ LANGuaFSymlink_ExistingFilename = 'Існуючий _файл:';
+ LANGuaFSymlink_SymlinkFilename = 'Ім''я символьного _посилання:';
+
+ LANGuamnuBookmarks_Caption = '_Закладки';
+ LANGuamiAddBookmark_Caption = 'Додати закладку';
+ LANGuamiEditBookmarks_Caption = 'Змінити закладку';
+ LANGuaBookmarkPopupDelete_Caption = 'Ви_лучити';
+ LANGuamiPreferences_Caption = 'Змінити _налаштування...';
+ LANGuaTheCurrentDirectoryAlreadyExistsInTheBookmarksList = 'Поточна тека вже додана до закладок';
+ LANGuaSomeOtherInstanceChanged1 = 'Інша програма змінила файл конфігурації на диску. Чи хочете застосувати нові налаштування?'#10#10'Увага: якщо Ви зараз натиснете ';
+ LANGuaSomeOtherInstanceChanged2 = '"Ні", конфігурація буде перезаписана під час завершення програми!';
+
+ LANGuaPreferences_Caption = 'Налаштування';
+ LANGuaPreferences_TitleLabel_Caption = '<span size="x-large" weight="ultrabold">Налаштування програми</span>';
+ LANGuaPreferences_GeneralPage = 'Загальні';
+ LANGuaPreferences_FontsPage = 'Шрифти';
+ LANGuaPreferences_ColorsPage = 'Кольори';
+ LANGuaPreferences_RowHeight = ' _Висота рядків:';
+ LANGuaPreferences_NumHistoryItems = '_Елементи командного рядка:';
+ LANGuaPreferences_Default = 'За умовчанням';
+ LANGuaPreferences_ClearReadonlyAttribute = 'Під час копіювання зі CD-ROM знімати _атрибут "лише для читання"';
+ LANGuaPreferences_DisableMouseRenaming = 'Заборонити перейменування _мишкою';
+ LANGuaPreferences_ShowFiletypeIconsInList = 'Показувати _іконки';
+ LANGuaPreferences_ExternalAppsLabel = '<span weight="ultrabold">Зовнішні програми</span>';
+ LANGuaPreferences_Viewer = '_Перегляд:';
+ LANGuaPreferences_Editor = '_Редактор:';
+ LANGuaPreferences_Terminal = '_Термінал:';
+ LANGuaPreferences_ListFont = 'Шрифт списків:';
+ LANGuaPreferences_Change = 'Змінити...';
+ LANGuaPreferences_UseDefaultFont = 'Використовувати шрифт по _умовчанню';
+ LANGuaPreferences_Foreground = 'Передній план';
+ LANGuaPreferences_Background = 'Фон';
+ LANGuaPreferences_NormalItem = 'Звичайний елемент:';
+ LANGuaPreferences_SetToDefaultToUseGTKThemeColors = 'Використовувати кольори теми GTK';
+ LANGuaPreferences_Cursor = 'Курсор:';
+ LANGuaPreferences_InactiveItem = 'Неактивний елемент:';
+ LANGuaPreferences_SelectedItem = 'Вибраний елемент:';
+ LANGuaPreferences_LinkItem = 'Символьні посилання:';
+ LANGuaPreferences_LinkItemHint = 'Використовувати кольори нормальних елементів для посилань';
+ LANGuaPreferences_DotFileItem = 'Приховані файли:';
+ LANGuaPreferences_DotFileItemHint = 'Використовувати кольори нормальних елементів для прихованих файлів';
+ LANGuaPreferences_BrowseForApplication = 'Пошук програми';
+ LANGuaPreferences_DefaultS = 'За умовчанням: %s';
+ LANGuaPreferences_SelectFont = 'Виберіть шрифт';
+
+ (*************** STRINGS ADDED TO v0.4.101 **********************************************************************************)
+ LANGuaBookmarkButton_Tooltip = 'Показати закладки';
+ LANGuaUpButton_Tooltip = 'Перейти до верхньої теки';
+ LANGuaRootButton_Tooltip = 'Перейти до кореневої теки (/)';
+ LANGuaHomeButton_Tooltip = 'Перейти до домашньої теки (/home/user)';
+ LANGuaLeftEqualButton_Tooltip = 'Перейти у правій панелі у ту саму теку що і у лівій';
+ LANGuaRightEqualButton_Tooltip = 'Перейти у лівій панелі у ту саму теку що і у правій';
+ LANGuamiShowDirectorySizes_Caption = 'Показати _розміри тек';
+ LANGuamiTargetSource_Caption = 'Приймальник = Джерело';
+ LANGuaFileTypeDirectory = 'Тека';
+ LANGuaFileTypeFile = 'Файл';
+ LANGuaFileTypeMetafile = 'Це загальний мета-елемент';
+ LANGuaPreferencesPanelsPage = 'Панелі';
+ LANGuaPreferencesApplicationsPage = 'Програми';
+ LANGuaPreferencesExperimentalPage = 'Експериментальний';
+ LANGuaPreferencesSelectAllDirectoriesCheckBox_Caption = 'Вибирати _також теки, вибираючи усе';
+ LANGuaPreferencesNewStyleAltOCheckBox_Caption = '_Новий стиль Alt+O';
+ LANGuaPreferencesNewStyleAltOCheckBox_Tooltip = 'Залишатися у тій же теці при перемиканні теки протилежної панелі натискаючи Ctrl/Alt+O';
+ LANGuaPreferencesShowFuncButtonsCheckBox_Caption = 'Показувати кнопки _функціональних клавіш';
+ LANGuaPreferencesSizeFormatLabel_Caption = '_Формат розміру:';
+ LANGuaPreferencesmiSizeFormat1 = 'Система';
+ LANGuaPreferencesmiSizeFormat6 = 'Згруповано';
+ LANGuaPreferencesAutodetectXApp = 'Автоматичне виявлення програм у X-ах';
+ LANGuaPreferencesAlwaysRunInTerminal = 'Завжди виконувати у терміналі';
+ LANGuaPreferencesNeverRunInTerminal = 'Ніколи не виконувати у терміналі';
+ LANGuaPreferencesCmdLineBehaviourLabel_Caption = '_Виконувати з командного рядка:';
+ LANGuaPreferencesFeatures = 'Властивості';
+ LANGuaPreferencesDisableMouseRename_Tooltip = 'Ви можете все ще використовувати швидке перейменування натискаючи Shift+F6';
+ LANGuaPreferencesDisableFileTipsCheckBox_Caption = 'Заблокувати спливаючі _нотатки до файлів';
+ LANGuaPreferencesDisableFileTipsCheckBox_Tooltip = 'Не показувати спливаючі нотатки у панелях якщо текст у колонках обрізається';
+ LANGuaPreferencesShow = 'Показати';
+ LANGuaPreferencesDirsInBoldCheckBox_Caption = 'Теки _жирним';
+ LANGuaPreferencesDisableDirectoryBracketsCheckBox_Caption = 'Відмінити квадратні _дужки тек';
+ LANGuaPreferencesOctalPermissionsCheckBox_Caption = 'Показувати _вісімкові дозволи';
+ LANGuaPreferencesOctalPermissionsCheckBox_Tooltip = 'Показувати дозволи файлів/тек як номери замість текстової форми (-rw-rw-rw-)';
+ LANGuaPreferencesMovement = 'Рух';
+ LANGuaPreferencesLynxLikeMotionCheckBox_Caption = 'Рухи як у браузера _Lynx';
+ LANGuaPreferencesInsertMovesDownCheckBox_Caption = 'Після натискання _Insert рухатися нижче';
+ LANGuaPreferencesSpaceMovesDownCheckBox_Caption = 'Після натискання _пробілу рухатися нижче';
+ LANGuaPreferencesViewer = 'Переглядач';
+ LANGuaPreferencesCommandSC = 'Команда:';
+ LANGuaPreferencesUseInternalViewer = 'Використовувати _внутрішній переглядач';
+ LANGuaPreferencesEditor = 'Редактор';
+ LANGuaPreferencesTerminal = 'Термінал';
+ LANGuaPreferencesExperimentalFeatures = 'Експериментальні можливості';
+ LANGuaPreferencesExperimentalWarningLabel_Caption = '<span weight="ultrabold">Попередження:</span> Робота над цими можливостями ще не завершена наразі, отож, вони ' +
+ 'можуть не працювати належним чином. Використовуйте їх на Ваш власний ризик!';
+ LANGuaPreferencesFocusRefreshCheckBox_Caption = 'Виконувати _оновлення при отриманні вікном фокусу';
+ LANGuaPreferencesFocusRefreshCheckBox_Tooltip = 'Дуже повільне оновлення панелей, на даний час';
+ LANGuaPreferencesWMCompatModeCheckBox_Caption = 'Режим сумісності зі _WM';
+ LANGuaPreferencesWMCompatModeCheckBox_Tooltip = 'Використовуйте, якщо Ви маєте певні проблеми з менеджером вікон (наприклад ICEWM не правильно максимізує вікно)';
+ LANGuaPreferencesCompatUseLibcSystemCheckBox_Caption = 'Використовувати libc _system() для виконання програм';
+ LANGuaPreferencesCompatUseLibcSystemCheckBox_Tooltip = 'Використовуйте у разі заморожування або збійних проблем при запуску зовнішніх програм';
+
+ (*************** STRINGS ADDED TO v0.5.70 **********************************************************************************)
+ LANGuamiSearchCaption2 = '_Пошук...';
+ LANGuamiNoMounterBarCaption = '_Не показувати монтувальну панель';
+ LANGuamiShowOneMounterBarCaption = 'Показувати _одну монтувальну панель';
+ LANGuamiShowTwoMounterBarCaption = 'Показувати _дві монтувальні панелі';
+ LANGuamnuNetworkCaption = '_Мережа';
+ LANGuamiConnectionsCaption = '_З''єднання...';
+ LANGuamiOpenConnectionCaption = '_Відкриті з''єднання...';
+ LANGuamiQuickConnectCaption = '_Швидке з''єднання...';
+ LANGuamnuPluginsCaption = '_Плаґіни';
+ LANGuamiTestPluginCaption = '_Тест плаґіна...';
+ LANGuamiMounterSettingsCaption = 'Налаштування _монтувальника...';
+ LANGuamiColumnsCaption = 'Панельні _колонки...';
+ LANGuamiSavePositionCaption = '_Запам''ятати позицію';
+ LANGuamiMountCaption = '_Змонтувати';
+ LANGuamiUmountCaption = '_Розмонтувати';
+ LANGuamiEjectCaption = '_Витягнути';
+ LANGuamiDuplicateTabCaption = 'Здублювати поточну закладку';
+ LANGuamiCloseTabCaption = 'Закрити поточну закладку';
+ LANGuamiCloseAllTabsCaption = 'Закрити усі закладки';
+ LANGuaCannotDetermineDestinationEngine = 'Неможливо визначити пристрій призначення. Введіть, будь-ласка, вірний шлях та спробуйте знову.';
+ LANGuaCannotLoadFile = 'Неможливо завантажити файл ''%s''. Перевірте наявні дозволи.';
+ LANGuaMountPointDevice = 'Точка монтування: %s'#10'Пристрій: %s';
+ LANGuaMountSC = 'Mount:';
+ LANGuaNoPluginsFound = 'Не знайдено жодних плаґінів';
+ LANGuaPluginAbout = 'Про програму...';
+ LANGuaCouldntOpenURI = 'Неможливо відкрити зазначений Універсальний Ідентифікатор Користувача (URI). ' +
+ 'Перевірте, будь-ласка, логічність ідентифікатора та дозволи на доступ.';
+ LANGuaPluginAboutInside = 'Плаґін: %s'#10#10'%s'#10'%s';
+ LANGuaAreYouSureCloseAllTabs = 'Чи Ви справді хочете позакривати усі неактивні закладки?';
+ LANGuaCouldntOpenURIArchive = 'Неможливо відкрити архів. Перевірте, будь-ласка, логічність та дозволи на доступ.';
+ LANGuaThereIsNoModuleAvailable = 'Немає жодного доступного модуля віртуальної файлової системи (VFS), котрий міг би здійснити це з''єднання';
+ LANGuaIgnoreError = 'Чи Ви справді хочете ігнорувати цю помилку? Джерельний файл буде знищено';
+ LANGuaErrorMount = 'Трапилася помилка при монтуванні пристрою ''%s'':'#10#10;
+ LANGuaErrorUmount = 'Трапилася помилка при розмонтуванні пристрою ''%s'':'#10#10;
+ LANGuaErrorEject = 'Трапилася помилка при витягненні пристрою ''%s'':'#10#10;
+
+ LANGuaMounterPrefs_Caption = 'Налаштування монтувальника';
+ LANGuaMounterPrefs_TitleLabelCaption = 'Налаштування монтувальника';
+ LANGuaMounterPrefs_ListViewFrameCaption = 'Монтувальник';
+ LANGuaMounterPrefs_MountName = 'Ім''я монтування';
+ LANGuaMounterPrefs_MountPoint = 'Точка монтування';
+ LANGuaMounterPrefs_Device = 'Пристрій';
+ LANGuaMounterPrefs_MoveUpButtonTooltip = 'Перемістити елемент догори';
+ LANGuaMounterPrefs_MoveDownButtonTooltip = 'Перемістити елемент донизу';
+ LANGuaMounterPrefs_UseFSTabDefaultsCheckBox = 'Використовувати за умовчанням значення зі _fstab';
+ LANGuaMounterPrefs_UseFSTabDefaultsCheckBoxTooltip = 'Якщо вибрано, то монтувальна панель буде за умовчанням заповнена елементами, знайденими у /etc/fstab (системний файл зі списком монтування)';
+ LANGuaMounterPrefs_ToggleModeCheckBox = 'Кнопки залишати _натиснутими коли змонтовано';
+ LANGuaMounterPrefs_ToggleModeCheckBoxTooltip = 'Якщо вибрано, то кнопки монтування залишати натиснутими якщо пристрій змонтовано; ' +
+ 'а ще одне клацання призводитиме до розмонтування (чи й витягнення у даному випадку)';
+ LANGuaMounterPrefs_PropertiesFrameCaption = 'Властивості монтувального елемента';
+ LANGuaMounterPrefs_DisplayTextLabelCaption = '_Текст для відображення:';
+ LANGuaMounterPrefs_MountPointLabelCaption = '_Точка монтування:';
+ LANGuaMounterPrefs_MountDeviceLabelCaption = '_Пристрій:';
+ LANGuaMounterPrefs_DeviceTypeLabelCaption = '_Тип пристрою:';
+ LANGuaMounterPrefs_miLocalDiskCaption = 'Локальний диск';
+ LANGuaMounterPrefs_miRemovableCaption = 'Витягувальний';
+ LANGuaMounterPrefs_miCDCaption = 'Привід CD/DVD';
+ LANGuaMounterPrefs_miFloppyCaption = 'Пристрій гнучких дисків';
+ LANGuaMounterPrefs_miNetworkCaption = 'Мережа';
+ LANGuaMounterPrefs_MountCommandLabelCaption = 'Команда _монтування:';
+ LANGuaMounterPrefs_UmountCommandLabelCaption = 'Команда _розмонтування:';
+ LANGuaMounterPrefs_MountCommandEntryTooltip = 'Синтаксис: використовуйте %dev для підстановки пристрою та %dir для точки монтування чи лишіть пустим для монтування за ' +
+ 'умовчанням'#10'Зауваження: стережіться інтерактивних команд, tuxcmd може зависнути!'#10'Приклад: smbmount %dev %dir -o username=netuser,password=somepass';
+ LANGuaMounterPrefs_UmountCommandEntryTooltip = 'Синтаксис: використовуйте %dev для підстановки пристрою та %dir для точки ' +
+ 'монтування чи лишіть пустим для розмонтування за умовчанням'#10'Приклад: smbumount %dir';
+ LANGuaMounterPrefs_IconLabelCaption = '_Іконка:';
+
+ LANGuaConnMgr_Caption = 'Відкрити нове з''єднання';
+ LANGuaConnMgr_ConnectButton = '_З''єднання';
+ LANGuaConnMgr_OpenConnection = 'Відкрити з''єднання';
+ LANGuaConnMgr_NameColumn = 'Ім''я';
+ LANGuaConnMgr_URIColumn = 'Універсальний Ідентифікатор Ресурсів (URI)';
+ LANGuaConnMgr_AddConnectionButtonCaption = '_Додати сайт...';
+ LANGuaConnMgr_AddConnectionButtonTooltip = 'Додати нове з''єднання';
+ LANGuaConnMgr_EditButtonCaption = '_Редагувати...';
+ LANGuaConnMgr_EditButtonTooltip = 'Редагувати вибране з''єднання';
+ LANGuaConnMgr_RemoveButtonCaption = '_Вилучити сайт';
+ LANGuaConnMgr_RemoveButtonTooltip = 'Вилучити вибране з''єднання';
+ LANGuaConnMgr_DoYouWantDelete = 'Чи Ви справді хочете вилучити з''єднання ''%s''?';
+
+ LANGuaConnProp_FTP = 'FTP';
+ LANGuaConnProp_SFTP = 'SFTP (ssh-підсистема)';
+ LANGuaConnProp_SMB = 'Спільний доступ Windows (SMB)';
+ LANGuaConnProp_HTTP = 'WebDAV (HTTP)';
+ LANGuaConnProp_HTTPS = 'Безпечний WebDAV (HTTPS)';
+ LANGuaConnProp_Other = 'Інше <span style="italic">(будь-ласка, вкажіть в Універсальному Ідентифікаторі Ресурсів (URI))</span>';
+ LANGuaConnProp_Caption = 'Властивості з''єднання';
+ LANGuaConnProp_VFSModule = 'Модуль _VFS:';
+ LANGuaConnProp_URI = 'Універсальний Ідентифікатор Ресурсів (_URI):';
+ LANGuaConnProp_URIEntryTooltip = 'Правильний Універсальний Ідентифікатор Ресурсів (_URI) повинен містити префікс типу сервісу та адрес сервера';
+ LANGuaConnProp_DetailedInformations = 'Детальна інформація';
+ LANGuaConnProp_Name = '_Ім''я:';
+ LANGuaConnProp_Server = '_Сервер[:порт]:';
+ LANGuaConnProp_Username = 'Ім''я _користувача_:';
+ LANGuaConnProp_UserNameEntryTooltip = 'Залишити пустим для анонімного входу';
+ LANGuaConnProp_Password = '_Пароль:';
+ LANGuaConnProp_TargetDirectory = '_Тека призначення:';
+ LANGuaConnProp_ServiceType = 'Тип _сервісу:';
+ LANGuaConnProp_MaskPassword = '_Замаскувати пароль';
+ LANGuaConnProp_MenuItemCaption = 'За умовчанням <span style="italic">(усі підходящі модулі)</span>';
+
+ LANGuaConnLogin_Caption = 'Потрібна ідентифікація';
+ LANGuaConnLogin_Login = 'Ім''я для входу';
+ LANGuaConnLogin_ExperimentalWarningLabelCaption = 'Ви повинні увійти щоб мати доступ до %s';
+ LANGuaConnLogin_Username = '_Ім''я користувача:';
+ LANGuaConnLogin_Password = '_Пароль:';
+ LANGuaConnLogin_AnonymousCheckButton = '_Анонімно';
+
+ LANGuaColumns_Caption = 'Налаштування колонок панелі';
+ LANGuaColumns_Title = 'Налаштування колонок панелі';
+ LANGuaColumns_MoveUpButtonTooltip = 'Перемістити елемент догори';
+ LANGuaColumns_MoveDownButtonTooltip = 'Перемістити елемент донизу';
+ LANGuaColumns_TitlesLongName = 'Ім''я';
+ LANGuaColumns_TitlesLongNameExt = 'Ім''я + розширення';
+ LANGuaColumns_TitlesLongExt = 'Розширення';
+ LANGuaColumns_TitlesLongSize = 'Розмір';
+ LANGuaColumns_TitlesLongDateTime = 'Дата + Час';
+ LANGuaColumns_TitlesLongDate = 'Дата';
+ LANGuaColumns_TitlesLongTime = 'Час';
+ LANGuaColumns_TitlesLongUser = 'Користувач';
+ LANGuaColumns_TitlesLongGroup = 'Група';
+ LANGuaColumns_TitlesLongAttr = 'Атрибути';
+ LANGuaColumns_TitlesShortName = 'Ім''я';
+ LANGuaColumns_TitlesShortNameExt = 'Ім''я';
+ LANGuaColumns_TitlesShortExt = 'Розш.';
+ LANGuaColumns_TitlesShortSize = 'Розмір';
+ LANGuaColumns_TitlesShortDateTime = 'Дата';
+ LANGuaColumns_TitlesShortDate = 'Дата';
+ LANGuaColumns_TitlesShortTime = 'Час';
+ LANGuaColumns_TitlesShortUser = 'Корист.';
+ LANGuaColumns_TitlesShortGroup = 'Група';
+ LANGuaColumns_TitlesShortAttr = 'Атриб.';
+
+ LANGuaTestPlugin_Caption = 'Тестувати плаґін Віртуальної Файлової Системи (VFS)';
+ LANGuaTestPlugin_Title = 'Тестувати плаґін Віртуальної Файлової Системи (VFS)';
+ LANGuaTestPlugin_ExperimentalWarningLabelCaption = '<span weight="ultrabold">Застереження:</span> Підсистема Віртуальної Файлової Системи (VFS) та відповідний ' +
+ 'плаґін ще активно розробляються та можуть містити помилки. Користуйтеся цією функцією на власний ризик!';
+ LANGuaTestPlugin_Plugin = '_Плаґін:';
+ LANGuaTestPlugin_Command = '_Команда:';
+ LANGuaTestPlugin_Username = '_Ім''я користувача:';
+ LANGuaTestPlugin_Password = '_Пароль:';
+ LANGuaTestPlugin_AnonymousCheckButton = '_Анонімний вхід (не викликати VFSLogin)';
+ LANGuaTestPlugin_NoPluginsFound = 'Не знайдено жодного плаґіна';
+
+ LANGuaRemoteWait_Caption = 'Дія триває';
+ LANGuaRemoteWait_OperationInProgress = 'Дія триває, майте терпіння...';
+ LANGuaRemoteWait_ItemsFound = 'Елемент шукається до сих пір: %d';
+
+ LANGuaSearch_Bytes = 'байт';
+ LANGuaSearch_kB = 'кБ';
+ LANGuaSearch_MB = 'МБ';
+ LANGuaSearch_days = 'днів';
+ LANGuaSearch_weeks = 'тижнів';
+ LANGuaSearch_months = 'місяців';
+ LANGuaSearch_years = 'років';
+ LANGuaSearch_Caption = 'Знайти файл';
+ LANGuaSearch_General = 'Загальне';
+ LANGuaSearch_Advanced = 'Додатково';
+ LANGuaSearch_SearchResults = '_Результати пошуку:';
+ LANGuaSearch_SearchFor = 'Шукати _за:';
+ LANGuaSearch_FileMaskEntryTooltip = 'Порада: Використовуйте двокрапку (";") щоб вказати декілька файлів для пошуку';
+ LANGuaSearch_SearchIn = 'Шукати _у:';
+ LANGuaSearch_SearchArchivesCheckButton = 'Шукати і у _архівах';
+ LANGuaSearch_FindText = 'Знайти _текст:';
+ LANGuaSearch_FindTextEntryTooltip = 'Залишайте пустим, якщо не треба шукати текст'#10'Зауважте, що в графічному інтерфейсі (GUI) використовується кодування UTF-8';
+ LANGuaSearch_CaseSensitiveCheckButton = 'Чутливо до _реґістру';
+ LANGuaSearch_StayCurrentFSCheckButton = 'Включати інші _файлові системи';
+ LANGuaSearch_CaseSensitiveMatchCheckButton = '_Чутливо до _реґістру';
+ LANGuaSearch_Size = 'Розмір';
+ LANGuaSearch_Date = 'Дата';
+ LANGuaSearch_BiggerThan = '_Більше ніж';
+ LANGuaSearch_SmallerThan = '_Менше аніж';
+ LANGuaSearch_ModifiedBetweenRadioButton = '_Змінено між';
+ LANGuaSearch_NotModifiedAfterRadioButton = '_Не змінено після';
+ LANGuaSearch_ModifiedLastRadioButton = 'Змінено у _кінці';
+ LANGuaSearch_ModifiedNotLastRadionButton = '_Не змінено у кінці';
+ LANGuaSearch_ModifiedBetweenEntry1 = '"Будь ласка, використовуйте цей формат дати:" c';
+ LANGuaSearch_ViewButtonCaption = '_Переглянути файл';
+ LANGuaSearch_NewSearchButtonCaption = '_Новий пошук';
+ LANGuaSearch_GoToFileButtonCaption = '_Перейти до файлу';
+ LANGuaSearch_FeedToListboxButtonCaption = 'Заповнити у _списковому елементі';
+ LANGuaSearch_StatusSC = 'Статус:';
+ LANGuaSearch_Ready = 'Готово.';
+ LANGuaSearch_PreparingToSearch = 'Підготовка для пошуку.';
+ LANGuaSearch_SearchInProgress = 'Пошук продовжується:';
+ LANGuaSearch_UserCancelled = 'Користувач скасував дію.';
+ LANGuaSearch_SearchFinished = 'Пошук завершено';
+ LANGuaSearch_FilesFound = '%d файлів знайдено';
+ LANGuaSearch_And = 'та';
+
+ (*************** STRINGS ADDED TO v0.5.82 **********************************************************************************)
+ LANGuaCloseOpenConnection = 'Ви намагаєтеся відкрити нове з''єднання поверха іншого активного з''єднання. Якщо продовжувати, попереднє з''єднання '+'буде закрите та замінено цим новим.'#10#10'Чи бажаєте продовжувати?';
+ LANGuaDuplicateTabWarning = 'Ви намагаєтеся відкрити нову вкладку для віддаленої теки. Однак, машинне клонування не підтримується. Тека у новій вкладці'+' повинна адресуватися у локальну файлову систему.';
+ LANGuaDontShowAgain = '_Не показувати це повідомлення знову';
+ LANGuaSwitchOtherPanelWarning = 'Ви намагаєтеся відкрити віддалену теку на протилежній панелі. Однак, машинне клонування не підтримується. '+
+ 'Цільова тека не може бути перемкнена.';
+ LANGuaOpenConnectionsWarning = 'Є активні з''єднання, відкриті на панелі. При закритті програми, ці з''єдання будуть розірвані.'#10#10'Продовжувати виходити?';
+ LANGuamiDisconnect_Caption = '_Роз''єднання';
+ LANGuaDisconnectButton_Tooltip = 'Розірвати поточне з''єднання';
+ LANGuaLeaveArchiveButton_Tooltip = 'Зачинити поточний архів';
+ LANGuaOpenTerminalButton_Tooltip = 'Відкриває нові термінальні вікна для поточної теки';
+ LANGuaOpenTerminalButton_Caption = 'Відкрити те_рмінал';
+ LANGuaShowTextUIDsCheckBox_Caption = 'Показувати тексти _UID';
+ LANGuaShowTextUIDsCheckBox_Tooltip = 'Показувати текстову інформацію про користувача та групу взамін показу чисел (UID/GID)';
+
+ (*************** STRINGS ADDED TO v0.5.100 **********************************************************************************)
+ LANGuamiNewTab_Caption = 'Нова _закладка для теки';
+ LANGuaFilePopupMenu_Properties = '_Властивості';
+ LANGuaCommandEntry_Tooltip = 'Використовувати %s як замінник файлу/теки';
+ LANGuamiFiles_Caption = 'Лише файли';
+
+ (*************** STRINGS ADDED TO v0.6.31 **********************************************************************************)
+ LANGuaPasswordButton_Tooltip = 'Архів потребує пароль.'#10'Клацніть щоб встановити';
+ LANGuaHandleRunFromArchive_Bytes = 'байти';
+ LANGuaHandleRunFromArchive_FileTypeDesc_Unknown = '(невідомо)';
+ LANGuaHandleRunFromArchive_NotAssociated = '(не прив''язано)';
+ LANGuaHandleRunFromArchive_SelfExecutable = '(виконавчий)';
+ LANGuaHandleRunFromArchive_CouldntCreateTemporaryDirectory = 'Не вдається створити тимчасову теку "%s": %s.'#10#10'Будь ласка, перевірте налаштування тимчасової теки і спробуйте знову.';
+ LANGuaFRunFromVFS_Caption = 'Властивості запакованого файлу';
+ LANGuaFRunFromVFS_TitleLabel = 'Властивості файлу';
+ LANGuaFRunFromVFS_FileNameLabel = 'Назва файлу:';
+ LANGuaFRunFromVFS_FileTypeLabel = 'Тип файлу:';
+ LANGuaFRunFromVFS_SizeLabel = 'Розмір:';
+ LANGuaFRunFromVFS_PackedSizeLabel = 'Стиснутий розмір:';
+ LANGuaFRunFromVFS_DateLabel = 'Дата модифікації:';
+ LANGuaFRunFromVFS_InfoLabel = 'Відкриття файлів напряму з архівів не підтримується. ' +
+ 'Клацнувши на кнопки нижче файлу (усі файли відповідно) він буде розпакований до тимчасового розташування. ' +
+ 'Тимчасові файли будуть вилучені тоді, коли Ви закриваєте Tux Commander.';
+ LANGuaFRunFromVFS_OpensWithLabel = 'Відкрити з допомогою:';
+ LANGuaFRunFromVFS_ExecuteButton = '_Розпакувати та відкрити';
+ LANGuaFRunFromVFS_ExecuteAllButton = 'Розпакувати _усе та відкрити';
+ LANGuaFSetPassword_Caption = 'Встановити пароль';
+ LANGuaFSetPassword_Label1_Caption = 'Пароль необхідний';
+ LANGuaFSetPassword_Label2_Caption = 'Архів зашифровано і необхідний пароль для того щоб розпакувати дані';
+ LANGuaFSetPassword_ShowPasswordCheckButton = '_Зняти маскування пароля';
+
+
+
+(********************************************************************************************************************************)
+procedure SetTranslation;
+begin
+ LANGF2Button_Caption := LANGuaF2Button_Caption;
+ LANGF3Button_Caption := LANGuaF3Button_Caption;
+ LANGF4Button_Caption := LANGuaF4Button_Caption;
+ LANGF5Button_Caption := LANGuaF5Button_Caption;
+ LANGF6Button_Caption := LANGuaF6Button_Caption;
+ LANGF7Button_Caption := LANGuaF7Button_Caption;
+ LANGF8Button_Caption := LANGuaF8Button_Caption;
+
+ LANGmnuFile_Caption := LANGuamnuFile_Caption;
+ LANGmnuMark_Caption := LANGuamnuMark_Caption;
+ LANGmnuCommands_Caption := LANGuamnuCommands_Caption;
+ LANGmnuHelp_Caption := LANGuamnuHelp_Caption;
+ LANGmiExit_Caption := LANGuamiExit_Caption;
+ LANGmiSelectGroup_Caption := LANGuamiSelectGroup_Caption;
+ LANGmiUnselectGroup_Caption := LANGuamiUnselectGroup_Caption;
+ LANGmiSelectAll_Caption := LANGuamiSelectAll_Caption;
+ LANGmiUnselectAll_Caption := LANGuamiUnselectAll_Caption;
+ LANGmiInvertSelection_Caption := LANGuamiInvertSelection_Caption;
+ LANGmiRefresh_Caption := LANGuamiRefresh_Caption;
+ LANGmiAbout_Caption := LANGuamiAbout_Caption;
+
+ LANGColumn1_Caption := LANGuaColumn1_Caption;
+ LANGColumn2_Caption := LANGuaColumn2_Caption;
+ LANGColumn3_Caption := LANGuaColumn3_Caption;
+ LANGColumn4_Caption := LANGuaColumn4_Caption;
+ LANGColumn5_Caption := LANGuaColumn5_Caption;
+
+ LANGExpandSelection := LANGuaExpandSelection;
+ LANGShrinkSelection := LANGuaShrinkSelection;
+ LANGNoMatchesFound := LANGuaNoMatchesFound;
+ LANGNoFilesSelected := LANGuaNoFilesSelected;
+ LANGSelectedFilesDirectories := LANGuaSelectedFilesDirectories;
+ LANGDirectoryS := LANGuaDirectoryS;
+ LANGFileS := LANGuaFileS;
+ LANGDoYouReallyWantToDeleteTheS := LANGuaDoYouReallyWantToDeleteTheS;
+ LANGDoYouReallyWantToDeleteTheSS := LANGuaDoYouReallyWantToDeleteTheSS;
+ LANGCopyFiles := LANGuaCopyFiles;
+ LANGMoveRenameFiles := LANGuaMoveRenameFiles;
+ LANGCopyDFileDirectoriesTo := LANGuaCopyDFileDirectoriesTo;
+ LANGMoveRenameDFileDirectoriesTo := LANGuaMoveRenameDFileDirectoriesTo;
+ LANGCopySC := LANGuaCopySC;
+ LANGMoveRenameSC := LANGuaMoveRenameSC;
+
+ LANGQuickFind := LANGuaQuickFind;
+
+ LANGAboutString := LANGuaAboutString;
+ LANGAboutStringGnome := LANGuaAboutStringGnome;
+ LANGDiskStatFmt := LANGuaDiskStatFmt;
+ LANGDiskStatVolNameFmt := LANGuaDiskStatVolNameFmt;
+ LANGStatusLineFmt := LANGuaStatusLineFmt;
+ LANGPanelStrings[False] := LANGuaPanelStrings[False];
+ LANGPanelStrings[True] := LANGuaPanelStrings[True];
+ LANGDIR := LANGuaDIR;
+ LANGErrorGettingListingForSPanel := LANGuaErrorGettingListingForSPanel;
+ LANGErrorGettingListingForSPanelNoPath := LANGuaErrorGettingListingForSPanelNoPath;
+ LANGErrorCreatingNewDirectorySInSPanel := LANGuaErrorCreatingNewDirectorySInSPanel;
+ LANGErrorCreatingNewDirectorySInSPanelNoPath := LANGuaErrorCreatingNewDirectorySInSPanelNoPath;
+ LANGTheFileDirectory := LANGuaTheFileDirectory;
+ LANGCouldNotBeDeleted := LANGuaCouldNotBeDeleted;
+ LANGCouldNotBeDeletedS := LANGuaCouldNotBeDeletedS;
+ LANGUserCancelled := LANGuaUserCancelled;
+ LANGTheDirectorySIsNotEmpty := LANGuaTheDirectorySIsNotEmpty;
+ LANGCannotCopyFile := LANGuaCannotCopyFile;
+ LANGCopyError := LANGuaCopyError;
+ LANGMoveError := LANGuaMoveError;
+ LANGOverwriteS := LANGuaOverwriteS;
+ LANGWithFileS := LANGuaWithFileS;
+ LANGOvewriteSBytesS := LANGuaOvewriteSBytesS;
+ LANGTheFile := LANGuaTheFile;
+ LANGCopy := LANGuaCopy;
+ LANGMove := LANGuaMove;
+ LANGTheDirectory := LANGuaTheDirectory;
+ LANGTheSymbolicLink := LANGuaTheSymbolicLink;
+ LANGCannotMoveFile := LANGuaCannotMoveFile;
+ LANGCouldNotBeCreated := LANGuaCouldNotBeCreated;
+ LANGCouldNotBeCreatedS := LANGuaCouldNotBeCreatedS;
+ LANGFromS := LANGuaFromS;
+ LANGToS := LANGuaToS;
+ LANGCannotCopyFileToItself := LANGuaCannotCopyFileToItself;
+ LANGMemoryAllocationFailed := LANGuaMemoryAllocationFailed;
+ LANGCannotOpenSourceFile := LANGuaCannotOpenSourceFile;
+ LANGCannotOpenDestinationFile := LANGuaCannotOpenDestinationFile;
+ LANGCannotCloseDestinationFile := LANGuaCannotCloseDestinationFile;
+ LANGCannotCloseSourceFile := LANGuaCannotCloseSourceFile;
+ LANGCannotReadFromSourceFile := LANGuaCannotReadFromSourceFile;
+ LANGCannotWriteToDestinationFile := LANGuaCannotWriteToDestinationFile;
+
+ LANGUnknownException := LANGuaUnknownException;
+ LANGNoAccess := LANGuaNoAccess;
+ LANGUnknownError := LANGuaUnknownError;
+
+ LANGCreateANewDirectory := LANGuaCreateANewDirectory;
+ LANGEnterDirectoryName := LANGuaEnterDirectoryName;
+
+ LANGOverwriteQuestion := LANGuaOverwriteQuestion;
+ LANGOverwriteButton_Caption := LANGuaOverwriteButton_Caption;
+ LANGOverwriteAllButton_Caption := LANGuaOverwriteAllButton_Caption;
+ LANGSkipButton_Caption := LANGuaSkipButton_Caption;
+ LANGOverwriteAllOlderButton_Caption := LANGuaOverwriteAllOlderButton_Caption;
+ LANGSkipAllButton_Caption := LANGuaSkipAllButton_Caption;
+ LANGRenameButton_Caption := LANGuaRenameButton_Caption;
+ LANGAppendButton_Caption := LANGuaAppendButton_Caption;
+ LANGRename := LANGuaRename;
+ LANGRenameFile := LANGuaRenameFile;
+ LANGIgnoreButton_Caption := LANGuaIgnoreButton_Caption;
+
+ LANGProgress := LANGuaProgress;
+ LANGCancel := LANGuaCancel;
+ LANGDelete := LANGuaDelete;
+
+ LANGSpecifyFileType := LANGuaSpecifyFileType;
+
+ LANGRemoveDirectory := LANGuaRemoveDirectory;
+ LANGDoYouWantToDeleteItWithAllItsFilesAndSubdirectories := LANGuaDoYouWantToDeleteItWithAllItsFilesAndSubdirectories;
+ LANGRetry := LANGuaRetry;
+ LANGDeleteButton_Caption := LANGuaDeleteButton_Caption;
+ LANGAll := LANGuaAll;
+
+ LANGCopyFilesSC := LANGuaCopyFilesSC;
+ LANGAppendQuestion := LANGuaAppendQuestion;
+ LANGPreparingList := LANGuaPreparingList;
+
+ LANGYouMustSelectAValidFile := LANGuaYouMustSelectAValidFile;
+ LANGmiVerifyChecksums := LANGuamiVerifyChecksums;
+ LANGVerifyChecksumsCaption := LANGuaVerifyChecksumsCaption;
+ LANGCheckButtonCaptionCheck := LANGuaCheckButtonCaptionCheck;
+ LANGCheckButtonCaptionStop := LANGuaCheckButtonCaptionStop;
+ LANGFileListTooltip := LANGuaFileListTooltip;
+ LANGFilenameColumnCaption := LANGuaFilenameColumnCaption;
+ LANGTheFileSYouAreTryingToOpenIsQuiteBig := LANGuaTheFileSYouAreTryingToOpenIsQuiteBig;
+ LANGAnErrorOccuredWhileInitializingMemoryBlock := LANGuaAnErrorOccuredWhileInitializingMemoryBlock;
+ LANGAnErrorOccuredWhileOpeningFileSS := LANGuaAnErrorOccuredWhileOpeningFileSS;
+ LANGAnErrorOccuredWhileReadingFileSS := LANGuaAnErrorOccuredWhileReadingFileSS;
+ LANGChecksumNotChecked := LANGuaChecksumNotChecked;
+ LANGChecksumChecking := LANGuaChecksumChecking;
+ LANGChecksumInterrupted := LANGuaChecksumInterrupted;
+ LANGChecksumDOK := LANGuaChecksumDOK;
+
+ LANGmiCreateChecksumsCaption := LANGuamiCreateChecksumsCaption;
+ LANGYouMustSelectAtLeastOneFileToCalculateChecksum := LANGuaYouMustSelectAtLeastOneFileToCalculateChecksum;
+ LANGCreateChecksumsCaption := LANGuaCreateChecksumsCaption;
+ LANGCCHKSUMPage1Text := LANGuaCCHKSUMPage1Text;
+ LANGCCHKSUMPage4Text := LANGuaCCHKSUMPage4Text;
+ LANGCCHKSUMPage6Text := LANGuaCCHKSUMPage6Text;
+ LANGCCHKSUMPage7Text := LANGuaCCHKSUMPage7Text;
+ LANGCCHKSUMPage1Title := LANGuaCCHKSUMPage1Title;
+ LANGCCHKSUMPage2Title := LANGuaCCHKSUMPage2Title;
+ LANGCCHKSUMPage3Title := LANGuaCCHKSUMPage3Title;
+ LANGCCHKSUMPage4Title := LANGuaCCHKSUMPage4Title;
+ LANGCCHKSUMPage5Title := LANGuaCCHKSUMPage5Title;
+ LANGCCHKSUMPage6Title := LANGuaCCHKSUMPage6Title;
+ LANGCCHKSUMPage7Title := LANGuaCCHKSUMPage7Title;
+ LANGCCHKSUMSFVFile := LANGuaCCHKSUMSFVFile;
+ LANGCCHKSUMMD5sumFile := LANGuaCCHKSUMMD5sumFile;
+ LANGCCHKSUMFileName := LANGuaCCHKSUMFileName;
+ LANGCCHKSUMCreateSeparateChecksumFiles := LANGuaCCHKSUMCreateSeparateChecksumFiles;
+ LANGCCHKSUMNowProcessingFileS := LANGuaCCHKSUMNowProcessingFileS;
+ LANGCCHKSUMFinishCaption := LANGuaCCHKSUMFinishCaption;
+ LANGCCHKSUMAreYouSureYouWantToAbortTheProcessing := LANGuaCCHKSUMAreYouSureYouWantToAbortTheProcessing;
+ LANGCCHKSUMAnErrorOccuredWhileOpeningFileSS := LANGuaCCHKSUMAnErrorOccuredWhileOpeningFileSS;
+ LANGCCHKSUMAnErrorOccuredWhileReadingFileSS := LANGuaCCHKSUMAnErrorOccuredWhileReadingFileSS;
+ LANGCCHKSUMAnErrorOccuredWhileWritingFileSS := LANGuaCCHKSUMAnErrorOccuredWhileWritingFileSS;
+
+ LANGAnErrorOccuredWhileWritingFileSS := LANGuaAnErrorOccuredWhileWritingFileSS;
+ LANGTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt := LANGuaTheTargetFileSAlreadyExistsDoYouWantToOverwriteIt;
+ LANGTheTargetFileSCannotBeRemovedS := LANGuaTheTargetFileSCannotBeRemovedS;
+ LANGMergeCaption := LANGuaMergeCaption;
+ LANGPleaseInsertNextDiskOrGiveDifferentLocation := LANGuaPleaseInsertNextDiskOrGiveDifferentLocation;
+ LANGMergeOfSSucceeded := LANGuaMergeOfSSucceeded;
+ LANGWarningCreatedFileFailsCRCCheck := LANGuaWarningCreatedFileFailsCRCCheck;
+ LANGMergeOfSSucceeded_NoCRCFileAvailable := LANGuaMergeOfSSucceeded_NoCRCFileAvailable;
+ LANGMergeSAndAllFilesWithAscendingNamesToTheFollowingDirectory := LANGuaMergeSAndAllFilesWithAscendingNamesToTheFollowingDirectory;
+ LANGMergeSC := LANGuaMergeSC;
+ LANGmiSplitFileCaption := LANGuamiSplitFileCaption;
+ LANGmiMergeFilesCaption := LANGuamiMergeFilesCaption;
+
+ LANGSplitTheFileSToDirectory := LANGuaSplitTheFileSToDirectory;
+ LANGSplitSC := LANGuaSplitSC;
+ LANGSplitFile := LANGuaSplitFile;
+ LANGBytesPerFile := LANGuaBytesPerFile;
+ LANGAutomatic := LANGuaAutomatic;
+ LANGDeleteFilesOnTargetDisk := LANGuaDeleteFilesOnTargetDisk;
+ LANGSplitCaption := LANGuaSplitCaption;
+ LANGCannotOpenFileS := LANGuaCannotOpenFileS;
+ LANGCannotSplitTheFileToMoreThan999Parts := LANGuaCannotSplitTheFileToMoreThan999Parts;
+ LANGThereAreSomeFilesInTheTargetDirectorySDoYouWantToDeleteThem := LANGuaThereAreSomeFilesInTheTargetDirectorySDoYouWantToDeleteThem;
+ LANGThereAreDFilesInTheTargetDirectoryDoYouWantToDeleteThem := LANGuaThereAreDFilesInTheTargetDirectoryDoYouWantToDeleteThem;
+ LANGAnErrorOccuredWhileOperationS := LANGuaAnErrorOccuredWhileOperationS;
+ LANGSplitOfSSucceeded := LANGuaSplitOfSSucceeded;
+ LANGSplitOfSFailed := LANGuaSplitOfSFailed;
+
+ LANGmnuShow_Caption := LANGuamnuShow_Caption;
+ LANGmiShowDotFiles_Caption := LANGuamiShowDotFiles_Caption;
+ LANGTheFileYouAreTryingToOpenIsQuiteBig := LANGuaTheFileYouAreTryingToOpenIsQuiteBig;
+ LANGCannotExecuteSPleaseCheckTheConfiguration := LANGuaCannotExecuteSPleaseCheckTheConfiguration;
+ LANGEdit := LANGuaEdit;
+ LANGEnterFilenameToEdit := LANGuaEnterFilenameToEdit;
+
+ LANGmnuSettings_Caption := LANGuamnuSettings_Caption;
+ LANGmiFileTypes_Caption := LANGuamiFileTypes_Caption;
+ LANGThereIsNoApplicationAssociatedWithS := LANGuaThereIsNoApplicationAssociatedWithS;
+ LANGErrorExecutingCommand := LANGuaErrorExecutingCommand;
+ LANGEditFileTypesCaption := LANGuaEditFileTypesCaption;
+ LANGTitleLabel_Caption := LANGuaTitleLabel_Caption;
+ LANGExtensionsColumn := LANGuaExtensionsColumn;
+ LANGDescriptionColumn := LANGuaDescriptionColumn;
+ LANGFileTypesList := LANGuaFileTypesList;
+ LANGActionName := LANGuaActionName;
+ LANGCommand := LANGuaCommand;
+ LANGSetDefaultActionButton_Caption := LANGuaSetDefaultActionButton_Caption;
+ LANGRunInTerminalCheckBox_Caption := LANGuaRunInTerminalCheckBox_Caption;
+ LANGAutodetectCheckBox_Caption := LANGuaAutodetectCheckBox_Caption;
+ LANGBrowseButton_Caption := LANGuaBrowseButton_Caption;
+ LANGCommandLabel_Caption := LANGuaCommandLabel_Caption;
+ LANGDescriptionLabel_Caption := LANGuaDescriptionLabel_Caption;
+ LANGFNameExtLabel_Caption := LANGuaFNameExtLabel_Caption;
+ LANGNotebookPageExtensions := LANGuaNotebookPageExtensions;
+ LANGNotebookPageActions := LANGuaNotebookPageActions;
+ LANGDefault := LANGuaDefault;
+ LANGCannotSaveFileTypeAssociationsBecauseOtherProcess := LANGuaCannotSaveFileTypeAssociationsBecauseOtherProcess;
+
+ LANGDefaultColor := LANGuaDefaultColor;
+ LANGIcon := LANGuaIcon;
+ LANGBrowseForIcon := LANGuaBrowseForIcon;
+ LANGSelectFileTypeColor := LANGuaSelectFileTypeColor;
+ LANGColor := LANGuaColor;
+
+ LANGmiChangePermissions_Caption := LANGuamiChangePermissions_Caption;
+ LANGmiChangeOwner_Caption := LANGuamiChangeOwner_Caption;
+ LANGmiCreateSymlink_Caption := LANGuamiCreateSymlink_Caption;
+ LANGmiEditSymlink_Caption := LANGuamiEditSymlink_Caption;
+ LANGChmodProgress := LANGuaChmodProgress;
+ LANGChownProgress := LANGuaChownProgress;
+ LANGYouMustSelectAValidSymbolicLink := LANGuaYouMustSelectAValidSymbolicLink;
+ LANGPopupRunS := LANGuaPopupRunS;
+ LANGPopupOpenS := LANGuaPopupOpenS;
+ LANGPopupGoUp := LANGuaPopupGoUp;
+ LANGPopupOpenWithS := LANGuaPopupOpenWithS;
+ LANGPopupDefault := LANGuaPopupDefault;
+ LANGPopupOpenWith := LANGuaPopupOpenWith;
+ LANGPopupViewFile := LANGuaPopupViewFile;
+ LANGPopupEditFile := LANGuaPopupEditFile;
+ LANGPopupMakeSymlink := LANGuaPopupMakeSymlink;
+ LANGPopupRename := LANGuaPopupRename;
+ LANGPopupDelete := LANGuaPopupDelete;
+ LANGDialogChangePermissions := LANGuaDialogChangePermissions;
+ LANGCouldNotBeChmoddedS := LANGuaCouldNotBeChmoddedS;
+ LANGDialogChangeOwner := LANGuaDialogChangeOwner;
+ LANGCouldNotBeChownedS := LANGuaCouldNotBeChownedS;
+ LANGDialogMakeSymlink := LANGuaDialogMakeSymlink;
+ LANGDialogEditSymlink := LANGuaDialogEditSymlink;
+ LANGFEditSymlink_Caption := LANGuaFEditSymlink_Caption;
+ LANGFEditSymlink_SymbolicLinkFilename := LANGuaFEditSymlink_SymbolicLinkFilename;
+ LANGFEditSymlink_SymbolicLinkPointsTo := LANGuaFEditSymlink_SymbolicLinkPointsTo;
+
+ LANGFChmod_Caption := LANGuaFChmod_Caption;
+ LANGFChmod_PermissionFrame := LANGuaFChmod_PermissionFrame;
+ LANGFChmod_FileFrame := LANGuaFChmod_FileFrame;
+ LANGFChmod_ApplyRecursivelyFor := LANGuaFChmod_ApplyRecursivelyFor;
+ LANGFChmod_miAllFiles := LANGuaFChmod_miAllFiles;
+ LANGFChmod_miDirectories := LANGuaFChmod_miDirectories;
+ LANGFChmod_OctalLabel := LANGuaFChmod_OctalLabel;
+ LANGFChmod_SUID := LANGuaFChmod_SUID;
+ LANGFChmod_SGID := LANGuaFChmod_SGID;
+ LANGFChmod_Sticky := LANGuaFChmod_Sticky;
+ LANGFChmod_RUSR := LANGuaFChmod_RUSR;
+ LANGFChmod_WUSR := LANGuaFChmod_WUSR;
+ LANGFChmod_XUSR := LANGuaFChmod_XUSR;
+ LANGFChmod_RGRP := LANGuaFChmod_RGRP;
+ LANGFChmod_WGRP := LANGuaFChmod_WGRP;
+ LANGFChmod_XGRP := LANGuaFChmod_XGRP;
+ LANGFChmod_ROTH := LANGuaFChmod_ROTH;
+ LANGFChmod_WOTH := LANGuaFChmod_WOTH;
+ LANGFChmod_XOTH := LANGuaFChmod_XOTH;
+ LANGFChmod_TextLabel := LANGuaFChmod_TextLabel;
+ LANGFChmod_FileLabel := LANGuaFChmod_FileLabel;
+ LANGFChown_Caption := LANGuaFChown_Caption;
+ LANGFChown_OwnerFrame := LANGuaFChown_OwnerFrame;
+ LANGFChown_GroupFrame := LANGuaFChown_GroupFrame;
+ LANGFChown_FileFrame := LANGuaFChown_FileFrame;
+ LANGFChown_ApplyRecursively := LANGuaFChown_ApplyRecursively;
+
+ LANGFSymlink_Caption := LANGuaFSymlink_Caption;
+ LANGFSymlink_ExistingFilename := LANGuaFSymlink_ExistingFilename;
+ LANGFSymlink_SymlinkFilename := LANGuaFSymlink_SymlinkFilename;
+
+ LANGmnuBookmarks_Caption := LANGuamnuBookmarks_Caption;
+ LANGmiAddBookmark_Caption := LANGuamiAddBookmark_Caption;
+ LANGmiEditBookmarks_Caption := LANGuamiEditBookmarks_Caption;
+ LANGBookmarkPopupDelete_Caption := LANGuaBookmarkPopupDelete_Caption;
+ LANGmiPreferences_Caption := LANGuamiPreferences_Caption;
+ LANGTheCurrentDirectoryAlreadyExistsInTheBookmarksList := LANGuaTheCurrentDirectoryAlreadyExistsInTheBookmarksList;
+ LANGSomeOtherInstanceChanged := LANGuaSomeOtherInstanceChanged1 + LANGuaSomeOtherInstanceChanged2;
+
+ LANGPreferences_Caption := LANGuaPreferences_Caption;
+ LANGPreferences_TitleLabel_Caption := LANGuaPreferences_TitleLabel_Caption;
+ LANGPreferences_GeneralPage := LANGuaPreferences_GeneralPage;
+ LANGPreferences_FontsPage := LANGuaPreferences_FontsPage;
+ LANGPreferences_ColorsPage := LANGuaPreferences_ColorsPage;
+ LANGPreferences_RowHeight := LANGuaPreferences_RowHeight;
+ LANGPreferences_NumHistoryItems := LANGuaPreferences_NumHistoryItems;
+ LANGPreferences_Default := LANGuaPreferences_Default;
+ LANGPreferences_ClearReadonlyAttribute := LANGuaPreferences_ClearReadonlyAttribute;
+ LANGPreferences_DisableMouseRenaming := LANGuaPreferences_DisableMouseRenaming;
+ LANGPreferences_ShowFiletypeIconsInList := LANGuaPreferences_ShowFiletypeIconsInList;
+ LANGPreferences_ExternalAppsLabel := LANGuaPreferences_ExternalAppsLabel;
+ LANGPreferences_Viewer := LANGuaPreferences_Viewer;
+ LANGPreferences_Editor := LANGuaPreferences_Editor;
+ LANGPreferences_Terminal := LANGuaPreferences_Terminal;
+ LANGPreferences_ListFont := LANGuaPreferences_ListFont;
+ LANGPreferences_Change := LANGuaPreferences_Change;
+ LANGPreferences_UseDefaultFont := LANGuaPreferences_UseDefaultFont;
+ LANGPreferences_Foreground := LANGuaPreferences_Foreground;
+ LANGPreferences_Background := LANGuaPreferences_Background;
+ LANGPreferences_NormalItem := LANGuaPreferences_NormalItem;
+ LANGPreferences_SetToDefaultToUseGTKThemeColors := LANGuaPreferences_SetToDefaultToUseGTKThemeColors;
+ LANGPreferences_Cursor := LANGuaPreferences_Cursor;
+ LANGPreferences_InactiveItem := LANGuaPreferences_InactiveItem;
+ LANGPreferences_SelectedItem := LANGuaPreferences_SelectedItem;
+ LANGPreferences_LinkItem := LANGuaPreferences_LinkItem;
+ LANGPreferences_LinkItemHint := LANGuaPreferences_LinkItemHint;
+ LANGPreferences_DotFileItem := LANGuaPreferences_DotFileItem;
+ LANGPreferences_DotFileItemHint := LANGuaPreferences_DotFileItemHint;
+ LANGPreferences_BrowseForApplication := LANGuaPreferences_BrowseForApplication;
+ LANGPreferences_DefaultS := LANGuaPreferences_DefaultS;
+ LANGPreferences_SelectFont := LANGuaPreferences_SelectFont;
+
+ LANGBookmarkButton_Tooltip := LANGuaBookmarkButton_Tooltip;
+ LANGUpButton_Tooltip := LANGuaUpButton_Tooltip;
+ LANGRootButton_Tooltip := LANGuaRootButton_Tooltip;
+ LANGHomeButton_Tooltip := LANGuaHomeButton_Tooltip;
+ LANGLeftEqualButton_Tooltip := LANGuaLeftEqualButton_Tooltip;
+ LANGRightEqualButton_Tooltip := LANGuaRightEqualButton_Tooltip;
+ LANGmiShowDirectorySizes_Caption := LANGuamiShowDirectorySizes_Caption;
+ LANGmiTargetSource_Caption := LANGuamiTargetSource_Caption;
+ LANGFileTypeDirectory := LANGuaFileTypeDirectory;
+ LANGFileTypeFile := LANGuaFileTypeFile;
+ LANGFileTypeMetafile := LANGuaFileTypeMetafile;
+ LANGPreferencesPanelsPage := LANGuaPreferencesPanelsPage;
+ LANGPreferencesApplicationsPage := LANGuaPreferencesApplicationsPage;
+ LANGPreferencesExperimentalPage := LANGuaPreferencesExperimentalPage;
+ LANGPreferencesSelectAllDirectoriesCheckBox_Caption := LANGuaPreferencesSelectAllDirectoriesCheckBox_Caption;
+ LANGPreferencesNewStyleAltOCheckBox_Caption := LANGuaPreferencesNewStyleAltOCheckBox_Caption;
+ LANGPreferencesNewStyleAltOCheckBox_Tooltip := LANGuaPreferencesNewStyleAltOCheckBox_Tooltip;
+ LANGPreferencesShowFuncButtonsCheckBox_Caption := LANGuaPreferencesShowFuncButtonsCheckBox_Caption;
+ LANGPreferencesSizeFormatLabel_Caption := LANGuaPreferencesSizeFormatLabel_Caption;
+ LANGPreferencesmiSizeFormat1 := LANGuaPreferencesmiSizeFormat1;
+ LANGPreferencesmiSizeFormat6 := LANGuaPreferencesmiSizeFormat6;
+ LANGPreferencesAutodetectXApp := LANGuaPreferencesAutodetectXApp;
+ LANGPreferencesAlwaysRunInTerminal := LANGuaPreferencesAlwaysRunInTerminal;
+ LANGPreferencesNeverRunInTerminal := LANGuaPreferencesNeverRunInTerminal;
+ LANGPreferencesCmdLineBehaviourLabel_Caption := LANGuaPreferencesCmdLineBehaviourLabel_Caption;
+ LANGPreferencesFeatures := LANGuaPreferencesFeatures;
+ LANGPreferencesDisableMouseRename_Tooltip := LANGuaPreferencesDisableMouseRename_Tooltip;
+ LANGPreferencesDisableFileTipsCheckBox_Caption := LANGuaPreferencesDisableFileTipsCheckBox_Caption;
+ LANGPreferencesDisableFileTipsCheckBox_Tooltip := LANGuaPreferencesDisableFileTipsCheckBox_Tooltip;
+ LANGPreferencesShow := LANGuaPreferencesShow;
+ LANGPreferencesDirsInBoldCheckBox_Caption := LANGuaPreferencesDirsInBoldCheckBox_Caption;
+ LANGPreferencesDisableDirectoryBracketsCheckBox_Caption := LANGuaPreferencesDisableDirectoryBracketsCheckBox_Caption;
+ LANGPreferencesOctalPermissionsCheckBox_Caption := LANGuaPreferencesOctalPermissionsCheckBox_Caption;
+ LANGPreferencesOctalPermissionsCheckBox_Tooltip := LANGuaPreferencesOctalPermissionsCheckBox_Tooltip;
+ LANGPreferencesMovement := LANGuaPreferencesMovement;
+ LANGPreferencesLynxLikeMotionCheckBox_Caption := LANGuaPreferencesLynxLikeMotionCheckBox_Caption;
+ LANGPreferencesInsertMovesDownCheckBox_Caption := LANGuaPreferencesInsertMovesDownCheckBox_Caption;
+ LANGPreferencesSpaceMovesDownCheckBox_Caption := LANGuaPreferencesSpaceMovesDownCheckBox_Caption;
+ LANGPreferencesViewer := LANGuaPreferencesViewer;
+ LANGPreferencesCommandSC := LANGuaPreferencesCommandSC;
+ LANGPreferencesUseInternalViewer := LANGuaPreferencesUseInternalViewer;
+ LANGPreferencesEditor := LANGuaPreferencesEditor;
+ LANGPreferencesTerminal := LANGuaPreferencesTerminal;
+ LANGPreferencesExperimentalFeatures := LANGuaPreferencesExperimentalFeatures;
+ LANGPreferencesExperimentalWarningLabel_Caption := LANGuaPreferencesExperimentalWarningLabel_Caption;
+ LANGPreferencesFocusRefreshCheckBox_Caption := LANGuaPreferencesFocusRefreshCheckBox_Caption;
+ LANGPreferencesFocusRefreshCheckBox_Tooltip := LANGuaPreferencesFocusRefreshCheckBox_Tooltip;
+ LANGPreferencesWMCompatModeCheckBox_Caption := LANGuaPreferencesWMCompatModeCheckBox_Caption;
+ LANGPreferencesWMCompatModeCheckBox_Tooltip := LANGuaPreferencesWMCompatModeCheckBox_Tooltip;
+ LANGPreferencesCompatUseLibcSystemCheckBox_Caption := LANGuaPreferencesCompatUseLibcSystemCheckBox_Caption;
+ LANGPreferencesCompatUseLibcSystemCheckBox_Tooltip := LANGuaPreferencesCompatUseLibcSystemCheckBox_Tooltip;
+
+ LANGmiSearchCaption2 := LANGuamiSearchCaption2;
+ LANGmiNoMounterBarCaption := LANGuamiNoMounterBarCaption;
+ LANGmiShowOneMounterBarCaption := LANGuamiShowOneMounterBarCaption;
+ LANGmiShowTwoMounterBarCaption := LANGuamiShowTwoMounterBarCaption;
+ LANGmnuNetworkCaption := LANGuamnuNetworkCaption;
+ LANGmiConnectionsCaption := LANGuamiConnectionsCaption;
+ LANGmiOpenConnectionCaption := LANGuamiOpenConnectionCaption;
+ LANGmiQuickConnectCaption := LANGuamiQuickConnectCaption;
+ LANGmnuPluginsCaption := LANGuamnuPluginsCaption;
+ LANGmiTestPluginCaption := LANGuamiTestPluginCaption;
+ LANGmiMounterSettingsCaption := LANGuamiMounterSettingsCaption;
+ LANGmiColumnsCaption := LANGuamiColumnsCaption;
+ LANGmiSavePositionCaption := LANGuamiSavePositionCaption;
+ LANGmiMountCaption := LANGuamiMountCaption;
+ LANGmiUmountCaption := LANGuamiUmountCaption;
+ LANGmiEjectCaption := LANGuamiEjectCaption;
+ LANGmiDuplicateTabCaption := LANGuamiDuplicateTabCaption;
+ LANGmiCloseTabCaption := LANGuamiCloseTabCaption;
+ LANGmiCloseAllTabsCaption := LANGuamiCloseAllTabsCaption;
+ LANGCannotDetermineDestinationEngine := LANGuaCannotDetermineDestinationEngine;
+ LANGCannotLoadFile := LANGuaCannotLoadFile;
+ LANGMountPointDevice := LANGuaMountPointDevice;
+ LANGMountSC := LANGuaMountSC;
+ LANGNoPluginsFound := LANGuaNoPluginsFound;
+ LANGPluginAbout := LANGuaPluginAbout;
+ LANGCouldntOpenURI := LANGuaCouldntOpenURI;
+ LANGPluginAboutInside := LANGuaPluginAboutInside;
+ LANGAreYouSureCloseAllTabs := LANGuaAreYouSureCloseAllTabs;
+ LANGCouldntOpenURIArchive := LANGuaCouldntOpenURIArchive;
+ LANGThereIsNoModuleAvailable := LANGuaThereIsNoModuleAvailable;
+ LANGIgnoreError := LANGuaIgnoreError;
+ LANGErrorMount := LANGuaErrorMount;
+ LANGErrorUmount := LANGuaErrorUmount;
+ LANGErrorEject := LANGuaErrorEject;
+
+ LANGMounterPrefs_Caption := LANGuaMounterPrefs_Caption;
+ LANGMounterPrefs_TitleLabelCaption := LANGuaMounterPrefs_TitleLabelCaption;
+ LANGMounterPrefs_ListViewFrameCaption := LANGuaMounterPrefs_ListViewFrameCaption;
+ LANGMounterPrefs_MountName := LANGuaMounterPrefs_MountName;
+ LANGMounterPrefs_MountPoint := LANGuaMounterPrefs_MountPoint;
+ LANGMounterPrefs_Device := LANGuaMounterPrefs_Device;
+ LANGMounterPrefs_MoveUpButtonTooltip := LANGuaMounterPrefs_MoveUpButtonTooltip;
+ LANGMounterPrefs_MoveDownButtonTooltip := LANGuaMounterPrefs_MoveDownButtonTooltip;
+ LANGMounterPrefs_UseFSTabDefaultsCheckBox := LANGuaMounterPrefs_UseFSTabDefaultsCheckBox;
+ LANGMounterPrefs_UseFSTabDefaultsCheckBoxTooltip := LANGuaMounterPrefs_UseFSTabDefaultsCheckBoxTooltip;
+ LANGMounterPrefs_ToggleModeCheckBox := LANGuaMounterPrefs_ToggleModeCheckBox;
+ LANGMounterPrefs_ToggleModeCheckBoxTooltip := LANGuaMounterPrefs_ToggleModeCheckBoxTooltip;
+ LANGMounterPrefs_PropertiesFrameCaption := LANGuaMounterPrefs_PropertiesFrameCaption;
+ LANGMounterPrefs_DisplayTextLabelCaption := LANGuaMounterPrefs_DisplayTextLabelCaption;
+ LANGMounterPrefs_MountPointLabelCaption := LANGuaMounterPrefs_MountPointLabelCaption;
+ LANGMounterPrefs_MountDeviceLabelCaption := LANGuaMounterPrefs_MountDeviceLabelCaption;
+ LANGMounterPrefs_DeviceTypeLabelCaption := LANGuaMounterPrefs_DeviceTypeLabelCaption;
+ LANGMounterPrefs_miLocalDiskCaption := LANGuaMounterPrefs_miLocalDiskCaption;
+ LANGMounterPrefs_miRemovableCaption := LANGuaMounterPrefs_miRemovableCaption;
+ LANGMounterPrefs_miCDCaption := LANGuaMounterPrefs_miCDCaption;
+ LANGMounterPrefs_miFloppyCaption := LANGuaMounterPrefs_miFloppyCaption;
+ LANGMounterPrefs_miNetworkCaption := LANGuaMounterPrefs_miNetworkCaption;
+ LANGMounterPrefs_MountCommandLabelCaption := LANGuaMounterPrefs_MountCommandLabelCaption;
+ LANGMounterPrefs_UmountCommandLabelCaption := LANGuaMounterPrefs_UmountCommandLabelCaption;
+ LANGMounterPrefs_MountCommandEntryTooltip := LANGuaMounterPrefs_MountCommandEntryTooltip;
+ LANGMounterPrefs_UmountCommandEntryTooltip := LANGuaMounterPrefs_UmountCommandEntryTooltip;
+ LANGMounterPrefs_IconLabelCaption := LANGuaMounterPrefs_IconLabelCaption;
+
+ LANGConnMgr_Caption := LANGuaConnMgr_Caption;
+ LANGConnMgr_ConnectButton := LANGuaConnMgr_ConnectButton;
+ LANGConnMgr_OpenConnection := LANGuaConnMgr_OpenConnection;
+ LANGConnMgr_NameColumn := LANGuaConnMgr_NameColumn;
+ LANGConnMgr_URIColumn := LANGuaConnMgr_URIColumn;
+ LANGConnMgr_AddConnectionButtonCaption := LANGuaConnMgr_AddConnectionButtonCaption;
+ LANGConnMgr_AddConnectionButtonTooltip := LANGuaConnMgr_AddConnectionButtonTooltip;
+ LANGConnMgr_EditButtonCaption := LANGuaConnMgr_EditButtonCaption;
+ LANGConnMgr_EditButtonTooltip := LANGuaConnMgr_EditButtonTooltip;
+ LANGConnMgr_RemoveButtonCaption := LANGuaConnMgr_RemoveButtonCaption;
+ LANGConnMgr_RemoveButtonTooltip := LANGuaConnMgr_RemoveButtonTooltip;
+ LANGConnMgr_DoYouWantDelete := LANGuaConnMgr_DoYouWantDelete;
+
+ LANGConnProp_FTP := LANGuaConnProp_FTP;
+ LANGConnProp_SFTP := LANGuaConnProp_SFTP;
+ LANGConnProp_SMB := LANGuaConnProp_SMB;
+ LANGConnProp_HTTP := LANGuaConnProp_HTTP;
+ LANGConnProp_HTTPS := LANGuaConnProp_HTTPS;
+ LANGConnProp_Other := LANGuaConnProp_Other;
+ LANGConnProp_Caption := LANGuaConnProp_Caption;
+ LANGConnProp_VFSModule := LANGuaConnProp_VFSModule;
+ LANGConnProp_URI := LANGuaConnProp_URI;
+ LANGConnProp_URIEntryTooltip := LANGuaConnProp_URIEntryTooltip;
+ LANGConnProp_DetailedInformations := LANGuaConnProp_DetailedInformations;
+ LANGConnProp_Name := LANGuaConnProp_Name;
+ LANGConnProp_Server := LANGuaConnProp_Server;
+ LANGConnProp_Username := LANGuaConnProp_Username;
+ LANGConnProp_UserNameEntryTooltip := LANGuaConnProp_UserNameEntryTooltip;
+ LANGConnProp_Password := LANGuaConnProp_Password;
+ LANGConnProp_TargetDirectory := LANGuaConnProp_TargetDirectory;
+ LANGConnProp_ServiceType := LANGuaConnProp_ServiceType;
+ LANGConnProp_MaskPassword := LANGuaConnProp_MaskPassword;
+ LANGConnProp_MenuItemCaption := LANGuaConnProp_MenuItemCaption;
+
+ LANGConnLogin_Caption := LANGuaConnLogin_Caption;
+ LANGConnLogin_Login := LANGuaConnLogin_Login;
+ LANGConnLogin_ExperimentalWarningLabelCaption := LANGuaConnLogin_ExperimentalWarningLabelCaption;
+ LANGConnLogin_Username := LANGuaConnLogin_Username;
+ LANGConnLogin_Password := LANGuaConnLogin_Password;
+ LANGConnLogin_AnonymousCheckButton := LANGuaConnLogin_AnonymousCheckButton;
+
+ LANGColumns_Caption := LANGuaColumns_Caption;
+ LANGColumns_Title := LANGuaColumns_Title;
+ LANGColumns_MoveUpButtonTooltip := LANGuaColumns_MoveUpButtonTooltip;
+ LANGColumns_MoveDownButtonTooltip := LANGuaColumns_MoveDownButtonTooltip;
+ LANGColumns_TitlesLongName := LANGuaColumns_TitlesLongName;
+ LANGColumns_TitlesLongNameExt := LANGuaColumns_TitlesLongNameExt;
+ LANGColumns_TitlesLongExt := LANGuaColumns_TitlesLongExt;
+ LANGColumns_TitlesLongSize := LANGuaColumns_TitlesLongSize;
+ LANGColumns_TitlesLongDateTime := LANGuaColumns_TitlesLongDateTime;
+ LANGColumns_TitlesLongDate := LANGuaColumns_TitlesLongDate;
+ LANGColumns_TitlesLongTime := LANGuaColumns_TitlesLongTime;
+ LANGColumns_TitlesLongUser := LANGuaColumns_TitlesLongUser;
+ LANGColumns_TitlesLongGroup := LANGuaColumns_TitlesLongGroup;
+ LANGColumns_TitlesLongAttr := LANGuaColumns_TitlesLongAttr;
+ LANGColumns_TitlesShortName := LANGuaColumns_TitlesShortName;
+ LANGColumns_TitlesShortNameExt := LANGuaColumns_TitlesShortNameExt;
+ LANGColumns_TitlesShortExt := LANGuaColumns_TitlesShortExt;
+ LANGColumns_TitlesShortSize := LANGuaColumns_TitlesShortSize;
+ LANGColumns_TitlesShortDateTime := LANGuaColumns_TitlesShortDateTime;
+ LANGColumns_TitlesShortDate := LANGuaColumns_TitlesShortDate;
+ LANGColumns_TitlesShortTime := LANGuaColumns_TitlesShortTime;
+ LANGColumns_TitlesShortUser := LANGuaColumns_TitlesShortUser;
+ LANGColumns_TitlesShortGroup := LANGuaColumns_TitlesShortGroup;
+ LANGColumns_TitlesShortAttr := LANGuaColumns_TitlesShortAttr;
+
+ LANGTestPlugin_Caption := LANGuaTestPlugin_Caption;
+ LANGTestPlugin_Title := LANGuaTestPlugin_Title;
+ LANGTestPlugin_ExperimentalWarningLabelCaption := LANGuaTestPlugin_ExperimentalWarningLabelCaption;
+ LANGTestPlugin_Plugin := LANGuaTestPlugin_Plugin;
+ LANGTestPlugin_Command := LANGuaTestPlugin_Command;
+ LANGTestPlugin_Username := LANGuaTestPlugin_Username;
+ LANGTestPlugin_Password := LANGuaTestPlugin_Password;
+ LANGTestPlugin_AnonymousCheckButton := LANGuaTestPlugin_AnonymousCheckButton;
+ LANGTestPlugin_NoPluginsFound := LANGuaTestPlugin_NoPluginsFound;
+
+ LANGRemoteWait_Caption := LANGuaRemoteWait_Caption;
+ LANGRemoteWait_OperationInProgress := LANGuaRemoteWait_OperationInProgress;
+ LANGRemoteWait_ItemsFound := LANGuaRemoteWait_ItemsFound;
+
+ LANGSearch_Bytes := LANGuaSearch_Bytes;
+ LANGSearch_kB := LANGuaSearch_kB;
+ LANGSearch_MB := LANGuaSearch_MB;
+ LANGSearch_days := LANGuaSearch_days;
+ LANGSearch_weeks := LANGuaSearch_weeks;
+ LANGSearch_months := LANGuaSearch_months;
+ LANGSearch_years := LANGuaSearch_years;
+ LANGSearch_Caption := LANGuaSearch_Caption;
+ LANGSearch_General := LANGuaSearch_General;
+ LANGSearch_Advanced := LANGuaSearch_Advanced;
+ LANGSearch_SearchResults := LANGuaSearch_SearchResults;
+ LANGSearch_SearchFor := LANGuaSearch_SearchFor;
+ LANGSearch_FileMaskEntryTooltip := LANGuaSearch_FileMaskEntryTooltip;
+ LANGSearch_SearchIn := LANGuaSearch_SearchIn;
+ LANGSearch_SearchArchivesCheckButton := LANGuaSearch_SearchArchivesCheckButton;
+ LANGSearch_FindText := LANGuaSearch_FindText;
+ LANGSearch_FindTextEntryTooltip := LANGuaSearch_FindTextEntryTooltip;
+ LANGSearch_CaseSensitiveCheckButton := LANGuaSearch_CaseSensitiveCheckButton;
+ LANGSearch_StayCurrentFSCheckButton := LANGuaSearch_StayCurrentFSCheckButton;
+ LANGSearch_CaseSensitiveMatchCheckButton := LANGuaSearch_CaseSensitiveMatchCheckButton;
+ LANGSearch_Size := LANGuaSearch_Size;
+ LANGSearch_Date := LANGuaSearch_Date;
+ LANGSearch_BiggerThan := LANGuaSearch_BiggerThan;
+ LANGSearch_SmallerThan := LANGuaSearch_SmallerThan;
+ LANGSearch_ModifiedBetweenRadioButton := LANGuaSearch_ModifiedBetweenRadioButton;
+ LANGSearch_NotModifiedAfterRadioButton := LANGuaSearch_NotModifiedAfterRadioButton;
+ LANGSearch_ModifiedLastRadioButton := LANGuaSearch_ModifiedLastRadioButton;
+ LANGSearch_ModifiedNotLastRadionButton := LANGuaSearch_ModifiedNotLastRadionButton;
+ LANGSearch_ModifiedBetweenEntry1 := LANGuaSearch_ModifiedBetweenEntry1;
+ LANGSearch_ViewButtonCaption := LANGuaSearch_ViewButtonCaption;
+ LANGSearch_NewSearchButtonCaption := LANGuaSearch_NewSearchButtonCaption;
+ LANGSearch_GoToFileButtonCaption := LANGuaSearch_GoToFileButtonCaption;
+ LANGSearch_FeedToListboxButtonCaption := LANGuaSearch_FeedToListboxButtonCaption;
+ LANGSearch_StatusSC := LANGuaSearch_StatusSC;
+ LANGSearch_Ready := LANGuaSearch_Ready;
+ LANGSearch_PreparingToSearch := LANGuaSearch_PreparingToSearch;
+ LANGSearch_SearchInProgress := LANGuaSearch_SearchInProgress;
+ LANGSearch_UserCancelled := LANGuaSearch_UserCancelled;
+ LANGSearch_SearchFinished := LANGuaSearch_SearchFinished;
+ LANGSearch_FilesFound := LANGuaSearch_FilesFound;
+ LANGSearch_And := LANGuaSearch_And;
+
+ LANGCloseOpenConnection := LANGuaCloseOpenConnection;
+ LANGDuplicateTabWarning := LANGuaDuplicateTabWarning;
+ LANGDontShowAgain := LANGuaDontShowAgain;
+ LANGSwitchOtherPanelWarning := LANGuaSwitchOtherPanelWarning;
+ LANGOpenConnectionsWarning := LANGuaOpenConnectionsWarning;
+ LANGmiDisconnect_Caption := LANGuamiDisconnect_Caption;
+ LANGDisconnectButton_Tooltip := LANGuaDisconnectButton_Tooltip;
+ LANGLeaveArchiveButton_Tooltip := LANGuaLeaveArchiveButton_Tooltip;
+ LANGOpenTerminalButton_Tooltip := LANGuaOpenTerminalButton_Tooltip;
+ LANGOpenTerminalButton_Caption := LANGuaOpenTerminalButton_Caption;
+ LANGShowTextUIDsCheckBox_Caption := LANGuaShowTextUIDsCheckBox_Caption;
+ LANGShowTextUIDsCheckBox_Tooltip := LANGuaShowTextUIDsCheckBox_Tooltip;
+
+ LANGmiNewTab_Caption := LANGuamiNewTab_Caption;
+ LANGFilePopupMenu_Properties := LANGuaFilePopupMenu_Properties;
+ LANGCommandEntry_Tooltip := LANGuaCommandEntry_Tooltip;
+ LANGmiFiles_Caption := LANGuamiFiles_Caption;
+
+ LANGPasswordButton_Tooltip := LANGuaPasswordButton_Tooltip;
+ LANGHandleRunFromArchive_Bytes := LANGuaHandleRunFromArchive_Bytes;
+ LANGHandleRunFromArchive_FileTypeDesc_Unknown := LANGuaHandleRunFromArchive_FileTypeDesc_Unknown;
+ LANGHandleRunFromArchive_NotAssociated := LANGuaHandleRunFromArchive_NotAssociated;
+ LANGHandleRunFromArchive_SelfExecutable := LANGuaHandleRunFromArchive_SelfExecutable;
+ LANGHandleRunFromArchive_CouldntCreateTemporaryDirectory := LANGuaHandleRunFromArchive_CouldntCreateTemporaryDirectory;
+ LANGFRunFromVFS_Caption := LANGuaFRunFromVFS_Caption;
+ LANGFRunFromVFS_TitleLabel := LANGuaFRunFromVFS_TitleLabel;
+ LANGFRunFromVFS_FileNameLabel := LANGuaFRunFromVFS_FileNameLabel;
+ LANGFRunFromVFS_FileTypeLabel := LANGuaFRunFromVFS_FileTypeLabel;
+ LANGFRunFromVFS_SizeLabel := LANGuaFRunFromVFS_SizeLabel;
+ LANGFRunFromVFS_PackedSizeLabel := LANGuaFRunFromVFS_PackedSizeLabel;
+ LANGFRunFromVFS_DateLabel := LANGuaFRunFromVFS_DateLabel;
+ LANGFRunFromVFS_InfoLabel := LANGuaFRunFromVFS_InfoLabel;
+ LANGFRunFromVFS_OpensWithLabel := LANGuaFRunFromVFS_OpensWithLabel;
+ LANGFRunFromVFS_ExecuteButton := LANGuaFRunFromVFS_ExecuteButton;
+ LANGFRunFromVFS_ExecuteAllButton := LANGuaFRunFromVFS_ExecuteAllButton;
+ LANGFSetPassword_Caption := LANGuaFSetPassword_Caption;
+ LANGFSetPassword_Label1_Caption := LANGuaFSetPassword_Label1_Caption;
+ LANGFSetPassword_Label2_Caption := LANGuaFSetPassword_Label2_Caption;
+ LANGFSetPassword_ShowPasswordCheckButton := LANGuaFSetPassword_ShowPasswordCheckButton;
+end;
+
+initialization
+ AddTranslation('uk_UA', @SetTranslation);
+ AddTranslation('uk_UA.utf8', @SetTranslation);
+ AddTranslation('UA', @SetTranslation);
+ AddTranslation('uk', @SetTranslation);
+end.
diff --git a/tuxcmd.conf b/tuxcmd.conf
new file mode 100644
index 0000000..d8946e9
--- /dev/null
+++ b/tuxcmd.conf
@@ -0,0 +1,32 @@
+-$A4
+-$B-
+-$C+
+-$D+
+-$E-
+-$F-
+-$G+
+-$H+
+-$I+
+-$J-
+-$K-
+-$L+
+-$M-
+-$N+
+-$O+
+-$P+
+-$Q+
+-$R+
+-$S-
+-$T-
+-$U-
+-$V+
+-$W+
+-$X+
+-$YD
+-$Z1
+-cg
+-H+
+-W+
+-M
+-$M1048576
+-K$00400000
diff --git a/tuxcmd.dpr b/tuxcmd.dpr
new file mode 100644
index 0000000..f823809
--- /dev/null
+++ b/tuxcmd.dpr
@@ -0,0 +1,89 @@
+(*
+ Tux Commander - an open-source file manager with 2 panels side by side written for GTK2
+ Copyright (C) 2007 by Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+
+program tuxcmd;
+
+uses
+ {$IFDEF __FPC__}
+ cthreads,
+ {$ENDIF}
+ UGTKLoader in 'UGTKLoader.pas',
+ GTKForms,
+ UConfig in 'UConfig.pas',
+ UGnome in 'UGnome.pas',
+ UMain in 'UMain.pas' {FMain},
+ UCore in 'UCore.pas',
+ UEngines in 'UEngines.pas',
+ USelect in 'USelect.pas' {FSelect},
+ URemoteWait in 'URemoteWait.pas' {FRemoteWait},
+ UDirDelete in 'UDirDelete.pas' {FDirDelete},
+ UProgress in 'UProgress.pas' {FProgress},
+ UCopyMove in 'UCopyMove.pas' {FCopyMove},
+ UOverwrite in 'UOverwrite.pas' {FOverwrite},
+ UCoreUtils in 'UCoreUtils.pas',
+ ULocale in 'ULocale.pas',
+ UChecksum in 'UChecksum.pas' {FChecksum},
+ UChecksumDruid in 'UChecksumDruid.pas' {FChecksumDruid},
+ USplitFile in 'USplitFile.pas' {FSplitFile},
+ UFileAssoc in 'UFileAssoc.pas',
+ UFileTypeSettings in 'UFileTypeSettings.pas' {FFileTypeSettings},
+ UChmod in 'UChmod.pas' {FChmod},
+ UChown in 'UChown.pas' {FChown},
+ UCoreClasses in 'UCoreClasses.pas',
+ USymlink in 'USymlink.pas' {FSymlink},
+ UPreferences in 'UPreferences.pas' {FPreferences},
+ UViewer in 'UViewer.pas' {FViewer},
+ UTestPlugin in 'UTestPlugin.pas',
+ UMounterPrefs in 'UMounterPrefs.pas',
+ UColumns in 'UColumns.pas',
+ ModuleLoader in 'vfs/ModuleLoader.pas',
+ UVFSCore in 'vfs/UVFSCore.pas',
+ uVFSprototypes in 'vfs/uVFSprototypes.pas',
+ UToolTips in 'UToolTips.pas',
+ ULogin in 'ULogin.pas',
+ UConnectionManager in 'UConnectionManager.pas',
+ UConnectionProperties in 'UConnectionProperties.pas',
+ USearch in 'USearch.pas',
+ UGlibThreads in 'UGlibThreads.pas',
+ URunFromVFS in 'URunFromVFS.pas',
+ UGlibC_compat in 'UGlibC_compat.pas',
+ USetPassword in 'USetPassword.pas',
+ UTranslation_EN in 'translations/UTranslation_EN.pas',
+ UTranslation_CZ in 'translations/UTranslation_CZ.pas',
+ UTranslation_RU in 'translations/UTranslation_RU.pas',
+ UTranslation_DE in 'translations/UTranslation_DE.pas',
+ UTranslation_SV in 'translations/UTranslation_SV.pas',
+ UTranslation_FR in 'translations/UTranslation_FR.pas',
+ UTranslation_ES in 'translations/UTranslation_ES.pas',
+ UTranslation_PL in 'translations/UTranslation_PL.pas',
+ UTranslation_UA in 'translations/UTranslation_UA.pas',
+ UTranslation_SR in 'translations/UTranslation_SR.pas',
+ UTranslation_HU in 'translations/UTranslation_HU.pas';
+
+
+{$IFNDEF __FPC__}
+ {$R *.res}
+{$ENDIF}
+
+begin
+ Application.Initialize;
+ Application.CreateForm(TFMain, FMain);
+ Application.Run;
+end.
diff --git a/tuxcmd.res b/tuxcmd.res
new file mode 100644
index 0000000..36f26e2
--- /dev/null
+++ b/tuxcmd.res
Binary files differ
diff --git a/vfs/ModuleLoader.pas b/vfs/ModuleLoader.pas
new file mode 100644
index 0000000..51351dd
--- /dev/null
+++ b/vfs/ModuleLoader.pas
@@ -0,0 +1,156 @@
+{******************************************************************}
+{ }
+{ Project JEDI }
+{ OS independent Dynamic Loading Helpers }
+{ }
+{ The initial developer of the this code is }
+{ Robert Marquardt <robert_marquardt@gmx.de) }
+{ }
+{ Copyright (C) 2000, 2001 Robert Marquardt. }
+{ }
+{ Obtained through: }
+{ Joint Endeavour of Delphi Innovators (Project JEDI) }
+{ }
+{ You may retrieve the latest version of this file at the Project }
+{ JEDI home page, located at http://delphi-jedi.org }
+{ }
+{ The contents of this file are used with permission, subject to }
+{ the Mozilla Public License Version 1.1 (the "License"); you may }
+{ not use this file except in compliance with the License. You may }
+{ obtain a copy of the License at }
+{ http://www.mozilla.org/NPL/NPL-1_1Final.html }
+{ }
+{ Software distributed under the License is distributed on an }
+{ "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or }
+{ implied. See the License for the specific language governing }
+{ rights and limitations under the License. }
+{ }
+{******************************************************************}
+
+unit ModuleLoader;
+
+interface
+{$WEAKPACKAGEUNIT ON}
+
+
+uses
+ Libc;
+type
+ // Handle to a loaded .so
+ TModuleHandle = Pointer;
+
+const
+ // Value designating an unassigned TModuleHandle od a failed loading
+ INVALID_MODULEHANDLE_VALUE = TModuleHandle(nil);
+
+function LoadModule(var Module: TModuleHandle; FileName: string): Boolean;
+function LoadModuleEx(var Module: TModuleHandle; FileName: string; Flags: Cardinal): Boolean;
+procedure UnloadModule(var Module: TModuleHandle);
+function GetModuleSymbol(Module: TModuleHandle; SymbolName: string): Pointer;
+function GetModuleSymbolEx(Module: TModuleHandle; SymbolName: string; var Accu: Boolean): Pointer;
+function ReadModuleData(Module: TModuleHandle; SymbolName: string; var Buffer; Size: Cardinal): Boolean;
+function WriteModuleData(Module: TModuleHandle; SymbolName: string; var Buffer; Size: Cardinal): Boolean;
+
+implementation
+
+// load the .so file FileName
+// the rules for FileName are those of dlopen()
+// Returns: True = success, False = failure to load
+// Assigns: the handle of the loaded .so to Module
+// Warning: if Module has any other value than INVALID_MODULEHANDLE_VALUE
+// on entry the function will do nothing but returning success.
+
+function LoadModule(var Module: TModuleHandle; FileName: string): Boolean;
+begin
+ Module := dlopen(PChar(FileName), RTLD_LAZY);
+ Result := Module <> INVALID_MODULEHANDLE_VALUE;
+end;
+
+// load the .so file FileName
+// dlopen() with flags is used to get better control of the loading
+// for the allowed values for flags see "man dlopen".
+
+function LoadModuleEx(var Module: TModuleHandle; FileName: string; Flags: Cardinal): Boolean;
+begin
+ Module := dlopen(PChar(FileName), Flags);
+ Result := Module <> INVALID_MODULEHANDLE_VALUE;
+end;
+
+// unload a .so loaded with LoadModule or LoadModuleEx
+// The procedure will not try to unload a handle with
+// value INVALID_MODULEHANDLE_VALUE and assigns this value
+// to Module after unload.
+
+procedure UnloadModule(var Module: TModuleHandle);
+begin
+ if Module <> INVALID_MODULEHANDLE_VALUE then
+ dlclose(Module);
+ Module := INVALID_MODULEHANDLE_VALUE;
+end;
+
+// returns the pointer to the symbol named SymbolName
+// if it is exported from the .so Module
+// nil is returned if the symbol is not available
+
+function GetModuleSymbol(Module: TModuleHandle; SymbolName: string): Pointer;
+begin
+ Result := nil;
+ if Module <> INVALID_MODULEHANDLE_VALUE then
+ Result := dlsym(Module, PChar(SymbolName));
+end;
+
+// returns the pointer to the symbol named SymbolName
+// if it is exported from the .so Module
+// nil is returned if the symbol is not available.
+// as an extra the boolean variable Accu is updated
+// by anding in the success of the function.
+// This is very handy for rendering a global result
+// when accessing a long list of symbols.
+
+function GetModuleSymbolEx(Module: TModuleHandle; SymbolName: string; var Accu: Boolean): Pointer;
+begin
+ Result := nil;
+ if Module <> INVALID_MODULEHANDLE_VALUE then
+ Result := dlsym(Module, PChar(SymbolName));
+ Accu := Accu and (Result <> nil);
+end;
+
+// get the value of variables exported from a .so Module
+// Delphi cannot access variables in a .so directly, so
+// this function allows to copy the data from the .so.
+// Beware! You are accessing the .so memory image directly.
+// Be sure to access a variable not a function and be sure
+// to read the correct amount of data.
+
+function ReadModuleData(Module: TModuleHandle; SymbolName: string; var Buffer; Size: Cardinal): Boolean;
+var
+ Sym: Pointer;
+begin
+ Result := True;
+ Sym := GetModuleSymbolEx(Module, SymbolName, Result);
+ if Result then
+ Move(Sym^, Buffer, Size);
+end;
+
+// set the value of variables exported from a .so Module
+// Delphi cannot access variables in a .so directly, so
+// this function allows to copy the data to the .so!
+// BEWARE! You are accessing the .so memory image directly.
+// Be sure to access a variable not a function and be sure
+// to write the correct amount of data.
+// The changes are not persistent. They get lost when the
+// .so is unloaded.
+
+function WriteModuleData(Module: TModuleHandle; SymbolName: string; var Buffer; Size: Cardinal): Boolean;
+var
+ Sym: Pointer;
+begin
+ Result := True;
+ Sym := GetModuleSymbolEx(Module, SymbolName, Result);
+ if Result then
+ Move(Buffer, Sym^, Size);
+end;
+end.
+
+
+
diff --git a/vfs/UVFSCore.pas b/vfs/UVFSCore.pas
new file mode 100644
index 0000000..21fc21b
--- /dev/null
+++ b/vfs/UVFSCore.pas
@@ -0,0 +1,1075 @@
+(*
+ Tux Commander - UVFSCore - VFS Core utilities and management
+ Copyright (C) 2007 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ Check for updates on tuxcmd.sourceforge.net
+
+ 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
+*)
+unit UVFSCore;
+
+{$IFDEF __FPC__}
+ {$M+}
+{$ENDIF}
+
+interface
+
+uses GTKForms, Libc, {$IFDEF KYLIX}UGlibC_compat,{$ENDIF} Classes, uVFSprototypes, UEngines, UCoreUtils;
+
+
+type
+ TVFSPlugin = class
+ private
+ FVFSAllocNeeded: TVFSAllocNeeded;
+ FVFSInit: TVFSInit;
+ FVFSDestroy: TVFSDestroy;
+ FVFSVersion: TVFSVersion;
+ FVFSGetInfo: TVFSGetInfo;
+ FVFSOpen: TVFSOpen;
+ FVFSClose: TVFSClose;
+ FVFSListFirst: TVFSListFirst;
+ FVFSListNext: TVFSListNext;
+ FVFSListClose: TVFSListClose;
+ FVFSChangeDir: TVFSChangeDir;
+ FVFSGetPath: TVFSGetPath;
+ FVFSGetPrefix: TVFSGetPrefix;
+ FVFSGetFileSystemSize: TVFSGetFileSystemSize;
+ FVFSGetFileSystemFree: TVFSGetFileSystemFree;
+ FVFSLogin: TVFSLogin;
+ FVFSFileExists: TVFSFileExists;
+ FVFSFileInfo: TVFSFileInfo;
+ FVFSMkDir: TVFSMkDir;
+ FVFSRemove: TVFSRemove;
+ FVFSRename: TVFSRename;
+ FVFSMakeSymLink: TVFSMakeSymLink;
+ FVFSChmod: TVFSChmod;
+ FVFSChown: TVFSChown;
+ FVFSChangeTimes: TVFSChangeTimes;
+ FVFSGetDirSize: TVFSGetDirSize;
+ FVFSBreakGetDirSize: TVFSBreakGetDirSize;
+ FVFSOpenFile: TVFSOpenFile;
+ FVFSReadFile: TVFSReadFile;
+ FVFSWriteFile: TVFSWriteFile;
+ FVFSCloseFile: TVFSCloseFile;
+ FVFSFileSeek: TVFSFileSeek;
+ FVFSSetBlockSize: TVFSSetBlockSize;
+ FVFSCopyOut: TVFSCopyOut;
+ FVFSCopyIn: TVFSCopyIn;
+ FVFSIsOnSameFS: TVFSIsOnSameFS;
+ FVFSTwoSameFiles: TVFSTwoSameFiles;
+ FVFSGetExts: TVFSGetExts;
+ FVFSGetServices: TVFSGetServices;
+ FVFSSetPassword: TVFSSetPassword;
+ FVFSGetPasswordRequired: TVFSGetPasswordRequired;
+ public
+ ModuleHandle: Pointer;
+ FullPath: string; // module path
+ Extensions, Services: TOpenStringArray; // the list of the extensions plugin can handle
+ constructor Create(PluginHandle: Pointer);
+ destructor Destroy; override;
+ published
+ function VFSVersion: integer;
+ function VFSName: PChar;
+ function VFSDescription: PChar;
+ function VFSAbout: PChar;
+ function VFSCopyright: PChar;
+ end;
+
+
+ TVFSEngine = class(TPanelEngine)
+ private
+ FGlobs: Pointer;
+ FSourcePlugin: TVFSPlugin;
+ FBlockSize: Cardinal;
+ FProgressFunc: TEngineProgressFunc;
+ FSenderThread: Pointer;
+ BreakProcessingKind: integer;
+ FPassword: string;
+ procedure SetFPassword(Value: string);
+ public
+ ArchiveMode: boolean;
+ constructor Create(SourcePlugin: TVFSPlugin);
+ function VFSOpenURI(OpenFile: string): boolean;
+ function VFSOpenEx(OpenFile: string): TVFSResult;
+ function VFSClose: boolean;
+
+ destructor Destroy; override;
+ function GetListing(var List: TList; const AddDotFiles: boolean): integer; override;
+ function GetListing(var List: TList; const AddDotFiles: boolean; APath: string): integer; override;
+ function ChangeDir(const NewPath: string; const ShowProgress: boolean = True): integer; override;
+ function ExplicitChDir(const NewPath: string): integer; override;
+ function GetFileSystemSize: Int64; override;
+ function GetFileSystemSize(const APath: string): Int64; override;
+ function GetFileSystemFree: Int64; override;
+ function GetFileSystemFree(const APath: string): Int64; override;
+ function MakeDir(const NewDir: string): integer; override;
+ function GetDirSize(APath: string): Int64; override;
+ function Remove(APath: string): integer; override;
+ procedure FillDirFiles(APath: string; List: TList; ALevel: word); override;
+ function GetFileInfoSL(APath: string): PDataItemSL; override;
+ function FileExists(const FileName: string; const Use_lstat: boolean = False): Boolean; override;
+ function DirectoryExists(const FileName: string; const Use_lstat: boolean = False): Boolean; override;
+ function MakeSymLink(const NewFileName, PointTo: string): integer; override;
+ function Chmod(const FileName: string; const Mode: integer): integer; override;
+ function Chown(const FileName: string; const UID, GID: integer): integer; override;
+ procedure BreakProcessing(ProcessingKind: integer); override;
+ function RenameFile(SourceFile, DestFile: string): integer; override;
+ function ChangeTimes(APath: string; mtime, atime: Int64): integer; override;
+ procedure GetFileSystemInfo(const APath: string; var FSSize, FSFree: Int64; var FSName: string); override;
+ function OpenFile(const APath: string; Mode: integer; var Error: integer): TEngineFileDes; override;
+ function ReadFile(const FileDescriptor: TEngineFileDes; Buffer: Pointer; ABlockSize: integer; var Error: integer): integer; override;
+ function WriteFile(const FileDescriptor: TEngineFileDes; Buffer: Pointer; BytesCount: integer; var Error: integer): integer; override;
+ function CloseFile(const FileDescriptor: TEngineFileDes): integer; override;
+ function FileSeek(const FileDescriptor: TEngineFileDes; const AbsoluteOffset: Int64; var Error: integer): Int64; override;
+ function IsOnROMedium(const FileName: string): boolean; override;
+ function FileCanRun(const FileName: string): boolean; override;
+ function GetPath: string; override;
+ procedure SetPath(Value: string); override;
+ function GetPrefix: string; override;
+ function Login(Username, Password: string): integer; override;
+
+ function GetBlockSize: Cardinal; override;
+ procedure SetBlockSize(Value: Cardinal); override;
+ function CopyFileIn(Sender: Pointer; SourceFile, DestFile: string; ProgressFunc: TEngineProgressFunc; ErrorFunc: TEngineErrorFunc; Append: boolean): boolean; override;
+ function CopyFileOut(Sender: Pointer; SourceFile, DestFile: string; ProgressFunc: TEngineProgressFunc; ErrorFunc: TEngineErrorFunc; Append: boolean): boolean; override;
+ function IsOnSameFS(const Path1, Path2: string): boolean; override;
+ function TwoSameFiles(const Path1, Path2: string): boolean; override;
+
+ function SetPassword(Password: string): integer;
+ function GetPasswordRequired: boolean;
+ published
+ property Path: string read GetPath write SetPath;
+ property BlockSize: Cardinal read GetBlockSize write SetBlockSize;
+ property Password: string read FPassword write SetFPassword;
+ end;
+
+
+
+procedure DoInitPlugins;
+
+var PluginList: TList;
+
+implementation
+
+uses SysUtils, ModuleLoader, UConfig, ULocale;
+
+
+const ConstGlobalModulePath1 = '/usr/lib/tuxcmd';
+ ConstGlobalModulePath2 = '/usr/local/lib/tuxcmd';
+ ConstLocalModulePath1 = '~/.tuxcmd/plugins';
+ ConstLocalModulePath2 = './plugins';
+ ConstLocalModulePath3 = '../lib/tuxcmd';
+
+ ConstVFSVersionRequired = 2;
+
+var BinaryPath: string;
+
+
+procedure VFSLogFunc(s: PChar); cdecl;
+begin
+ DebugMsg([' ### VFS ###: ', s]);
+end;
+
+(********************************************************************************************************************************)
+constructor TVFSPlugin.Create(PluginHandle: Pointer);
+begin
+ inherited Create;
+ ModuleHandle := PluginHandle;
+
+ // Find the symbols
+ @FVFSAllocNeeded := GetModuleSymbol(ModuleHandle, 'VFSAllocNeeded');
+ @FVFSInit := GetModuleSymbol(ModuleHandle, 'VFSInit');
+ @FVFSDestroy := GetModuleSymbol(ModuleHandle, 'VFSDestroy');
+ @FVFSVersion := GetModuleSymbol(ModuleHandle, 'VFSVersion');
+ @FVFSGetInfo := GetModuleSymbol(ModuleHandle, 'VFSGetInfo');
+ @FVFSOpen := GetModuleSymbol(ModuleHandle, 'VFSOpen');
+ @FVFSClose := GetModuleSymbol(ModuleHandle, 'VFSClose');
+ @FVFSListFirst := GetModuleSymbol(ModuleHandle, 'VFSListFirst');
+ @FVFSListNext := GetModuleSymbol(ModuleHandle, 'VFSListNext');
+ @FVFSListClose := GetModuleSymbol(ModuleHandle, 'VFSListClose');
+ @FVFSGetPath := GetModuleSymbol(ModuleHandle, 'VFSGetPath');
+ @FVFSChangeDir := GetModuleSymbol(ModuleHandle, 'VFSChangeDir');
+ @FVFSGetPrefix := GetModuleSymbol(ModuleHandle, 'VFSGetPrefix');
+ @FVFSGetFileSystemSize := GetModuleSymbol(ModuleHandle, 'VFSGetFileSystemSize');
+ @FVFSGetFileSystemFree := GetModuleSymbol(ModuleHandle, 'VFSGetFileSystemFree');
+ @FVFSLogin := GetModuleSymbol(ModuleHandle, 'VFSLogin');
+ @FVFSFileExists := GetModuleSymbol(ModuleHandle, 'VFSFileExists');
+ @FVFSFileInfo := GetModuleSymbol(ModuleHandle, 'VFSFileInfo');
+ @FVFSMkDir := GetModuleSymbol(ModuleHandle, 'VFSMkDir');
+ @FVFSRemove := GetModuleSymbol(ModuleHandle, 'VFSRemove');
+ @FVFSRename := GetModuleSymbol(ModuleHandle, 'VFSRename');
+ @FVFSMakeSymLink := GetModuleSymbol(ModuleHandle, 'VFSMakeSymLink');
+ @FVFSChmod := GetModuleSymbol(ModuleHandle, 'VFSChmod');
+ @FVFSChown := GetModuleSymbol(ModuleHandle, 'VFSChown');
+ @FVFSChangeTimes := GetModuleSymbol(ModuleHandle, 'VFSChangeTimes');
+ @FVFSGetDirSize := GetModuleSymbol(ModuleHandle, 'VFSGetDirSize');
+ @FVFSBreakGetDirSize := GetModuleSymbol(ModuleHandle, 'VFSBreakGetDirSize');
+ @FVFSCopyOut := GetModuleSymbol(ModuleHandle, 'VFSCopyOut');
+ @FVFSCopyIn := GetModuleSymbol(ModuleHandle, 'VFSCopyIn');
+ @FVFSOpenFile := GetModuleSymbol(ModuleHandle, 'VFSOpenFile');
+ @FVFSReadFile := GetModuleSymbol(ModuleHandle, 'VFSReadFile');
+ @FVFSWriteFile := GetModuleSymbol(ModuleHandle, 'VFSWriteFile');
+ @FVFSCloseFile := GetModuleSymbol(ModuleHandle, 'VFSCloseFile');
+ @FVFSFileSeek := GetModuleSymbol(ModuleHandle, 'VFSFileSeek');
+ @FVFSSetBlockSize := GetModuleSymbol(ModuleHandle, 'VFSSetBlockSize');
+ @FVFSIsOnSameFS := GetModuleSymbol(ModuleHandle, 'VFSIsOnSameFS');
+ @FVFSTwoSameFiles := GetModuleSymbol(ModuleHandle, 'VFSTwoSameFiles');
+ @FVFSGetExts := GetModuleSymbol(ModuleHandle, 'VFSGetExts');
+ @FVFSGetServices := GetModuleSymbol(ModuleHandle, 'VFSGetServices');
+ @FVFSSetPassword := GetModuleSymbol(ModuleHandle, 'VFSSetPassword');
+ @FVFSGetPasswordRequired := GetModuleSymbol(ModuleHandle, 'VFSGetPasswordRequired');
+ // Initialize the extensions list
+ SetLength(Extensions, 0);
+ SetLength(Services, 0);
+ if @FVFSGetExts <> nil then ParseString(FVFSGetExts, ';', Extensions);
+ if @FVFSGetServices <> nil then ParseString(FVFSGetServices, ';', Services);
+end;
+
+destructor TVFSPlugin.Destroy;
+begin
+ if ModuleHandle <> nil then UnloadModule(ModuleHandle);
+ inherited Destroy;
+end;
+
+(********************************************************************************************************************************)
+function TVFSPlugin.VFSVersion: integer;
+begin
+ if @FVFSVersion <> nil then Result := FVFSVersion
+ else Result := -1;
+end;
+
+function TVFSPlugin.VFSName: PChar;
+var Info: TVFSInfo;
+begin
+ if @FVFSGetInfo <> nil then begin
+ Info := FVFSGetInfo;
+ Result := Info.Name;
+ end else Result := nil;
+end;
+
+function TVFSPlugin.VFSDescription: PChar;
+var Info: TVFSInfo;
+begin
+ if @FVFSGetInfo <> nil then begin
+ Info := FVFSGetInfo;
+ Result := Info.Description;
+ end else Result := nil;
+end;
+
+function TVFSPlugin.VFSAbout: PChar;
+var Info: TVFSInfo;
+begin
+ if @FVFSGetInfo <> nil then begin
+ Info := FVFSGetInfo;
+ Result := Info.About;
+ end else Result := nil;
+end;
+
+function TVFSPlugin.VFSCopyright: PChar;
+var Info: TVFSInfo;
+begin
+ if @FVFSGetInfo <> nil then begin
+ Info := FVFSGetInfo;
+ Result := Info.Copyright;
+ end else Result := nil;
+end;
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+constructor TVFSEngine.Create(SourcePlugin: TVFSPlugin);
+begin
+ inherited Create;
+ FSourcePlugin := SourcePlugin;
+ FBlockSize := 65536;
+ ArchiveMode := False;
+ BreakProcessingKind := 0;
+ if @FSourcePlugin.FVFSAllocNeeded <> nil then begin
+ FGlobs := Libc.malloc(FSourcePlugin.FVFSAllocNeeded);
+ Libc.memset(FGlobs, 0, FSourcePlugin.FVFSAllocNeeded);
+ end else begin
+ FGlobs := Libc.malloc(SizeOf(FGlobs));
+ Libc.memset(FGlobs, 0, SizeOf(FGlobs));
+ end;
+
+{$IFNDEF KYLIX}
+ DebugMsg(['sizeof(TVFSItem) = ', sizeof(TVFSItem)]);
+ DebugMsg(['sizeof(TVFSItem.sFileName) = ', sizeof(TVFSItem.sFileName)]);
+ DebugMsg(['sizeof(TVFSItem.iSize) = ', sizeof(TVFSItem.iSize)]);
+ DebugMsg(['sizeof(TVFSItem.m_time) = ', sizeof(TVFSItem.m_time)]);
+ DebugMsg(['sizeof(TVFSItem.a_time) = ', sizeof(TVFSItem.a_time)]);
+ DebugMsg(['sizeof(TVFSItem.c_time) = ', sizeof(TVFSItem.c_time)]);
+ DebugMsg(['sizeof(TVFSItem.iMode) = ', sizeof(TVFSItem.iMode)]);
+ DebugMsg(['sizeof(TVFSItem.sLinkTo) = ', sizeof(TVFSItem.sLinkTo)]);
+ DebugMsg(['sizeof(TVFSItem.iUID) = ', sizeof(TVFSItem.iUID)]);
+ DebugMsg(['sizeof(TVFSItem.iGID) = ', sizeof(TVFSItem.iGID)]);
+ DebugMsg(['sizeof(TVFSItem.ItemType) = ', sizeof(TVFSItem.ItemType)]);
+{$ENDIF}
+
+ if @FSourcePlugin.FVFSInit <> nil then FSourcePlugin.FVFSInit(FGlobs, @VFSLogFunc);
+ FPassword := '';
+end;
+
+function TVFSEngine.VFSOpenURI(OpenFile: string): boolean;
+begin
+ Result := False;
+ if @FSourcePlugin.FVFSOpen <> nil then Result := FSourcePlugin.FVFSOpen(FGlobs, PChar(OpenFile)) = cVFS_OK;
+end;
+
+function TVFSEngine.VFSOpenEx(OpenFile: string): TVFSResult;
+begin
+ Result := cVFS_OK;
+ if @FSourcePlugin.FVFSOpen <> nil then Result := FSourcePlugin.FVFSOpen(FGlobs, PChar(OpenFile));
+end;
+
+function TVFSEngine.VFSClose: boolean;
+begin
+ Result := False;
+ if @FSourcePlugin.FVFSClose <> nil then Result := FSourcePlugin.FVFSClose(FGlobs) = cVFS_OK;
+end;
+
+destructor TVFSEngine.Destroy;
+begin
+ try
+ if @FSourcePlugin.FVFSDestroy <> nil then FSourcePlugin.FVFSDestroy(FGlobs);
+ libc.free(FGlobs);
+ except
+ on E: Exception do DebugMsg(['*** TVFSEngine.Destroy() -Exception: ', E.Message]);
+ end;
+end;
+
+function TVFSEngine.GetListing(var List: TList; const AddDotFiles: boolean; APath: string): integer;
+var P: PVFSItem;
+ Item: PDataItem;
+ i, Res: integer;
+begin
+ DebugMsg(['^^VFS (II): GetListing begin']);
+ Result := 0;
+ try
+ if @FSourcePlugin.FVFSListFirst = nil then Exit;
+ P := Libc.malloc(SizeOf(TVFSItem));
+ Libc.memset(P, 0, SizeOf(TVFSItem));
+// DebugMsg(['Item = ', Int64(P)]);
+// DebugMsg(['FVFSListFirst']);
+ Res := FSourcePlugin.FVFSListFirst(FGlobs, PChar(APath), P);
+ if Res <> cVFS_OK then begin
+ FSourcePlugin.FVFSListClose(FGlobs);
+ if Res = cVFS_Not_More_Files then Result := 0
+ else Result := Res;
+ Libc.free(P);
+ Exit;
+ end;
+
+ repeat
+// DebugMsg(['begin--']);
+ if AddDotFiles or (not ((Length(P^.sFileName) > 1) and (P^.sFileName[0] = '.') and (P^.sFileName[1] <> '.'))) then begin
+// DebugMsg(['Checkpoint 1']);
+ Item := Libc.malloc(SizeOf(TDataItem));
+ Libc.memset(Item, 0, SizeOf(TDataItem));
+// DebugMsg(['Checkpoint 2']);
+ for i := 0 to Length(Item^.ColumnData) - 1 do Item^.ColumnData[i] := nil;
+// DebugMsg(['Checkpoint 3']);
+ with Item^ do
+ try
+ AName := strdup(P^.sFileName);
+ if P^.sLinkTo <> nil
+ then begin
+ LnkPointTo := strdup(P^.sLinkTo);
+ DebugMsg(['LnkPointTo = ', P^.sLinkTo]);
+ end else LnkPointTo := nil;
+ Mode := P^.iMode;
+// DebugMsg(['Checkpoint 4']);
+ IsDotFile := (Length(AName) > 1) and (AName[0] = '.') and (AName[1] <> '.');
+ IsDir := TVFSItemType(P^.ItemType) = vDirectory;
+ IsLnk := TVFSItemType(P^.ItemType) = vSymlink;
+ IsBlk := TVFSItemType(P^.ItemType) = vBlockdev;
+ IsChr := TVFSItemType(P^.ItemType) = vChardev;
+ IsFIFO := TVFSItemType(P^.ItemType) = vFifo;
+ IsSock := TVFSItemType(P^.ItemType) = vSock;
+// DebugMsg(['Checkpoint 5']);
+ ModifyTime := UnixTimeToTDateTime(P^.m_time);
+// DebugMsg(['Returned datetime: ', Longword(P^.m_time)]);
+// DebugMsg(['Checkpoint 6']);
+ UID := P^.iUID;
+// DebugMsg(['Checkpoint 7']);
+ GID := P^.iGID;
+// DebugMsg(['Checkpoint 8']);
+ UpDir := False;
+// DebugMsg(['Checkpoint 9']);
+ Selected := False;
+// DebugMsg(['Checkpoint 10']);
+ Size := P^.iSize;
+// DebugMsg(['Checkpoint 11']);
+ List.Add(Item);
+// DebugMsg(['Checkpoint 12']);
+ except
+ on E: Exception do
+ DebugMsg(['^^VFS (EE): GetListing: Item-Exception: ', E.Message]);
+ end;
+ end; // of if AddDotFiles
+ Libc.free(P); // Not needed - just zero-erase the memory
+// DebugMsg(['Checkpoint 13']);
+ P := Libc.malloc(SizeOf(TVFSItem));
+ Libc.memset(P, 0, SizeOf(TVFSItem));
+// DebugMsg(['Item = ', Int64(P)]);
+// DebugMsg(['Checkpoint 14']);
+// DebugMsg(['FVFSListNext --begin']);
+ Res := FSourcePlugin.FVFSListNext(FGlobs, PChar(APath), P);
+// DebugMsg(['FVFSListNext --end']);
+// Sleep(500);
+ until (Res <> cVFS_OK) or (BreakProcessingKind = 2);
+ if BreakProcessingKind <> 0 then DebugMsg(['^^VFS (WW): GetListing: stopped by BreakProcessing']);
+
+ Libc.free(P);
+ FSourcePlugin.FVFSListClose(FGlobs);
+ if Res <> cVFS_Not_More_Files then Result := Res;
+ except
+ on E: Exception do
+ DebugMsg(['^^VFS (EE): GetListing: Exception: ', E.Message]);
+ end;
+ BreakProcessingKind := 0;
+ DebugMsg(['^^VFS (II): GetListing end.']);
+end;
+
+function TVFSEngine.GetListing(var List: TList; const AddDotFiles: boolean): integer;
+begin
+ Result := GetListing(List, AddDotFiles, GetPath);
+end;
+
+function TVFSEngine.ExplicitChDir(const NewPath: string): integer;
+begin
+ Result := __chdir(PChar(NewPath));
+ if Result <> 0 then Result := errno;
+end;
+
+function TVFSEngine.GetFileSystemSize: Int64;
+begin
+ Result := GetFileSystemSize(GetPath);
+end;
+
+function TVFSEngine.GetFileSystemSize(const APath: string): Int64;
+begin
+ if @FSourcePlugin.FVFSGetFileSystemSize <> nil
+ then Result := FSourcePlugin.FVFSGetFileSystemSize(FGlobs, PChar(APath))
+ else Result := 0;
+end;
+
+function TVFSEngine.GetFileSystemFree: Int64;
+begin
+ Result := GetFileSystemFree(GetPath);
+end;
+
+function TVFSEngine.GetFileSystemFree(const APath: string): Int64;
+begin
+ if @FSourcePlugin.FVFSGetFileSystemFree <> nil
+ then Result := FSourcePlugin.FVFSGetFileSystemFree(FGlobs, PChar(APath))
+ else Result := 0;
+end;
+
+procedure TVFSEngine.GetFileSystemInfo(const APath: string; var FSSize, FSFree: Int64; var FSName: string);
+begin
+ FSSize := GetFileSystemSize(APath);
+ FSFree := GetFileSystemFree(APath);
+ FSName := 'plugin';
+end;
+
+function TVFSEngine.IsOnROMedium(const FileName: string): boolean;
+begin
+ Result := True;
+end;
+
+function TVFSEngine.FileCanRun(const FileName: string): boolean;
+var Item: PDataItemSL;
+begin
+ Item := GetFileInfoSL(FileName);
+ Result := Assigned(Item) and Item^.IsExecutable;
+ FreeDataItem(Item);
+end;
+
+function TVFSEngine.GetPrefix: string;
+begin
+ if @FSourcePlugin.FVFSGetPrefix <> nil then Result := URIHidePassword(FSourcePlugin.FVFSGetPrefix(FGlobs))
+ else Result := 'VFS';
+end;
+
+function TVFSEngine.GetPath: string;
+begin
+ if @FSourcePlugin.FVFSGetPath <> nil then Result := FSourcePlugin.FVFSGetPath(FGlobs)
+ else Result := '/';
+end;
+
+function TVFSEngine.ChangeDir(const NewPath: string; const ShowProgress: boolean = True): integer;
+begin
+ DebugMsg(['^^VFS (II): ChangeDir begin']);
+ Result := 0;
+ try
+ Result := FSourcePlugin.FVFSChangeDir(FGlobs, PChar(NewPath));
+// Sleep(3000);
+ except
+ on E: Exception do DebugMsg(['^^VFS (EE): ChangeDir: Exception: ', E.Message]);
+ end;
+ DebugMsg(['^^VFS (II): ChangeDir end.']);
+end;
+
+procedure TVFSEngine.SetPath(Value: string);
+begin
+ ChangeDir(Value);
+end;
+
+function TVFSEngine.Login(Username, Password: string): integer;
+begin
+ if @FSourcePlugin.FVFSLogin <> nil then Result := FSourcePlugin.FVFSLogin(FGlobs, PChar(Username), PChar(Password))
+ else Result := cVFS_OK;
+end;
+
+function TVFSEngine.FileExists(const FileName: string; const Use_lstat: boolean = False): Boolean;
+begin
+ if @FSourcePlugin.FVFSFileExists <> nil then Result := FSourcePlugin.FVFSFileExists(FGlobs, PChar(FileName), Use_lstat)
+ else Result := False;
+end;
+
+function TVFSEngine.DirectoryExists(const FileName: string; const Use_lstat: boolean = False): Boolean;
+var P: PVFSItem;
+ Res: integer;
+begin
+ if @FSourcePlugin.FVFSFileExists <> nil then begin
+ Result := FSourcePlugin.FVFSFileExists(FGlobs, PChar(FileName), Use_lstat);
+ if Result and (@FSourcePlugin.FVFSFileInfo <> nil) then begin
+ P := Libc.malloc(SizeOf(TVFSItem));
+ Libc.memset(P, 0, SizeOf(TVFSItem));
+ Res := FSourcePlugin.FVFSFileInfo(FGlobs, PChar(FileName), P);
+ if (Res <> cVFS_OK) or (P = nil) or (TVFSItemType(P^.ItemType) <> vDirectory) then Result := False;
+ Libc.free(P);
+ end;
+ end else Result := False;
+end;
+
+function TVFSEngine.GetFileInfoSL(APath: string): PDataItemSL;
+var P: PVFSItem;
+ Item: PDataItemSL;
+ Res: integer;
+begin
+ Result := nil;
+ if @FSourcePlugin.FVFSFileInfo = nil then Exit;
+ P := Libc.malloc(SizeOf(TVFSItem));
+ Libc.memset(P, 0, SizeOf(TVFSItem));
+
+ Res := FSourcePlugin.FVFSFileInfo(FGlobs, PChar(APath), P);
+ if Res <> cVFS_OK then begin
+ DebugMsg(['*** VFSFileInfo(', APath, ') failed. Code = ', Res]);
+ Exit;
+ end;
+
+ try
+ Item := Libc.malloc(SizeOf(TDataItemSL));
+ Libc.memset(Item, 0, SizeOf(TDataItemSL));
+ with Item^ do begin
+ AName := strdup(P^.sFileName);
+ if P^.sLinkTo <> nil then LnkPointTo := strdup(P^.sLinkTo)
+ else LnkPointTo := nil;
+ ADestination := nil;
+ Stage1 := True;
+ Level := 0;
+ IsDir := TVFSItemType(P^.ItemType) = vDirectory;
+ IsLnk := TVFSItemType(P^.ItemType) = vSymlink;
+ ForceMove := False;
+{***} IsOnRO := True;
+ IsExecutable := P^.iMode and S_IXUSR = S_IXUSR;
+ Mode := P^.iMode;
+ ModifyTime := UnixTimeToTDateTime(P^.m_time);
+ mtime := P^.m_time;
+ atime := P^.a_time;
+ UID := P^.iUID;
+ GID := P^.iGID;
+ Size := P^.iSize;
+ Libc.free(P);
+ end;
+ Result := Item;
+ except
+ on E: Exception do DebugMsg(['*** TVFSEngine.GetFileInfoSL(APath=', APath, ') -Exception: ', E.Message]);
+ end;
+end;
+
+function TVFSEngine.MakeDir(const NewDir: string): integer;
+begin
+ if @FSourcePlugin.FVFSMkDir <> nil then Result := FSourcePlugin.FVFSMkDir(FGlobs, PChar(NewDir))
+ else Result := cVFS_Failed;
+end;
+
+function TVFSEngine.Remove(APath: string): integer;
+begin
+ if @FSourcePlugin.FVFSRemove <> nil then Result := FSourcePlugin.FVFSRemove(FGlobs, PChar(APath))
+ else Result := cVFS_Failed;
+end;
+
+function TVFSEngine.RenameFile(SourceFile, DestFile: string): integer;
+begin
+ if @FSourcePlugin.FVFSRename <> nil then Result := FSourcePlugin.FVFSRename(FGlobs, PChar(SourceFile), PChar(DestFile))
+ else Result := cVFS_Failed;
+end;
+
+procedure TVFSEngine.FillDirFiles(APath: string; List: TList; ALevel: word);
+var Item: PDataItemSL;
+ i, Res: integer;
+ FilesList: TList;
+ LocalList: TStringList;
+ P: PVFSItem;
+
+
+ procedure AddEntry(FPath: string; AddCurrDirStage, AStage1: boolean);
+ begin
+ Item := Libc.malloc(SizeOf(TDataItemSL));
+ Libc.memset(Item, 0, SizeOf(TDataItemSL));
+ with Item^ do begin
+// AName := Libc.malloc(Length(FPath) + 1);
+// Libc.memset(AName, 0, Length(FPath) + 1);
+ AName := strdup(PChar(FPath));
+ if P^.sLinkTo <> nil then LnkPointTo := strdup(P^.sLinkTo)
+ else LnkPointTo := nil;
+ ADestination := nil;
+ Stage1 := AStage1;
+ IsDir := TVFSItemType(P^.ItemType) = vDirectory;
+ IsLnk := TVFSItemType(P^.ItemType) = vSymlink;
+ if IsLnk and AddCurrDirStage then DebugMsg(['*** Assertion failed AddEntry: Item^.IsLnk = True']);
+ ForceMove := False;
+{***} IsOnRO := True;
+ IsExecutable := AddCurrDirStage or (P^.iMode and S_IXUSR = S_IXUSR);
+ Mode := P^.iMode;
+ ModifyTime := UnixTimeToTDateTime(P^.m_time);
+ mtime := P^.m_time;
+ atime := P^.a_time;
+ UID := P^.iUID;
+ GID := P^.iGID;
+ Size := P^.iSize;
+ {$WARNINGS OFF}
+ Level := ALevel + Ord(not AddCurrDirStage);
+ {$WARNINGS ON}
+ end;
+ if AddCurrDirStage then List.Add(Item)
+ else FilesList.Add(Item);
+ end;
+
+begin
+ if not Assigned(List) then Exit;
+ FilesList := TList.Create;
+ LocalList := TStringList.Create;
+ try
+ try
+ P := Libc.malloc(SizeOf(TVFSItem));
+ Libc.memset(P, 0, SizeOf(TVFSItem));
+ Res := FSourcePlugin.FVFSFileInfo(FGlobs, PChar(APath), P);
+ if Res <> cVFS_OK then DebugMsg(['*** FillDirFiles - VFSFileInfo(', APath, ') failed. Code = ', Res]);
+ AddEntry(APath, True, True);
+ Libc.free(P);
+
+ APath := IncludeTrailingPathDelimiter(APath);
+ if @FSourcePlugin.FVFSChangeDir <> nil then Res := FSourcePlugin.FVFSChangeDir(FGlobs, PChar(APath))
+ else Exit;
+ if Res <> 0 then Exit;
+
+ if @FSourcePlugin.FVFSListFirst = nil then Exit;
+ P := Libc.malloc(SizeOf(TVFSItem));
+ Libc.memset(P, 0, SizeOf(TVFSItem));
+ Res := FSourcePlugin.FVFSListFirst(FGlobs, PChar(APath), P);
+ if Res <> cVFS_OK then begin
+ FSourcePlugin.FVFSListClose(FGlobs);
+ Libc.free(P);
+ Exit;
+ end;
+
+ repeat
+ if TVFSItemType(P^.ItemType) = vDirectory
+ then LocalList.Add(APath + String(P^.sFileName))
+ else AddEntry(APath + String(P^.sFileName), False, True);
+ Libc.free(P);
+ P := Libc.malloc(SizeOf(TVFSItem));
+ Libc.memset(P, 0, SizeOf(TVFSItem));
+ Res := FSourcePlugin.FVFSListNext(FGlobs, PChar(GetPath), P);
+ until (Res <> cVFS_OK);
+
+ Libc.free(P);
+ FSourcePlugin.FVFSListClose(FGlobs);
+
+ {$WARNINGS OFF}
+ if LocalList.Count > 0 then
+ for i := 0 to LocalList.Count - 1 do
+ FillDirFiles(LocalList[i], List, ALevel + 1);
+ {$WARNINGS ON}
+
+ if FilesList.Count > 0 then
+ for i := 0 to FilesList.Count - 1 do
+ List.Add(FilesList[i]);
+ except
+ on E: Exception do DebugMsg(['*** TVFSEngine.FillDirFiles(APath=', APath, ', Level=', ALevel, ') -Exception: ', E.Message]);
+ end;
+ finally
+ P := Libc.malloc(SizeOf(TVFSItem));
+ Libc.memset(P, 0, SizeOf(TVFSItem));
+ Res := FSourcePlugin.FVFSFileInfo(FGlobs, PChar(APath), P);
+ if Res <> cVFS_OK then DebugMsg(['*** FillDirFiles - VFSFileInfo(', APath, ') failed. Code = ', Res]);
+ AddEntry(APath, True, False);
+ Libc.free(P);
+
+ LocalList.Free;
+ FilesList.Free;
+ end;
+end;
+
+function TVFSEngine.MakeSymLink(const NewFileName, PointTo: string): integer;
+begin
+ if @FSourcePlugin.FVFSMakeSymLink <> nil then Result := FSourcePlugin.FVFSMakeSymLink(FGlobs, PChar(NewFileName), PChar(PointTo))
+ else Result := cVFS_Failed;
+end;
+
+function TVFSEngine.Chmod(const FileName: string; const Mode: integer): integer;
+begin
+ if @FSourcePlugin.FVFSChmod <> nil then Result := FSourcePlugin.FVFSChmod(FGlobs, PChar(FileName), Mode)
+ else Result := cVFS_Failed;
+end;
+
+function TVFSEngine.Chown(const FileName: string; const UID, GID: integer): integer;
+begin
+ if @FSourcePlugin.FVFSChown <> nil then Result := FSourcePlugin.FVFSChown(FGlobs, PChar(FileName), UID, GID)
+ else Result := cVFS_Failed;
+end;
+
+function TVFSEngine.ChangeTimes(APath: string; mtime, atime: Int64): integer;
+begin
+ if @FSourcePlugin.FVFSChangeTimes <> nil then Result := FSourcePlugin.FVFSChangeTimes(FGlobs, PChar(APath), mtime, atime)
+ else Result := cVFS_Failed;
+end;
+
+function TVFSEngine.GetDirSize(APath: string): Int64;
+begin
+ if @FSourcePlugin.FVFSGetDirSize <> nil then Result := FSourcePlugin.FVFSGetDirSize(FGlobs, PChar(APath))
+ else Result := 0;
+end;
+
+procedure TVFSEngine.BreakProcessing(ProcessingKind: integer);
+begin
+ case ProcessingKind of
+ 1: if @FSourcePlugin.FVFSBreakGetDirSize <> nil then FSourcePlugin.FVFSBreakGetDirSize(FGlobs);
+ end;
+end;
+
+function TVFSEngine.GetBlockSize: Cardinal;
+begin
+ Result := FBlockSize;
+end;
+
+procedure TVFSEngine.SetBlockSize(Value: Cardinal);
+begin
+ if @FSourcePlugin.FVFSSetBlockSize <> nil then FSourcePlugin.FVFSSetBlockSize(FGlobs, Value);
+end;
+
+
+
+(********************************************************************************************************************************)
+function TVFSEngine.IsOnSameFS(const Path1, Path2: string): boolean;
+begin
+ if @FSourcePlugin.FVFSIsOnSameFS <> nil then Result := FSourcePlugin.FVFSIsOnSameFS(FGlobs, PChar(Path1), PChar(Path2))
+ else Result := True;
+end;
+
+function TVFSEngine.OpenFile(const APath: string; Mode: integer; var Error: integer): TEngineFileDes;
+var i: integer;
+begin
+ if @FSourcePlugin.FVFSOpenFile <> nil then begin
+ Result := FSourcePlugin.FVFSOpenFile(FGlobs, PChar(APath), Mode, @i);
+ Error := i;
+ end else Result := nil;
+end;
+
+function TVFSEngine.ReadFile(const FileDescriptor: TEngineFileDes; Buffer: Pointer; ABlockSize: integer; var Error: integer): integer;
+var i: integer;
+begin
+ if @FSourcePlugin.FVFSReadFile <> nil then begin
+ Result := FSourcePlugin.FVFSReadFile(FGlobs, FileDescriptor, Buffer, ABlockSize, @i);
+ Error := i;
+ end else Result := -1;
+end;
+
+function TVFSEngine.WriteFile(const FileDescriptor: TEngineFileDes; Buffer: Pointer; BytesCount: integer; var Error: integer): integer;
+var i: integer;
+begin
+ if @FSourcePlugin.FVFSWriteFile <> nil then begin
+ Result := FSourcePlugin.FVFSWriteFile(FGlobs, FileDescriptor, Buffer, BytesCount, @i);
+ Error := i;
+ end else Result := -1;
+end;
+
+function TVFSEngine.CloseFile(const FileDescriptor: TEngineFileDes): integer;
+begin
+ if @FSourcePlugin.FVFSCloseFile <> nil then Result := FSourcePlugin.FVFSCloseFile(FGlobs, FileDescriptor)
+ else Result := 0;
+end;
+
+function TVFSEngine.FileSeek(const FileDescriptor: TEngineFileDes; const AbsoluteOffset: Int64; var Error: integer): Int64;
+var i: integer;
+begin
+ if @FSourcePlugin.FVFSFileSeek <> nil then begin
+ Result := FSourcePlugin.FVFSFileSeek(FGlobs, FileDescriptor, AbsoluteOffset, @i);
+ Error := i;
+ end else Result := -1;
+end;
+
+function TVFSEngine.TwoSameFiles(const Path1, Path2: string): boolean;
+begin
+ if @FSourcePlugin.FVFSTwoSameFiles <> nil then Result := FSourcePlugin.FVFSTwoSameFiles(FGlobs, PChar(Path1), PChar(Path2))
+ else Result := False;
+end;
+
+
+
+(********************************************************************************************************************************)
+
+function VFSCopyCallBackFunc(iPos, iMax:Int64; data: Pointer): LongBool; cdecl;
+begin
+// DebugMsg(['VFSCopyCallBackFunc called (iPos = ', iPos, ', iMax = ', iMax, ')']);
+ Result := True;
+ if not Assigned(data) then Exit;
+ if Assigned(TVFSEngine(data).FProgressFunc) then
+ try
+ Result := TVFSEngine(data).FProgressFunc(TVFSEngine(data).FSenderThread, iPos);
+ except
+ on E: Exception do DebugMsg(['*** Exception raised in VFSCopyCallBackFunc(iPos=', iPos, ', iMax=', iMax, ', data=', data, '): (', E.ClassName, '): ', E.Message]);
+ end;
+end;
+
+function TVFSEngine.CopyFileOut(Sender: Pointer; SourceFile, DestFile: string; ProgressFunc: TEngineProgressFunc; ErrorFunc: TEngineErrorFunc; Append: boolean): boolean;
+var Res: TVFSResult;
+begin
+ try
+ if @FSourcePlugin.FVFSCopyOut <> nil then begin
+ FSenderThread := Sender;
+ FProgressFunc := ProgressFunc;
+// DebugMsg(['0 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$']);
+// DebugMsg([' Pointer(FGlobs) = 0x', IntToHex(Int64(FGlobs), 16), ', Pointer(@NewVFSCopyCallBackFunc) = 0x', IntToHex(Int64(@NewVFSCopyCallBackFunc), 16), ', Pointer(Self) = 0x', IntToHex(Int64(Self), 16)]);
+ try
+ Res := FSourcePlugin.FVFSCopyOut(FGlobs, PChar(SourceFile), PChar(DestFile), @VFSCopyCallBackFunc, Self, Append);
+ except
+ on E: Exception do begin
+ DebugMsg(['*** Exception raised in TVFSEngine.CopyFileOut(Sender=', QWord(Sender), ', SourceFile=', SourceFile, ', DestFile=', DestFile, '): (', E.ClassName, '): ', E.Message]);
+ Res := cVFS_WriteErr;
+ end;
+ end;
+// DebugMsg(['1 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$']);
+ Result := Res = cVFS_OK;
+ if (Res <> cVFS_OK) and Assigned(ErrorFunc) then
+ case Res of
+ cVFS_ReadErr: Result := ErrorFunc(Sender, 6, 0, SourceFile);
+ cVFS_WriteErr: Result := ErrorFunc(Sender, 7, 0, DestFile);
+ cVFS_mallocFailed: ErrorFunc(Sender, 1, 0, SourceFile);
+ cVFS_Cancelled: Result := False;
+ end;
+ end else Result := False;
+ except
+ on E: Exception do DebugMsg(['*** Exception raised in TVFSEngine.CopyFileOut(Sender=', QWord(Sender), ', SourceFile=', SourceFile, ', DestFile=', DestFile, '): (', E.ClassName, '): ', E.Message]);
+ end;
+end;
+
+function TVFSEngine.CopyFileIn(Sender: Pointer; SourceFile, DestFile: string; ProgressFunc: TEngineProgressFunc; ErrorFunc: TEngineErrorFunc; Append: boolean): boolean;
+var Res: TVFSResult;
+begin
+ try
+ if @FSourcePlugin.FVFSCopyIn <> nil then begin
+ FSenderThread := Sender;
+ FProgressFunc := ProgressFunc;
+ try
+ Res := FSourcePlugin.FVFSCopyIn(FGlobs, PChar(SourceFile), PChar(DestFile), @VFSCopyCallBackFunc, Self, Append);
+ except
+ on E: Exception do begin
+ DebugMsg(['*** Exception raised in TVFSEngine.CopyFileIn(Sender=', QWord(Sender), ', SourceFile=', SourceFile, ', DestFile=', DestFile, '): (', E.ClassName, '): ', E.Message]);
+ Res := cVFS_WriteErr;
+ end;
+ end;
+ Result := Res = cVFS_OK;
+ if (Res <> cVFS_OK) and Assigned(ErrorFunc) then
+ case Res of
+ cVFS_ReadErr: Result := ErrorFunc(Sender, 6, 0, SourceFile);
+ cVFS_WriteErr: Result := ErrorFunc(Sender, 7, 0, DestFile);
+ cVFS_mallocFailed: ErrorFunc(Sender, 1, 0, SourceFile);
+ cVFS_Cancelled: Result := False;
+ end;
+ end else Result := False;
+ except
+ on E: Exception do DebugMsg(['*** Exception raised in TVFSEngine.CopyFileIn(Sender=', QWord(Sender), ', SourceFile=', SourceFile, ', DestFile=', DestFile, '): (', E.ClassName, '): ', E.Message]);
+ end;
+end;
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+function TVFSEngine.SetPassword(Password: string): integer;
+begin
+ if @FSourcePlugin.FVFSSetPassword <> nil then Result := FSourcePlugin.FVFSSetPassword(FGlobs, PChar(Password))
+ else Result := 0;
+ FPassword := Password;
+end;
+
+function TVFSEngine.GetPasswordRequired: boolean;
+begin
+ if @FSourcePlugin.FVFSGetPasswordRequired <> nil then Result := FSourcePlugin.FVFSGetPasswordRequired(FGlobs)
+ else Result := False;
+end;
+
+procedure TVFSEngine.SetFPassword(Value: string);
+begin
+ SetPassword(Value);
+end;
+
+
+(********************************************************************************************************************************)
+(********************************************************************************************************************************)
+function GetBinaryPath: string;
+var i: integer;
+ Buf: array[0..1024] of char;
+begin
+ Result := ParamStr(0); // Fallback
+ try
+ DebugMsg(['Trying to determine binary path...']);
+ DebugMsg(['Fallback path = ', Result]);
+ Buf[0] := #0;
+ FillChar(Buf, 1025, 0);
+ i := readlink(PChar(Format('/proc/%d/exe', [getpid])), @Buf, 1024);
+ if i < 1 then begin
+ DebugMsg(['Something went wrong during readlink: ', string(strerror(errno))]);
+ Exit;
+ end;
+ Buf[i] := #0;
+ Result := string(PChar(@Buf));
+ DebugMsg(['Path to executable = ', Result]);
+ except
+ on E: Exception do DebugMsg(['*** Exception raised in GetBinaryPath: (', E.ClassName, '): ', E.Message]);
+ end;
+end;
+
+
+procedure QueryModules(APath: string);
+var Handle: PDirectoryStream;
+ DirEnt: PDirent64;
+ s: string;
+ PluginItem: TVFSPlugin;
+ ModuleHandler: TModuleHandle;
+ VFSVersionFunc: TVFSVersion;
+ i: integer;
+ Buf: PChar;
+ b: boolean;
+begin
+ if Length(APath) < 1 then Exit;
+ try
+ try
+ APath := ReplaceStr(APath, '~', GetHomePath);
+ DebugMsg(['------------------ Querying modules in ', APath, ' ---']);
+
+ // First change to the program starting directory
+ if APath[1] <> '/' then begin
+ s := ExtractFilePath(BinaryPath);
+ DebugMsg(['----> Changing dir to ', s]);
+ i := __chdir(PChar(s));
+ if i <> 0 then DebugMsg(['Something went wrong during chdir: ', string(strerror(errno))]);
+ s := get_current_dir_name;
+ DebugMsg([' [II] Changed dir to ', s]);
+ end;
+
+ // Change to the required directory
+ s := APath;
+ DebugMsg(['----> Changing dir to ', s]);
+ i := __chdir(PChar(s));
+ if i <> 0 then begin
+ DebugMsg(['Something went wrong during chdir: ', string(strerror(errno))]);
+ Exit;
+ end;
+ s := get_current_dir_name;
+ DebugMsg([' [II] Changed dir to ', s, ', trying to list the files...']);
+
+ // Going to read the directory and search for the files...
+ Handle := opendir(PChar(s));
+ if not Assigned(Handle) then begin
+ DebugMsg(['Something went wrong during opendir: ', string(strerror(errno))]);
+ Exit;
+ end;
+ repeat
+ DirEnt := readdir64(Handle);
+ if Assigned(DirEnt) then begin
+ Buf := PChar(@DirEnt^.d_name[0]);
+ if Assigned(Buf) and (strcmp(Buf, '.') <> 0) and (strcmp(Buf, '..') <> 0) then
+ begin
+ DebugMsg(['$$$ Found ', Buf, ', trying to load...']);
+
+ // Try to find the plugin in the plugin list to prevent multiple plugin loading
+ b := False;
+ if PluginList.Count > 0 then
+ for i := 0 to PluginList.Count - 1 do
+ if CompareStr(TVFSPlugin(PluginList[i]).FullPath, IncludeTrailingPathDelimiter(s) + Buf) = 0 then begin
+ b := True;
+ Break;
+ end;
+
+ ModuleHandler := nil;
+ if b then DebugMsg(['Module ', s, ' is already loaded --> skipping...']) else
+ if not LoadModule(ModuleHandler, IncludeTrailingPathDelimiter(s) + Buf) then DebugMsg([' XXX Error loading module: ', dlerror])
+ else try
+ @VFSVersionFunc := GetModuleSymbol(ModuleHandler, 'VFSVersion');
+ if (@VFSVersionFunc <> nil) and (VFSVersionFunc >= ConstVFSVersionRequired) then begin
+ PluginItem := TVFSPlugin.Create(ModuleHandler);
+ PluginItem.FullPath := IncludeTrailingPathDelimiter(s) + Buf;
+ PluginList.Add(PluginItem);
+ end else DebugMsg([' $XXX: Error getting version info or version mismatch']);
+ except end;
+ end;
+ end;
+ until DirEnt = nil;
+ closedir(Handle);
+ except
+ on E: Exception do DebugMsg(['*** Exception raised in QueryModules(APath = ', APath, '): (', E.ClassName, '): ', E.Message]);
+ end;
+ finally
+ DebugMsg(['------------------ Done querying modules ---------------']);
+ end;
+end;
+
+
+procedure UnloadModules;
+var i: integer;
+begin
+ if Assigned(PluginList) and (PluginList.Count > 0) then
+ for i := PluginList.Count - 1 downto 0 do
+ try
+ UnloadModule(TVFSPlugin(PluginList[i]).ModuleHandle);
+ TVFSPlugin(PluginList[i]).Free;
+ PluginList.Delete(i);
+ except
+ on E: Exception do DebugMsg(['*** Exception raised in UnloadModules(i = ', i, '): (', E.ClassName, '): ', E.Message]);
+ end;
+end;
+
+
+procedure DoInitPlugins;
+begin
+ PluginList := TList.Create;
+ if not ParamDisablePlugins then begin
+ BinaryPath := GetBinaryPath;
+ QueryModules(ConstGlobalModulePath1);
+ QueryModules(ConstGlobalModulePath2);
+ QueryModules(ConstLocalModulePath1);
+ QueryModules(ConstLocalModulePath2);
+ QueryModules(ConstLocalModulePath3);
+ end;
+end;
+
+initialization
+finalization
+ UnloadModules;
+ PluginList.Free;
+end.
diff --git a/vfs/common/vfs_types.h b/vfs/common/vfs_types.h
new file mode 100644
index 0000000..609a78b
--- /dev/null
+++ b/vfs/common/vfs_types.h
@@ -0,0 +1,114 @@
+/* Tux Commander VFS: Virtual File System types and definitions
+ * - prototypes functions and types
+ * draft version 3
+ *
+ * Copyright (C) 2003 Radek Cervinka <radek.cervinka@centrum.cz>
+ * Copyright (C) 2008 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ *
+ * 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
+ */
+
+#ifndef __VFS_TYPES_H__
+#define __VFS_TYPES_H__
+
+
+#include <stdio.h>
+#include <stdint.h>
+#include <sys/types.h>
+
+typedef int TVFSResult;
+
+
+typedef void (* TVFSLogFunc)(char *s);
+typedef int (* TVFSCopyCallBackFunc)(u_int64_t iPos, u_int64_t iMax, void *data);
+typedef void *TVFSFileDes;
+
+static const int cVFSVersion = 3; // current version of the VFS API
+
+// Capabilities
+static const int capVFS_nil = 0;
+static const int capVFS_List = 1 << 0;
+static const int capVFS_CopyOut = 1 << 1;
+static const int capVFS_CopyIn = 1 << 2;
+static const int capVFS_MkDir = 1 << 3;
+static const int capVFS_RmDir = 1 << 4;
+static const int capVFS_Multiple = 1 << 5; // support multiple files = background copy & thread safe
+static const int capVFS_Delete = 1 << 6;
+static const int capVFS_Rename = 1 << 7;
+static const int capVFS_Execute = 1 << 8;
+static const int capVFS_Append = 1 << 9;
+
+// Error codes (TVFSResult)
+enum {
+ cVFS_OK = 0,
+ cVFS_Failed = 1, // also No such file
+ cVFS_Cancelled = 2,
+ cVFS_Not_Supported = 3,
+ cVFS_No_More_Files = 4,
+ cVFS_ReadErr = 5,
+ cVFS_WriteErr = 6, // also Readonly FileSystem
+ cVFS_LoginFailed = 7,
+ cVFS_PermissionDenied = 8,
+ cVFS_NoSpaceLeft = 9,
+ cVFS_mallocFailed = 10,
+ cVFS_BadPassword = 11,
+ cVFS_MissingVolume = 12,
+ cVFS_CorruptedArchive = 13
+};
+
+
+// Open modes
+enum {
+ cVFS_OpenRead,
+ cVFS_OpenWrite,
+ cVFS_OpenAppend
+};
+
+
+// Item Type enum
+enum TVFSItemType {
+ vRegular = 0,
+ vSymlink = 1,
+ vChardev = 2,
+ vBlockdev = 3,
+ vDirectory = 4,
+ vFifo = 5,
+ vSock = 6,
+ vOther = 7
+};
+
+
+struct TVFSItem {
+ char *sFileName;
+ u_int64_t iSize;
+ __time_t m_time; // numbers should be located before the other variables (bug?)
+ __time_t a_time;
+ __time_t c_time;
+ __mode_t iMode;
+ char *sLinkTo;
+ __uid_t iUID;
+ __gid_t iGID;
+ enum TVFSItemType ItemType;
+};
+
+struct TVFSInfo {
+ const char *Name;
+ const char *Description;
+ const char *About;
+ const char *Copyright;
+};
+
+
+#endif /* __VFS_TYPES_H__ */
diff --git a/vfs/null_plugin/COPYING b/vfs/null_plugin/COPYING
new file mode 100644
index 0000000..d511905
--- /dev/null
+++ b/vfs/null_plugin/COPYING
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ 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.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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 Lesser General
+Public License instead of this License.
diff --git a/vfs/null_plugin/Makefile b/vfs/null_plugin/Makefile
new file mode 100644
index 0000000..f2c6e7e
--- /dev/null
+++ b/vfs/null_plugin/Makefile
@@ -0,0 +1,22 @@
+# path definitions
+DESTDIR = /usr
+INSTALL=install -c
+INSTALL_DATA = ${INSTALL} -m 644
+LIB_SUFFIX=`if test \`uname -m\` = x86_64; then echo 64; fi`
+
+# compiler options
+CC = gcc
+CFLAGS = -Wall -O2 -g
+
+
+all shared static: null_plugin
+
+null_plugin: null_plugin.c
+ $(CC) -c null_plugin.c -I. -fPIC -I/usr/include $(CFLAGS)
+ $(CC) -shared -Wall -o libnull_plugin.so null_plugin.o
+
+install::
+ $(INSTALL) ./libnull_plugin.so $(DESTDIR)/lib$(LIB_SUFFIX)/tuxcmd/
+
+clean:
+ rm -f *.o libnull_plugin.so
diff --git a/vfs/null_plugin/README b/vfs/null_plugin/README
new file mode 100644
index 0000000..7123ad0
--- /dev/null
+++ b/vfs/null_plugin/README
@@ -0,0 +1,15 @@
+null plugin for Tux Commander
+Plugin API version 2
+
+
+Copyright (c) 2005 Tomas Bzatek <tbzatek@users.sourceforge.net>
+http://tuxcmd.sourceforge.net
+
+
+
+This is the null VFS module for Tux Commander. It is intended as a basic
+skeleton structure for writing new plugins. It contains all functions required
+for successful access to the fake directory structure it creates.
+
+Please see vfs/uVFSprototypes.pas file for a brief documentation of the VFS API
+and description of each function.
diff --git a/vfs/null_plugin/null_plugin.c b/vfs/null_plugin/null_plugin.c
new file mode 100644
index 0000000..0d24765
--- /dev/null
+++ b/vfs/null_plugin/null_plugin.c
@@ -0,0 +1,357 @@
+/* null plugin for Tux Commander
+ * Copyright (C) 2005 Tomas Bzatek <tbzatek@users.sourceforge.net>
+ * Check for updates on tuxcmd.sourceforge.net
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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 Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <string.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <errno.h>
+#include <time.h>
+#include "vfs_types.h"
+
+
+// Declaration of the global plugin object
+struct TVFSGlobs {
+ TVFSLogFunc log_func;
+ int list_item_id;
+ char *curr_dir;
+};
+
+
+
+// Basic initialization functions
+int VFSAllocNeeded()
+{
+ return sizeof(struct TVFSGlobs);
+}
+
+void VFSInit(struct TVFSGlobs *globs, TVFSLogFunc log_func)
+{
+
+ globs->log_func = log_func;
+ globs->log_func("null plugin: VFSInit");
+ globs->curr_dir = NULL;
+
+}
+
+void VFSDestroy(struct TVFSGlobs *globs)
+{
+
+ globs->log_func("null plugin: VFSDestroy");
+
+}
+
+int VFSVersion()
+{
+ return cVFSVersion;
+}
+
+struct TVFSInfo VFSGetInfo()
+{
+
+ static const struct TVFSInfo info =
+ {
+ "Null plugin",
+ "null testing plugin",
+ "Plugin API version 2",
+ "Copyright © 2007 Tomáš Bžatek"
+ };
+
+ return info;
+}
+
+char *VFSGetPrefix(struct TVFSGlobs *globs)
+{
+ return "null";
+}
+
+TVFSResult VFSOpen(struct TVFSGlobs *globs, char *sName)
+{
+ return cVFS_OK;
+}
+
+TVFSResult VFSClose(struct TVFSGlobs *globs)
+{
+ return cVFS_OK;
+}
+
+char *VFSGetPath(struct TVFSGlobs *globs)
+{
+ return globs->curr_dir;
+}
+
+u_int64_t VFSGetFileSystemFree(struct TVFSGlobs *globs, char *APath)
+{
+ return 0;
+}
+
+u_int64_t VFSGetFileSystemSize(struct TVFSGlobs *globs, char *APath)
+{
+ return 0;
+}
+
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////
+
+TVFSResult VFSChangeDir(struct TVFSGlobs *globs, char *NewPath)
+{
+ if (globs->curr_dir != NULL) free(globs->curr_dir);
+ globs->curr_dir = strdup(NewPath);
+ return cVFS_OK;
+}
+
+int VFSLogin(struct TVFSGlobs *globs, char *user, char *pass)
+{
+ return cVFS_OK;
+}
+
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////
+
+static char *items[] =
+{
+ "This is the first item",
+ "This is the second item",
+ "This is the third item",
+ "This is the fourth item",
+ "This is the fifth item",
+ "This is the sixth item",
+ "This is the seventh item",
+ "This is the eight item",
+ "This is the nineth item",
+ "This is the tenth item",
+ "This is the eleventh item",
+ "This is the twelveth item",
+ "This is the thirteenth item",
+ "This is the fourteenth item",
+ "This is the fifteenth item",
+ "This is the sixteeth item",
+ "This is the seventeenth item",
+ "This is the eighteenth item",
+};
+
+
+TVFSResult VFSListFirst(struct TVFSGlobs *globs, char *sDir, struct TVFSItem *Item)
+{
+ globs->list_item_id = 0;
+ printf("C Item = %lu \n", (long int)Item);
+
+ Item->sFileName = strdup(items[globs->list_item_id]);
+// Item->iSize = rand();
+ Item->iSize = globs->list_item_id + 1;
+ Item->iMode = S_IRWXO + S_IRWXG + S_IRWXU;
+ Item->sLinkTo = "/tmp";
+ Item->ItemType = vSymlink;
+ Item->iUID = 100;
+ Item->iGID = 1000;
+ Item->m_time = time(NULL) + globs->list_item_id;
+ printf("C sizeof(TVFSItem) = %ld \n", sizeof(struct TVFSItem));
+ printf("C sizeof(Item->sFileName) = %ld \n", sizeof(Item->sFileName));
+ printf("C sizeof(Item->iSize) = %ld \n", sizeof(Item->iSize));
+ printf("C sizeof(Item->m_time) = %ld \n", sizeof(Item->m_time));
+ printf("C sizeof(Item->a_time) = %ld \n", sizeof(Item->a_time));
+ printf("C sizeof(Item->c_time) = %ld \n", sizeof(Item->c_time));
+ printf("C sizeof(Item->iMode) = %ld \n", sizeof(Item->iMode));
+ printf("C sizeof(Item->sLinkTo) = %ld \n", sizeof(Item->sLinkTo));
+ printf("C sizeof(Item->iUID) = %ld \n", sizeof(Item->iUID));
+ printf("C sizeof(Item->iGID) = %ld \n", sizeof(Item->iGID));
+ printf("C sizeof(Item->ItemType) = %ld \n", sizeof(Item->ItemType));
+
+ static struct TVFSItem x;
+ printf("C sizeof(x.sFileName) = %ld \n", sizeof(x.sFileName));
+ printf("C sizeof(x.iSize) = %ld \n", sizeof(x.iSize));
+ printf("C sizeof(x.m_time) = %ld \n", sizeof(x.m_time));
+ printf("C sizeof(x.a_time) = %ld \n", sizeof(x.a_time));
+ printf("C sizeof(x.c_time) = %ld \n", sizeof(x.c_time));
+ printf("C sizeof(x.iMode) = %ld \n", sizeof(x.iMode));
+ printf("C sizeof(x.sLinkTo) = %ld \n", sizeof(x.sLinkTo));
+ printf("C sizeof(x.iUID) = %ld \n", sizeof(x.iUID));
+ printf("C sizeof(x.iGID) = %ld \n", sizeof(x.iGID));
+ printf("C sizeof(x.ItemType) = %ld \n", sizeof(x.ItemType));
+
+ return cVFS_OK;
+}
+
+TVFSResult VFSListNext(struct TVFSGlobs *globs, char *sDir, struct TVFSItem *Item)
+{
+ globs->list_item_id++;
+ printf("C Item = %lu \n", (long int)Item);
+
+ if (globs->list_item_id >= (sizeof(items) / sizeof(items[0]))) {
+ Item = NULL;
+ return cVFS_No_More_Files;
+ }
+
+ Item->sFileName = strdup(items[globs->list_item_id]);
+
+ Item->iSize = globs->list_item_id + 1;
+ Item->iMode = S_IRWXO + /* S_IRWXG + */ S_IRWXU;
+ Item->sLinkTo = NULL;
+ Item->iUID = 100;
+ Item->iGID = 1000;
+ Item->m_time = time(NULL) + globs->list_item_id;
+
+ if (globs->list_item_id < 4) Item->ItemType = vDirectory;
+ else Item->ItemType = vRegular;
+
+ return cVFS_OK;
+}
+
+TVFSResult VFSListClose(struct TVFSGlobs *globs)
+{
+ return cVFS_OK;
+}
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////
+long VFSFileExists(struct TVFSGlobs *globs, const char *FileName, const long Use_lstat)
+{
+ return 0;
+}
+
+TVFSResult VFSFileInfo(struct TVFSGlobs *globs, char *AFileName, struct TVFSItem *Item)
+{
+ return cVFS_OK;
+}
+
+TVFSResult VFSMkDir(struct TVFSGlobs *globs, const char *sDirName)
+{
+ return cVFS_OK;
+}
+
+TVFSResult VFSRemove(struct TVFSGlobs *globs, const char *APath)
+{
+ return cVFS_OK;
+}
+
+TVFSResult VFSRename(struct TVFSGlobs *globs, const char *sSrcName, const char *sDstName)
+{
+ return cVFS_OK;
+}
+
+TVFSResult VFSMakeSymLink(struct TVFSGlobs *globs, const char *NewFileName, const char *PointTo)
+{
+ return cVFS_OK;
+}
+
+TVFSResult VFSChmod(struct TVFSGlobs *globs, const char *FileName, const uint Mode)
+{
+ return cVFS_OK;
+}
+
+TVFSResult VFSChown(struct TVFSGlobs *globs, const char *FileName, const uint UID, const uint GID)
+{
+ return cVFS_OK;
+}
+
+TVFSResult VFSChangeTimes(struct TVFSGlobs *globs, char *APath, long mtime, long atime)
+{
+ return cVFS_OK;
+}
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////
+
+u_int64_t VFSGetDirSize(struct TVFSGlobs *globs, char *APath)
+{
+ return 0;
+}
+
+
+void VFSBreakGetDirSize(struct TVFSGlobs *globs)
+{
+
+}
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////
+
+TVFSFileDes VFSOpenFile(struct TVFSGlobs *globs, const char *APath, int Mode, int *Error)
+{
+ *Error = 0;
+ return (TVFSFileDes)0;
+}
+
+TVFSResult VFSCloseFile(struct TVFSGlobs *globs, TVFSFileDes FileDescriptor)
+{
+ return cVFS_OK;
+}
+
+u_int64_t VFSFileSeek(struct TVFSGlobs *globs, TVFSFileDes FileDescriptor, u_int64_t AbsoluteOffset, int *Error)
+{
+ *Error = 0;
+ return 0;
+}
+
+int VFSReadFile(struct TVFSGlobs *globs, TVFSFileDes FileDescriptor, void *Buffer, int ABlockSize, int *Error)
+{
+ *Error = 0;
+ return 0;
+}
+
+int VFSWriteFile(struct TVFSGlobs *globs, TVFSFileDes FileDescriptor, void *Buffer, int BytesCount, int *Error)
+{
+ *Error = 0;
+ return 0;
+}
+
+void VFSSetBlockSize(struct TVFSGlobs *globs, int Value)
+{
+
+}
+
+int VFSIsOnSameFS(struct TVFSGlobs *globs, const char *Path1, const char *Path2)
+{
+ return 0;
+}
+
+int VFSTwoSameFiles(struct TVFSGlobs *globs, const char *Path1, const char *Path2)
+{
+ return 0;
+}
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////
+
+TVFSResult VFSCopyOut(struct TVFSGlobs *globs, const char *sSrcName, const char *sDstName, TVFSCopyCallBackFunc pCallBackProgress, void *data, int Append)
+{
+ return cVFS_OK;
+}
+
+TVFSResult VFSCopyIn(struct TVFSGlobs *globs, const char *sSrcName, const char *sDstName, TVFSCopyCallBackFunc pCallBackProgress, void *data, int Append)
+{
+ return cVFS_OK;
+}
+
+////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
diff --git a/vfs/null_plugin/vfs_types.h b/vfs/null_plugin/vfs_types.h
new file mode 120000
index 0000000..c2235a2
--- /dev/null
+++ b/vfs/null_plugin/vfs_types.h
@@ -0,0 +1 @@
+../common/vfs_types.h \ No newline at end of file
diff --git a/vfs/uVFSprototypes.pas b/vfs/uVFSprototypes.pas
new file mode 100644
index 0000000..7a87aa0
--- /dev/null
+++ b/vfs/uVFSprototypes.pas
@@ -0,0 +1,246 @@
+(*
+ Virtual File System support
+ - prototypes functions and types
+ draft version 24
+
+ used in Seksi commander and Tux Commander
+
+ Copyright (C) 2003 Radek Cervinka <radek.cervinka@centrum.cz>
+ Copyright (C) 2005-2008 Tomas Bzatek <tbzatek@users.sourceforge.net>
+
+ 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
+*)
+
+unit uVFSprototypes;
+
+interface
+
+const
+ cVFSVersion = 3; // current version of the VFS API
+
+ // Capabilities
+ capVFS_nil = 0;
+ capVFS_List = 1;
+ capVFS_CopyOut = 2;
+ capVFS_CopyIn = 4;
+ capVFS_NeedsTemp = 8; // if not set, the seek operation is available
+ capVFS_Multiple = 16; // support multiple files - ?
+ capVFS_Execute = 32;
+ capVFS_Writable = 64;
+ capVFS_NeedsLogin = 128; // Anonymous is login operation too
+
+
+ // Error codes (TVFSResult)
+ cVFS_OK = 0;
+ cVFS_Failed = 1; // also No such file
+ cVFS_Cancelled = 2;
+ cVFS_Not_Supported = 3;
+ cVFS_Not_More_Files = 4; // returned while directory listing
+ cVFS_ReadErr = 5;
+ cVFS_WriteErr = 6; // also ReadOnlyFileSystem
+ cVFS_LoginFailed = 7;
+ cVFS_PermissionDenied = 8;
+ cVFS_NoSpaceLeft = 9;
+ cVFS_mallocFailed = 10;
+ cVFS_BadPassword = 11;
+ cVFS_MissingVolume = 12;
+ cVFS_CorruptedArchive = 13;
+
+
+ // Open modes (for VFSOpenFile function)
+ cVFS_OpenRead = 0;
+ cVFS_OpenWrite = 1;
+ cVFS_OpenAppend = 2;
+
+
+
+type
+ TVFSResult = longint;
+ TVFSGlobs = Pointer;
+ // The plugin can store some data into this object for identify the object instances
+ // It is allocated in the application side with the size returned by VFSAllocNeeded()
+ // Generally, it is required for correct cooperation of thread in the module
+
+ // File descriptor for Open, Read, Write, Close, Seek operations
+ TVFSFileDes = Pointer;
+
+ TVFSItemType = (vRegular=0, vSymlink=1, vChardev=2, vBlockdev=3, vDirectory=4, vFifo=5, vSock=6, vOther=7);
+
+{$IFDEF KYLIX}
+ DWORD = Cardinal;
+// ShortBool = boolean;
+{$ENDIF}
+{$IFNDEF CPU64}
+ ShortBool = boolean;
+{$ENDIF}
+
+ PVFSItem = ^TVFSItem;
+ TVFSItem = packed record
+{$IFNDEF CPU64} // 32-bit platform
+ sFileName: PChar;
+ iSize: Int64;
+ m_time: DWORD;
+ a_time: DWORD;
+ c_time: DWORD;
+ iMode: Integer;
+ sLinkTo: PChar;
+ iUID: Integer;
+ iGID: Integer;
+ ItemType: TVFSItemType;
+{$ELSE} // 64-bit platform
+ sFileName: PChar;
+ iSize: Int64;
+ m_time: QWORD;
+ a_time: QWORD;
+ c_time: QWORD;
+ iMode: Longint;
+ __padding1: array[1..4] of byte;
+ sLinkTo: PChar;
+ iUID: Longint;
+ iGID: Longint;
+ ItemType: Longint;
+ __padding: array[1..4] of byte;
+{$ENDIF}
+ end;
+
+ // This structure contains basic informations about the plugin (Name is used to identify the module in the application)
+ TVFSInfo = packed record
+ Name: PChar;
+ Description: PChar;
+ About: PChar;
+ Copyright: PChar;
+ end;
+
+type
+ // Log function which could plugin call - the application must handle the messages (e.g. write them to the stdout)
+ PVFSLogFunc = ^TVFSLogFunc;
+ TVFSLogFunc = procedure(S: PChar); cdecl;
+
+ TVFSAllocNeeded = function: integer; cdecl;
+ // Returns sizeof internal structure of TVFSGlobs in the plugin - host application will then allocate corresponding amount of memory
+ TVFSInit = procedure (g:TVFSGlobs; LogFunc: PVFSLogFunc); cdecl;
+ // Performs intialization of the plugin and sets the log function for the module (assume allocated memory for TVFSGlobs)
+ TVFSDestroy = procedure (g:TVFSGlobs); cdecl;
+ // Performs cleanup and destroy all objects
+ TVFSVersion = function: integer; cdecl;
+ // Returns API Version; the host application checks for this number and if the returned number is less than a value required by the host application, the module is not loaded
+ // The current version for this API is '3' - please use the constant declared above as return value
+ TVFSGetInfo = function: TVFSInfo; cdecl;
+ // Returns the structure with module info
+ TVFSGetPrefix = function (g:TVFSGlobs): PChar; cdecl;
+ // Returns prefix used in the application to show difference between local and VFS filesystems (e.g. "ftp" or "smb")
+ TVFSGetCharset = function (g:TVFSGlobs): PChar; cdecl;
+ // TODO: Returns charset which the plugin uses
+ TVFSGetExts = function: PChar; cdecl;
+ // Returns the list of filename extensions which the module can handle separated by ';' (without a leading dots)
+ TVFSGetServices = function: PChar; cdecl;
+ // Returns the list of supported remote protocols separated by ';' (without the '://')
+ TVFSCaps = function (const sExt: PChar): Integer; cdecl;
+ // TODO: Returns a bit mask of plugin capabilities
+ TVFSSetProtocolLogFunc = procedure (g:TVFSGlobs; ProtocolLogFunc: TVFSLogFunc); cdecl;
+ // TODO: Sets the protocol log function (unlike module debug log func this is intended only for server messages (FTP mainly))
+ TVFSSetBlockSize = procedure (g:TVFSGlobs; Value: Cardinal); cdecl;
+ // Sets the block size for I/O operations (not all modules supports this)
+
+
+ TVFSOpen = function (g:TVFSGlobs; const sName: PChar): TVFSResult; cdecl;
+ // TODO: Opens the location (file or URI/URL)
+ TVFSLogin = function (g:TVFSGlobs; const User, Pass: PChar): TVFSResult; cdecl;
+ // TODO: Performs login to the server
+ TVFSClose = function (g:TVFSGlobs): TVFSResult; cdecl;
+ // Closes the file or connection to the server
+ TVFSMkDir = function (g:TVFSGlobs; const sDirName: PChar): TVFSResult; cdecl;
+ TVFSRename = function (g:TVFSGlobs; const sSrcName, sDstName: PChar): TVFSResult; cdecl;
+ // Only rename/move in this function, the two files/directories have to be on the same filesystem - otherway it needs to be copied and deleted manually
+ TVFSRemove = function (g:TVFSGlobs; const APath: PChar): TVFSResult; cdecl;
+ // Removes the file/directory (empty only!)
+ TVFSFileExists = function (g:TVFSGlobs; const FileName: PChar; const Use_lstat: LongBool): LongBool; cdecl;
+ // This function checks for existing location; the Use_lstat parameter specifies to not follow the symlinks (default false = follow symlinks)
+ TVFSMakeSymLink = function (g:TVFSGlobs; const NewFileName, PointTo: PChar): TVFSResult; cdecl;
+ TVFSChmod = function (g:TVFSGlobs; const FileName: PChar; const Mode: integer): TVFSResult; cdecl;
+ // The parameter for this function is in classic unix format (glibc) - a bit mask
+ TVFSChown = function (g:TVFSGlobs; const FileName: PChar; const UID, GID: integer): TVFSResult; cdecl;
+ TVFSChangeTimes = function (g:TVFSGlobs; APath: PChar; mtime, atime: Longint): TVFSResult; cdecl;
+ // Changes times for the file/directory - mtime and atime are __time_t parameters (glibc)
+ TVFSChangeDir = function (g:TVFSGlobs; const NewPath: PChar): TVFSResult; cdecl;
+ // Try to change the directory when correct permissions
+ TVFSGetPath = function (g:TVFSGlobs): PChar; cdecl;
+ // Returns the current working path (not all plugins can support this; just return '/' in this case)
+ TVFSGetFileSystemSize = function (g:TVFSGlobs; const APath: PChar): Int64; cdecl;
+ // Gets the size of filesystem; the path is optional, specified to recognize various mounted filesystems in the tree
+ TVFSGetFileSystemFree = function (g:TVFSGlobs; const APath: PChar): Int64; cdecl;
+ TVFSGetFSLabel = function (g:TVFSGlobs; const APath: PChar): PChar; cdecl;
+ // Gets the filesystem label
+ TVFSIsOnSameFS = function (g:TVFSGlobs; const Path1, Path2: PChar): boolean; cdecl;
+ TVFSTwoSameFiles = function (g:TVFSGlobs; const Path1, Path2: PChar): boolean; cdecl;
+ // Checks if the two files are simmilar (used to test the case-insensitive filesystem - or hardlinks)
+ TVFSGetDirSize = function (g:TVFSGlobs; APath: PChar): Int64; cdecl;
+ // Calculates recursively the size of the tree specified under the path APath
+ TVFSBreakGetDirSize = procedure (g:TVFSGlobs); cdecl;
+ // Call this function to break the calculation performed by VFSGetDirSize
+ TVFSRun = function (g:TVFSGlobs; const sName: PChar): TVFSResult; cdecl;
+ // TODO: Runs the command read from inside the archive (typically installing the rpm package)
+
+
+ TVFSCopyCallBackFunc = function (iPos, iMax: Int64; data: Pointer):LongBool; cdecl;
+ // Callback function used during the copy process; return False to break the copy process
+
+ TVFSCopyOut = function (g:TVFSGlobs; const sSrcName, sDstName: PChar; pCallBackProgress: TVFSCopyCallBackFunc; data: Pointer; Append: LongBool): TVFSResult; cdecl;
+ // Performs the copy process from inside of module to the file in the local system
+ // (thus sSrcName is a path from inside of module and sDstName is path in the local filesystem where the file should be copied)
+ // The data pointer is then used to call the callback function in
+ // Note: if you need to transfer a file between two VFS modules, you need to do it manually - either first copy to local FS or use the Open, Read, Write functions of the module (NOTE: both VFS modules have to support these functions)
+
+ TVFSCopyIn = function (g:TVFSGlobs; const sSrcName, sDstName: PChar; pCallBackProgress: TVFSCopyCallBackFunc; data: Pointer; Append: LongBool): TVFSResult; cdecl;
+ // Performs the copy process from the local filesystem into the module
+
+
+ // This is the set of basic functions which can manipulate with the data
+ // There is a TVFSFileDes object which identifies the processed file (filedescriptor)
+ // All these functions needs a pointer to an int variable to store the error code
+ // NOTE: not all modules could support this set of functions due to its design (unable to set a solid block size)
+ TVFSOpenFile = function (g:TVFSGlobs; const APath: PChar; Mode: integer; Error: Pinteger): TVFSFileDes; cdecl;
+ // Opens a file or creates new (the values for the Mode parameter are described above) and returns the assigned filedescriptor
+ TVFSReadFile = function (g:TVFSGlobs; const FileDescriptor: TVFSFileDes; Buffer: Pointer; ABlockSize: integer; Error: Pinteger): integer; cdecl;
+ // Returns number of bytes read; the buffer needs to be allocated by a blocksize (set it by VFSSetBlockSize function)
+ TVFSWriteFile = function (g:TVFSGlobs; const FileDescriptor: TVFSFileDes; Buffer: Pointer; BytesCount: integer; Error: Pinteger): integer; cdecl;
+ // Returns number of bytes written
+ TVFSCloseFile = function (g:TVFSGlobs; const FileDescriptor: TVFSFileDes): TVFSResult; cdecl;
+ TVFSFileSeek = function (g:TVFSGlobs; const FileDescriptor: TVFSFileDes; const AbsoluteOffset: Int64; Error: Pinteger): Int64; cdecl;
+ // Sets the position in the file from the start and returns real current position
+
+
+ // These are the functions used to list the contents of the directory
+ // First call the VFSListFirst function and then repeat call of VFSListNext until it returns NULL.
+ // Then call VFSListClose to make cleanup
+ TVFSListFirst = function (g:TVFSGlobs; const sDir: PChar; VFSItem: PVFSItem): TVFSResult; cdecl;
+ TVFSListNext = function (g:TVFSGlobs; const sDir: PChar; VFSItem: PVFSItem): TVFSResult; cdecl;
+ TVFSListClose = function (g:TVFSGlobs): TVFSResult; cdecl;
+ TVFSFileInfo = function (g:TVFSGlobs; AFileName: PChar; VFSItem: PVFSItem): TVFSResult; cdecl;
+ // Gets a single info item without need to list a whole directory
+
+ TVFSSetPassword = function (g:TVFSGlobs; pass: PChar): TVFSResult; cdecl;
+ TVFSGetPasswordRequired = function (g:TVFSGlobs): LongBool; cdecl;
+
+ /// pridat neco jako set_loglevel ??
+
+//// pridat typ pluginu - jestli archive nebo protocol - prip. jeste pridat ktery protokoly je to schopno handlovat
+
+
+// TODO: some function to check the CRC of the archive - it should need also some progress feedback - the processed file and percentage progress
+
+implementation
+
+end.